frida 学习

一开始是在群里和一些老哥聊android 的hook 框架  我就学习了xpose 而且感觉很好使  但是和他们有了解到了 frida  感觉非常好使 

决定来学习一波

这里写了一个小demo

java 层:

python代码

import frida
import sys
 

 
jscode = """
Java.perform(function () {
    var demo = Java.use('com.example.frida_demo.demo');
    demo.add.implementation = function (a,b) {
        send("Hook Start...");
        send(a)
        send(b)

        var add_ret = this.add(a+1,b+1);

        send("Return:"+add_ret);
        return add_ret

    }
});
"""
def on_message(message, data):
    if message['type']=='send':
        print("[*] {0}".format(message['payload']))
    else:
        print(message)
process = frida.get_remote_device().attach('com.example.frida_demo')

script = process.create_script(jscode)

script.on("message", on_message)
script.load()
sys.stdin.read()

android demo代码

 

别忘记端口转发

adb forward tcp:27043 tcp:27043
adb forward tcp:27042 tcp:27042

可以实验得出 在java层 确实还是挺好使的,

然后就是在so层 

so层拿了iscc的程序做了例子

import frida
import sys
 

 
jscode = """
Java.perform(function () {

    var nativePointer = Module.findExportByName("libnative-lib.so", "Java_com_iscc_crackme_MainActivity_checkSecond");
    send("native: " + nativePointer);
    Interceptor.attach(nativePointer, {
        onEnter: function(args){
            send(args[0]);
            send(args[1]);
            send(args[2]);
            send(args[3]);
            send(args[4]);
        },
        onLeave: function(retval){
            send(retval.toInt32());
        }
    });

});
"""
def on_message(message, data):
    if message['type']=='send':
        print("[*] {0}".format(message['payload']))
    else:
        print(message)
process = frida.get_remote_device().attach('com.iscc.crackme')

script = process.create_script(jscode)

script.on("message", on_message)
script.load()
sys.stdin.read()

如图 输入正确的flag 返回值就是1了

 然后2020春节吾爱破解第三题用frida  挺好使的 

如果静态分析的话 可能有些麻烦。

 

发现都是java反射 看的很繁琐,

但是可以看到最后用到的是明文对比

 

直接hook这个类就能得到flag

import frida
import sys

jscode = """
Java.perform(function(){
    var str_demo =  Java.use('java.lang.String')
    str_demo.equals.implementation = function (arg1) {
        console.log("string is   ==》:" + this.toString());  
        console.log("equals arg1 ==》:" + arg1);        
        var ret = this.equals(v);
        return ret;
    } 
});
"""

process = frida.get_remote_device().attach('com.wuaipojie.crackme01')
script = process.create_script(jscode)
script.load()
sys.stdin.read()

 恰好看到看雪论坛的一个文章, 下方参考链接 给出了一个升级版的apk。

这个题目就是 输入的值 经过 encodePassword 这个函数加密之后和一个字符串对比

可以直接爆破出来这个值,,, 通过sha1这个散列就能知道,,

比较可惜的是我的模拟器运行不了这个apk 

把脚本粘下来,,,

function main(){
    Java.perform(function x(){
        console.log("In Java Perform function")
        var ByteString = Java.use("com.android.okhttp.okio.ByteString");
        var verify = Java.use("org.teamsik.ahe17.qualification.Verifier")
        var stringClass = Java.use("java.lang.String")
 
        var p = stringClass.$new("09042ec2c2c08c4cbece042681caf1d13984f24a")
        var pSign = p.getBytes()
        console.log(ByteString.of(pSign).hex())
 
        for (var i = 999 ; i < 10000 ; i++) {
            console.log("i="+i)
            var v = stringClass.$new(String(i))
            var vSign = verify.encodePassword(v)
            console.log(ByteString.of(vSign).hex())      
            if (ByteString.of(vSign).hex() == ByteString.of(pSign).hex()) {
                console.log("i="+i)
                break;
            }
        }
 
    })
};
setImmediate(main)

 

参考链接

https://bbs.pediy.com/thread-257745.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值