最近在学app逆向,记录一下破解过程。

环境:

  模拟器,eclipse,httpcanary,jeb

一、先配置好模拟器环境,打开抓包软件分析参数

某App逆向分析,破解提交参数_sed不过软件有模拟器检测,我们先用jeb分析一下

 

  1. 搜索“模拟器”找到相应代码


    某App逆向分析,破解提交参数_搜索_02

     

  2. 我们这里直接全部跳转到正确位置即可


    某App逆向分析,破解提交参数_sed_03

     

     

  3. 反编译dex找到位置修改后重打包安装 ,app就可以正常打开了!


    某App逆向分析,破解提交参数_搜索_04

 

下面打开httpcanary进行抓包,提交邀请码后抓到的包

某App逆向分析,破解提交参数_搜索_05

 

这里可以看到,X-JSL-API-AUTH是加过密的,第一个应该是加密方式,第二个是时间戳,第三个不清楚,第四个应该是md5值

某App逆向分析,破解提交参数_搜索_06

 这个是text里面的数据,data是加过密的;

二、查看app代码,分析加密方法

X-JSL-API-AUTH分析过程

  1. 我先使用的是XposedHook所有常用加密方法,但是并没有找到,具体什么原因我也不清楚。

  2. 既然简单方法用不了,那就只能看代码了,先从X-JSL-API-AUTH入手,jeb搜索X-JSL-API-AUTH某App逆向分析,破解提交参数_抓包_07

     只搜出来一个地方,我们解析进去,某App逆向分析,破解提交参数_字符串_08

     很容易看出来X-JSL-API-AUTH这个值是箭头所指地方加密过来的,某App逆向分析,破解提交参数_字符串_09

     v0是传进去的参数xxx.getPath()(这个是网址的后缀),v1是设置的固定密钥,v2是字符串“md5”,v3是时间戳,v4感觉是v3加密来的(点进去就发现v4就是v3的MD5),之后v4又被切割[0,8],刚好就是X-JSL-API-AUTH里的第三个参数,下面就进行字符串把v2,v3,v4,v0拼接中间用“|”号连了起来,返回时又进行了拼接,刚好是X-JSL-API-AUTH的模样,所以只需要分析a.a(v0)(这里就是v0的md5);到目前为止就只有固定密钥不知道。

  3. 能看到这个值的方法我知道的有三个,但是,这三个方法我都试过,前两个app改了之后就会进不去,第三个hook输出不了值。可能是代码写的不对,但是尝试了好久。
    • 设置断点调试
    • smali代码输出
    • XposedHook输出
  4. 然后看到这个是调用so库的,当时都想着放弃了,想着死马当活马医看一眼这个so文件吧,结果用ida一打开某App逆向分析,破解提交参数_抓包_10

     这个密钥就摆在眼前。

  5. 既然知道密钥了那就验证一下某App逆向分析,破解提交参数_抓包_11是正确的,下面就是分析这个text 

text分析过程

  1. 如果jeb直接搜索“data”会出现很多值,但是v20200429也是text的值,于是我就搜索了他,结果就搜到一个值,这就很方便了
  2. 解析进去可以看见data是后面的那个方法来的,

    某App逆向分析,破解提交参数_搜索_12

    某App逆向分析,破解提交参数_抓包_13

     这里就是加密他的方法,这里的a.d和a.c是一个固定值

    某App逆向分析,破解提交参数_时间戳_14他就是一个AES/ECB加密,密码就是上面获取的固定密钥

  3. 我们去网站解密一下
    某App逆向分析,破解提交参数_抓包_15

     解密成功!

三、构造请求

我用的是python

某App逆向分析,破解提交参数_时间戳_16

 

 总结:

  这次逆向大部分是靠运气来的,特别是这个密钥,不知道下次有没有这么好的运气了。