hook特定程序 Android,[原创]ART下Hook系统函数修改内存中指定方法的运行指令逻辑案例分享...

首先MainActivity中的native函数ccccccc首先调用了ddddd()函数

471a4bf1bbb4b87409922c49d8dd878a.png

ddddd()函数首先使用j_dlopen_compat函数,接着就是hook了libc中的execve函数,

registerInlineHook参数为1、原始函数地址,2、hook的新函数地址,3、原始函数的二级指针。

ec41c9d77876ec11be60e4ab8bfcbaba.png

当Android7.0或以上时候进入j_fake_dlsym() fake_dlopen(),这也是为什么我使用基于安卓8.0的FART的原因。

320655da62bf1f84e75df7f1fca26e85.png

整个函数ddddd()函数最终目的是hook execve使得dex2oat失败,从而使得加载的插件类dex不会被优化,变为oat文件之后我们动态修改的dex中的smali指令流就无效,所有hook execve禁用dex2oat是关键步骤。

进入下一个逻辑eeeee(),

eeeeee()函数跟ddddd()函数类似,在/proc/self/maps中找到libart.so的内存进而hook art::ClassLinker::LoadMethod函数(上面一大串字符是其导出函数) ,registerInlineHook参数为1、原始函数地址,2、hook的新函数地址,3、原始函数的二级指针。

0cf446fe1535af643a67707d85ede20c.png

ee44ca8560276db55f62d378f40ff192.png

在Hook了LoadMethod之后,在加载插件类中的testcontent方法时候做了手脚。

下面图片可以看到 ART的LoadMethod的函数的参数,其中dst参数是类方法的指针,通过其就能拿到类函数的CodeItem的Offset。

6aa9210fac798552071abf8c877772b0.png

但在本案例,在myloadmethod中,使用了a2也就是dex_file参数

8956b6817103410f317e141d2e192382.png

通过dex_file 把zipCode的字符串索引改变为0x01e1即 md5("kanxue")的字符串索引,所愿也就造成了dex运行逻辑的修改

90e5001af8c778b5e1b7858b09dfa806.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值