本文逆向分析的App为了缩短文章篇幅,提高文章的可读性,去除了一些没有意义的分析,但是在真实逆向过程中可没有文章中这么顺畅,需要反复的去分析反编译后的代码
抓取App登录的数据包,会发现其密码进行了加密,并且有签名校验
请求方式:POST请求地址:https://xxx.com/app/api/v1/partnerLogin/login请求体:phone=18630087660password=e10adc3949ba59abbe56e057f20f883e请求头:X-App: nativeX-Noncestr: 123456X-OS: partnerApp_androidX-Req-Time: 1650980779832X-Sign: 645b299fc29998e390d60d95a9b1ac5aX-Token: X-UserID:
想要逆向出加密算法,首先得先将apk进行反编译,apk文件,本质就是压缩包(代码)。反编译工具,反编译成java代码,分析java代码,这里使用的工具是jadx-1.3.1
接下来要解决:password是怎么加密的?
1)首先根据特点去搜索,找到算法代码的位置。可能搜到很多东西,所以搜索需要一定的技巧和运气
- password "password" password=
- phone
- /v1/partnerLogin/login
2)转到代码中,分析代码,代码中存在很多可疑关键词,基本上可以确定该处就是登录的api接口
3)选中submitLogin右键查找用例
4)转到用例的代码中,分析其中的代码,发现此处声明了一个 loginWithToken 的类
5)全局搜索 loginWithToken 这个类,继续逐个分析其代码
6)转到代码中,分析其代码
7)查找并转到 setPwd 的用例代码中
8)分析其代码,分析出密码只经过了一层md5加密
9)使用python代码实现该算法
# 明文:123456# 密文:e10adc3949ba59abbe56e057f20f883eimporthashlibobj=hashlib.md5()obj.update("123456".encode('utf-8'))res=obj.hexdigest()print(res) # e10adc3949ba59abbe56e057f20f883e
即使 password 的算法给逆向出来了,也还无法使用python去进行发包,我们还需要解决 X-Sign 这个签名算法
1)全局搜索关键词 X-Sign
2)转到代码中,发现 X-Sign 是 RequestParamsWrapper 这个类的一个参数,于是分析 RequestParamsWrapper 这个类
3)分析 RequestParamsWrapper 这个类
4)使用python代码实现该算法的调用
importhashlibtoken=""reqTime="1650980894776"# 时间戳nonce_str="123456"nonce_str_sub_2=nonce_str[2:]body_string="phone=18630087660&password=e10adc3949ba59abbe56e057f20f883e"encrypt_string=f"{token}{reqTime}{nonce_str_sub_2}{body_string}"obj=hashlib.md5()obj.update(encrypt_string.encode('utf-8'))res=obj.hexdigest()print(res)# 5529026c5150c9f226f3e7cc7d90223c# 5529026c5150c9f226f3e7cc7d90223c
原文始发于微信公众号(Sec探索者):【实战案例】某APP登陆算法逆向分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论