day01 逆向入门
day01 逆向入门

day01 逆向入门

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

image-20220426205037547

1.2 安装app

image-20220426205140255

image-20220426205243404

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端口:

image-20220125204046033

查看charles所在的PC的IP地址:

打开 【Help】>【Local IP...】设置代理IP端口:

image-20220125204152266

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

image-20220426210328357

手机端(模拟器)

image-20220426210650842

注意:按照上述过程安装后。

  • 手机中的app,发送的Http,抓包软件是可以抓到。【http请求】
  • 手机中app,发送的https请求,目前是抓不到。

1.4 抓包

image-20220426211107979

image-20220426211348172

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

下载并安装软件。

2.2 抓包

2.2.1 charles配置【https】

PC端

打开 【Proxy】>【SSL Proxying Settings】开启HTTPS:

image-20220125162645707

image-20220125175825959

接下来需要在手机上安装证书。

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

image-20220426214117175

手机端(模拟器)

image-20220426214314614

image-20220426214338924

2.2.2 结果

image-20220426214648191

请求方式: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

安装好之后需要配置下环境变量。

image-20210929163956511

image-20210929163410661

关于mac系统,自带JDK:

image-20210929152514354

/Library/Java/JavaVirtualMachines 

image-20210929152444076

2.3.2 jadx

直接解压。

注意:代码、文件尽量不要让他存在中文路径。

image-20210928184518710

image-20220125183725576

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

image-20220426221356319

image-20220426221453870

image-20220426221556306

image-20220426221651437

image-20220426221839394

image-20220426221941928

image-20220426222046226

按理说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

image-20220426222506713

image-20220426222928396

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
    • 抓包
    • 反编译

发表回复

您的电子邮箱地址不会被公开。