目录:
一、多头项目的特点:
二、逆向思路
1、能否判断是否注册
2、逆向过程
三、逆向工具
1、抓包工具
2、测试工具
3、hook 工具
4、反编译工具
四、 难点解决方案
1、无法抓包的问题
2、加壳问题
五、java层逆向通用方案
1、原理
2、各种加密方法简单介绍
3、案例介绍
六、TODO
一、多头项目的特点:
- 1、以量取胜
- 2、十个中有一个能做
- 3、逆向难度符合二八原则
APP类型
- web抓包型 30%
- java加密型 50%
- 加壳型 10%
- so加密型 10%
需求:
当前提需求3000+,在线300+,爬虫抓取新需求1万+,估计可以提新需求3000+。
二、逆向思路
木桶原理
1、能否判断是否注册
- 登录
- 注册
- 找回密码
- 前置请求
- 图形验证码不校验
- 短信验证码不校验
前置请求样本:小荷金宝
2、逆向过程
- 抓包分析
- 做减法找出需要解密的参数
- 实际逆向过程
Jadx-gui 逆向代码
三、逆向工具
1、抓包工具
- chrome开发者工具 F12
- charles
- HttpCanary
- 抓包精灵
2、测试工具
- curl
curl 'http://hebao.qimmjie.cn/Api/System/CheckUserByTel?format=json' -H 'Connection: keep-alive' -H 'Accept: */*' -H 'Origin: http://hebao.qimmjie.cn' -H 'X-Requested-With: XMLHttpRequest' -H 'User-Agent: Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36' -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' -H 'Referer: http://hebao.qimmjie.cn/mobile/regist?code=xhe312' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: zh,en-US;q=0.9,en;q=0.8,zh-CN;q=0.7,zh-TW;q=0.6' -H 'Cookie: ss-pid=Zgl1gxCyxw8y1O2TEEZy; ss-id=edcBOzPQELlzzKdRaH8n; UM_distinctid=16e86db9e0a53b-0bbac29757f2a6-3961720f-13c680-16e86db9e0bc6; CNZZDATA1277818958=190964457-1574220570-%7C1574220570; ASP.NET_SessionId=tnps4rfmeb2le5buy05gzjg1; CNZZDATA1274999399=1120458144-1574219808-%7C1574227764' --data 'Tel=17611597503' --compressed --insecure
- FEHelper
- 在线加密测试网站
MD5、SHA256、HMAC等
AES、DES、3DES - java代码
各类Hash算法-Java版
各类加密算法(AES、DES、RSA、BASE64)-Java版
3、hook 工具
- Xposed
- Frida
4、反编译工具
- Jadx-gui
能直接反编译dex文件,方便好用 - JD-GUI
需要将dex文件转到jar文件,可以跳转函数 - JEB
用的较少
四、 难点解决方案
1、无法抓包的问题
- ssl pinning
- JustTrustMe
- JustTrustMe升级版
- [A Frida script to bypass SSL Pinning on Android.]
(https://gist.github.com/cubehouse/56797147b5cb22768b500f25d3888a22) - SSLkiller.apk 没测过
- sslunpinning.apk 没测试过
ssk pinning 样本:快鱼分期
- proxy检查
使用frida hook关键代码
Android 判断设备 是否使用代理上网
Android判断当前设备是否设置了代理
轻贷 禁止代理访问
2、加壳问题
解决方案:
1、手动脱壳
2、自动化脱壳方案
-
https://github.com/OakChen/ApkShelling
测试95%的都可以脱掉,少部分脱壳不彻底。 -
https://github.com/hanbinglengyue/FART
这个还没测试,网上说是一种更先进的脱壳方案
3、so加密
样本: 松紧贷 360加固、so加密
- 人工逆向
-
java直接调用so文件
太慢 需要5s左右 -
AndServer+Service 打造 Android 服务器实现 so 文件调用
因为云手机没有提供公网IP和端口的权限,使用反向代理做内网穿透frp -
python直接调用so文件
还未测试
五、java层逆向通用方案
1、原理
市场上大部分app的加密都是在java层,而且使用的是java标准的加密库。通过 hook java的标准加密库,实现无需反编译和脱壳的逆向。
2、各种加密方法简单介绍
参考:浅谈常见的七种加密算法及实现
加密方法:
- 1、散列算法 MD5 SHA-1 SHA-256 HMAC
- 2、对称加密 AES DES 3DES
-
3、非对称加密 RSA
3、案例介绍
1)MD5生成sign类型
案例:大黄花 https://kf.dahuanghua.cn/userReg/download
2)SHA1生成sign类型
3)AES生成sign
4)RSA加密手机号
米族金融 https://sj.qq.com/myapp/detail.htm?apkName=com.chainfin.meter
无法抓包需要先 hook ssl pinning
5)HMAC
这个没法下载了
5)DESede
有钱管家 https://www.wandoujia.com/apps/7878515
六、TODO
- 1、手动so逆向
- 2、手动脱壳
- 3、IOS逆向
- 4、工具的原理