app逆向技巧

目录:

一、多头项目的特点:

二、逆向思路

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+。

image.png

二、逆向思路

木桶原理


image.png

1、能否判断是否注册

  • 登录
  • 注册
  • 找回密码
  • 前置请求
  • 图形验证码不校验
  • 短信验证码不校验

前置请求样本:小荷金宝

image.png

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
image.png
  • 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 样本:快鱼分期

image.png
image.png
image.png
  • 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


    image.png

3、案例介绍

1)MD5生成sign类型

案例:大黄花 https://kf.dahuanghua.cn/userReg/download

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

2)SHA1生成sign类型
image.png

image.png

image.png
3)AES生成sign

提钱花 https://mobile.hnzycfc.com/registration/home?inviterId=d7f63d1a284a4a8e93be45908d53f7b7&template_num=01&nameSign=kanong_18137851591&jump_platform=APP&m_code=WSD_1

image.png

image.png

image.png

image.png

image.png

image.png

image.png

4)RSA加密手机号

米族金融 https://sj.qq.com/myapp/detail.htm?apkName=com.chainfin.meter
无法抓包需要先 hook ssl pinning

image.png

image.png

image.png

image.png

5)HMAC

分期快车 http://47.111.130.25/fqkcreg/index.html?nsukey=ToSp1SIRrsQq0jYfJsKdwMx%2BH5b2BYG34XCEPwuoMfHGIL5GUx2TULWif1mhx3wf5JvP%2FMEEZ794dPo6WREjoNLLkTbQS9Oj47kyknq1%2FAfyU2rTc07dhgXQtvfJ5lPBvmtzQXFb51%2B4ReFqSstmtQJJD0jxqvUuIAprToeTzJ8pHo%2FsmPTurzDtEfDjvsbLyPhH4N44ofXCzC5sCdbwRA%3D%3D FAIL_SHELL

这个没法下载了


image.png

image.png
5)DESede

有钱管家 https://www.wandoujia.com/apps/7878515

image.png

image.png

六、TODO

  • 1、手动so逆向
  • 2、手动脱壳
  • 3、IOS逆向
  • 4、工具的原理

同事的git有部分代码,可以参考一下

你可能感兴趣的:(app逆向技巧)