资源简介
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带百分比进度条的文件上传,使
- 美食天下项目Android版源码和Web版源码
- Android之自定义ToggleButton使用
- Android非常漂亮的登录界面
- pc与android通过usb socket实现手机通信
- android毕业设计
- 百度地图自定义Markerandroid
- Android分区工具包
- android-support-v4.jar已打包进去源代码
- u-blox_Android_GNSS_Driver_v3.10驱动源码+中
- 个人根据Android移动开发案例详解手写
- android 视频播放器 项目和原码
- Android【动画】【特效】 17种动画特效
- 基于Android智能家居详细设计(经典)
- android通过JDBC连接Mysql数据库
- Android通讯录的源代码
- android 瀑布流Demo
- 指纹传感器FPC1080在android下的驱动
- delphi xe5 android 调用照相机摄像头拍照
- Android手机连连看游戏源码
- android-sdk-windows v2.3离线完整版
- android 底部弹出菜单(带透明背景)
- Android工程模式简介.rar
- Android蓝牙和Cors网络开发源码
- Android powermanger wakelock
- Android v7的一些jar包
- 最新android supportV7包
- android图片压缩工具类分享
- 单机搭建Android(解决Network is unreach
- Android上监听收到的短信(SMS)
评论
共有 条评论