首页
社区
课程
招聘
[求助]x86模拟器注入so进行hook的问题
发表于: 2022-5-9 19:01 16458

[求助]x86模拟器注入so进行hook的问题

2022-5-9 19:01
16458

环境: 模拟器是x86架构雷电模拟器, android系统是5.1, app只支持v7a架构, app在模拟器上正常运行
需求: 现在自己写了一个so, 想要注入app进行hook, 但是一直没办法注入

 

ptrace注入方式

  1. x86的注入器, x86的so, 注入似乎是成功的, maps文件能看到自己的so的路径, 但是因为app是v7a, 所以可能不行
  2. x86的注入器, v7a的so, 注入在调用dlopen时, 提示has unexpected e_machine: 40, 百度说是elf文件
  3. v7a的注入器, v7a的so, 注入的时候, 调用函数没有报错, 但是在执行后调用ptrace(PTRACE_SETREGS, nPid, nullptr, pRegs)时总是说Device or resource busy

请问有什么办法可以在模拟器上注入自己的so, 或者有什么框架可以做到这个操作, 听朋友说有些外挂通过Xposed可以做到这些, 是否要去学习Xposed框架

 

代码流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
//ptrace(PTRACE_ATTACH)附加到app
//执行mmap获取返回值, 写入dlopen需要的参数
//执行dlopen函数加载自己的so
//调用函数的方法如下
int ptraceCall(int nPid, uint32_t unAddr, long arrParams[], int nParamNum, pt_regs *pRegs)
{
#if defined(__i386__)
    //写入参数到堆栈
    pRegs->esp -= (long) (nParamNum * sizeof(long));
    ptraceWriteData(nPid, (uint8_t *) pRegs->esp, (uint8_t *) arrParams,
                    (int) (nParamNum * sizeof(long)));
 
    //不知道为什么写入这个
    long unTmp = 0x00;
    pRegs->esp -= sizeof(long);
    ptraceWriteData(nPid, (uint8_t *) pRegs->esp, (uint8_t *) &unTmp, sizeof(unTmp));
 
    pRegs->eip = (long) unAddr;
#elif defined(__arm__)
    //写入参数
    for (int i = 0; i < nParamNum; ++i)
    {
        //写入参数到堆栈
        if (i >= 4)
        {
            pRegs->ARM_sp -= (long)((nParamNum - i) * sizeof(long));
            break;
        }
        //写入参数到寄存器
        pRegs->uregs[i] = arrParams[i];
    }
 
    pRegs->ARM_pc = (long)unAddr;
    if (pRegs->ARM_pc & 1)
    {
        pRegs->ARM_pc &= (long)(~1u);
        pRegs->ARM_cpsr |= CPSR_T_MASK;
    }
    else
    {
        pRegs->ARM_cpsr &= ~CPSR_T_MASK;
    }
#endif
 
    //设置参数并运行
    if (ptraceSetRegs(nPid, pRegs) == -1 || ptraceContinue(nPid) == -1)
    {
        perror("设置寄存器出错或继续运行出错");
        return -1;
    }
 
    int nStat = 0;
    waitpid(nPid, &nStat, WUNTRACED);
    while (nStat != 0xB7F)
    {
        if (ptraceContinue(nPid) == -1)
        {
            perror("继续运行出错");
            return -1;
        }
        waitpid(nPid, &nStat, WUNTRACED);
    }
 
    return 0;
}

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

