2023安卓逆向 -- 某合伙apk登录加密分析

简介: 2023安卓逆向 -- 某合伙apk登录加密分析

接上节课内容

安卓逆向 -- 抓包环境设置(Charles+Postern)

一、分析登录的数据包,加密的数值是登录的密码,看着想md5加密,请求头中,x-sign也是加密的,看着也像md5。

POST /app/api/v1/partnerLogin/login HTTP/1.1
X-App: native
X-Noncestr: 123456
X-OS: partnerApp_android
X-Req-Time: 1685179539206
X-Sign: d5ff872d834ad9988d95ea8031b48107
X-Token: 
X-UserID: 
Content-Type: application/x-www-form-urlencoded
Content-Length: 59
Host: chinayltx.com
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.10.0
phone=15836353612&password=a2a07143c28b527f39cc4b1a9b41f639

二、反编译该apk

1、打开jadx,将apk拖进去分析,后台回复:课件666,获取

2、点击搜索,搜索数据包的部分url,这里搜索“partnerLogin/login”

3、双击进入第三个,这段代码的意思就是,通过submitLogin函数发起了一个POST请求

4、右击该函数,查找谁调用了submitLogin,双击进入该调用函数

5、 loginWithToken函数调用了submitLogin函数,我们继续查找谁调用了loginWithToken

6、看着下面出现了name和pwd,进入下面的调用

public class LoginUseCase extends UseCase<HttpResult<LoginInfo>> {
    private Repository mRepository;
    private String name;
    private String pwd;
    public String getName() {
        return this.name;
    }
    public void setName(String str) {
        this.name = str;
    }
    public String getPwd() {
        return this.pwd;
    }
    public void setPwd(String str) {
        this.pwd = str;
    }
    @Inject
    public LoginUseCase(Repository repository) {
        this.mRepository = repository;
    }
    @Override // com.yltx.oil.partner.mvp.domain.UseCase
    protected Observable<HttpResult<LoginInfo>> buildObservable() {
        return this.mRepository.loginWithToken(this.name, this.pwd);
    }
}

7、分析上面的代码,可以看到有个setPwd函数,这个就是加密函数,继续查看谁调用了该函数,进入一个md5的加密代码

8、继续搜索X-sign,双击进入该行代码

9、这行代码的意思就是将"X-Sign"赋值给PARAM_SIGN,并把他设置成了静态变量

private static final String PARAM_SIGN = "X-Sign";

10、局部搜索PARAM_SIGN,发现this.sign赋值给了PARAM_SIGN,而this.sign=sign(sb.toString())

11、按着ctrl键,点击上面a.b,进入到下面代码,代表一个&符号,requestBody请求体,初步判断sb.toString就是

phone=15836353612&password=a2a07143c28b527f39cc4b1a9b41f639

12、继续搜索sign函数,会看到下面一段声明代码

private String sign(String str) {
        return Md5.md5(this.token + this.reqTime + 
        this.noncestr.substring(2) + str).toLowerCase();
    }

12 、通过数据包发现token是空,reqTime是时间戳,noncestr是132456,最终就是将这些值进行md5处理。

13、验证代码

import hashlib
# md5加密=hashlib.md5()
# 密码="aiyou123"
# md5加密.update(密码.encode("utf8"))
# pwd=md5加密.hexdigest()
# print(pwd)
token=""
reqTime="1685346660611"
nnotallow="123456"[2:]
str="phnotallow=15836353612&password=a2a07143c28b527f39cc4b1a9b41f639"
md5加密=hashlib.md5()
要加密的字符串=f'{token}{reqTime}{non}{str}'
md5加密.update(要加密的字符串.encode("utf8"))
pwd=md5加密.hexdigest()
print(pwd)
运行结果:
9970affbcb8ee0d04eeb25d9020b3704

目录
相关文章
|
1月前
|
搜索推荐 Android开发 iOS开发
安卓与iOS系统的用户界面设计对比分析
本文通过对安卓和iOS两大操作系统的用户界面设计进行对比分析,探讨它们在设计理念、交互方式、视觉风格等方面的差异及各自特点,旨在帮助读者更好地理解和评估不同系统的用户体验。
22 1
|
2月前
|
Android开发 数据安全/隐私保护 iOS开发
安卓与iOS系统的发展趋势与比较分析
【2月更文挑战第6天】 在移动互联网时代,安卓和iOS系统作为两大主流移动操作系统,各自呈现出不同的发展趋势。本文将从技术角度出发,对安卓和iOS系统的发展方向、特点及未来趋势进行比较分析,以期为读者提供更深入的了解和思考。
38 4
|
2月前
|
Android开发 开发者
Android Split APK介绍
【2月更文挑战第5天】
|
3月前
|
监控 Android开发 C语言
深度解读Android崩溃日志案例分析2:tombstone日志
深度解读Android崩溃日志案例分析2:tombstone日志
86 0
|
4天前
|
存储 Java Android开发
Android系统 设置第三方应用为默认Launcher实现和原理分析
Android系统 设置第三方应用为默认Launcher实现和原理分析
18 0
|
4天前
|
存储 Java Linux
Android系统获取event事件回调等几种实现和原理分析
Android系统获取event事件回调等几种实现和原理分析
26 0
|
2月前
|
存储 前端开发 算法
加密算法在网络通信中的应用及优势分析
本文将探讨加密算法在网络通信中的重要性,以及不同加密算法的应用和优势。通过对前端、后端、Java、Python、C、PHP、Go等多种技术的分析,我们将了解在日益增长的网络威胁下,加密算法对于确保数据安全和隐私保护的必要性。
|
2月前
|
算法 数据库 Android开发
安卓逆向 -- APK文件结构
安卓逆向 -- APK文件结构
22 0
|
2月前
|
网络协议 算法 Android开发
安卓逆向 -- 实战某峰窝APP(动态分析)
安卓逆向 -- 实战某峰窝APP(动态分析)
32 4
|
2月前
|
算法 Java Android开发
安卓逆向 -- 调用其他APK的SO文件
安卓逆向 -- 调用其他APK的SO文件
17 0