使用cydia substrate 来进行android native hook
2015-01-27 22:16
288 查看
cydia不仅可以hook java代码,同样可以hook native代码,下面举一个例子来进行android native hook
我是在网上找到的supermathhook这个项目,在他基础上修改的,本来是为了仓促应对阿里的ctf
这个项目位置:
这个项目是用来hook jni 代码的,而我是用来hook dvmDexFileOpenPartial这个函数的,所以必须使用
Mshookfunction这个函数,这个函数在libsubstrate.so中,自己去官网下载就可以了。
接下来将如何hook。
首先:
指明要hook的lib :
MSConfig(MSFilterLibrary,"/system/lib/libdvm.so")
在初始化的时候进行hook,具体如下:
MSInitialize
{
__android_log_print(ANDROID_LOG_ERROR, TAG, "Substrate initialized.");
MSImageRef image;
image = MSGetImageByName("/system/lib/libdvm.so"); 载入lib
if (image != NULL)
{
//注意这个是个c++函数,可以通过objdump来获取
void * dexload=MSFindSymbol(image,"_Z21dvmDexFileOpenPartialPKviPP6DvmDex");
if(dexload==NULL)
{
LOGD("error find _Z21dvmDexFileOpenPartialPKviPP6DvmDex ");
}
else{
MSHookFunction(dexload,(void*)&mydvmdexfileopen,(void **)&olddexfileopen);·
}
}
else{
LOGD("ERROR FIND LIBDVM");
}
}
相关其他的函数:
int (* olddexfileopen)(const void * addr,int len,void ** dvmdex); 保留原来的地址
int mydvmdexfileopen(const void * addr,int len,void ** dvmdex) 新的函数
{
LOGD("call my dvm dex!!:%d",getpid());
{ //write to file
char buf[200];
sprintf(buf,"/sdcard/dex.%d",random()); 导出dex文件
FILE * f=fopen(buf,"wb");
if(!f)
{
LOGD("error open sdcard file to write");
}
else{
fwrite(addr,1,len,f);
fclose(f);
}
}
return olddexfileopen(addr,len,dvmdex); 进行原来的调用,不影响程序运行
}
相关文章推荐
- Android AIDL 远程service
- Android的2D绘图小结
- Android 实现形态各异的双向侧滑菜单 自定义控件来袭
- Android DrawerLayout 高仿QQ5.2双向侧滑菜单
- android调用第三方库
- android客户端与sae交互中文处理 gb2312
- Android studio快捷键
- android socket
- Android Studio系列教程五--Gradle命令详解与导入第三方包
- Android 高仿 QQ5.0 侧滑菜单效果 自定义控件来袭
- 分享Android Studio官方最新版下载(828M)
- Android中focusable属性的妙用之底层按钮的实现
- Android中Parcelable接口用法
- Android 自定义控件打造史上最简单的侧滑菜单
- Android 百度定位获得当前具体位置
- Android系统中设置TextView的行间距(非行高)
- Android应用随系统编译makefile中如何添加so库
- android自定义listview滚动条的样式
- Android TextView点击效果
- Android TextView点击效果