【Android 逆向】函数拦截 ( GOT 表拦截 与 插桩拦截 | 插桩拦截简介 | 插桩拦截涉及的 ARM 和 x86 中的跳转指令 )
2023-06-13 09:17:59 时间
文章目录
一、GOT 表拦截与插桩拦截
函数拦截有
种方式 :
- 使用 GOT 表进行函数拦截 : 修改 GOT 表实现函数拦截 ;
- 插桩拦截 : 该方法就是 在实际被调用的函数中添加跳转代码实现函数拦截 ;
在 【Android 逆向】函数拦截原理 ( 通过修改 GOT 全局偏移表拦截函数 | 通过在实际被调用的函数中添加跳转代码实现函数拦截 ) 博客中分析到 , " 使用 GOT 表进行函数拦截 " 方法不能保证 100% 成功 , 插桩拦截 可以实现 100% 拦截成功率 ;
" 插桩拦截 " 由于需要 修改代码 , 可能会 被反调试工具发现 , 如果是游戏 , 账号估计就凉了 ; 反调试工具 不可能监控所有的函数 , 一个应用的函数个数都是以万进行计算的 ;
二、插桩拦截简介
插桩拦截 : 在要 调用的实际函数 的入口处 , 写入跳转代码 , 跳转到 我们自定义的 拦截函数中 , 在拦截函数中 , 执行 处理函数 , 处理函数再次调用实际函数 或 自己执行一些其它函数 ;
三、插桩拦截涉及的 ARM 和 x86 中的跳转指令
插桩拦截 时 , 在 实际函数 入口处写入的 跳转代码 就是 汇编中的 跳转指令 ;
跳转指令 可以理解为 " 指令 " 或 " 机器码 " , 指令是人看到的 汇编指令 , 机器码是给 CPU 执行的 二进制机器码 ; 二者是等效的 ;
x86 架构下的跳转指令 : 下面的二进制数都是十六进制数 ;
位指令 ;
E9 00 00 00 00
, JMP target
;
JMP 是强制跳转指令 , E9
是对应的机器码 ;
ARM 架构下的跳转指令 : 下面的二进制数都是十六进制数 ;
位指令 ;
04 F0 1F E5 00 00 00 00
, B target
;
B 指令是无条件跳转指令 , 04 F0 1F E5
是对应的机器码 ;
x86 架构是 复杂指令集 , ARM 架构是 精简指令集 , 从上面的机器码可以看出区别 , x86 架构中指令有
字节 , ARM 架构中 指令只有
字节 ;
相关文章
- android onresume函数,Android界面跳转时候onDestroy和onResume的调用顺序
- android 混淆规则作用,Android代码混淆详解
- 测试android sdk是否安装成功,配置Android SDK
- android toast 自定义时间,Android 自定义 Toast 显示时间「建议收藏」
- Android平台GB28181设备接入端PTZ指令对接详解
- Android 渐变圆环,圆形进度条效果实现
- Android studio更新后出现警告:Warning:The `android.dexOptions.incremental` property is deprecated and it has
- 【Android 异步操作】AsyncTask 异步任务 ( 参数简介 | 方法简介 | 使用方法 | AsyncTask 源码分析 )
- 【错误记录】Android 文件分享 FileProvider 设置错误
- 【Android 逆向】Android 中常用的 so 动态库 ( libm.so 数学函数动态库 | liblog.so 日志模块动态库 | libselinux.so 安全模块动态库 )
- 【ijkplayer】编译 Android 版本的 ijkplayer ⑤ ( 执行 init-android-libyuv.sh | 执行 init-android-soundtouch.sh )
- android横竖屏切换activity生命周期变化详解手机开发
- Android OnLowMemory和OnTrimMemory详解手机开发
- Android Studio 导入项目 出现安装Error:Cause: failed to find target with hash string ‘android-23’ 等错误详解手机开发
- ARM on Linux:架构创新之旅(arm跑linux)
- Arming MySQL在ARM上释放MySQL的发展性能(arm 版本mysql)
- Redis在ARM上的性能优化(redis 适配arm)
- 平台Redis在ARM平台上的部署实践(redis 适配arm)
- 架构研究Redis在ARM架构上的适配性(redis 适配arm)
- Android中使用PULL方式解析XML文件深入介绍
- Android三种GSM手机定位技术分析
- Android开发笔记之:HandlerRunnable与Thread的区别详解
- Android执行shell命令详解
- android对话框弹出位置和透明度的设置具体实现方法
- Android自定义ActionBar实例