某游戏盒子密码加密分析
本帖最后由 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了。
hlrlqy 发表于 2020-2-16 15:32
动态调试的话本地打开so再附加,IDA会问你是否相同,点same即可
附加之后不行哦
对于根本看不懂的人来说,还是发个成品更实在。 支持技术指导,谢谢分享 @su.tim可以一起交流下,我也在学习中 所有的密匙都已准备好,就是提示设备一样,改了都不行,不知道啥问题 楼主真棒。加油!
感谢大神的分享分析 感谢分享
动态调试的话本地打开so再附加,IDA会问你是否相同,点same即可
页:
[1]
2