https://www.jianshu.com/p/a054652db4e3
先说,出于好玩,破解了某app
主要反编译app,分析出数据加密代码,再拿到底层加密动态库,再绕过底层动态库的签名验证,最终通过自写app调用动态库,并获得加密,解密数据。
1、反编译app:
这一步就不细讲了,太多方法,网上自己搜索……
2、分析代码:
根据抓包获取接口关键词,到反编译源码中查询,并分析代码,
发现关键代码函数:
Java_com_wuba_aes_Exec_init
Java_com_wuba_aes_Exec_decryptPhoneData
这里居然调用了底层动态库:xxx.so
……我x,还好有大招
3、动态库破解:
来来来,采用大招了,哈哈:下载ida,反编译xxx.so
找到这两个函数的汇编代码,并双击定位,按下F5反汇编,能大概看到一些源码
然后分析加密过程,查找加密秘钥,可能学术不精,无法找到,不能找到加密的具体东西
……我xxx,还好有大招
4、尝试动态库xxx.so调用:
尝试自己建一个Android工程,调用xxx.so动态库,发现调用成功,但是解密数据不对……是不是有验证??
5、动态库验证破解:
分析发现解密函数中,的确是有一些验证的,如:
if ( isOurApk == 1 )
{
……
}
这时候我们就要跳过这个这个判断,把1改为0可好,哈哈,这样跳过这些验证,这样我们自己建立的工程就可以来调用这些接口了。
6、修改.so文件:
a.在ida中左侧双击这个函数,定位到ida-view a 的汇编视图(F5可以看到源码),然后在汇编视图定位中的汇编代码中,发现有一个cmp指令,其实就是这个if条件,然后记下地址
b.然后在ida的hex-view(二进制视图)中找到这个地址(在 汇编视图 中,鼠标定位到cmp这一行,然后选择hex-view,可以看到鼠标刚好定位到这行代码的地址,反正就是想办法找到这行代码的地址),然后发现这样的二进制: 01 28,然后鼠标右键,修改01为00,然后鼠标右键保存
c.然后再在ida的汇编视图中,定位这个函数,再按F5,看看源码,以及生效的效果。直到改对为止。
d.在ida中这样的修改,是不会真正修改到动态库的,需要用notepad中的hex-editor插件(或者其他工具,如ue)打开这个.so文件,并找到这个地址 修改,然后保存,这样就生效了
7、最后再用自己的工程,则可以调用该动态库,并直接调用里面的函数了。
后面有机会,再完善该文章,或者上传代码!