【Android 逆向】代码调试器开发 ( 代码调试器功能简介 | 设置断点 | 读写内存 | 读写寄存器 | 恢复运行 | Attach 进程 )

简介: 【Android 逆向】代码调试器开发 ( 代码调试器功能简介 | 设置断点 | 读写内存 | 读写寄存器 | 恢复运行 | Attach 进程 )

文章目录

一、代码调试器功能简介

二、Attach 进程





一、代码调试器功能简介


代码调试器功能 :


设置断点 : 无论什么类型的调试器 , 都必须可以设置断点 , 运行到断点处 , 挂起被调试进程 , 读取当前状态的 CPU 寄存器和内存数据 ;

arm 架构中 , 有一个单步调试标志位 , 将该标志位设置为 1 , 即可进行单步调试 ;

x86 架构中 , 主要是靠 int3 触发 , int3 对应 0xCC 机器码 , 将该机器码写入指令指定位置后 , 就会执行中断 , 调试器捕获该中断处理 , 就可以进入调试 ;

如果没有设置断点 , 想要调试程序 , 只能在系统调用时 , 触发中断 ; 如 : printf , 打印日志 , 文件改变 , 显示内容改变 等 ;

读写内存 : 可以读写 被调试进程 的内存数据 ;

读写寄存器 : 可以读写 被调试进程 的 CPU 寄存器数据 ; 如果有多个线程 , 默认读写主线程寄存器 ;

恢复运行 : 调试完毕后 , 还需要可以恢复运行 ; 调用 ptrace 函数 , 传入 PTRACE_CONT 参数 , 就可以继续进行 ;

上述所有操作 , 都是通过调用 ptrace 方法完成的 , 只是传入不同的参数 , 执行不同的操作 ;


参考 【Android 逆向】ptrace 函数 ( ptrace 函数族 | 进程附着 | 进程脱离 | 进程数据读写权限 | 进程对应的主线程寄存器读写 | 单步调试 |ptrace 函数族状态转换 ) 博客 ;






二、Attach 进程


进程 A 调试 进程 B , 首先要 attach 进程 B , attach 操作需要指定 进程 B 的 进程号 PID ;


进程 ID 在当前系统运行时是唯一的 ; 进程 B 每次启动时 , 进程号是随机分配的 , 值并不固定 ;


PID 进程号的取值范围 0 ~ 32767 ; 上限是 65535 一半 ;


一般情况下 1000 以下的进程号 , 是系统进程使用的 ;


以 非 root 权限执行的进程 , 都是 1000 以上的进程号 ;



Attach 进程代码 : PTRACE_ATTACH 参数表示该函数操作是 Attach 被调试进程 , nPid 参数为 进程 PID ;


ptrace(PTRACE_ATTACH, nPid, NULL, 0)


ptrace 函数参考文档 : https://man7.org/linux/man-pages/man2/ptrace.2.html


目录
相关文章
|
2月前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
31 1
|
2月前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异:从代码到用户体验
【10月更文挑战第5天】在移动应用开发的广阔天地中,安卓和iOS两大平台各占半壁江山。它们在技术架构、开发环境及用户体验上有着根本的不同。本文通过比较这两种平台的开发过程,揭示背后的设计理念和技术选择如何影响最终产品。我们将深入探讨各自平台的代码示例,理解开发者面临的挑战,以及这些差异如何塑造用户的日常体验。
|
3月前
|
存储 Java Android开发
🔥Android开发大神揭秘:从菜鸟到高手,你的代码为何总是慢人一步?💻
在Android开发中,每位开发者都渴望应用响应迅速、体验流畅。然而,代码执行缓慢却是常见问题。本文将跟随一位大神的脚步,剖析三大典型案例:主线程阻塞导致卡顿、内存泄漏引发性能下降及不合理布局引起的渲染问题,并提供优化方案。通过学习这些技巧,你将能够显著提升应用性能,从新手蜕变为高手。
34 2
|
3月前
|
Java Android开发 数据安全/隐私保护
Android中多进程通信有几种方式?需要注意哪些问题?
本文介绍了Android中的多进程通信(IPC),探讨了IPC的重要性及其实现方式,如Intent、Binder、AIDL等,并通过一个使用Binder机制的示例详细说明了其实现过程。
387 4
|
4月前
|
JSON JavaScript 前端开发
Android调用Vue中的JavaScript代码
Android调用Vue中的JavaScript代码
49 3
|
4月前
|
API Android开发
Android P 性能优化:创建APP进程白名单,杀死白名单之外的进程
本文介绍了在Android P系统中通过创建应用进程白名单并杀死白名单之外的进程来优化性能的方法,包括设置权限、获取运行中的APP列表、配置白名单以及在应用启动时杀死非白名单进程的代码实现。
72 1
|
4月前
|
Android开发 开发者 Kotlin
Android 多进程情况下判断应用是否处于前台或者后台
本文介绍在多进程环境下判断Android应用前后台状态的方法。通过`ActivityManager`和服务信息`RunningAppProcessInfo`可有效检测应用状态,优化资源使用。提供Kotlin代码示例,帮助开发者轻松集成。
298 8
|
4月前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
很多文章都介绍了FTPClient如何连接ftp服务器,但却很少有人说如何连接一台开了SSL认证的ftp服务器,现在代码来了。
114 2
|
5月前
|
存储 Java Android开发
🔥Android开发大神揭秘:从菜鸟到高手,你的代码为何总是慢人一步?💻
【7月更文挑战第28天】在Android开发中,每位开发者都追求极致的用户体验。然而,“代码执行慢”的问题时常困扰着开发者。通过案例分析,我们可探索从新手到高手的成长路径。
43 3
|
4月前
|
Java Android开发
Android项目架构设计问题之要提升代码的可读性和管理性如何解决
Android项目架构设计问题之要提升代码的可读性和管理性如何解决
44 0