Giter Site home page Giter Site logo

androidgothook's Introduction

Simple Android ARM&ARM64 GOT Hook

基于链接视图和执行视图,解析ELF,查找导入函数偏移值,替换函数地址。

详见:简易Android ARM&ARM64 GOT Hook (一)

简易Android ARM&ARM64 GOT Hook (二)

编译

使用Android Studio打开项目,点击Make Project

编译完成后,在模块名/build/intermediates/cmake/debug/obj/CPU架构/目录下,

可以找到生成的可执行文件(victim)和动态库(libinject.so)

测试

注入可执行文件

workdir文件中包含补丁脚本、adb测试脚本。编译完成后按顺序运行即可

作为动态链接库使用

victim_app模块是一个例子。

通过配置CMakeLists.txtlibinject.so作为动态库链接。

native-lib.cppJNI_OnLoad中调用hackBySegment替换gitpid函数。

Java层调用stringFromJNI函数通过JNI获取pid并显示。

注释inject.cpphack函数体后,编译生成apk,运行即可。(不注释将查找一次victim-patch,不影响运行)

通过JNI加载

在Java层通过System.loadLibrary加载。最终调用到Native层的LoadNativeLibrary函数。

其中首先调用dlopen加载so(linker调用构造函数)。成功后查找JNI_OnLoad并调用。

原理见andorid linker 解读1----从loadLibrary到dlopen

存在的问题

  1. 未绕过dlopen命名空间限制,在Android 7以上无法打开非公共库
  2. 未hookdlopen,无法实时修改加载模块的GOT表
  3. 基于maps解析,兼容性可能存在一定问题
  4. 基于静态注入,无法绕过完整性检测
  5. 未提供卸载函数,无法恢复GOT表
  6. ...

总结

通过本项目,学习了GOT Hook原理,ELF文件结构和导入符号的查找方式,目的基本达到。虽然功能还不够完善,但短期内应该不会再改动了(这次是真的了)。

实际应用可以考虑使用字节的bhook

参考

android中基于plt/got的hook实现原理

聊聊Linux动态链接中的PLT和GOT(2)——延迟重定位

constructor属性函数在动态库加载中的执行顺序

Android7.0以上命名空间详解(dlopen限制)

Android中GOT表HOOK手动实现

Android GOT Hook

基于Android的ELF PLT/GOT符号和重定向过程ELF Hook实现

ELF文件格式与got表hook简单实现

重定位节 - 链接程序和库指南

符号表节 - 链接程序和库指南

散列表节 - 链接程序和库指南

动态节 - 链接程序和库指南

ELF文件结构详解

PLT HOOK

bhook

xhook

androidgothook's People

Contributors

xhyeax avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.