【APP逆向05】Hook小案例

  • 前言
    当我们通过抓包找到需要解密或者解密的参数后,然后反编译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: 设置端口转发
## # 手机端启动了frida-server服务--->>电脑端要跟它通信--->>通过某个端口做通信--->>以后发送到电脑端 27042端口的数据--->>转发到手机的27042端口

## 方式一:使用命令(在电脑端的cmd窗口中)
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043


## 方式二:使用python代码,右键运行即可
import subprocess # python中执行系统命令的一个模块
subprocess.getoutput("adb forward tcp:27042 tcp:27042")
subprocess.getoutput("adb forward tcp:27043 tcp:27043")

# 以后手机端每次启动了frida-server,都要执行端口转发,否则会报错
- 5.3 :执行hook代码,手机端点击APP登录按钮。此时我们查看返回值与抓包的密码是否一致



- 5.4 :此时我们可以确定,密码的加密逻辑就是我们找到的encodeMD5方法

  • 6.使用python代码复现
import hashlib
m = hashlib.md5()
m.update('helloworld'.encode("utf8"))
print(m.hexdigest())
posted @ 2024-01-14 22:51  Tony_xiao  阅读(159)  评论(1编辑  收藏  举报