最近在学app逆向,记录一下破解过程。
环境:
模拟器,eclipse,httpcanary,jeb
一、先配置好模拟器环境,打开抓包软件分析参数
不过软件有模拟器检测,我们先用jeb分析一下
-
搜索“模拟器”找到相应代码
- 我们这里直接全部跳转到正确位置即可
- 反编译dex找到位置修改后重打包安装 ,app就可以正常打开了!
下面打开httpcanary进行抓包,提交邀请码后抓到的包
这里可以看到,X-JSL-API-AUTH是加过密的,第一个应该是加密方式,第二个是时间戳,第三个不清楚,第四个应该是md5值
这个是text里面的数据,data是加过密的;
二、查看app代码,分析加密方法
X-JSL-API-AUTH分析过程
- 我先使用的是XposedHook所有常用加密方法,但是并没有找到,具体什么原因我也不清楚。
- 既然简单方法用不了,那就只能看代码了,先从X-JSL-API-AUTH入手,jeb搜索X-JSL-API-AUTH
只搜出来一个地方,我们解析进去,
很容易看出来X-JSL-API-AUTH这个值是箭头所指地方加密过来的,
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);到目前为止就只有固定密钥不知道。
- 能看到这个值的方法我知道的有三个,但是,这三个方法我都试过,前两个app改了之后就会进不去,第三个hook输出不了值。可能是代码写的不对,但是尝试了好久。
- 设置断点调试
- smali代码输出
- XposedHook输出
- 然后看到这个是调用so库的,当时都想着放弃了,想着死马当活马医看一眼这个so文件吧,结果用ida一打开
这个密钥就摆在眼前。
- 既然知道密钥了那就验证一下是正确的,下面就是分析这个text
text分析过程
- 如果jeb直接搜索“data”会出现很多值,但是v20200429也是text的值,于是我就搜索了他,结果就搜到一个值,这就很方便了
- 解析进去可以看见data是后面的那个方法来的,
这里就是加密他的方法,这里的a.d和a.c是一个固定值
他就是一个AES/ECB加密,密码就是上面获取的固定密钥
- 我们去网站解密一下
解密成功!
三、构造请求
我用的是python
总结:
这次逆向大部分是靠运气来的,特别是这个密钥,不知道下次有没有这么好的运气了。