【APP逆向05】Hook小案例

Tony_xiao / 2024-01-15 / 原文

  • 前言
    当我们通过抓包找到需要解密或者解密的参数后,然后反编译APP,找到对应的加解密方法,但是我们不确定找到的方法是不是就是参数加解密的地方,这个时候我们就需要使用hook来确定了

  • 需求:逆向某APP的密码

    • 1.通过抓包,找到加解密参数;
    • 2.反编译APP,找到加密参数的大概位置


    • 3.此时我们找到的密码解密的地方,但是不确定
    • 4.hook该函数
import frida
import sys

### 以后这个代码不需要动### ### ###
rdev = frida.get_remote_device()
session = rdev.attach("app_name")  # 写上要hook的app的名字
### 以后这个代码不需要动### ###


# 要改动的地方,js语法
scr = """
Java.perform(function () {
    //找到类 反编译的首行+类名:com.autohome.ahkit.utils下的
    var SecurityUtil = Java.use("com.autohome.ahkit.utils.SecurityUtil");

    //替换类中的方法,方法有几个参数,就要传几个参数
    SecurityUtil.encodeMD5.implementation = function(str){
        console.log("参数:",str); // 传入的参数打印了,我们猜是明文密码
        var res = this.encodeMD5(str); //调用原来的函数
        console.log("返回值:",res);  // 打印出正常执行这个方法,返回的结果
        return str; // 通过hook技术--》把传入的明文,直接返回--》抓包抓到的密码就是明文
    }
});
"""

####下面代码完全不需要动
script = session.create_script(scr)
def on_message(message, data):
    print(message, data)

script.on("message", on_message)
script.load()
sys.stdin.read()
  • 5.hook步骤
    • 5.1:手机端启动frida_server
    • 5.2: 设置端口转发
    • 5.3 :执行hook代码,手机端点击APP登录按钮。此时我们查看返回值与抓包的密码是否一致

    • 5.4 :此时我们可以确定,密码的加密逻辑就是我们找到的encodeMD5方法
  • 6.使用python代码复现
import hashlib
m = hashlib.md5()
m.update('helloworld'.encode("utf8"))
print(m.hexdigest())