首页
社区
课程
招聘
[原创]关于安卓注入几种方式的讨论,开源注入模块实现
发表于: 2024-10-5 12:30 56881

[原创]关于安卓注入几种方式的讨论,开源注入模块实现

2024-10-5 12:30
56881

传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!!

最后于 2024-10-5 15:28 被棕熊编辑 ,原因: 整理排版
上传的附件:
收藏
点赞 ・31
打赏
分享
最新回复 (28)
雪    币: 4770
活跃值: (8232)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2 楼
感谢分享
2024-10-5 12:37
0
雪    币: 3421
活跃值: (12739)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3 楼
期待实战,怎么定位frida检测和xp检测,现在xp选择加固APP就崩溃了????,frida这是。这种是怎么做检测定位的呢
2024-10-5 12:47
0
雪    币: 4366
活跃值: (4236)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
4 楼
你瞒我瞒 期待实战,怎么定位frida检测和xp检测,现在xp选择加固APP就崩溃了????,frida这是。这种是怎么做检测定位的呢
这些都被厂商特征了,具体检测方法看雪上有,如何定位以及如何用此插件pass我到时候都会讲一下,要做的比较多,会尽快开始。
2024-10-5 12:56
1
雪    币: 6
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5 楼
感谢分享,学习了
2024-10-5 13:13
0
雪    币: 499
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6 楼
通过内核模块注入可行吗
2024-10-5 22:11
0
雪    币: 4366
活跃值: (4236)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
7 楼
安卓逆向test 通过内核模块注入可行吗
理论可行,有成果回复你
2024-10-6 04:26
0
雪    币: 1643
活跃值: (4626)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8 楼
感谢分享
2024-10-8 11:15
0
雪    币: 2637
活跃值: (5377)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
9 楼

我以前都是用riru做注入 最近也写了一个zygisk的注入 代码思路基本和你一样   tmp目录放了一个txt 判断要注入的app 以及注入的so名称 

1.直接调dlopen

      //    指定要注入的 SO 文件路径
/*          const char* so_path = "/data/data/com.test.xxxxxxx/files/libxxx.so";
          //  const char* so_path =  "/data/local/tmp/libxxx.so";

          // 使用 dlopen 尝试加载 SO 文件
          void *handle = dlopen(so_path, RTLD_NOW); //RTLD_NOW:将库文件中所有的资源都载入内存    RTLD_LAZY:暂时不将库文件中的资源载入内存,使用时才载入。

          if (handle) {
              LOGD("RTLD_LAZY 成功注入 SO 文件: %s", so_path);

              // 查找并调用 JNI_OnLoad
              typedef jint (*JNI_OnLoad_t)(JavaVM*, void*);
              JNI_OnLoad_t JNI_OnLoad = (JNI_OnLoad_t) dlsym(handle, "JNI_OnLoad");
              if (JNI_OnLoad) {
                  JNI_OnLoad(javaVM, nullptr);
                  LOGD("成功调用 JNI_OnLoad");
              } else {
                  LOGD("未找到 JNI_OnLoad 函数");
              }


          } else {
              LOGD("注入 SO 文件失败: %s", dlerror());
          }*/

2.调用load  

  void injectSO(JNIEnv *env) {
    // 获取 System 类
    jclass systemClass = env->FindClass("java/lang/System");

    // 获取 load 方法 ID
    jmethodID loadMethod = env->GetStaticMethodID(systemClass, "load", "(Ljava/lang/String;)V");

    
  

    jstring jSoPath = env->NewStringUTF(so_path.c_str());// 注入 SO 文件路径

    // 调用 System.load 方法注入 SO 文件
    env->CallStaticVoidMethod(systemClass, loadMethod, jSoPath);

    // 检查是否有异常发生
    if (env->ExceptionCheck()) {
        env->ExceptionDescribe();
        env->ExceptionClear();
        LOGD("注入失败: %s - System.load", dlerror());  // 使用 dlerror() 获取详细错误信息
    } else {
        LOGD("注入成功 called System.load");
    }
    env->DeleteLocalRef(jSoPath);  // 释放 jstring 对象
}


