day01 app逆向入门
-
爬虫基础
-
js逆向:x视频、x头条、x站播放量
-
app逆向
本质分析app,人在app上做的操作,用代码实现。 apk -> 安卓开发 -> java代码写 -> 看的懂会分析java代码 -> 例如用的md5算法 Python代码实现md5算法 -> 代码代替人。课程的阶段: 1.快速了解app逆向到底干的什么事?【1天】 2.java基础【2-3天】 3.安卓开发【2-3天】(无障碍,抖音薅羊毛) 4.逆向+案例 5.交付:exe文件/web网站/GUI程序
关于资源:
链接: https://pan.baidu.com/s/1_c65ec_4LquBbYt_oH505g 提取码: 2cg9
关于上课时间
上课时间 周二、周四,腾讯会议。
第3期 爬虫&APP逆向
会议地址:https://meeting.tencent.com/dm/4K0pxaco0OFA
腾讯号码:876-2811-7691
关于设备
必须有一步安卓手机(小米)
安卓root
我目前:红米8A(350块钱)
建议:提前买。
- 买手机
- 申请BL锁(7天)
- root手机(建议大家自己刷,淘宝30块钱)
今日概要
目标:初步了解app逆向到底是怎么回事?
- 臧航准备网,自动登录。
- 油联合伙人,自动登录(算法&签名)。
1.臧航准备网
1.1 安卓设备
-
真机
-
模拟器,电脑上安装软件模拟手机。
win: 逍遥、夜神、雷电、网易mumu等。 mac: 网易mumu win同学安装模拟器时,开启vt。 https://mumu.163.com/include/16v1/2016/06/27/21967_625825.html

1.2 安装app


1.3 抓包软件 charles
1.3.1 安装
-
mac用户
访问网址 https://xclient.info/s/charles.html 根据提示下载并破解。 -
windows用户:
下载地址:( charles v4.5.6,大家也可去网上自行下载和破解 ) 链接: https://pan.baidu.com/s/1gedTGrFsB1SnNwTvPLoZPg 提取码: cjfe 注册码 Registered Name: https://zhile.io License Key: 48891cf209c6d32bf4
1.3.2 配置【http】
PC端
打开 【Proxy】>【Proxy Settings】设置代理IP端口:

查看charles所在的PC的IP地址:
打开 【Help】>【Local IP...】设置代理IP端口:

打开 【Proxy】>【SSL Proxy Settings】设置代理IP端口:

手机端(模拟器)

注意:按照上述过程安装后。
- 手机中的app,发送的Http,抓包软件是可以抓到。【http请求】
- 手机中app,发送的https请求,目前是抓不到。
1.4 抓包


import requests
res = requests.post(
url="http://cd.tibetairlines.com.cn:9100/login",
data={
"grant_type": "password",
"isLogin": True,
"password": 'sb123',
"username": 'alex,C',
}
)
res.close()
print(res.text)
2.油联合伙人
2.1 安装app
下载并安装软件。
- 豌豆荚下载地址:https://www.wandoujia.com/apps/8051276
- 百度网盘:课件目录(其他资料包)。
2.2 抓包
2.2.1 charles配置【https】
PC端
打开 【Proxy】>【SSL Proxying Settings】开启HTTPS:


接下来需要在手机上安装证书。
- 安卓7版本以下:非常简单。【模拟器】
- 安卓7版本及以上:证书在安装在系统证书,root权限(将证书放到系统目录)【真机】

手机端(模拟器)


2.2.2 结果

请求方式:POST
请求地址:https://chinayltx.com/app/api/v1/partnerLogin/login
请求体:
phone=18630087660
password=e10adc3949ba59abbe56e057f20f883e
请求头:
X-App: native
X-Noncestr: 123456
X-OS: partnerApp_android
X-Req-Time: 1650980779832
X-Sign: 645b299fc29998e390d60d95a9b1ac5a
X-Token:
X-UserID:
接下来要解决:
- password是怎么加密的?
- X-Sign是怎么加密?
2.3 反编译工具
-
apk文件,本质就是压缩包(代码)。
-
反编译工具,反编译成java代码,分析java代码。例如:jadx、jeb、gda。
反编译工具都依赖jre(java运行环境),直接安装JDK(包含jre)。
2.3.1 jdk
需要在你的电脑上安装Java开发工具包JDK,JDK中包含JRE。
https://www.oracle.com/java/technologies/downloads/
# 推荐:JDK8==JDK1.8(后期工具需要)
https://www.oracle.com/java/technologies/downloads/#java8
安装好之后需要配置下环境变量。


关于mac系统,自带JDK:

/Library/Java/JavaVirtualMachines

2.3.2 jadx
直接解压。
注意:代码、文件尽量不要让他存在中文路径。


2.4 逆向
请求方式:POST
请求地址:https://chinayltx.com/app/api/v1/partnerLogin/login
请求体:
phone=18630087660
password=e10adc3949ba59abbe56e057f20f883e
请求头:
X-App: native
X-Noncestr: 123456
X-OS: partnerApp_android
X-Req-Time: 1650980779832
X-Sign: 645b299fc29998e390d60d95a9b1ac5a
X-Token:
X-UserID:
接下来要解决:
- password是怎么加密的?
- X-Sign是怎么加密?
2.4.1 password算法
根据特点去搜索,可能搜到很多东西。
password "password" password=
phone
/v1/partnerLogin/login







按理说md5加密:
- 明文:123456
- 密文:e10adc3949ba59abbe56e057f20f883e
import hashlib
obj = hashlib.md5()
obj.update("123456".encode('utf-8'))
res = obj.hexdigest()
print(res) # e10adc3949ba59abbe56e057f20f883e
2.4.2 X-Sign算法
X-Sign


import hashlib
token = ""
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
总结
- app逆向怎么回事?
- 抓包 & 分析
- 反编译apk,分析代码,算法找到。
- java代码想要根据xxx想到去xxx地方找。
- 会java & 会安卓 (后面几天课程)
- 寻找代码经验(案例) + 动手能力
- 知识点
- 设备:真机 & 模拟器
- 安装app
- 抓包
- 反编译