前言
本文预计共会写3到4篇文章,总结学习过程中遇到的问题与解决的思路。
涉及到的so主要有两个,一个是libmsaoaidsec.so 另一个是scmain.so
版本为今年过年期间的版本。
本篇主要会涉及到anti frida、socket抓包定位、simpxxxxxx参数的前置准备。
frida 版本: 16.1.0
一、 浅说一下抓包的问题
- Socket
网上烂大街的方案,因为我使用的是M2的Mac,wireshark也没有办法使用,使用了肉丝的r0capture,r0capture的功能性很强但是python运行会有一些问题,spawn启动对于目标app做了frida检测,检测放到后面说,我推荐比较省事的办法,将script.js摘出来,send改为console.log。配合frida的anti anti frida进行抓包(anti anti frida下面会说)。 - 定位
我们可以在r0capture中的hook java函数中加入打印调用栈的代码,我是用到了r0的打印调用栈配合jadx的搜索功能来定位的。
在jadx中打开目标app,搜索Socket socket =
我们推测,Socket一定是要循环来发送接收消息的,所以我们在搜索结果中优先定位在while循环中的Socket实例化的代码。有run()
就优先找run函数
小技巧:优先看参数,参数是方法的点进去看有没有关联,确认过后再看外层的方法。f.a()
继续深入,到一个接口类,可以用frida来查找实现类,也可以在jadx中搜索:impelements f.b
继续点,最后到这里
刚才我们说过,先看参数内容,发现第一个参数是一个函数,查看
到此,我们基本定位好收发包的大体流程了。下一步对GzipUtil、SecurityUtil等类进行hook就可以把参数拼接过程找到,此app还用了protobuf,不过这些都可以自行解决了。Request也可以用此方式定位的到,包括压缩、解压、异或运算等。抓包内容到此告一段落,主要就是多hook,多分析就能找到。
二、 Anti Anti Frida
- 对于libmsaoaidsec.so最近很多人已经发了文章说了绕过的方法了。我发一个我4月份在分析这个so时候做的思维导图,并没有特别完全,但是大体检测的结构总结了出来。见附件。
这个so在我分析的时候只在网上看到了NOP掉load此so的方式,但是并不适用于此app。主要检测了frida的各种字段,字符串等于,字符串比较等方式都有使用,还有prettyMethod检测,我曾尝试把这些检测的函数全部hook掉,可以通过检测,但是后续app会有很大几率卡住卡死,后续只能把线程函数nop掉。但是so中还有其他检测,对linker的操作动作很多,但是没有作为anti使用。猜测后续版本可能会出。 - NOP记得区分ARM版本(现版都是ARM64)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
将此代码放到r0capture
的script.js中,hook init_array中以spawn启动.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
|
三、 simpxxxxxx的前置
IDA 7.7
Library : libscmain.so
Frida Stalker
Frida Hook Libart : hook_RegisterNatives.js
Target Parm : simpleSign
本篇文章暂时不对生成过程的细节做分析学习,先了解如何分析,怎么分析。
-
- simpleSign是一个native函数生成的,所以我们可以使用yang神的脚本确定此函数在so中的偏移地址
-
- 根据偏移,我们要使用ida pro去反汇编观察
第一眼我们遇到了花指令,一般情况下我个人喜欢先去trace汇编指令流,再去决定怎么去花。这时就是使用stalker的时候了。具体使用方法,可以看一下yang神的帖子我是链接
有一些花指令比如BR系列的,根据前后文即可推导出正确的跳转地址。
再比如某音的跳转方式,与此次的app大差不差。
因为篇幅的原因,更因为个人能力的原因,还是推荐去看一下龙哥的花指令教程,写的很详细。下面是去花后的反汇编
frida trace的代码要记得在libscmain.so加载完成后开启,做一个计数器是最好的选择。
- 根据偏移,我们要使用ida pro去反汇编观察
1 2 3 4 |
|