查看原文
其他

修改源码实现全局(无需root)注入躲开注入检测

2017-08-23 大王叫我挖坟 看雪学院


看这篇文章需要的技能



1. 会编译android源码(如果你不愿意编译源码,还有另外一种办法,下面我会提供)

2. 会使用substrate或者xposed

以上2个网上资料很多我就不啰嗦了



一、市面上目前的hook和注入工具



市面上目前的hook有substrate,xposed,或者一些开源的自己实现的hook和注入,但是会调用一些系统api或者自身一些特征,会被加固检测到,故提供以下文章



二、全局注入的三种思路


首先我们注入的目的,就是让我们写的钩子代码xx.so可以注入到yyy程序里面去,这样我们的xx.so就可以调用诸如mprotect和mmap来修改内存属性,去修改目标程序的内存可以来实现got hook或者inline,异或修改机器码的跳转,异或修改数据实现内存修改器。

故实现全局注入有三种办法:


思路一:替换zygote, xposed那种,不多说由于其特征会被检测到,不啰嗦了网上资料很多。


思路二:从so加载的过程看

可以修改linker源码,在其加载程序so的时候,比如在do_dlopen

dlopen我们的so(试过失败告终,linker不允许使用malloc函数等基础函数,而一些libc的一些基本函数,如fgets依赖于malloc的实现)

思路三:从apk启动java层的代码看(成功这也是我要介绍的)


三、根据思路三


修改 frameworks/base/core/java/android/app/ActivityThread.java文件


在handleBindApplication函数插入如下代码



然后编译源码,将 changeFrameWorkHookConfig.txt 文件内容设置为:


第一行,你要注入的程序的进程名,一般写包名就行了 com.carrot.carrotfantasy


第二行,你要注入的so路径 /data/local/libhooktest.so。

把txt文件push到手机的/data/local/目录,即可不用实现注入而让我们的钩子代码进入程序进程


接下来就是怎么写 libhooktest.so 这个了


办法一:你可以使用 substrate 提供的 hook api 把你的 hook 代码编译成一个so


办法二:你可以不用别人的hook框架,自己写hook,这里我提供一份我以前整合修改好的hook代码,包括 inline hook 和 got hook 大家凑合着用吧(此 ininline hook 中指令重定位部分,参考网友ele7enxxh,感谢他解决了繁琐的指令重定位问题,有兴趣的可以看 github 上他的完整的他有对多进程进行处理哦!!)。


四、不想修改源码的请看这里 look me!!!!


Pull出你的设备/system/framework/framework.jar此文件,

用baksmali反编译出smali,java -jar D:\run_ProgramFile\baksmali_smali\baksmali.jar -o  classout/ framework.jar

找到ActivityThread.smali,把我提供的(我这里是android4.4)替换回去,再重新编译回去,java -jar D:\run_ProgramFile\baksmali_smali\smali.jar classout/ -o framework_new.jar

如果你别的android系统,也可以自己写个demo把得到的smali自己加入ActivityThread.smali。push到设备就行了,记得重新设备生效。

对于不想root的不能push到/data/local目录的可以先push到别的目录,然后cp过去,或者换别的目录,比如sdcard。


最后附加内容



inline hook和got hook实现源代码(曾经拿保卫萝卜和我的世界测试成功)


和我曾经编译android4.x+2.3x+5.1x源码+修改源码真机运行的详细笔记(网上编译android源码的文章多如牛毛啊,实际详细的却很少)
我修改过的framework.jar






本文由看雪论坛 大王叫我挖坟 原创

转载请注明来自看雪社区



热门阅读


点击阅读原文/read,

更多干货等着你~



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存