Frida 0x8


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

从这我们可以看出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("找不到该函数"); } }) }
|

