一直在索取论坛大佬的帮助,其实我自己也写过一些文章在自己博客,但我总觉得在看雪发表文章应该需要有用的、有技术含量的,就不敢发,怕误导人,这次分享的内容是android一个社区,叫 酷安,应该有人知道;其次也是借这次机会请教几个问题,这篇文章很早就写了,但有些问题一直没去解决。。
先抓个包
可以看到其中有个请求头 X-App-Token,这就是验证,至于X-App-Device这玩意儿应该是获取你手机信息的,不管它,先看看软件源代码,找到请求方法
没加固,好像也没混淆,舒服
搜索关键字:X-App-Token
很明显找到了我们要的东西了,(jeb3.0按tab键反编译)
这个 X-App-Token 是变量 v2_1,v2_1是,一个AuthUtils类里的getAS方法返回的
跟进可以发现这是一个native方法,lib是native-lib
到这里就没法用jeb分析了,我们先看看参数2 deviceId 是个什么玩意儿
可以看到是一个 SystemUtils 类里的 getDeviceID方法返回的,传入一个context参数
我们去app的application hook这个方法
我找到一个代码量最少的方法,这样可以帮助我们不破坏原逻辑的情况下hook (这里也许会误导别人,不破坏原逻辑可以直接在hook里调用当前方法,写这篇文章的时候还不是很懂)
hook的代码很简单
拿到 deviceId 后分析so
解压apk拿到 native-lib.so,用ida打开
我们已知方法名和参数个数,那么就先搜索方法名
在 Function Window 按 option+t 搜索 getAS,可以看到,毛都没有
那我们就到 IDA View 里搜索,快捷键一样
找到了这个,参数是两个,但这个不是方法,没法 F5 反编译
不瞒你们,这个DCB是个什么玩意儿我也不知道.
但是我在 Function Window 瞎翻想找一些我能看得懂的方法名时看到了这个
我一看,这个方法好像和 getAS 有点关系就顺手 F5 了
简单看了看里面的代码,我估计我要找的是这个方法,为什么是这个方法而不是其他的
我分析了 X-App-Token 这个验证的组成,它长这样:f2c29a109fde487e9350d3e6b881036a8513efac-09ea-3709-b214-95b366f1a1850x5d024391
我之前就获取到了我的 Device Id,我无意间看到了我的 device id就在里面,然后我把它拆分成了这样:
第一项很明显是md5密文,第二部分就是device id,最后是一个十六进制,不知道什么玩意儿,但我在那个 getAuthString 代码里看到了这段代码
这是一个字符串拼接的过程,其中 v82 是md5密文,也是字符串的头部,后面接着是 v43(device id)、字符串0x、最后是 hex_time (这是我改了后的命名),所以我就能确定这个方法就是我想要的;
上面说的也就是接下来要分析的,其中那个十六进制的东西就是时间戳,我们只需要分析出md5是怎么来的就行了,我们知道md5是 v61,v61 的加密代码在这
加密的内容是v58,v58是一个经过base64编码后的变量
我懒得去看它是什么了,我直接hook了md5加密类,有三个方法,一个是md5(应该是构造方法把)、update、finalize,hook 代码如下
运行后得到了那个base64编码过的内容:
dG9rZW46Ly9jb20uY29vbGFway5tYXJrZXQvYzY3ZWY1OTQzNzg0ZDA5NzUwZGNmYmIzMTAyMGYwYWI/MzgyMzIxNWQ5MWQyOWQ5ODg3ZWJjMDVmMGQ3ZmQzMGQkODUxM2VmYWMtMDllYS0zNzA5LWIyMTQtOTViMzY2ZjFhMTg1JmNvbS5jb29sYXBrLm1hcmtldA==
经过解码后:
token://com.coolapk.market/c67ef5943784d09750dcfbb31020f0ab?3823215d91d29d9887ebc05f0d7fd30d$8513efac-09ea-3709-b214-95b366f1a185&com.coolapk.market
然后根据这段代码
上面解码后的内容可以拆分为:
据我分析,只需要的到第二部分的md5加密的来历就行了,继续分析,找到了加密的地方
根据这图的画线,可以明确的知道这md5就是时间戳,在我hook的输出中也可以看到这个就是时间戳
至于 token://com.coolapk.market/c67ef5943784d09750dcfbb31020f0ab? 这个是不变的
token://com.coolapk.market/c67ef5943784d09750dcfbb31020f0ab? + md5加密后的时间戳 + $ + device id + & + com.coolapk.market(包名),将其md5加密后得到 第一部分
token的来历就是:第一部分 + deivce id + 0x + 十六进制转换后的时间戳
简单的测试代码:
如果文章有误导的地方还望指正。
代码啥的都提交到Github了,CoolapkTokenCrack
最后我的问题是:在分析过程中有个疑惑就是为什么在ida中找不到getAS方法,反而变成了getAuthString,我自己分析的时候是随缘F5的。。。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2019-9-13 15:57
被zckuna编辑
,原因: