使用Cydia Substrate 从Native Hook Android Native世界
2016-04-28 10:32
501 查看
同系列文章:
使用Cydia Substrate 从Native Hook Android Java世界
使用Cydia Substrate Hook Android Java世界
本文展示如何hook libc里的删除文件函数remove。建立工程同使用Cydia Substrate 从Native Hook Android Java世界。
只有Main.cy.cpp代码不同。代码如下:
使用Cydia Substrate 从Native Hook Android Java世界
使用Cydia Substrate Hook Android Java世界
一、建立工程
手机端配置见之前文章,强调一句,手机必须root。本文展示如何hook libc里的删除文件函数remove。建立工程同使用Cydia Substrate 从Native Hook Android Java世界。
只有Main.cy.cpp代码不同。代码如下:
#include <stdio.h> #include <substrate.h> #include <jni.h> #include <unistd.h> #include <android/log.h> #define TAG "CydiaHook" #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,TAG ,__VA_ARGS__) // 定义LOGI类型 //指明要hook的lib MSConfig(MSFilterLibrary, "/system/lib/libc.so") //储存旧函数地址 int (* oldremove)(const char* path); //自定义的新函数地址 int newremove(const char* path) { LOGI("%s",path); if (strstr(path, "htc") != NULL) { //这里可以hook住,禁止删除关键字中有htc的文件 return 0; } //调用旧函数 return oldremove(path); } //初始化时进行hook MSInitialize { LOGI( "Substrate initialized."); MSImageRef image; //获得模块地址 image = MSGetImageByName("/system/lib/libc.so"); if (image != NULL) { //找到待hook函数的地址 void * hookremove=MSFindSymbol(image,"remove"); if(hookremove==NULL) { LOGI("error find remove "); } else { MSHookFunction(hookremove,(void*)&newremove,(void **)&oldremove); } } else { LOGI("ERROR FIND LIBC"); } }
二、编译代码
在ndk环境变量配置好的前提下,cmd下进入jni目录,输入ndk-build 如果一切正常会有类似如下的输出,并且libs目录下有对应平台的so文件。三、测试结果:
四、相关下载
代码相关文章推荐
- Android MD控件之CardView
- (转)Android Eclipse 代码混淆
- Android中手势滑动翻页之GestureDetector总结
- android手把手教你开发launcher(四)
- [置顶] Android 实现模拟按键
- Android 软引用(SoftReference)与LruCache
- Android 禁止横竖屏切换、设置横屏
- android手把手教你开发launcher(三)
- Android 打印机
- android的Environment类
- Android drawable
- android手把手教你开发launcher(二)
- 50 Android Hack 读书笔记
- Android基础类之BaseAdapter
- Android硬件访问服务框架分析
- android底层开发笔记(2)androidLK启动过程1
- MPchart使用详解及详细属性(一)
- Android 6.0 运行时权限处理完全解析
- Android中AlertDialog各种对话框的用法实例详解
- 《Android开发艺术探索》一书作者录制的Android视频