Frida下so注入(动态加载)

WinanDH
• 阅读 779

WinanDH

  • 目的:解决frida new主动调用so函数,调用次数过多出现程序崩溃问题。解决函数外部调用耗时过长问题

  • 环境frida version == 12.8.0 、某汽车故障诊断设备


frida hook 部分测试代码

function FUNC_0006(){
    var libUSAFORD_FILEPTR = Module.findExportByName("libUSAFORD_FILE.so", "LAUNCH_FORD_READFILE_FUNC_0026")
    var MYlibUSAFORD_FILEPTR = new NativeFunction(libUSAFORD_FILEPTR, 'int', ['int','int','pointer']);
    var out=Memory.alloc(0x600)
    var zero="000"
    for(var i=0xc400;i<0xc500;i++){
        var dtccode=""
        var index=""

        if(i>0x7fff)
            i-=0x10000    

        MYlibUSAFORD_FILEPTR(i*0x10000,0,out)
        var data=new Uint8Array(ArrayBuffer.wrap(out, 8))    

        if(i>=0x0&&i<0x10)
            console.log("dtccode:000"+(i.toString(16)).slice(-6)+"0000")
        if(i>=0x10&&i<0x100)
            console.log("dtccode:00"+(i.toString(16)).slice(-6)+"0000")
        if(i>=0x100&&i<0x1000)
            console.log("dtccode:0"+(i.toString(16)).slice(-6)+"0000")    
        if(i>=0x1000&&i<0x10000)
            console.log("dtccode:"+(i.toString(16)).slice(-6)+"0000")
        for(var m=7;m>3;m--){
            index+=("00"+data[m].toString(16)).slice(-2)
        }
        console.log("index:"+index)
    }    
}

下载 android NDK

ndk 目录下创建jni及libs文件夹 (下面cpp及mk文件存放在jni中,生成的so存在libs目录)

Frida下so注入(动态加载)

将frida hook 函数编写成cpp(功能函数),测试函数为遍历某中文文件地址索引

Frida下so注入(动态加载)

编写mk(配置文件)

Frida下so注入(动态加载)

cmd启动 ndk-build,编译生成新的so

Frida下so注入(动态加载)

将so push至android temp目录

Frida下so注入(动态加载)

调用cpp中的输出函数,保存至999.txt

Frida下so注入(动态加载)

启动 frida hook,Module.load 加载编译好的so ,并测试

Frida下so注入(动态加载)

点赞
收藏
评论区
推荐文章
某汽车社区App 签名和加解密分析 (二) : Frida Dump so
一、目标App安全的主战场在Native层,分析Native层的so,最趁手的兵器就是Frida和Unidbg了。今天我们的目标是某汽车社区Appv8.0.1so的分析。二、步骤特征字符串定位我们在上一篇教程已经定位了,数据加密和解密函数再java层的位置。按照常理来说,这个java类文件中,应该有个System.loadLibrary("
Stella981 Stella981
3年前
Android so注入(inject)和Hook技术学习(一)
  以前对Androidso的注入只是通过现有的框架,并没有去研究so注入原理,趁现在有时间正好拿出来研究一下。  首先来看注入流程。Androidso的注入流程如下:_attach到远程进程保存寄存器环境获取目标程序的mmap,dlopen,dlsym,dlclose地址远程调用mmap函数申请内存空间用来保存参
Stella981 Stella981
3年前
JNI线程、Linux常用命令、权限、防火墙配置
JNI\_OnLoad:调用System.loadLibrary()函数时,内部就会去查找so中的JNI\_OnLoad函数,如果存在此函数则调用。JNI\_OnLoad会:告诉VM此native组件使用的JNI版本。​对应了Java版本,android中只支持JNI\_VERSION\
Stella981 Stella981
3年前
Feign请求响应结果被截取com.fasterxml.jackson.core.io.JsonEOFException
在生产环境使用feign调用外部接口时,偶尔会出现下面错误2020101511:00:18,535ERRORcom.shein.abc.rmp.controller.RecExplainConfigControllerrec_explain_query.failffeign.codec.DecodeExc
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Stella981 Stella981
3年前
Android so注入(inject)和Hook技术学习(二)——Got表hook之导入表hook
  全局符号表(GOT表)hook实际是通过解析SO文件,将待hook函数在got表的地址替换为自己函数的入口地址,这样目标进程每次调用待hook函数时,实际上是执行了我们自己的函数。  GOT表其实包含了导入表和导出表,导出表指将当前动态库的一些函数符号保留,供外部调用,导入表中的函数实际是在该动态库中调用外部的导出函数。  这里有几个关键点要
Stella981 Stella981
3年前
JS 中的this指向问题和call、apply、bind的区别
this的指向问题一般情况下this对象指向调用函数的对象,全局环境中执行函数this对象指向window。functiona(){console.log(this);//输出函数a中的this对象}functionb(){};varc{name:"call"}
Stella981 Stella981
3年前
GOT段在linux系统中实现代码动态加载的作用和其他段的说明
上一节我们看到,当程序想调用系统函数时,在编译阶段无法确认被调用函数所在的虚拟地址。因此必须有机制让程序在运行过程中,在调用系统API的时候有办法去确定所调用的系统函数对应的入口地址,这就是代码运行时对应动态加载的过程。动态加载,也就是在调用系统函数时再去确认所调用的函数地址的技术需要使用两个段,一个是.plt段,一个是.got.plt段。后者其实是.g
Wesley13 Wesley13
3年前
Java并发编程基础
什么情况下应该使用多线程:线程出现的目的是什么?解决进程中多任务的实时性问题?其实简单来说,也就是解决“阻塞”的问题,阻塞的意思就是程序运行到某个函数或过程后等待某些事件发生而暂时停止CPU占用的情况,也就是说会使得CPU闲置。还有一些场景就是比如对于一个函数中的运算逻辑的性能问题,我们可以通过多线程的技术,使得一个函数中的多
Wesley13 Wesley13
3年前
VC++知识点整理
1.内联函数定义:定义在类体内的成员函数,即函数的函数体放在类体内特点:在调用处用内联函数体的代码来替换,用于解决程序的运行效率问题。一定要在调用之前定义,并且内联函数无法递归调用。2.构造函数与析构函数构造函数:用于为对象分配内存空间,对类的成员变量进行初始化,并执行其他内部管理操作。可以接受参
WinanDH
WinanDH
Lv1
天长地久有时尽,此恨绵绵无绝期。
文章
1
粉丝
1
获赞
1
热门文章

暂无数据