Android原创修改源码实现全局

看这篇文章需要的技能

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

2.会使用substrate或者xposed

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

这篇帖子将讲述什么内容

1.修改源码或者不修改源码,实现全局注入,这样以后随便你怎么hook都行

附加内容

讲如何编译android源码和刷机

androidsohook的源代码

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

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

二、全局注入的三种思路

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

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

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

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

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

soinfo*do_dlopen(constchar*name,intflags)

{

soinfo*si=find_library(name);//查找动态链接库

if(si!=NULL)

{

//加载我们的so

}

}

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

思路三:从apk启动java层的代码看

(成功这也是我要介绍的)

三、根据思路三

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

在handleBindApplication函数插入如下代码

privatevoidhandleBindApplication(AppBindDatadata)

{

//snownote/12/

//=================全局注入之修改java层===================================================

Log.e("snowchangeFrameworkInject","--processname="+data.processName);

Filessfile=newFile("/data/local/changeFrameWorkHookConfig.txt");

if(ssfile.exists())

{

FileReaderssfr=null;

try{

ssfr=newFileReader(ssfile);

}catch(FileNotFoundExceptione){

e.printStackTrace();

}

BufferedReaderssbr=newBufferedReader(ssfr);

StringtagetPackage=null;

StringsoPath=null;

try{

tagetPackage=ssbr.readLine();//得到进程名一般为包名

}catch(IOExceptione){

e.printStackTrace();

}

if(tagetPackage!=null)

{

try{

soPath=ssbr.readLine();//得到要加载的so路径

}catch(IOExceptione){

e.printStackTrace();

}

}

try{

ssfr.close();

ssbr.close();

}catch(IOExceptione){

e.printStackTrace();

}

if(data.processName.equals(tagetPackage))

{

Log.e("snowchangeFrameworkInject","----tagetPackage"+tagetPackage);

if(soPath!=null)

{

Log.e("snowchangeFrameworkInject","---start-load-soPath"+soPath);

System.load(soPath);

}

}

}

//=============================================================================

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

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







































白癜风吃什么药
白癜风吃什么药



转载请注明:http://www.gslnbdf.com/azsc/9561.html