一.涉及知识点
app脱壳 java层 so层动态注册
二.抓包信息
POST /user/login.html HTTP/1.1 x-app-session: 1603177116420 x-app-lng: 121.xxxx x-app-lat: 31.xxxxxx x-app-version: 4.5.6 x-app-pushid: 1a0018970a165a9944f x-app-locationcityid: xxxxxx x-app-uuid: cd6df0a047ae0fbb User-Agent: Caibeike/1.0(com.caibeike.android 4.5.6; Nexus_5;Android 6.0.1; cd6df0a047ae0fbb; zh_CN) x-app-cityid: xxxx x-app-platform: android x-app-nonce: 1683473123 x-app-timestamp: 1603182403928 x-app-encrypt-text: 72157d096e1793b4f7696ea92285e93a host: mapi.caibeike.com Content-Type: application/x-www-form-urlencoded Content-Length: 54 Connection: Keep-Alive Accept-Encoding: gzip pw=2aed29ddfb50fc6f07e1a2bf3e6e3d87&mobile=xxxx
三.分析
x-app-lng: 121.xxx x-app-lat: 31.xxxx x-app-locationcityid: xxx x-app-cityid: xxxx #这些是地理信息 x-app-encrypt-text #这个明显是加密信息 #请求参数中pw很明显做了加密
四.开始找参数
#首先先不管请求头直接搞请求参数加密 #为什么呢不搞请求头呢,因为请求头未必有用
脱壳
日常习惯看看有没加壳
简单的加固而已
看我往期的博客
https://www.cnblogs.com/pythonywy/p/13536130.html
定位加密参数
这个全经验吧,同学们自己多多专研这个很难教
#python转一下 from Crypto.Cipher import AES class Aes_ECB(object): def __init__(self): self.key = 'gSPs4aHZL1ocan1w' #秘钥 self.MODE = AES.MODE_ECB self.BS = AES.block_size self.pad = lambda s: s + (self.BS - len(s) % self.BS) * chr(self.BS - len(s) % self.BS) self.unpad = lambda s: s[0:-ord(s[-1])] # str不是16的倍数那就补足为16的倍数 def add_to_16(value): while len(value) % 16 != 0: value += '\0' return str.encode(value) # 返回bytes def AES_encrypt(self, text): aes = AES.new(Aes_ECB.add_to_16(self.key), self.MODE) # 初始化加密器 encrypted_text = aes.encrypt(Aes_ECB.add_to_16(self.pad(text))).hex() # 执行加密并转码返回bytes return encrypted_text
运行发现他还需要请求头进行破解
破解请求头
#找java层方法都一样,日积月累关键字查找,你会发现x-app-encrypt-text在so文件中
反编译so文件
1.修改apk的后缀名为zip
2.用ida打开so文件
获取so层方法的偏移位置
我之前的代码
https://www.cnblogs.com/pythonywy/p/13787332.html
定位位置之后找盐
哈哈,盐就是这个
至于入参毕竟是他人的app我就不写的很详细拉
方法和思路都有了大家可以去试试