最后于 2022-5-9 19:04 被Migration编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (24)
雪    币: 29
活跃值: (6618)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
注入x86作为bridge调用houdini加载arm的so完成hack
2022-5-9 20:28
0
雪    币: 29
活跃值: (6618)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
当然直接远程调用houdini注入arm的库进行hack也行
2022-5-9 20:31
0
雪    币: 196
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
不吃早饭 注入x86作为bridge调用houdini加载arm的so完成hack
感谢回复, 没能在网上找到太多的相关资料, 有相关的代码参考吗
2022-5-10 07:31
0
雪    币: 29
活跃值: (6618)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
Migration 感谢回复, 没能在网上找到太多的相关资料, 有相关的代码参考吗
看aosp里libnativebridge部分代码,那是官方调用houdini的方法
2022-5-10 10:29
0
雪    币: 29
活跃值: (6618)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
Migration 感谢回复, 没能在网上找到太多的相关资料, 有相关的代码参考吗
104K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0M7#2)9J5k6h3q4F1k6s2u0G2K9h3c8Q4x3X3g2U0L8$3#2Q4x3V1k6S2L8X3c8J5L8$3W2V1i4K6u0r3M7r3I4S2N6r3k6G2M7X3#2Q4x3V1k6K6N6i4m8W2M7Y4m8J5L8$3A6W2j5%4c8Q4x3V1k6Q4x3V1u0Q4x3V1k6E0j5i4y4@1k6i4u0Q4x3@1q4S2M7Y4c8Q4x3V1k6D9K9h3u0F1j5i4c8A6N6X3g2T1M7X3W2V1k6$3g2Q4x3V1k6F1j5i4c8A6N6X3g2Q4y4h3k6T1M7X3W2V1k6$3g2Q4x3X3g2U0j5#2)9K6b7X3I4Q4x3@1b7#2y4U0x3`.
2022-5-10 10:32
0
雪    币: 196
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
十分感谢, 我去参考一下
2022-5-10 12:06
0
雪    币: 196
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
十分感谢, 我去参考一下
2022-5-10 12:06
0
雪    币: 196
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
不吃早饭 517K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0M7#2)9J5k6h3q4F1k6s2u0G2K9h3c8Q4x3X3g2U0L8$3#2Q4x3V1k6S2L8X3c8J5L8$3W2V1i4K6u0r3M7r3I4S2N6r3k6G2M7X3#2Q4x3V1k6K6N6i4m8W2M7Y4m8J5L8$3A6W2j5%4c8Q4x3V1k6Q4x3V1u0Q4x3V1k6E0j5i4y4@1k6i4u0Q4x3@1q4S2M7Y4c8Q4x3V1k6D9K9h3u0F1j5i4c8A6N6X3g2T1M7X3W2V1k6$3g2Q4x3V1k6F1j5i4c8A6N6X3g2Q4y4h3k6T1M7X3W2V1k6$3g2Q4x3X3g2U0j5#2)9K6b7X3H3`. ...
十分感谢, 我去参考一下
2022-5-10 12:07
0
雪    币: 130
活跃值: (3478)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10

可以替换掉libnb.so 

native_bridge2_loadLibrary 加载arm的so

static void *native_bridge2_loadLibrary(const char *libpath, int flag) {    
ALOGV("enter native_bridge2_loadLibrary %s", libpath);    
NativeBridgeCallbacks *cb = get_callbacks();     
if (strstr(libpath, "xxx.so")) {    
ALOGV("load xxx.so");  
// 加载我们自己的so文件  
void *handle = cb->loadLibrary("/data/local/tmp/libhackclient.so", flag);    
ALOGV("load libhackclient = %p", handle);    
}    
return cb ? cb->loadLibrary(libpath, flag) : nullptr;    
}

233K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6G2M7r3g2F1N6r3S2G2M7#2)9J5c8X3c8W2N6X3W2U0k6g2)9J5k6r3N6W2L8X3g2J5K9h3y4Q4x3X3c8U0L8$3#2E0L8$3&6Q4x3V1k6T1L8r3!0T1i4K6u0r3L8h3q4J5M7$3S2E0j5h3I4D9L8%4N6Q4x3X3c8G2M7r3g2F1N6r3S2G2M7#2)9J5c8X3&6S2N6r3W2$3k6h3u0J5K9h3c8Y4k6g2)9J5c8Y4y4J5j5#2)9J5c8X3I4A6j5X3&6T1i4K6u0W2j5%4m8H3

最后于 2022-5-10 13:19 被Yecate编辑 ,原因:
2022-5-10 13:17
0
雪    币: 196
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
Yecate 可以替换掉libnb.so&nbsp;native_bridge2_loadLibrary 加载arm的sostatic&nbsp;void&nbsp;*native_brid ...
十分感谢, 我试试
2022-5-10 17:16
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12
大佬们,出出视频讲解一下,带带弟弟,。
2022-6-17 20:06
0
雪    币: 1
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13
大佬最后有解决了吗
2022-7-4 00:41
0
雪    币: 195
活跃值: (71)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
  大佬能给个联系方式吗  学习一下
2022-7-7 10:22
0
雪    币: 1
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
15
x86加载armv7的动态库可以参考java层System.load方法,或者直接java层注入就可以了。
2022-7-7 21:45
0
雪    币: 40
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
Yecate 可以替换掉libnb.so&nbsp;native_bridge2_loadLibrary 加载arm的sostatic&nbsp;void&nbsp;*native_brid ...
大佬请问:  libnb 这个该如何才能编译  他的nativebridge目录下 只有android.mk 和 nativebridge.mk 没有application.mk  这种情况该如何才能编译
2022-7-17 23:01
0
雪    币: 130
活跃值: (3478)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
happyZore 大佬请问: libnb 这个该如何才能编译 他的nativebridge目录下 只有android.mk 和 nativebridge.mk 没有application.mk 这种情况该如何才能 ...

Android.mk

LOCAL_PATH := $(call my-dir)    
include $(CLEAR_VARS)    
LOCAL_MODULE    := nb    
LOCAL_SRC_FILES := ../libnb.cpp    
LOCAL_LDLIBS    :=  -llog    
include $(BUILD_SHARED_LIBRARY)


Application.mk

APP_ABI   := x86    
APP_PLATFORM := android-21    
APP_STL      := c++_static


2022-7-19 08:31
0
雪    币: 217
活跃值: (696)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
还是用感染注入好了 这些编译的方式好麻烦
2022-8-20 01:03
0
雪    币: 958
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
19
wx_小薛_256 还是用感染注入好了 这些编译的方式好麻烦
我想买这个
添加我的 QQ2491045843
2022-9-4 01:28
0
雪    币: 215
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
20
大佬,你解决了吗
2024-3-8 16:54
0
雪    币: 22
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
梅雨个个 大佬,你解决了吗
很多人实现不了应该是不懂如何处理houdini,那玩意确实很坑,网上资料不会很多
2024-3-8 17:27
0
雪    币: 215
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
22
龙乎 很多人实现不了应该是不懂如何处理houdini,那玩意确实很坑,网上资料不会很多
我看了一个https://bbs.kanxue.com/thread-271478.htm
这个链接里有其他解决方法。但我没怎么看懂
2024-3-8 18:25
0
雪    币: 22
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
23
梅雨个个 我看了一个https://bbs.kanxue.com/thread-271478.htm 这个链接里有其他解决方法。但我没怎么看懂
看下这篇文章就可以了2e8K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2H3k6i4u0X3j5i4u0W2i4K6u0W2L8X3g2@1i4K6u0r3j5i4u0U0K9r3W2$3k6i4y4Q4x3V1j5I4z5o6V1%4i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1$3i4K6R3^5i4K6V1I4i4@1f1@1i4@1t1&6i4K6W2r3i4@1f1$3i4K6V1^5i4@1q4r3i4@1f1@1i4@1u0n7i4K6S2q4i4@1f1^5i4@1u0r3i4K6V1&6i4@1f1#2i4@1u0q4i4K6V1%4i4@1f1#2i4K6R3^5i4@1t1H3i4@1f1%4i4K6R3I4i4@1t1#2i4@1f1$3i4K6R3@1i4K6W2r3i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1^5i4@1t1H3i4K6R3K6i4@1f1^5i4@1q4r3i4K6V1#2i4@1f1@1i4@1u0m8i4K6R3$3i4@1f1#2i4K6S2p5i4K6S2m8i4@1f1@1i4@1t1^5i4@1q4m8i4@1f1#2i4@1p5@1i4K6W2m8i4@1f1$3i4K6W2o6i4K6R3^5i4@1f1^5i4@1t1%4i4K6V1I4i4@1f1&6i4K6R3H3i4K6W2m8i4@1f1@1i4@1u0m8i4K6R3$3i4@1f1$3i4@1p5^5i4@1p5I4i4@1f1$3i4K6S2n7i4K6W2r3i4@1f1#2i4K6V1&6i4@1p5^5i4@1f1#2i4K6R3#2i4@1p5^5i4@1f1$3i4K6W2q4i4@1t1$3i4@1f1$3i4K6W2q4i4K6R3@1i4@1f1%4i4K6W2m8i4K6R3@1i4@1f1$3i4@1t1K6i4@1p5^5i4@1f1#2i4K6R3#2i4@1p5#2
2024-3-8 19:40
1
雪    币: 215
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
24
龙乎 看下这篇文章就可以了6b9K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2H3k6i4u0X3j5i4u0W2i4K6u0W2L8X3g2@1i4K6u0r3j5i4u0U0K9r3W2$3k6i4y4Q4x3V1j5I4z5o6V1%4i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1$3i4K6R3^5i4K6V1I4i4@1f1@1i4@1t1&6i4K6W2r3i4@1f1$3i4K6V1^5i4@1q4r3i4@1f1@1i4@1u0n7i4K6S2q4i4@1f1^5i4@1u0r3i4K6V1&6i4@1f1#2i4@1u0q4i4K6V1%4i4@1f1#2i4K6R3^5i4@1t1H3i4@1f1%4i4K6R3I4i4@1t1#2i4@1f1$3i4K6R3@1i4K6W2r3i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1^5i4@1t1H3i4K6R3K6i4@1f1^5i4@1q4r3i4K6V1#2i4@1f1@1i4@1u0m8i4K6R3$3i4@1f1#2i4K6S2p5i4K6S2m8i4@1f1@1i4@1t1^5i4@1q4m8i4@1f1#2i4@1p5@1i4K6W2m8i4@1f1$3i4K6W2o6i4K6R3^5i4@1f1^5i4@1t1%4i4K6V1I4i4@1f1&6i4K6R3H3i4K6W2m8i4@1f1@1i4@1u0m8i4K6R3$3i4@1f1$3i4@1p5^5i4@1p5I4i4@1f1$3i4K6S2n7i4K6W2r3i4@1f1#2i4K6V1&6i4@1p5^5i4@1f1#2i4K6R3#2i4@1p5^5i4@1f1$3i4K6W2q4i4@1t1$3i4@1f1$3i4K6W2q4i4K6R3@1i4@1f1%4i4K6W2m8i4K6R3@1i4@1f1$3i4@1t1K6i4@1p5^5i4@1f1#2i4K6R3#2i4@1p5#2
这么牛逼..感谢 我去看看,
但这个好像是用面具来注入修改的吧。可以不用面具直接有shell root权限注入嘛?
2024-3-9 00:07
0
雪    币: 201
活跃值: (265)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
龙乎 看下这篇文章就可以了d96K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2H3k6i4u0X3j5i4u0W2i4K6u0W2L8X3g2@1i4K6u0r3j5i4u0U0K9r3W2$3k6i4y4Q4x3V1j5I4z5o6V1%4i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1$3i4K6R3^5i4K6V1I4i4@1f1@1i4@1t1&6i4K6W2r3i4@1f1$3i4K6V1^5i4@1q4r3i4@1f1@1i4@1u0n7i4K6S2q4i4@1f1^5i4@1u0r3i4K6V1&6i4@1f1#2i4@1u0q4i4K6V1%4i4@1f1#2i4K6R3^5i4@1t1H3i4@1f1%4i4K6R3I4i4@1t1#2i4@1f1$3i4K6R3@1i4K6W2r3i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1^5i4@1t1H3i4K6R3K6i4@1f1^5i4@1q4r3i4K6V1#2i4@1f1@1i4@1u0m8i4K6R3$3i4@1f1#2i4K6S2p5i4K6S2m8i4@1f1@1i4@1t1^5i4@1q4m8i4@1f1#2i4@1p5@1i4K6W2m8i4@1f1$3i4K6W2o6i4K6R3^5i4@1f1^5i4@1t1%4i4K6V1I4i4@1f1&6i4K6R3H3i4K6W2m8i4@1f1@1i4@1u0m8i4K6R3$3i4@1f1$3i4@1p5^5i4@1p5I4i4@1f1$3i4K6S2n7i4K6W2r3i4@1f1#2i4K6V1&6i4@1p5^5i4@1f1#2i4K6R3#2i4@1p5^5i4@1f1$3i4K6W2q4i4@1t1$3i4@1f1$3i4K6W2q4i4K6R3@1i4@1f1%4i4K6W2m8i4K6R3@1i4@1f1$3i4@1t1K6i4@1p5^5i4@1f1#2i4K6R3#2i4@1p5#2
感谢大佬无私馈赠,天不生龙乎大哥,逆向万古如长夜~
2024-4-25 01:42
0
游客
登录 | 注册 方可回帖
返回