Frida 0x8

微信截图_20250710161113

微信截图_20250710161119

可以看到这里的主要逻辑就是cmpstr这个方法,而这个方法又是在native层实现的,所以我们要进到so文件里面去看

微信截图_20250710161258

从这我们可以看出s1就是我们输入的ip

s2就是flag

所以,我们可以通过hook strcmp这个函数

来获取s2的值

但是需要注意的是

strcmp这个函数在很多地方都会被调用

所以直接打印s2的值会有很多值

但是也能从输出的数据找到flag

但也费时间

这里优化了一下

当s1的值满足特定条件的时候我们再输出s2的值

在代码中我是让s1=123

代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function hookTest8(){
Java.perform(function(){
//根据导出函数名打印地址
var helloAddr = Module.findExportByName("libfrida0x8.so","strcmp");
console.log(helloAddr);
if(helloAddr != null){
Interceptor.attach(helloAddr,{
//onEnter里可以打印和修改参数
onEnter: function(args){ //args传入参数
// 方法一
var jString = Memory.readUtf8String(args[1]);
var jString1 = Memory.readUtf8String(args[0]);
if(jString1.includes("123")){
console.log("flag:", jString);
}
// 方法二
// var JNIEnv = Java.vm.getEnv();
// var originalStrPtr = JNIEnv.getStringUtfChars(args[1], null).readCString();
// console.log("参数:", originalStrPtr);
},
//onLeave里可以打印和修改返回值
onLeave: function(retval){ //retval返回值
// var returnedJString = Java.cast(retval, Java.use('java.lang.String'));
// console.log("返回值:", returnedJString);
}
})
}
else {
console.log("找不到该函数");
}
})
}

微信截图_20250710162046

微信截图_20250710162025