安卓逆向之某手sig

版本: 6.8.2
安卓逆向之某手sig
通过抓包可以看出,sig和__NS_sig3都是请求数据时所必须的字段,本文主要说一下sig。
sig的关键代码定位比较容易,直接全局搜索就可以看到。安卓逆向之某手sig
安卓逆向之某手sig
不难看出这里调用了CPU.a方法,返回值应该就是我们想要的sig的结果,直接点过去看下a方法的实现。
安卓逆向之某手sig
这里是调用了core.so中的getClock方法得到的sig,三个参数中,我们重点需要看一下第二个参数bArr。可以直接hook这个方法,来把这个字节数组转成字符串,看下是将那些信息传进去做了处理。
安卓逆向之某手sig
从hook结果可以看出,第二个参数是有一大坨key,value的东西拼接的一个字符串。在之前抓包的结果中搜索,发现这些key,value都是请求时的参数。只要将这些指定的参数拼接成字符串,然后通过getClock的处理就可以得到最终结果了。
如果使用rpc技术或者unidbg,那么分析到这里就可以了,不需要再去分析so里面到底做了什么。但是本着一颗学习的心,我们还是要研究一下so中做了哪些处理。毕竟抠代码才是王道,rpc什么的还是有些限制的。
用ida打开libcore.so,找到getClock,f5看一下伪c代码。
安卓逆向之某手sig
圈起来的部分是做了一些判断,判断不过就返回0,与加密无关,所以直接忽略。
重点来看一下v12=dword_5070这里,在下面dword_5070参与了运算。看一下dword_5070到底是什么东西,hook也可以,ida动态调试也可以。我为了方便就直接hook了。
安卓逆向之某手sig
hook结果发现这是一个字符串,多次hook发现它是不变的。
然后继续向下看。重点看一下sub_158C,sub_15BC,sub_1720这三个函数。
安卓逆向之某手sig
安卓逆向之某手sig
安卓逆向之某手sig
看到这,再联合sig的最终结果的形势,很容易想到这是一个md5的处理。而之前的dword_5070参与了运算,应该就是加了盐。直接拿刚才hook到的字符串来运算一下,看看结果是否一样。
安卓逆向之某手sig
运算结果一模一样,就是一个加了盐的md5。到此sig参数分析完成。

原本想拿某书作为我逆向之路的第一个破解对象,但是似乎对我这个小白不太友好,它的反调试让我感到很疑惑。靠frida似乎很难完成so的破解,它的参数结构复杂,不像某手这样简单直观。
在此欢迎各路大佬前辈们进群交流:546452230

上一篇:RTOS操作系统中HOOK函数的用途


下一篇:vc++实现Ring3全局HOOK