一次解密,给刚开始接触逆向的新人点经验
话不多说,先上封包:
POST https://api.c8521.com/api HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
User-Agent: Dalvik/2.1.0 (Linux; U; Android 5.1.1;redmi 3s Build/LMY47I)
Host: api.c8521.com
Connection: Keep-Alive
Accept-Encoding: gzip
Content-Length: 445
payload=CEHDOmG4lcviYZnCskdZzQ%3D%3D.UwcncrX7zZcJVxehkKCij0gHTeQKWLwZ6XfItcalvDFmPcihmnZrkrxpQF%2B43d9U9pa1L6pqeylM%0AgjAvlwH0%2Bwf29Lo5%2BbPX4yv0Cl%2BZx%2BjTHE%2Foo02gFbBqdgYbfIdiYN8F1%2F5x9P42p7bFGnVxilOS%0AiwREH3epLnzJBtOEEBBtKJrHGF8fr%2Bc7E%2BJKILrLujBVVXgJzVMZrmga%2FC9k8u4sevfM4RFUQbDc%0AOoPKpWrV7SPN1hs1FiczQ%2FUv72ANArtvhqN0f7HzAxsaPPwvzVeXA3Chwcv89zQqM1%2BZobBScSQO%0Ai0pKoGtWzbOfK5Yj3iSq6qk8LnGMJ5uohqCR4d5fwMF7OfCZPDDK%2Boi397U%3D%0A&
因为是对称加密,看这个样子,应该是属于AES、DES这类的
看了下dex大小,应该是没加固的,dex拖到dex2jar里面去
再把jar拖进gui
成功得到源码
接下来就是定位加密的地方,通过提交数据的参数,查找关键词
找到关键地方
提交参数是两段base64编码过的数据
第一段:
payload=CEHDOmG4lcviYZnCskdZzQ%3D%3D
中间是点分隔开的
第二段
UwcncrX7zZcJVxehkKCij0gHTeQKWLwZ6XfItcalvDFmPcihmnZrkrxpQF%2B43d9U9pa1L6pqeylM%0AgjAvlwH0%2Bwf29Lo5%2BbPX4yv0Cl%2BZx%2BjTHE%2Foo02gFbBqdgYbfIdiYN8F1%2F5x9P42p7bFGnVxilOS%0AiwREH3epLnzJBtOEEBBtKJrHGF8fr%2Bc7E%2BJKILrLujBVVXgJzVMZrmga%2FC9k8u4sevfM4RFUQbDc%0AOoPKpWrV7SPN1hs1FiczQ%2FUv72ANArtvhqN0f7HzAxsaPPwvzVeXA3Chwcv89zQqM1%2BZobBScSQO%0Ai0pKoGtWzbOfK5Yj3iSq6qk8LnGMJ5uohqCR4d5fwMF7OfCZPDDK%2Boi397U%3D%0A&
我们先分析这段源码,看看第一段怎么生成的
点进去,看来是随机生成的一个16字节
然后在看到这里调用的这个方法
点进去是一个base64编码
再来看第二段参数
点进去
果不其然是一个AES加密,第一个传进来的参数是key,第二个是iv,第三个是原文
Iv是刚才随机生成的一个16字节
第一个参数调用的方法再去看看密钥的生成方式:
Get再进去
到这里可以看出来,是调用了so层,看来这个APP是把密钥计算方法放在了so层,通过传入参数返回计算好的密钥。
分析so太麻烦(因为不会,小声bb),这里就直接hook AES加密那个函数得到密钥了,
打开AndroidStudio,开始编写hook
填入包名,类名,方法名,传入参数类型就行了
把生成的apk装到模拟器,再激活xp模块,打开app以后,去日志查看
这样子解密就完成了,好像这个app有很多对密钥,用在不同的地方,就不一一分析了,希望对刚开始学习逆向的新人有所帮助,最后说一句:支持开源!
发表评论: