android逆向攻防-某二次元站OLLVM算法分析

admin 2025年3月12日21:19:56评论11 views字数 3648阅读12分9秒阅读模式

作者:yueji0j1anke

首发于公号:剑客古月的安全屋

字数:1500

阅读时间:    15min

声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。合法渗透,本文章内容纯属虚构,如遇巧合,纯属意外

目录

  • 前言

  • frida绕过

  • 定位验签

  • native ollvm

  • unidbg补环境

  • trace

  • 结果展示

  • 总结

0x00 前言

本期来分析一下a+1站相关算法,之前破解过a+1站的frida,想着不去搞一波太可惜了

这里为a+1最新版本8.36,感谢前人老版本分析

文章参考链接 https://mp.weixin.qq.com/s?__biz=MjM5NDMzMzAwNQ==&mid=2247484936&idx=1&sn=ea3b6ee39cec7205b5a2c18f9cfd6dd1&chksm=a7bf7916ee9c2868b5c1f6d41e149ff1d9fc76e308744c027552577c72400fb25a1ddf747117&mpshare=1&scene=1&srcid=0306DdNJ1pwcJlpS1ryAqvxg&sharer_shareinfo=0c64d667c46be3ab2b5a7ff6a7358c0d&sharer_shareinfo_first=0c64d667c46be3ab2b5a7ff6a7358c0d&version=4.1.31.99548&platform=mac#rd

0x01 frida绕过

android逆向攻防-某二次元站OLLVM算法分析

这里hook_dlsym即可,最新版的libmsaoaidsec.so 已经隐藏了pthread_create

0x02 定位验签

android逆向攻防-某二次元站OLLVM算法分析

可以看到,这里存在sign值

那现在可以用jadx去定位sign,---但像这种中大厂,一般在这一步会花很多时间去进行定位,这里我直接告诉大家位置了

android逆向攻防-某二次元站OLLVM算法分析

这里我hook了一下,有蛮多事件可以触发该构造函数的

android逆向攻防-某二次元站OLLVM算法分析

毕竟是出于研究,随便找一个构造就行,随后找到调用点,看看如何调用

android逆向攻防-某二次元站OLLVM算法分析
Java.perform(function () {
letLibBili=Java.use("com.bilibili.nativelibrary.LibBili");
LibBili["s"].implementation=function (sortedMap) {
console.log('s is called'+', '+'sortedMap: '+sortedMap);
// 创建一个TreeMap对象来接收 sortedMap 中的内容
letTreeMap=Java.use("java.util.TreeMap");
letmap=TreeMap.$new();
// 复制
map.putAll(sortedMap);
// 获取TreeMap的键集
letkeys=map.keySet().toArray();
// 遍历键并获取对应的值
for (leti=0i<keys.lengthi++) {
letkey=keys[i];
letvalue=map.get(key);
console.log('key: '+key+', value: '+value);
            }
// 调用原始方法
letret=this.s(sortedMap);
console.log('s ret value is '+ret);
returnret;
        };
    })

发现传入参数没有sign,传出参数就有sign了

android逆向攻防-某二次元站OLLVM算法分析

可以基本判定sign值在native中产生的,这里存在几个native函数,都是可以生成sign值的,不同接口用到的对应函数不同

接下来判断加密so位置

android逆向攻防-某二次元站OLLVM算法分析

直接inlinehook libart.so

最终找到so地址

0x03 native层ollvm分析

android逆向攻防-某二次元站OLLVM算法分析

一打开。。

android逆向攻防-某二次元站OLLVM算法分析

我的痛苦在你之上!!!!

0x04 unidbg补环境

这里可以选择用stalker,也可以选择用unidbg去trace....

我这里选择用unidbg去trace了

首先还是补环境

这里参数可随hook参数进行填充

