Ida动态修改android程序的内存数据和寄存器数值,绕过so文件的判断语句
2024-10-13 00:55:10
我们继续分析自毁程序密码这个app,我们发现该程序会用fopen ()打开/proc/[pid]/status这个文件,随后会用fgets()和strstr()来获取,于是我们在strstr()处下个断点,然后让hex view的数据与R0同步。每次点击继续,我们都会看到strstr传入的参数。当传入的参数变为TracerPid:XXXX的时候我们停一下。因为在正常情况下,TracerPid的值应该是0。但是当被调试的时候就会变成调试器的pid。
为了防止程序发现我们在调试,在这里我们需要把值改回0。我们在hex view的2那里点击右键,然后选择edit。随后我们输入30和00,再点击”apply changes”。就可以把TracerPid改为0了。然后就可以bypass这一次的反调试的检测。
但这个程序检测TracerPid的次数非常频繁,我们要不断的修改TracerPid的值才行,这种方法实在有点治标不治本,所以我们会在下一节介绍patch so文件的方法来解决这个问题。
另外在ida动态调试过程中,除了内存中的数据可以修改,寄存器的数据也是可以动态修改的。比如说程序执行到CMP R6, #0。本来R6的值是0,经过比较后,程序会跳转到4082A3FC这个地址。
但是如果我们在PC执行到4082A1F8这条语句的时候,将R6的值动态修改为0。程序就不会进行跳转了。
你甚至可以修改PC寄存器的值来控制程序跳转到任何想要跳转到的位置,简直和ROP的原理一样。但记得要注意栈平衡等问题。
最新文章
- Linux查看CPU和内存使用情况(转)
- hihoCoder 1183 连通性一·割边与割点(Tarjan求割点与割边)
- 前端利器---Bootstrap
- &;&; 和 ||的区别
- js 节点 document html css 表单节点操作
- 短信SMS的接收
- C语言——内存分配
- XUTils框架的学习(三)
- Datagridview 实现二维表头和行合并【转载】
- Binary Tree Zigzag Level Order Traversal——LeetCode
- WSAWaitForMultipleEvents()
- Mysql innodb 间隙锁
- Myeclipse安装jbpm6
- Http远程调用服务
- 1小时学会JQuery
- noip2017部分题目
- openpyxl工具总结
- 理解Docker镜像分层
- virt-manager中为centos 7.2 扩容根分区
- golang - channels
热门文章
- Windows下Eclipse提交MR程序到HadoopCluster
- Android布局尺寸思考
- 30天C#基础巩固------this,base,string中的方法,StringBuilder性能
- C语言的字符串分割
- MVC之前的那点事儿系列(4):Http Pipeline详细分析(上)
- Can't install mysql-python version 1.2.5 in Windows
- Spring MVC静态资源处理(转)
- EasyUI-扩大在DataGrid显示次网格的行
- 面试问题整理笔记系列 一 Java容器类
- [javaSE] 注解-JDK中的注解