先说,出于好玩,破解了某app

主要反编译app,分析出数据加密代码,再拿到底层加密动态库,再绕过底层动态库的签名验证,最终通过自写app调用动态库,并获得加密,解密数据。

1、反编译app:

这一步就不细讲了,太多方法,网上自己搜索……

总之是想办法获取反编译后代码,然后通过分析代码来查找我们想要的东西 
 

2、分析代码:

根据抓包获取接口关键词,分析反编译源码中查询,并分析代码,
发现关键代码函数: 

Java_com_wuba_aes_Exec_init
 Java_com_wuba_aes_Exec_decryptPhoneData

这里居然调用了底层动态库:xxx.so

因此只有去分析下动态库了

 

3、动态库分析破解:

来来来,采用大招了,哈哈:下载ida,反编译xxx.so

找到这两个函数的汇编代码,并双击定位,按下F5反汇编,能大概看到一些源码

然后分析加密过程,查找加密秘钥,可能学术不精,无法找到,不能找到加密的具体东西

没办法了么?不,还可以尝试来调用这个xxx.so

 

4、尝试动态库xxx.so调用:

尝试自己建一个Android工程,调用xxx.so动态库,发现调用成功,但是解密数据不对……是不是有验证??

只有想办法,分析动态库代码了

 

5、动态库验证破解:

分析动态库中,发现解密相关函数中,的确是有一些验证的,如:
    

if ( isOurApk == 1 )
      {
         ……
      }

这时候感觉离成功已经很近了,其实我们修改下这个动态库,跳过这个这个判断,把1改为0可好,哈哈,这样跳过这些验证,这样我们自己建立的工程就可以来调用这些接口了。

 

6、修改xxx.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、最后,自己的工程可以调用该动态库,并直接调用里面的函数了。

     后面有机会分享更多细节,或者上传代码