
看雪ID:青衫不负雪
https://bbs.kanxue.com/user-home-1020078.htm
抓包
首先开个抓包抓一下链接,使用手机号+验证码方式登录,点击登录发现手机号居然直接明文作为请求链接后缀,code就是验证码,然后数据也全部都在请求头里面。


多请求几次,nonce、did、sign这些参数是动态的,所以我们需要分析这些参数。
java层
拉APP使用jadx打开,发现没有壳,刚刚好,不需要另外的脱壳,直接搜索参数。

运气真的不错,搜索出来的参数的指向就一个,点进去发现,发送参数携带的请求头全部都在这。

nonce参数
这个参数实现的逻辑就短短几行,直接扔给AI分析一下

总结,就是生成一个32位的随机字符,直接用python实现其中的功能。

did参数
did的结果是来自g0.b,直接hook一下,结果没有任何的输出???(有没有大佬晓得原因的),没办法,只能继续分析,a是关键函数,剩下的两段代码一个是转换一个是取值。


a函数进去之后,看到了关键字符串MD5,那这个很明显就是计算MD5的值,hook这个,参数和返回值都有。


直接拉取MD5计算一下,就普通的MD5,就差这个参数是怎么来的了。

往回查查,a函数的参数来源于b函数的str2参数,而str2又是a10来的,看看a10是怎么来的,回到最初的地方,首先在上方定义了a10的字符串变量,然后再下方进行判断赋值,老样子,扔给ai看看。

总结:先判断你是什么登录,然后再具体赋值,我这个did是数值是S开头的,那就是走情况3,随机生成一串随机数,最终当作参数传递给了g0.b,然后又在b函数里面把随机数进行MD5转换,再取后22位然后拼接S,did的结果就出来了。

sign参数
java层
sign的话先尝试hook一下getSignStr函数,点进去发现居然还有一个so层的sign,一起hook一下看看先。


和之前的情况一样,getSignStr函数没有出日志,sign函数倒是出了,直接分析吧,getSignStr函数第一个是初始化,这个不用管,直接看返回,是调用sign函数,那么日志里面sign函数打印出的参数就是getSignStr函数的第二个参数str,看最终结果貌似是MD5,写了个主动调用,看看有没有随机加的参数,发现都是固定的。

试试直接把参数拖到网站上面去进行计算,然后发现没对上,只能去so看看了。

so层
用ida打开一搜,静态注册的,一千多行,老实说,转伪c之后看到这么多代码,脑子有点懵了,有点无从下手的感觉,但是都到了这地步了,放弃又不甘心。只能硬着头皮继续分析下去了。



第三个参数就是java层传过来的,直接跟踪看看


最终定位到这,一看特征MD5,复制这一段给ai分析分析,大概流程就是转换类型,然后处理格式,最后加密。


首先是对sub_42A10,字符串拼接部分进行了hook,(这里为了方便就把参数写死,直接写了个手动调用)发现传递进去的参数已经是拼接完毕了,在原来的参数基础上多了个"-naxyj9ha-802",并且还连续调用了两次,对比发现这个貌似没啥用,传递过去的参数和返回值都一模一样,所以拼接是在这之前完成的。

原本是想往上找的,但是突然想起来这个可能不是随机的,就多点击了几次登录,对比发现,就是固定的,直接继续往下,hook MD5看看。


但是结果出来之后,懵了,貌似还是啥都没干,该咋样还是咋样??

本来到这信心已经快没了,然后突发奇想,把这拼接之后的参数计算MD5看看,然后发现,最终的结果居然一模一样,离谱,敢情之前是白分析了。

总结:它这里的计算实际上就是在参数后面拼接了一个固定值,然后进行MD5,把伪C扔给AI分析,AI分析出说大部分代码都没啥用,都是干扰代码。
ts参数
这个不用说了,就是一个时间戳而已
总结
整体难度都是偏简单的,并没有啥加密混淆啥,java层基本上都很清晰明了,就是so层疑似插入了大量的无用的重复代码导致分析难度加大了点。
来源:看雪学苑


夜雨聆风