https://pan.quark.cn/s/49854369545f
function aiyou() {
var module_libart=Process.findModuleByName("libart.so");
var symbols=module_libart.enumerateSymbols();
//首先获取libart.so模块并枚举其中的所有符号
var addr_RegisterNatives = null;
//声明变量用于存储找到的JNI函数地址,初始化为null
for (var i = 0; i < symbols.length; i++) {
var name = symbols[i].name;
if (name.indexOf("art") >= 0) {
//检查符号名是否包含"art"(ART虚拟机相关符号)
if ((name.indexOf("CheckJNI") == -1) && (name.indexOf("JNI") >= 0)) {
//如果符号名包含"RegisterNatives",打印名称并保存地址
if (name.indexOf("RegisterNatives") >= 0) {
console.log(name);
addr_RegisterNatives = symbols[i].address;
}
}
}
}
if (addr_RegisterNatives) {
Interceptor.attach(addr_RegisterNatives, {
onEnter: function (args) {
console.log("addr_RegisterNatives:", hexdump(args[2]));
//打印第三个参数
console.log("addr_RegisterNatives name:", ptr(args[2]).readPointer().readCString())
//打印第一个native方法的名称
console.log("addr_RegisterNatives sig:", ptr(args[2]).add(Process.pointerSize).readPointer().readCString());
//打印第一个native方法的签名
}, onLeave: function (retval) {
}
});
}
}
aiyou()
function inline_hook() {
var base_hello_jni = Module.findBaseAddress("libhello-jni.so");
console.log("base_hello_jni:", base_hello_jni);
if (base_hello_jni) {
console.log(base_hello_jni);
//inline hook
var addr_07320 = base_hello_jni.add(0x07320);
Interceptor.attach(addr_07320, {
onEnter: function (args) {
console.log("addr_07320 x13:", this.context.x13);
}, onLeave: function (retval) {
}
});
}
}
function hook_dlopen() {
var dlopen = Module.findExportByName(null, "dlopen");
Interceptor.attach(dlopen, {
onEnter: function (args) {
this.call_hook = false;
var so_name = ptr(args[0]).readCString();
if (so_name.indexOf("libhello-jni.so") >= 0) {
console.log("dlopen:", ptr(args[0]).readCString());
this.call_hook = true;
}
}, onLeave: function (retval) {
if (this.call_hook) {
inline_hook();
}
}
});
// 高版本Android系统使用android_dlopen_ext
var android_dlopen_ext = Module.findExportByName(null, "android_dlopen_ext");
Interceptor.attach(android_dlopen_ext, {
onEnter: function (args) {
this.call_hook = false;
var so_name = ptr(args[0]).readCString();
if (so_name.indexOf("libhello-jni.so") >= 0) {
console.log("android_dlopen_ext:", ptr(args[0]).readCString());
this.call_hook = true;
}
}, onLeave: function (retval) {
if (this.call_hook) {
inline_hook();
}
}
});
}
hook_dlopen()
· 今 日 推 荐 ·
听歌有惊喜,包邮送书哦!!!欢迎私聊,vx:ivu123ivu
将下面地址复制到浏览器即可欣赏
http://163cn.tv/DdLCYjl
(来自@网易云音乐)
本文内容来自网络,如有侵权请联系删除
原文始发于微信公众号(逆向有你):安卓逆向2025 -- Frida学习之ollvm分析(三)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论