资源简介
android下使用ptrace实现hook技术的代码,包括shellcode
编译参考Android.mk标准组件格式即可
代码片段和文件信息
/*
============================================================================
Name : libinject.c
Author :
Version :
Copyright :
Description : Android shared library inject helper
============================================================================
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ENABLE_DEBUG 1
#define PTRACE_PEEKTEXT 1
#define PTRACE_POKETEXT 4
#define PTRACE_ATTACH 16
#define PTRACE_CONT 7
#define PTRACE_DETACH 17
#define PTRACE_SYSCALL 24
#define CPSR_T_MASK ( 1u << 5 )
#define MAX_PATH 0x100
#define REMOTE_ADDR( addr local_base remote_base ) ( (uint32_t)(addr) + (uint32_t)(remote_base) - (uint32_t)(local_base) )
const char *libc_path = “/system/lib/libc.so“;
const char *linker_path = “/system/bin/linker“;
#if ENABLE_DEBUG
#define DEBUG_PRINT(formatargs...) \
LOGD(format ##args)
#else
#define DEBUG_PRINT(formatargs...)
#endif
int ptrace_readdata( pid_t pid uint8_t *src uint8_t *buf size_t size )
{
uint32_t i j remain;
uint8_t *laddr;
union u {
long val;
char chars[sizeof(long)];
} d;
j = size / 4;
remain = size % 4;
laddr = buf;
for ( i = 0; i < j; i ++ )
{
d.val = ptrace( PTRACE_PEEKTEXT pid src 0 );
memcpy( laddr d.chars 4 );
src += 4;
laddr += 4;
}
if ( remain > 0 )
{
d.val = ptrace( PTRACE_PEEKTEXT pid src 0 );
memcpy( laddr d.chars remain );
}
return 0;
}
int ptrace_writedata( pid_t pid uint8_t *dest uint8_t *data size_t size )
{
uint32_t i j remain;
uint8_t *laddr;
union u {
long val;
char chars[sizeof(long)];
} d;
j = size / 4;
remain = size % 4;
laddr = data;
for ( i = 0; i < j; i ++ )
{
memcpy( d.chars laddr 4 );
ptrace( PTRACE_POKETEXT pid dest d.val );
dest += 4;
laddr += 4;
}
if ( remain > 0 )
{
d.val = ptrace( PTRACE_PEEKTEXT pid dest 0 );
for ( i = 0; i < remain; i ++ )
{
d.chars[i] = *laddr ++;
}
ptrace( PTRACE_POKETEXT pid dest d.val );
}
return 0;
}
int ptrace_writestring( pid_t pid uint8_t *dest char *str )
{
return ptrace_writedata( pid dest str strlen(str)+1 );
}
int ptrace_call( pid_t pid uint32_t addr long *params uint32_t num_params struct pt_regs* regs )
{
uint32_t i;
for ( i = 0; i < num_params && i < 4; i ++ )
{
regs->uregs[i] = params[i];
}
//
// push remained params onto stack
//
if ( i < num_params )
{
regs->ARM_sp -= (num_params - i) * sizeof(long) ;
ptrace_writedata( pid (void *)regs->ARM_sp (uint8_t *)¶ms[i] (num_params - i) * sizeof(long) );
}
regs->ARM_pc = addr;
if ( regs->ARM_pc & 1 )
{
/* thumb */
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 10736 2011-10-13 10:43 inject.c
文件 418 2011-09-21 15:26 inject.h
文件 1243 2011-09-08 15:43 shellcode.s
相关资源
- Android简单语音控制手机应用
- AchartEngine.jar包
- android各种分辨率图标生成工具
- android二维码生成
- 基于Android的学生宿舍管理系统的实现
- 基于Android的五子棋游戏设计
- NowAPI 的天气预报接口的实现
- Android小游戏实例113793
- Android 蓝牙使用
- Android OTG USB 串口通信 ,不需要使用
- PickAddressAndDate
- android-support-v7-appcompat.jar
- Android项目---闹铃备忘录
- android 英文生词本设计
- 菜鸟窝 一个简单的购物APP android视频
- 蓝牙遥控小车Android APP
- Android多线程断点续传网络上的音/视频
- 安卓SL4A_R6.APK文件
- android通讯录项目
- Android随手记
- Qt Android 调用JAVA
- android-openGL-canvas-master.zip
- android Socket通信方法与思路
- java实现windows文件系统操作监控
- OpenCV + JavaAndroid 设置ROI
- android mvp模式demo
- BAT大牛深度剖析Android10大开源框架视
- android小程序 标准体重计算器
- android裁剪和人脸识别
- android网易客户端项目源代码
评论
共有 条评论