首页
社区
课程
招聘
[原创]用伪造so的方式注入
发表于: 2017-8-31 16:58 28020

[原创]用伪造so的方式注入

2017-8-31 16:58
28020

-0x1:

   20180927更新:

        1.更新了0x5 part的源码,之前的源码链接不知何时失效了,(别问了,懒,笨,还不上进,不知道啥是git)

        2.解决了某些机型,在mprotect的时候由于权限不够而导致的失败。就是在声明的时候把结构体声明到.text段就好了,具体如下


       3.emmm...另外这个源码的下载不知道啥时候又会失效,有缘再见...



0x0  前言

 

   现在很多安全插件,都会用本地文件和系统的内存进行校验,来防止修改code内存的hook

 

   或者一些其他的原因,无法注入,无法hook,又不想麻烦的编译android源码,

 

   那我要怎么办呢?

 

   用伪造so的方式注入,

 

   尤其对注入时机比较关注的玩家,这种注入方式最棒

 

   如果hook系统的so,则需要root

  

   源码在0x5部分


   若是有图片看不清,那就下载附件吧



   

-------------------------------------------------------------------

 

0x1 选择目标so文件,得到导出函数列表

 

      比如我在android 7中,想注入dex2oat来达到不可告人的目的,

 

      我需要用ida打开dex2oat,看看dex2oat都需要哪些so

 

 

      然后选择目标so文件,遵循如下几个标准,

      如果能遵守标准,注入成功的几率就大一些

 

        a.目标so的导出函数最好全部是 C 导出(不强求)

                C++的导出:_Z32register_android_hardware_CameraP7_JNIEnv

                C导出:        register_android_hardware_Camera

 

        b.导出的函数越少越好(不强求)

 

      根据上面的标准,我认为伪造libsigchain.so,最靠谱。

 

      然后需要获得libsigchain.so的导出函数列表,步骤如下

 

      linux readelf -s libsigchain.so 得到导出函数列表,

 

      或者在idaExport窗口复制粘贴。

 


 

 

      这里要说一下,如果so中的导出函数是C++格式的,那么从ida窗口复制出来的导出函数列表,

      就是不准确的

 

      这里我用 readelf -s libsigchain.so |  grep "13 "    得到libsigchain.so的导出函数列表

 


 

notepad++,处理一下文本

 

 

得到导出函数表

 

InvokeUserSignalHandler

ClaimSignalChain

UnclaimSignalChain

EnsureFrontOfChain

InitializeSignalChain

SetSpecialSignalHandlerFn

 

------------------------------------------------------------------------------

 

0x2 使用方法

 

    打开notepad++,新建文档,把导出函数表复制进去

 

    复制  __attribute__((visibility("default"))) JmpStruct

 

    用上面介绍的按住alt的方法,一次性粘贴到,导出函数列表前面

 

    并用同样的方法,在末尾把  分号“ ; ” 加上

 

 

    上面的步骤用excel也能轻松做到

 

     经过处理后,得到

 

__attribute__((section(".text"))) __attribute__((visibility("default"))) JmpStruct InvokeUserSignalHandler;

__attribute__((section(".text"))) __attribute__((visibility("default"))) JmpStruct ClaimSignalChain;

__attribute__((section(".text"))) __attribute__((visibility("default"))) JmpStruct UnclaimSignalChain;

__attribute__((section(".text"))) __attribute__((visibility("default"))) JmpStruct EnsureFrontOfChain;

__attribute__((section(".text"))) __attribute__((visibility("default"))) JmpStruct InitializeSignalChain;

__attribute__((section(".text"))) __attribute__((visibility("default"))) JmpStruct SetSpecialSignalHandlerFn;

 

     打开hook_demo.c,把上面的信息,粘贴到对应的位置

 

 

 

 


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2018-9-27 19:54 被zeif编辑 ,原因:
上传的附件:
收藏
免费 8
支持
分享
打赏 + 5.00雪花
打赏次数 1 雪花 + 5.00
 
