进击的Android注入术《二》
继续
注入
分类
- 静态注入,针对是可运行文件,比方平时我们改动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注入术《二》的更多相关文章
- 进击的Android注入术《一》
写在前面 这个系列本来是在公司的一个分享.内容比較多,所以就把这个PPT又一次组织整理成博客,希望对大家学习有所帮助.我会先以一个"短信拦截"作为样例,抛出问题,并提出了一种基于& ...
- Android 注入详解
Android下的注入的效果是类似于Windows下的dll注入,关于Windows下面的注入可以参考这篇文章Windows注入术.而Android一般处理器是arm架构,内核是基于linux,因此进 ...
- Spring 属性注入(二)BeanWrapper 结构
Spring 属性注入(二)BeanWrapper 结构 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) BeanWrap ...
- Android注入完全剖析
0 前沿 本文主要分析了一份实现Android注入的代码的技术细节,但是并不涉及ptrace相关的知识,所以读者如果不了解ptrace的话,最好先学习下ptrace原理再来阅读本文.首先,感谢源代码的 ...
- Android仿微信二维码扫描
转载:http://blog.csdn.net/xiaanming/article/details/10163203 了解二维码这个东西还是从微信中,当时微信推出二维码扫描功能,自己感觉挺新颖的,从一 ...
- Android Fragment使用(二) 嵌套Fragments (Nested Fragments) 的使用及常见错误
嵌套Fragment的使用及常见错误 嵌套Fragments (Nested Fragments), 是在Fragment内部又添加Fragment. 使用时, 主要要依靠宿主Fragment的 ge ...
- Android反编译(二)之反编译XML资源文件
Android反编译(二) 之反编译XML资源文件 [目录] 1.工具 2.反编译步骤 3.重新编译APK 4.实例 5.装X技巧 6.学习总结 1.工具 1).反编译工具 apktool http ...
- 小白日记44:kali渗透测试之Web渗透-SqlMap自动注入(二)-sqlmap参数详解REQUEST
Sqlmap自动注入(二) Request ################################################### #inurl:.php?id= 1. 数据段:--d ...
- Android进阶笔记06:Android 实现扫描二维码实现网页登录
一. 扫描二维码登录的实现机制: 详细流程图: (1)PC端打开网页(显示出二维码),这时候会保存对应的randnumber(比如:12345678). (2)Android客户端扫码登录,Andro ...
随机推荐
- cocos2dx 子弹飞作为一个例子来解释解酒效果类CCMotionStreak
感谢点评与关注,欢迎转载与分享. 勤奋努力,持之以恒! 在游戏开发中,有时会须要在某个游戏对象上的运动轨迹上实现渐隐效果.比方子弹的运动轨迹,假设不借助引擎的帮助.这样的效果则须要通过大量的图片来实现 ...
- java验证手机号码是否合法
公司开发新功能须要验证手机号码,遂自己写了个出来,暂仅仅支持中国大陆手机号验证.如有不妥之处,还望大家指教,感激不尽! /** * 验证是否是正确合法的手机号码 * * @param telephon ...
- list-style-type 去除li 前面的标记(小黑点)
list-style-type 设置标记的样式(或者隐藏标记) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E ...
- 编写可维护的Javascript读书笔记
写在前面:之前硬着头皮参加了java方面的编程规范培训,收货良多,工作半年有余的时候,总算感觉到一丝丝Coding之美,以及造轮子的乐趣,以至于后面开发新功能的时候,在Coding style方面花了 ...
- 标签(Tag)的各种设计方案
标签(Tag)的各种设计方案 首先,标签(Tag)是什么? 我的理解:用来具体区分某一类内容的标识,和标签类似的一个概念是分类(Category),有一个示例可以很好的区分它们两个,比如人类分为:白种 ...
- Sonar相关汇总
http://www.sonarqube.org/downloads/ http://docs.sonarqube.org/display/SONAR/Documentation/ 公司前段时间推动项 ...
- 银联+移动+三星PK微信、余额宝
在不远的将来,你可以扔掉钱包,扔掉信用卡,揣着手机买东西. 银联.移动.三星这些不同的行业大佬,因为这个目标,被一款名叫NFC的支付技术连接在了一起. 这场游戏的参与者众多,一个合纵连横的时代正在到来 ...
- 【LaTeX排版】LaTeX纸排版<两>
1.文件夹的生成 直接使用命令\tableofcontents就可以. 其默认格式例如以下: 我们会发现.这种格式不一定是我们所期望的. 比方说,我们也希望章标题与页码之间也有点连线,而且也希 ...
- erlang R17新socket选项{active,N}
erlang R17带来了新的socket选项{active,N} .与{active,once}连同应用层提供的流量控制.为什么会这样选择,{active,once}不能够有效地抑制了很多socke ...
- idea_intellij
近期要研读和调试spark2,用eclispe据说各种问题,so还是切换到 intellij 1:下载 (官网自行下载最新版本) 2: 注册码 intellij idea 2016 activati ...