进击的Android Hook 注入术《二》
目录(?)[-]
- 继续
- 注入
- 分类
- 本质
- 目的
- 过程
- 示例一
- Host代码
- libmysoso代码
- 调用
- 示例代码
继续
注入
分类
- 静态注入,针对是可执行文件,比如平时我们修改ELF,DEX文件等等,相关的辅助工具也很多,比如IDA、JEB、ApkTool等等;
- 动态注入,针对是进程,比如修改进程的寄存器、内存值等等;
本质
- 查看变量值
- 修改变量值
- 跟踪进程跳转
- 查看进程调用堆栈
- 等等
目的
- 增强目标进程的功能;
- 修复目标进程缺陷;
- 劫持目标进程函数;
- 窃取目标进程数据;
- 篡改目标进程数据;
过程
- ATTATCH,指定目标进程,开始调试;
- GETREGS,获取目标进程的寄存器,保存现场;
- SETREGS,修改PC等相关寄存器,使其指向mmap;
- POPETEXT,把so path写入mmap申请的地址空间;
- SETRESG,修改PC等相关寄存器,使其指向dlopen;
- SETREGS,恢复现场;
- DETACH,解除调试,使其恢复;
- 使用gcc的预编译指令__attribute__ ((__constructor__)),作用是让so被加载后,函数被自动执行;
- __attribute__ ((__constructor__))
- void Main() {
- LOGI(">>>>>>>>>>>>>I am in, I am a bad boy 1!!!!<<<<<<<<<<<<<<");
- void* handle = dlopen("libinso.so", RTLD_NOW);
- void (*setA_func)(int) = (void (*)(int))dlsym(handle, "setA");
- if (setA_func) {
- setA_func(999);
- }
- }
- 使用c++全局对象初始化,其构造函数会被自动执行;
- void Main();
- static void* _main(void*){
- Main();
- return NULL;
- }
- class EntryClass {
- public:
- EntryClass() {
- pthread_t tid;
- pthread_create(&tid, NULL, _main, NULL);
- pthread_detach(tid);
- }
- } boy;
示例一
Host代码
- /*
- * inso.h
- *
- * Created on: 2014年6月24日
- * Author: boyliang
- */
- __attribute__ ((visibility ("default"))) void setA(int i);
- __attribute__ ((visibility ("default"))) int getA();
- /*
- * inso.c
- *
- * Created on: 2014年6月24日
- * Author: boyliang
- */
- #include <stdio.h>
- #include "inso.h"
- static int gA = 1;
- void setA(int i){
- gA = i;
- }
- int getA(){
- return gA;
- }
- /*
- * demo1.c
- *
- * Created on: 2014年6月24日
- * Author: boyliang
- */
- #include <stdio.h>
- #include <unistd.h>
- #include "inso.h"
- #include "log.h"
- int main(){
- LOGI("DEMO1 start.");
- while(1){
- LOGI("%d", getA());
- setA(getA() + 1);
- sleep(2);
- }
- return 0;
- }
libmyso.so代码
- /*
- * myso.c
- *
- * Created on: 2014年6月24日
- * Author: boyliang
- */
- #include <stdio.h>
- #include <stddef.h>
- #include <dlfcn.h>
- #include <pthread.h>
- #include <stddef.h>
- #include "log.h"
- __attribute__ ((__constructor__))
- void Main() {
- LOGI(">>>>>>>>>>>>>I am in, I am a bad boy 1!!!!<<<<<<<<<<<<<<");
- void* handle = dlopen("libinso.so", RTLD_NOW);
- void (*setA_func)(int) = (void (*)(int))dlsym(handle, "setA");
- if (setA_func) {
- setA_func(999);
- }
- }
调用
- I/TTT ( 594): DEMO1 start.
- I/TTT ( 594): 1
- I/TTT ( 594): 2
- I/TTT ( 594): 3
- I/TTT ( 594): 4
- I/TTT ( 594): 5
- I/TTT ( 594): 6
- I/TTT ( 594): 7
- I/TTT ( 594): >>>>>>>>>>>>>I am in, I am a bad boy 1!!!!<<<<<<<<<<<<<<
- I/TTT ( 594): 999
- I/TTT ( 594): 1000
- I/TTT ( 594): 1001
当执行./poison /data/local/tmp/libmyso.so 594后,输出中马上出现了特定字符串,并且打印的数据一下子变成了999,证明我们注入成功了。
示例代码
在《三》,我会再介绍一种Android上特有的注入技术,敬请期待。
原文地址: http://blog.csdn.net/l173864930/article/details/38456313
进击的Android Hook 注入术《二》相关推荐
- 进击的Android Hook 注入术《四》
目录(?)[-] 继续 注入之后 示例三 输出 最后 继续 在前<一>.<二>.<三>里已经把注入的技术介绍完了,这章开始说注入之后需要做的事情.如果对注入技术已经 ...
- 进击的Android Hook 注入术《三》
目录(?)[-] 继续 Component Injection 原理 示例二 comdemohost comdemoinject 绕过ClassLoader双亲委托 输出 最后 继续 在<二&g ...
- 进击的Android Hook 注入术《一》
目录(?)[-] 写在前面 短信拦截 场景 问题 解决方案 问题来了 基本思路 写在前面 这个系列本来是在公司的一个分享,内容比较多,所以就把这个PPT重新组织整理成博客,希望对大家学习有所帮助.我会 ...
- 进击的Android Hook 注入术《五》
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 继续 BinderProxy 原理 获取AMS引用 获取JavaBBinder 替换mObject对象 示例四 最后 继续 在A ...
- xposed hook java_[原创]Android Hook 系列教程(一) Xposed Hook 原理分析
章节内容 一. Android Hook 系列教程(一) Xposed Hook 原理分析 二. Android Hook 系列教程(二) 自己写APK实现Hook Java层函数 三. Androi ...
- 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 二 | 准备参数 | 远程调用 mmap 函数 )
文章目录 一.准备 mmap 函数的参数 二.mmap 函数远程调用 一.准备 mmap 函数的参数 上一篇博客 [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | 远程调 ...
- linux qt getpid,[QTA] Android 动态注入原理分析
一.前言 Android 的 UI 自动化测试可以通过注入式和非注入式分别实现,通过注入式可以更加方便地与应用进行交互.QTA 团队提供的 Android UI 自动化测试框架QT4A, 是通过动态注 ...
- Frida Android hook
From:https://eternalsakura13.com/2020/07/04/frida/ 目录 1.r0ysue 大佬 2.Frida 环境 2.1 pyenv 2.2 frida 安装 ...
- android hook 第三方app_基于 VirtualApp 结合 whale hook框架实现hook第三方应用
要点 1. whale hook framework 使用示例: 2. 参考项目:VirtualHook: 3. 按照 VirtualHook 修改 VirtualApp: 4. 编写 hook pl ...
最新文章
- Qt中线程的生命期问题
- #react-native BUG#
- kali-linux nat模式下无法联网问题
- 卷积在计算机中实现+pool作用+数据预处理目的+特征归一化+理解BN+感受野理解与计算+梯度回传+NMS/soft NMS
- truncate python是删除文件内容吗_在Python中操作文件之truncate()方法的使用教程
- C# 用Attribute实现AOP事务
- HDU多校联合赛(1007 Magical Forest)模拟题
- 同一台主机部署两个比特币钱包以及rpc服务的摘要
- “精钢云”落地:鞍钢携手金山云推动中国制造
- 一次百万长连接压测 Nginx OOM 的问题排查分析
- Android 编程下的计时器
- Windows下nmap命令及Zenmap工具的使用方法
- pgadmin3连接mysql_postgresql – PgAdmin III – 密码为空时如何连接数据库?
- QT学习笔记(一)——QT基础
- 平衡二叉树的调整整理
- 使用excel校验身份证号码是否正确
- 零基础微信小程序开发学习笔记(1.初识目录结构)
- UVA 1449 Dominating Patterns(AC自动机)
- 双目 机器视觉-- 测距
- 2019 年度程序员薪酬报告:40 岁以后普遍遭遇收入天花板