2024-10-8 11:37
0
雪    币: 4366
活跃值: (4236)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
10 楼
世界美景 我以前都是用riru做注入 最近也写了一个zygisk的注入 代码思路基本和你一样   tmp目录放了一个txt 判断要注入的app 以及注入的so名称&n ...

我打算后面要做隐藏注入和自定义linker注入,感兴趣可以加个联系方式,一起开发一下

最后于 2024-10-8 12:02 被棕熊编辑 ,原因:
2024-10-8 12:01
0
雪    币: 43
活跃值: (2579)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11 楼
发个联系方式
2024-10-8 17:31
0
雪    币: 1721
活跃值: (2562)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12 楼
学习了
2024-10-8 21:44
0
雪    币: 2455
活跃值: (735)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
13 楼
师傅能不能请教一下,我用zygisk注入在postAppSpecialize不开线程直接掉dlopen注入so过几秒会闪退,用ptrace注入同一个so不会闪退是为啥
2024-10-9 16:35
0
雪    币: 4366
活跃值: (4236)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
14 楼
mb_fycbgpri 师傅能不能请教一下,我用zygisk注入在postAppSpecialize不开线程直接掉dlopen注入so过几秒会闪退,用ptrace注入同一个so不会闪退是为啥
发一下样本,我去看看
2024-10-9 20:36
0
雪    币: 268
活跃值: (1226)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15 楼
zygisk注入核心原理之前是改ld_preload,现在好像又成了改nativebridge了。注入方式还有通过修改memmap形式注入的,这个目前我没发现有进程注入不了。
2024-10-10 10:44
0
雪    币: 2455
活跃值: (735)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
16 楼
void postAppSpecialize(const AppSpecializeArgs *args) override
    {
        if (enable_hack)
        {
            LOGD("[postAppSpecialize]current PID=%d --- Start Hacking!\n", getpid());
            LOGD("[+] start inject");
            void *handle = dlopen("/data/data/com.xxxxxx.xxxxxx/files/libxxxx.so", RTLD_NOW | RTLD_LOCAL); // 加载你要注入的so
            if (handle == nullptr)
                LOGD("%s\n", dlerror());
            // void *run_hack=nullptr;
            // run_hack=(RUN_HACK)dlsym(handle,"run_hack");//找到你的so中的某个函数
            // if (run_hack==nullptr) LOGE("%s\n",dlerror());
            // run_hack();//执行功能
        }
    }而且如果注入so,libxxxx.so的attribute里什么都不做的话就不会闪退,libxxxx.so里只有有操作就会闪退
2024-10-10 10:47
0
雪    币: 4366
活跃值: (4236)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
17 楼
mb_fycbgpri void postAppSpecialize(const AppSpecializeArgs *args) override { if (enable_hack) ...
方便发一下apk链接吗,我看看解决下
2024-10-10 11:26
0
雪    币: 3601
活跃值: (7420)
能力值: ( LV11,RANK:185 )
在线值:
发帖
回帖
粉丝
18 楼
额,你这个方向目前来看,对抗性上属于死路,因为有些开源项目本身带来的对抗性问题没法解决。
2024-10-10 14:56
0
雪    币: 25
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
19 楼
内核方式据说会被crc校验查看关键函数被插入中断指令
2024-10-20 19:49
1
雪    币: 67
活跃值: (467)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20 楼

请教一下,kuyo加速器里面实现了一个叫做K空间的东西,看了代码像是用zygote孵化了新应用实例然后进行自定义代码注入,无需root hook游戏。想复刻一个类似原理的实现。有没有开源资料可以参考的?

2024-10-25 21:41
0
雪    币: 757
活跃值: (691)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21 楼
为什么他们都集体消失了, 
2024-11-1 16:43
1
雪    币: 61
活跃值: (637)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22 楼
学习了
2024-11-2 07:36
0
雪    币: 223
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
23 楼
感谢分享,学习了
2024-11-13 17:55
0
雪    币: 37
活跃值: (885)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24 楼
学习了
2024-11-16 21:13
0
雪    币: 273
活跃值: (2409)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25 楼
何不考虑基于ptrace直接字符串源码注入
2025-3-1 18:25
0
游客
登录 | 注册 方可回帖
返回