so is called, sortedMap: [object Object]
key: access_key, value: 
key: actual_played_time, value: 0
key: aid, value: 113241510515626
key: appkey, value: 1d8b6e7d45233436
key: auto_play, value: 0
key: build, value: 8360300
key: c_locale, value: zh_CN
key: channel, value: xiaomi_cn_tv.danmaku.bili_20210930
key: cid, value: 26118327197
key: disable_rcmd, value: 0
key: epid, value: 0
key: epid_status, value: 0
key: from, value: 7
key: from_spmid, value: tm.recommend.0.0
key: last_play_progress_time, value: 0
key: list_play_time, value: 0
key: max_play_progress_time, value: 0
key: mid, value: 476402463
key: miniplayer_play_time, value: 0
key: mobi_app, value: android
key: network_type, value: 1
key: oaid, value: cb0677e1448a466c
key: paused_time, value: 0
key: platform, value: android
key: play_mode, value: 1
key: play_status, value: 0
key: play_type, value: 1
key: played_time, value: 0
key: polaris_action_id, value: 8F9595B5
key: quality, value: 64
key: report_flow_data, value: {"flow_card_type":"av","flow_source":"high_quality_newuser_ann_dssm_u2i_v2"}
key: s_locale, value: zh_CN
key: session, value: 
key: sid, value: 0
key: spmid, value: united.player-video-detail.0.0
key: start_ts, value: 0
key: statistics, value: {"appId":1,"platform":3,"version":"8.36.0","abtest":""}
key: sub_type, value: 0
key: total_time, value: 0
key: track_id, value: all_49.router-pegasus-1956706-7ffd87d79b-c96cg.1741762720104.36
key: type, value: 3
key: user_status, value: 0
key: video_duration, value: 868
android逆向攻防-某二次元站OLLVM算法分析

扣了几个环境下来,

差不多补了两百行结果就出来了

android逆向攻防-某二次元站OLLVM算法分析

最后补出的sign和我们hook到的sign值是一样的

这里注意我把ts参数固定了

android逆向攻防-某二次元站OLLVM算法分析

有的朋友可能会在补这里的时候直接加上ts,但这里补入的ts是无法进入最终的map的,运算还是有map的参与

0x05 trace

android逆向攻防-某二次元站OLLVM算法分析
android逆向攻防-某二次元站OLLVM算法分析

拿着我们的fe6a142c8afc19db5535130e40b3d9c5 出发

这里可以拿最后四个字节去进行搜索

c5d9b340

android逆向攻防-某二次元站OLLVM算法分析

ida对应跳过去

android逆向攻防-某二次元站OLLVM算法分析

这里还是存在一定混淆,但分析一下就知道程序最终会这样走向

android逆向攻防-某二次元站OLLVM算法分析

这里存在相关运算

此处为字节第一次出现的地方

android逆向攻防-某二次元站OLLVM算法分析

字节所存在的两个函数都可以成为突破点

我这里用frida inlinehook了一下

android逆向攻防-某二次元站OLLVM算法分析
video_duration=868 为最后一个变量,后面跟着的很有可能是salt

我们同样可以尝试用unidbg尝试,看的更清楚

android逆向攻防-某二次元站OLLVM算法分析

这里直接读取x13

android逆向攻防-某二次元站OLLVM算法分析

我的hook代码

android逆向攻防-某二次元站OLLVM算法分析

发现是层层输入数据并进行循环md5操作

debugger.addBreakPoint(module.base + 0x106c4);

搞个断点看看

android逆向攻防-某二次元站OLLVM算法分析
android逆向攻防-某二次元站OLLVM算法分析

那对应的此处就是输入md5要加密的数据

android逆向攻防-某二次元站OLLVM算法分析

继续打断电在第二个函数执行处

android逆向攻防-某二次元站OLLVM算法分析

可以看到最后这里就是加盐的地方

0x06 结果展示

android逆向攻防-某二次元站OLLVM算法分析

0x07 总结

本期总结

1.frida绕过 通过inlinehook dlsym继而替换pthread

2.验签定位

3.如何快速从ollvm中找到关键信息 -> stalker unidbg

4.native层中关键函数定位

原文始发于微信公众号(剑客古月的安全屋):android逆向攻防-某二次元站OLLVM算法分析

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月12日21:19:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   android逆向攻防-某二次元站OLLVM算法分析https://cn-sec.com/archives/3834014.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息