介绍:
Friad
是一款跨平台轻量级Hook
和调试框架,可以轻松实现Windows
、Linux
、Android
、IOS
、Mac
平台的动态插桩需求,单从Android
层面理解,它可以实现Java
层和Native
层Hook
操作。
指令:
frida-ps -U
查看通过usb连接的android手机上的进程。
准备
打开安卓模拟器
打开frida-server监听
adb devices #查看设备
adb connect ****** #
adb shell
cd /data/local/tmp
./frida-server
frida-hook
hook 函数
import frida #导入frida模块
import sys #导入sys模块
jscode = """
const hitdata = ``; // beatmaps/chromevox/hitpoints
const timeList = hitdata.split("\n").map((v, idx, arr) => {
return parseInt(v.split(",")[1], 10);
});
function awaitHook(){
var ptr = Module.findBaseAddress("libd3mug.so");
console.log(ptr);
const update = new NativeFunction(ptr.add(0x0000780), "pointer", ["char"]);
const instance = ptr.add(0x02D18);
// running
instance.writePointer(new NativePointer(0)); // init.
for (const t of timeList) {
update(t);
}
console.log(instance.readPointer().readCString());
}
// D3CTF{Gb78e-7b04-4364-82d2-7f44}
setImmediate(function(){
setTimeout(awaitHook,10);
})
"""
def on_message(message,data): #js中执行send函数后要回调的函数
print(message)
process = frida.get_remote_device().attach('com.hello.hook') #得到设备并劫持进程com.example.testfrida(该开始用get_usb_device函数用来获取设备,但是一直报错找不到设备,改用get_remote_device函数即可解决这个问题)
script = process.create_script(jscode) #创建js脚本
script.on('message',on_message) #加载回调函数,也就是js中执行send函数规定要执行的python函数
script.load() #加载脚本
sys.stdin.read()
报错:frida.ServerNotRunningError: unable to connect to remote frida-server
解决:端口转发
adb forward tcp:27042 tcp:27042 adb forward tcp:27043 tcp:27043
使用frida—dexdump安卓脱壳
在安卓模拟器上运行要脱壳的软件。
在此文件夹目录下运行cmd程序.
执行 python main.py
会在当前的文档下面生成一个新的文件夹
这就是脱壳后的结果。