赞赏  CCkicker   +5.00 2017/09/04
最新回复 (48)
雪    币: 562
活跃值: (4347)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
前面有人貌似分享过这种方法,谢谢分享
2017-8-31 17:08
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
123
2017-8-31 17:42
0
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不错!!!!!
2017-8-31 22:30
0
雪    币: 457
活跃值: (333)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢楼主的分享。
2017-9-1 07:45
0
雪    币: 1037
活跃值: (1780)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
加精了,屌屌屌
2017-9-1 10:23
0
雪    币: 215
活跃值: (372)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
6666666666
2017-9-1 11:20
0
雪    币: 1535
活跃值: (695)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
楼主6到飞起
2017-9-1 17:22
0
雪    币: 241
活跃值: (231)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
和win平台的dll劫持,函数转发是一个原理
2017-9-2 03:18
0
雪    币: 0
活跃值: (878)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
写的很详细    感谢分享
2017-9-2 11:07
0
雪    币: 1535
活跃值: (695)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
附件文档里是乱码?
2017-9-4 10:44
0
雪    币: 547
活跃值: (534)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
12
开花的水管 附件文档里是乱码?
可能是上传下载中出现问题了,我重新更新了下附件√
2017-9-4 12:25
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
又一波小朋友被你教坏了
2017-9-4 18:58
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
666666666666666666
2017-9-5 09:14
0
雪    币: 171
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
感谢楼主的分享!
2017-9-6 15:21
0
雪    币: 67
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
还可以这样。。。之前我都是每个导出函数都写一遍的
2017-9-7 09:55
0
雪    币: 888
活跃值: (2365)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
17
liblog.so可以劫持不?__android前缀的如何处理?
//liblig.so
/*
__attribute__((visibility("default")))  JmpStruct  __android_log_bwrite;
__attribute__((visibility("default")))  JmpStruct  __android_log_btwrite;
__attribute__((visibility("default")))  JmpStruct  __android_log_buf_write;
__attribute__((visibility("default")))  JmpStruct  __android_log_buf_print;
__attribute__((visibility("default")))  JmpStruct  __android_log_write;
__attribute__((visibility("default")))  JmpStruct  __android_log_assert;
__attribute__((visibility("default")))  JmpStruct  __android_log_print;
__attribute__((visibility("default")))  JmpStruct  __android_log_vprint;
__attribute__((visibility("default")))  JmpStruct  __android_log_dev_availab;*/
__attribute__((visibility("default")))  JmpStruct  android_log_setPrintForma;
__attribute__((visibility("default")))  JmpStruct  android_log_processLogBuf;
__attribute__((visibility("default")))  JmpStruct  android_log_format_free;
__attribute__((visibility("default")))  JmpStruct  android_log_formatLogLine;
__attribute__((visibility("default")))  JmpStruct  android_log_printLogLine;
__attribute__((visibility("default")))  JmpStruct  android_log_processBinary;
__attribute__((visibility("default")))  JmpStruct  android_lookupEventTag;
__attribute__((visibility("default")))  JmpStruct  android_log_addFilterRule;
__attribute__((visibility("default")))  JmpStruct  android_log_addFilterStri;
__attribute__((visibility("default")))  JmpStruct  android_log_format_new;
__attribute__((visibility("default")))  JmpStruct  logprint_run_tests;
__attribute__((visibility("default")))  JmpStruct  android_log_formatFromStr;
__attribute__((visibility("default")))  JmpStruct  android_log_shouldPrintLi;
__attribute__((visibility("default")))  JmpStruct  android_closeEventTagMap;
__attribute__((visibility("default")))  JmpStruct  android_openEventTagMap;
2017-10-21 23:03
0
雪    币: 547
活跃值: (534)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
18
dryzh liblog.so可以劫持不?__android前缀的如何处理? //liblig.so /* __attribute__((visibility("default"))) ...
我没试过fake    liblog.so,__android系列函数有什么特殊的么?
2017-10-24 09:47
0
雪    币: 268
活跃值: (3238)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
19
谁下载了那份代码。再发下。谢谢
2018-2-1 11:14
0
雪    币: 76
活跃值: (41)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
20
看的一脸懵逼,继续学习!
2018-2-1 16:43
0
雪    币: 2375
活跃值: (433)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
楼主IDA用的哪个版本?
2018-2-12 03:14
0
雪    币: 2375
活跃值: (433)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
ckis 和win平台的dll劫持,函数转发是一个原理
把so里面的函数代码修改掉?
2018-2-12 03:14
0
雪    币: 1464
活跃值: (707)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
23
感谢分享,写的很细致。
2018-2-13 08:48
0
雪    币: 144
活跃值: (335)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
求分享下代码 谢谢啦
2018-6-28 11:51
0
雪    币: 226
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
666
2018-6-29 09:10
0
游客
登录 | 注册 方可回帖
返回
//