看这篇文章需要的技能
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
soinfo* do_dlopen(const char* name, int flags)
{
soinfo* si = find_library( name); //查找动态链接库
if (si != NULL)
{
//加载我们的so
}
}
dlopen我们的so(试过失败告终,linker不允许使用malloc函数等基础函数,而一些libc的一些基本函数,如fgets依赖于malloc的实现)
思路三:从apk启动java层的代码看
(成功这也是我要介绍的)
三、根据思路三
修改 frameworks/base/core/java/android/app/Activi
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
soinfo* do_dlopen(const char* name, int flags)
{
soinfo* si = find_library( name); //查找动态链接库
if (si != NULL)
{
//加载我们的so
}
}
dlopen我们的so(试过失败告终,linker不允许使用malloc函数等基础函数,而一些libc的一些基本函数,如fgets依赖于malloc的实现)
思路三:从apk启动java层的代码看
(成功这也是我要介绍的)
三、根据思路三
修改 frameworks/base/core/java/android/app/Activi