看这篇文章需要的技能
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/ActivityThread.java文件
在handleBindApplication函数插入如下代码
private void handleBindApplication(AppBindData data) 
{
        //snownote 2016/12/
        //=================全局注入之修改java层===================================================
        Log.e("snowchangeFrameworkInject","--processname="+data.processName);
        File ssfile=new File("/data/local/changeFrameWorkHookConfig.txt");
        if(ssfile.exists())
        {
            FileReader ssfr = null;
            try {
                ssfr = new FileReader(ssfile);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            BufferedReader ssbr=new BufferedReader(ssfr);
            String tagetPackage=null;
            String soPath=null;
            try {
                tagetPackage=ssbr.readLine();//得到进程名,一般就是包名
            } catch (IOException e) {
                e.printStackTrace();
            }
            if(tagetPackage!=null)
            {
                try {
                    soPath=ssbr.readLine();//得到要加载的so路径
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            try {
                ssfr.close();
                ssbr.close();
            } catch (IOException e) {
                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文件内容设置为
第一行,你要注入的程序的进程名,一般写包名就行了 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

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

  1. android注入 定位,[原创]修改源码实现全局(无需root)注入躲开注入检测

    看这篇文章需要的技能 1.会编译android源码(如果你不愿意编译源码,还有另外一种办法,下面我会提供) 2.会使用substrate或者xposed 以上2个网上资料很多我就不啰嗦了 一.市面上目 ...

  2. Vue源码探究-全局API

    Vue源码探究-全局API 本篇代码位于vue/src/core/global-api/ Vue暴露了一些全局API来强化功能开发,API的使用示例官网上都有说明,无需多言.这里主要来看一下全局API ...

  3. android系统源码7.1.2_r8下载,编译,运行到nexus5X上,修改源码并编译SDK进行测试

    一,学习android系统源码下载,编译的作用 1,可以自己 DIY 自己的rom系统,从系统层面,宏观的加深理解 android系统 2,编译自己的 userdebug(原生root权限) rom, ...

  4. mybatis-generator修改源码2

    参考: MyBatis Generator系列(三)----修改源码实现中文注释 (包括java.net.MalformedURLException at java.net.URL.<init& ...

  5. Python 技术篇 - 修改源码解决中文主机名导致的flask、socket服务起不来问题: ‘utf-8‘ codec can‘t decode byte 0xc0 in position...

    由于主机名为中文导致的 flask 服务起不来,报错如下: File "D:\work\python3.9_64\lib\socket.py", line 791, in getf ...

  6. Jar包反编译后修改源码再编译

    Jar包反编译后修改源码再编译 文章目录 Jar包反编译后修改源码再编译 1. 场景 2. 详细步骤 2.1 查看源码 2.2 生成源文件 2.3 构建项目 2.4 编译成jar包 3. 参考链接 1 ...

  7. 小程序源码:AI微信小程序源码下载人脸照片AI转换动漫照片全新源码安装简单无需服务器域名-多玩法安装简单

    这是一款AI人脸转动漫的一款微信小程序源码 该款小程序源码无需服务器和域名 搭建安装简单 有多种风格转换模式可自选 安装教程: 首先解压源码然后把源码上传到微信开发者工具打开 另外设置一个合法域名 合 ...

  8. FFmpeg修改源码支持H265

    文章目录 一. 安装FFmpeg 二. 下载源码 三. 修改源码 四. 重新编译 五.执行 一. 安装FFmpeg 如果已经安装,建议先卸载. brew uninstall ffmpeg 然后用以下命 ...

  9. caffe实现多label输入(修改源码版)

    在我的上一篇博客中caffe实现多标签输入中,介绍了用把图像和label分来,各自做成lmdb,最后把label的lmdb用slice层分开,这篇博客介绍另一种修改源码的方法实现多label,比其他博 ...

最新文章

  1. de novo assembly是新的基因组装配
  2. mybatis的mapper.xml中使用java类中的全局变量
  3. 【开发环境】安装 Visual Studio Ultimate 2013 开发环境 ( 下载软件 | 安装软件 | 运行软件 )
  4. ssh(Spring+Spring mvc+hibernate)——IDeptService.java和IEmpService.java
  5. eclipse 创建ssm spring+springmvc+mybatis 实现登录注册
  6. 交通流元胞自动机模拟仿真 matlab源码_元胞自动机中的时间反演
  7. Nodejs博客开发笔记
  8. 解决layui laydate动态创建多个时不起作用点击无效的问题
  9. mac安装python3.7_MAC 安装Python3.7
  10. numpy ndarray 数组对象
  11. 主域无法开机,备份域升级成主域操作
  12. LINUX操作系统的内核编译内幕详解一
  13. LeetCode 热题 HOT 100 完整题解笔记知识点分类 C++代码实现
  14. Html软件进度计划,施工进度计划表软件
  15. - Wireless Network POJ - 2236
  16. 美IT业25大秘密:Facebook耗时一周建成
  17. 如何实现电脑远程操控西门子触摸屏画面
  18. 面试.net资深程序员的前5分钟
  19. IntelliJ IDEA初次创建简单的java项目--初学者使用详解
  20. shell编程(二)

热门文章

  1. 说说谷歌Chrome浏览器无痕浏览器窗口
  2. 【软件测试】测试用例的设计方法
  3. FLV科普9 FLV音频信息
  4. Python的打印函数print()中占位符%和format()使用以及f格式化字符串
  5. IDEA JDK配置
  6. 收藏:WORD中快速输入下分割线
  7. #git操作#拉取远程分支到本地,克隆远程分支的代码(指定分支)
  8. MySQL 文件读写
  9. Vue数据绑定(单向绑定和双向绑定)
  10. 青岛场・基于RT-Thread嵌入式操作系统的教学研讨交流会