Frida之hook Native函数

前言

最近发现了一个hook框架,蛮有意思的,上手也很容易。

例题

我拿的是阿里2014CTF第二个apk作为样本。主要是讲一些思路,具体的过程就不写了,网上有很多的。

一、

对于Frida来说Hook一个native函数很简单,其实和hook一个java层的代码是一样的。不多写了。但对于这题来说,仅仅hook代码是不够的,还需要从内存中泄露出key。
使用IDA打开crack.so

Frida之hook Native函数_第1张图片

关键在这里0ff_628C,该函数会将我们输入的密码和该内存中的字符串进行对比,我们可以查看该值为aWojiushidaan但是这不是密码,说明程序在运行时,该内存中的字符串发生了改变,所以需要动态的调试才能获取该字符串。但是该apk做了反调试检测,因此如果要动态调试,就必须绕过反调试才行,这给我们解题增加了难度。
但是,由于该字符串的位置是相对固定的,所以我们可以找到程序运行时该串的的地址,从而泄露出该值,frida可以做到
核心代码如下:

Java.perform(function(){
    var securityCheck = undefined;
    exports = Module.enumerateExportsSync("libcrackme.so");
    for(i=0;iif(exports[i].name=="Java_com_yaotong_crackme_MainActivity_securityCheck"){
            securityCheck=exports[i].address;
            send("securityCheck at "+securityCheck);
            break;
        }
    }
    Interceptor.attach(securityCheck,{
        onEnter: function(args){ 
    send("key is: " + Memory.readUtf8String(Memory.readPointer(securityCheck.sub(0x11a8).add(0x628c))));
    }
    });
});

总结

熬夜肝!

你可能感兴趣的:(android)