首页 > 其他分享 >Frida-Labs

Frida-Labs

时间:2024-06-04 19:12:18浏览次数:13  
标签:function MainActivity Java get writer Labs flag Frida

0x1

截图

截图

获取了100以内的随机数

截图

只需要确保输入的数为随机数的2倍+4即可

截图

hook该方法,返回值随意,只要自己输入符合对该值的要求即可

Java.perform(function () {
    let MainActivity = Java.use("com.ad2001.frida0x1.MainActivity");
    MainActivity["get_random"].implementation = function () {
        this["get_random"]();
        console.log('get_random() return 0');
        return 0;
    };
})

返回0,输入4即可

截图

0x2

截图

很显然,需要主动调用get_flag方法,将显示的textview修改掉

截图

Java.perform(function () {
    Java.choose('com.ad2001.frida0x2.MainActivity',{
        onMatch: function(instance){
            instance.get_flag(4919)
        },
        onComplete: function(){

        }
    })
})

采用attach方式进行hook,避免找到实例时,值修改后又被该回去

或者spawn的话用下面的脚本(因为get_flag是静态方法)

Java.perform(function () {
    let MainActivity = Java.use("com.ad2001.frida0x2.MainActivity");
    MainActivity["onCreate"].implementation = function (savedInstanceState) {
        this["onCreate"](savedInstanceState);
        MainActivity.get_flag(4919)
    }

截图

0x3

截图

需要修改Checker的code属性的值为512

截图

截图

Java.perform(function () {
    let MainActivity = Java.use("com.ad2001.frida0x3.MainActivity$1");
    MainActivity["onClick"].implementation = function (view) {
        let Checker = Java.use("com.ad2001.frida0x3.Checker")
        Checker.code.value = 512
        this["onClick"](view);
    };
})

在onclick下面hookCheck类,可以最大程度上避免其他类或方法对其产生干扰

截图


0x4

截图

这里应该是考察主动调用,新建一个Check类的实例,调用get_flag,并把值送给textview

截图

截图

Java.perform(function () {
    let MainActivity = Java.use("com.ad2001.frida0x4.MainActivity");
    MainActivity["onCreate"].implementation = function (savedInstanceState) {
        this["onCreate"](savedInstanceState);
        let Check = Java.use("com.ad2001.frida0x4.Check").$new()
        let c = Check.get_flag(1337)
        console.log(c)
    };
})

直接打印结果即可(我想试着修改textview,结果出现了不知名错误=-=)

截图

0x5

截图

与0x2不同的是,这里的方法不再是静态方法

截图

Java.perform(function () {
    Java.choose('com.ad2001.frida0x5.MainActivity',{
        onMatch: function(instance){
            instance.flag(1337)
        },
        onComplete: function(){

        }
    })
})

还是attach

截图

0x6

截图

在0x5的基础上,构造Checker即可

截图

截图

Java.perform(function () {
    Java.choose('com.ad2001.frida0x6.MainActivity',{
        onMatch: function(instance){
            let Checker = Java.use('com.ad2001.frida0x6.Checker').$new()
            Checker.num1.value = 1234
            Checker.num2.value = 4321
            instance.get_flag(Checker)
        },
        onComplete: function(){

        }
    })
})

依旧是attach

截图

0x7

截图

hookChecker的构造方法即可

截图

Java.perform(function () {
    let Checker = Java.use("com.ad2001.frida0x7.Checker");
    Checker["$init"].implementation = function (a, b) {
        console.log('hook $init()')
        this["$init"](520,520);
    };
})

截图

0x8

截图

这里就要去看so了,直接hook返回值肯定拿不到正确的flag

截图

每位的ascii码减一就是flag了,但是这里用到了strcmp进行比较

截图

直接hook strcmp

截图

同时看到有打印日志,因此也可以hook日志

截图

0x9

截图

修改native的返回值即可

截图

Java.perform(function () {
    let MainActivity = Java.use("com.ad2001.a0x9.MainActivity");
    MainActivity["check_flag"].implementation = function () {
        this["check_flag"]();
        console.log(`hook check_flag() return 1337`);
        return 1337;
    };
})

截图

0xA

截图

这里就是正常的调用

截图

但是在so里,存在一个导出函数get_flag

截图

可以一眼看出如何解密,但是还是采用hook的方式来做

截图

主动调用一下get_flag,同时还要注意其真正的导出名,不然找不到地址,解密后通过日志输出了

Java.perform(function () {
    var addr = Module.findExportByName("libfrida0xa.so", "_Z8get_flagii");
    console.log(addr)
    let get_flag_pointer = new NativePointer(addr)
    let get_flag = new NativeFunction(get_flag_pointer,'int',['int','int'])
    get_flag(1,2)
})

截图

0xB

截图

截图

在so中,由于永假的判断,导致代码不执行,所以可以把jnz给nop掉,一共6个字节

截图

Java.perform(function () {
    var funAddr = Module.findExportByName("libfrida0xb.so", "Java_com_ad2001_frida0xb_MainActivity_getFlag");
    var opAddr = funAddr.add(0x1E)
    console.log(opAddr)
    var writer = new X86Writer(opAddr)
    Memory.protect(opAddr,0x1000,'rwx')
    try{
        writer.putNop()
        writer.putNop()
        writer.putNop()
        writer.putNop()
        writer.putNop()
        writer.putNop()
        writer.flush()
    }finally{
        writer.dispose()
    }
})

或者是将jnz改成jz,我这里64位的模拟器,jnz的字节码是0f85d2000000,85改成84就是jz

Java.perform(function () {
    var funAddr = Module.findExportByName("libfrida0xb.so", "Java_com_ad2001_frida0xb_MainActivity_getFlag");
    var opAddr = funAddr.add(0x1E)
    console.log(opAddr)
    var writer = new X86Writer(opAddr)
    Memory.protect(opAddr,0x1000,'rwx')
    try{
        writer.putU8(0x0f)
        writer.putU8(0x84)
        writer.putU8(0xd2)
        writer.putU8(0x0)
        writer.putU8(0x0)
        writer.putU8(0x0)
        writer.flush()
    }finally{
        writer.dispose()
    }
})

截图

这里附上在ida中将jnz改为jz后的伪代码

截图

标签:function,MainActivity,Java,get,writer,Labs,flag,Frida
From: https://www.cnblogs.com/WXjzc/p/18231528

相关文章

  • 从零开始学习Frida Hook
    参考文章:https://www.jianshu.com/p/c349471bdef71、概述:Frida是个轻量级别的hook框架(没咋看懂)是PythonAPI,但JavaScript调试逻辑Frida的核心是用C编写的,并将Google的V8引擎注入到目标进程中,在这些进程中,JS可以完全访问内存,挂钩函数甚至调用进程内的本机函数来执行。使用Pytho......
  • 记录自己在upload-labs的解题过程
    第十二关(get%00截断)打开第十二关,查看源代码发现进行了白名单过滤,只允许上传jpg、png、gif的图片格式,move_uploaded_file本函数检查并确保由 file 指定的文件是合法的上传文件(即通过PHP的HTTPPOST上传机制所上传的)。如果文件合法,则将其移动为由 newloc 指定的文件......
  • Frida - Java 应用程序在替换方法后冻结
    我能否(从java反编译器中)知道类和方法的名称以替换其实现或让JVM调用我的方法而不是目标方法?(在运行时)为此,我尝试使用frida,但替换后应用程序会冻结。Env$java--versionjava17.0.112024-04-16LTSJava(TM)SE运行时环境(构建17.0.11+7-LTS-207)JavaHotSpot(TM)64位......
  • INFINI Labs 产品更新 | Easysearch 1.8.0 发布数据写入限流功能
    INFINILabs产品又更新啦~,包括Easysearchv1.8.0、Gateway、Console、Agent、Loadgenv1.25.0。本次各产品更新了很多亮点功能,如Easysearch新增数据写入限流功能,可实现节点、分片级限流;Gateway修复数据迁移过程中因消费不及时解压缩导致部分数据记录损坏而丢失记录问题,进一......
  • INFINI Labs 产品更新 | Console 1.24.0 操作日志审计功能发布
    INFINILabs产品又更新啦~,包括Console,Gateway1.24.0。本次各产品更新了很多亮点功能,如Console增加操作日志审计功能,优化数据探索字段统计,修复Gateway增加认证后添加实例失败等问题。以下是本次更新的详细说明。INFINIConsolev1.24.0INFINIConsole是一款非常轻量级的......
  • UploadLabs靶场
    目录Pass-01Pass-02Pass-03Pass-04Pass-05Pass-06Pass-07Pass-08Pass-09Pass-10Pass-11Pass-12Pass-13Pass-14Pass-15Pass-16Pass-17Pass-18Pass-19Pass-20都是鄙人做题思路记下来的一些心得笔记罢了。Pass-01先传一个图片过去,成功上传。尝试传muma过去,提示失败,但是这个提......
  • upload-labs挑战笔记
    Pass-01直接上传php木马,发现前端报错关掉JS,再次进行上传右键获取地址获取shellPass-02在服务器端对数据包的MIME进行检查,只让Content-Type为image/jpeg|image/png|image/gif的文件通过。由此可知,它只对Content-Type做了判断,并没有对文件进行判断,因此我们可以上传.ph......
  • 文件上传upload-labs
    文件上传upload-labs相关函数move_upload_file(file,newloc)、file:要移动的文件newloc:规定文件的位置将上传的文件移动到新位置通过HTTPPOST上传文件如果目标文件已存在,则会被覆盖unlike(file)删除文件in_array(search,array)search:规定在数组中搜索的值array......
  • 多线程中frida定位关键线程的方法
    pthread_create会先得到一个pthread_internal_t结构体最后会调用__pthread_internal_add并将返回值赋给pthread_create的第一个参数thread_out__pthread_internal_add会将传入的pthread_internal_t加入到g_thread_list全局线程列表中,然后将传入的pthread_internal_t返回,也......
  • 一篇文章带你领悟Frida的精髓(基于安卓8.1)
    https://www.freebuf.com/articles/system/190565.html前言前阵子受《Xposed模块编写的那些事》这篇文章的帮助很大,感觉有必要写一篇文章来回馈freebuf社区。现在最火爆的又是frida,该框架从Java层hook到Native层hook无所不能,虽然持久化还是要依靠Xposed和hookzz等开发框架,但是fr......