zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

Crack App | 某合伙人登录参数 apisign 逻辑分析

App逻辑 分析 参数 登录 合伙人 Crack
2023-06-13 09:15:45 时间

目录

  • 包名
  • 抓包分析
  • 加密分析
  • Python 实现请求流程

抓包分析

打开 app,是一个登陆的界面

输入账号密码之后点击登录可以看到下面的请求

提交的参数中有一个参数值是 apisign

这个参数就是我们需要分析得加密参数

加密分析

先查一下壳,没有加固

直接搞到 jadx 里面找找线索

直接检索 apisign 这个关键参数,可以看到下面的结果

追进去,可以看到写着用到了 md5 的加密,参与计算的还有一个 key 以及 data

从 md5.key 追进去可以看到 key 是一个固定的字符串

public static final String MD5_KEY = "d367fxxxxxxxxxxxxxxx3fe05"

可以理解为是一个盐值

所以这里就需要知道后面参数的 data.toString 的值是什么,这里用 frida hook 打印一下

我们直接 hook ToMD5 这个方法

// com.softgarden.baselibrary.utils

function printStack(){
    var threadef = Java.use('java.lang.Thread');
    var threadinstance = threadef.$new();
    var stack = threadinstance.currentThread().getStackTrace();
    for(var i = 0;i<stack.length;i++){
        send("Full call stack:" + stack[i].toString());
    }
}
function main(){
    Java.perform(function(){
        var md5Class = Java.use("com.softgarden.baselibrary.utils.MD5Util");
        md5Class.ToMD5.implementation = function(arg1,arg2){
            console.log("arg1 ===> ",arg1);
            console.log("arg2 ===> ",arg2);
            var result = this.ToMD5(arg1,arg2);
            printStack()
            console.log('result ===> ',result);
            return result;
        }
    })
}
setImmediate(main)

hook 结果如下

可以清楚的看到 arg2 的参数就是提交的账号和密码

通过加密网站的验证,可以知道这里用到的 MD5 并没有魔改就是简单的加了一个盐

直接使用 Python 实现一个 md5 即可

Python 实现请求流程

import requests
from hashlib import md5



headers = {
    'Host': 'www.xxx.com',
    'User-Agent': 'okhttp/3.9.1',
}
decrypt_text = 'dxxxxxxxxxxxxxxxxxxxxx05'+'{"password":"dddddddddd","phone":"15865865585"}'

apisign = md5(decrypt_text.encode('utf8')).hexdigest()
print(apisign)
data = {
  'data': '{"password":"dddddddddd","phone":"15865865585"}',
  'apisign': apisign
}

response = requests.post('http://xxxx/App/Login/login', headers=headers, data=data)
print(response.text)

完事~

End.

以上就是全部的内容了,咱们下次再会~