案例:5bCP57qi5LmmIHYuOC4yNS4xLjAx
现象
尝试frida
frida -H ip:port -f com.xingin.xhs --no-pause
进程直接被杀死
定位问题
找到检测的so
function hook_dlopen() {
let is_hook = false;
Interceptor.attach(Module.findExportByName(null, "android_dlopen_ext"),
{
onEnter: function (args) {
var pathptr = args[0];
if (pathptr !== undefined && pathptr != null) {
var path = ptr(pathptr).readCString();
console.log(path)
}
}
}
);
}
setImmediate(hook_dlopen)
frida -H ip:port -f com.xingin.xhs --no-pause -l xhs.js
定位到检测的so文件 libmsaoaidsec.so
过检测
经过多次测试 0x17FC8 这个位置就是开启frida检测的地方,nop掉它,检测逻辑都在 0x175F8 函数里面。
完整代码
function nop(addr) {
Memory.patchCode(ptr(addr), 8, code => {
const cw = new Arm64Writer(code, { pc: ptr(addr) });
cw.putNop();
cw.putNop();
cw.putNop();
cw.putNop();
cw.flush();
});
}
function bypass(){
let module = Process.findModuleByName("libmsaoaidsec.so")
nop(module.base.add(0x17FC8))
}
function hook_dlopen(soName = '') {
Interceptor.attach(Module.findExportByName(null, "android_dlopen_ext"),
{
onEnter: function (args) {
var pathptr = args[0];
if (pathptr !== undefined && pathptr != null) {
var path = ptr(pathptr).readCString();
if (path.indexOf(soName) >= 0) {
// 刚要加载libmsaoaidsec.so
locate_init()
}
}
}
}
);
}
function locate_init() {
let secmodule = null
Interceptor.attach(Module.findExportByName(null, "__system_property_get"),
{
onEnter: function (args) {
var name = args[0];
if (name !== undefined && name != null) {
name = ptr(name).readCString();
if (name.indexOf("ro.build.version.sdk") >= 0) {
// 这是.init_proc刚开始执行的地方,是一个比较早的时机点
bypass()
}
}
}
}
);
}
// 找到检测的so,寻找检测开启多线程的位置,然后nop掉
hook_dlopen("libmsaoaidsec.so")
成果展示
尝试frida hook
frida -H IP:port -f com.xingin.xhs --no-pause -l xhs.js
objection 查看所有的Activites
objection -N -h ip -p port -g com.xingin.xhs explore -P ~/.objection/plugins