首页
社区
课程
招聘
[原创]SO层逆向,某狗音乐登陆算法分析
发表于: 2022-4-6 10:02 18703

[原创]SO层逆向,某狗音乐登陆算法分析

2022-4-6 10:02
18703

首先抓包看下参数情况
抓包
可以看到这里 未知的 参数有4个

P2 t1 t2 和key

我们先hook一下有没有java层通用的加密算法
java
可以看到在登录调用的过程中触发了一些加密算法

我们搜索一下登录包的未知参数

看到我们有没有想要的
java
定位到了key参数,发现是MD5加密

参数为:

3116LnT6xpN3khm36zse0QzvmgTZ3waWdRSA104901648962363521

接着我们连续调用几次


3116LnT6xpN3khm36zse0QzvmgTZ3waWdRSA104901648956720446

可以发现前面的参数是不变的 只有后面的一段数字是变化的

在登录包我们可以发现 这一段是clienttime_ms
java
即时间戳

剩下的p2 t1 t2 没有hook到对应生成的地方,这里猜测可能是native层实现的加密

通过主动打印调用栈,找到登录包生成的地方
java

打开jadx反编译APK 找到对应的类对应的a方法:
java

跟踪进去:
java
可以看到我们已经定位到了 登录包参数构造的地方

我们先按照登录包参数的顺序依次分析,p2参数来自这里 java

传入了一个hashmap 参数有两个

clienttime_ms跟pwd

跟进生成pwd的a方法中
java
可以看到传入了一个字符串,然后进行md5加密,这里就是传入的密码进行md5加密

然后我们跟进.getEncryptText方法中

看到setRSAkey方法 猜测这个过程可能跟RSA加密有关

继续跟进
java

i方法里面传入 j方法生成的对象

j方法传入hashmap 遍历生成 arrayList
java

再次跟进去可以发现 _i是native 方法
java

我们用objection hook一下这个方法看看返回值是不是p2

java
可以发现生成是参数是一致的,至此_i方法为p2参数生成的地方

_i方法是非静态函数,我们找到他的对应的so可以采用hook RegisterNatives找到函数注册的地方
java
java
找到对应的so为libj.so 偏移地址为0x371c5

打开IDA进入该地址0x371c5
java

可以看到最终返回值v5是从v4来的 而v4是从上面来的 但是上面没有看到对应参数赋值的地方。

构造pair类 ,因为Java中没有Android的pair
unidbg

构造需要返回的list对象给native函数调用
unidbg

unidbg
开始补环境
unidbg
unidbg
unidbgunidbg

继续调用
unidbg

Unidbg模拟算法复现成功

IDA
首先是H2函数,进到里面查看
IDA
里面估计是构造json对象
IDA
再进到f10里面
IDA
看到字符串append 估计是对json字符串的构造
IDA
进入f1
IDA
进入f13
IDA
进入f1
IDA

发现已经定位到RSA加密的地方了,验证了我们的猜想。

HOOK对应的函数:

PUBKEY:
IDA

加密参数:
IDA


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2022-4-6 10:05 被_Miracles_编辑 ,原因:
收藏
免费 4
支持
分享
最新回复 (3)
雪    币: 321
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
贴图中的PUBKEY并不是最终的公钥
2022-4-6 11:09
0
雪    币: 1529
活跃值: (1282)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
该版本是多少啊
2022-5-6 14:18
0
雪    币: 736
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
您好,大佬能加个联系方式吗,想请教一些问题,感谢
2022-5-11 23:33
0
游客
登录 | 注册 方可回帖
返回
//