a646471969 发表于 2020-2-6 12:00

某游戏盒子密码加密分析

本帖最后由 a646471969 于 2020-2-6 12:00 编辑


直接登录抓包,这里的password输入的是aa1234,很明显是加密之后的;
打开jadx搜索,可以定位到此处:

this.b = AppNativeHelper.desCbcEncrypt(this.b);
通过这个大概就可以猜出来,密码在so层,加密方法是desCbc,进入AppNativeHelper这个类看下

果然如此,到此就可以用IDA打开动态分析了,

动态加载成功了,双击打开so之后竟然是这样

只有两个方法,尝试了各种方法都不行,有知道的可以解释下,大家一起学习
到此就只有静态分析了,好痛苦,好在不是很复杂
用ida加载so之后,在导出表中没有发现desCbcEncrypt这个函数,那就应该在JNI_OnLoad中动态注册的了

把JNI_OnLoad中的代码转为伪代码之后,在把类型转换下,就是这样的了
点击RegisterNatives中的第三个参数也就是函数指针可以看到:


很明显就是这个了

有一个调用BL      sub_12774,继续跟进

很可能就是这个了,转为伪代码看下

由于des加密需要三个参数,明文,Key,IV,由此可以推测这个应该是计算Key或者iv的一个算法
很明显v10是一个数组,返回的结果很明显在v3中也是一个数组,下面就可以进行代码还原了,这里用的java

计算得出这个很可能就是一个key了,还有一个iv,我们继续跟进sub_5ED4(v2, v9, v3);
这里加密的函数也就三个,我们分别来看sub_61D8(a1, a2, "utf-8");可能是编码的,就不看了
sub_5E68(v10, ptr, nmemb, s, 1);没有明显特征,进去看下
这里有个可疑的常量,我们看下
很明显就是引用的这个常量了
0x1234567890ABCDEF
现在我们所有数据都有了,经过测试结果为j1Bi3jpC/nQ=,和提交的一样,在UTF-8编码下就是j1Bi3jpC%2FnQ%3D了。


a646471969 发表于 2020-2-17 21:26

hlrlqy 发表于 2020-2-16 15:32
动态调试的话本地打开so再附加,IDA会问你是否相同,点same即可

附加之后不行哦

bigbirdl 发表于 2020-2-6 16:29

对于根本看不懂的人来说,还是发个成品更实在。

li6893 发表于 2020-2-6 19:24

支持技术指导,谢谢分享

a646471969 发表于 2020-2-6 23:02

@su.tim可以一起交流下,我也在学习中

萌萌嗒的小白 发表于 2020-2-7 14:37

所有的密匙都已准备好,就是提示设备一样,改了都不行,不知道啥问题

yazoox 发表于 2020-2-7 15:22

楼主真棒。加油!

garen 发表于 2020-2-7 15:48

感谢大神的分享分析

yubin 发表于 2020-2-7 17:39

感谢分享

hlrlqy 发表于 2020-2-16 15:32

动态调试的话本地打开so再附加,IDA会问你是否相同,点same即可
页: [1] 2
查看完整版本: 某游戏盒子密码加密分析