【APP逆向05】Hook小案例
-
前言
当我们通过抓包找到需要解密或者解密的参数后,然后反编译APP,找到对应的加解密方法,但是我们不确定找到的方法是不是就是参数加解密的地方,这个时候我们就需要使用hook来确定了 -
需求:逆向某APP的密码
- 1.通过抓包,找到加解密参数;
- 2.反编译APP,找到加密参数的大概位置
- 3.此时我们找到的密码解密的地方,但是不确定
- 4.hook该函数
- 1.通过抓包,找到加解密参数;
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.1:手机端启动frida_server
## # 手机端启动了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())