我们继续分析自毁程序密码这个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的原理一样。但记得要注意栈平衡等问题。

最新文章

  1. Linux查看CPU和内存使用情况(转)
  2. hihoCoder 1183 连通性一·割边与割点(Tarjan求割点与割边)
  3. 前端利器---Bootstrap
  4. && 和 ||的区别
  5. js 节点 document html css 表单节点操作
  6. 短信SMS的接收
  7. C语言——内存分配
  8. XUTils框架的学习(三)
  9. Datagridview 实现二维表头和行合并【转载】
  10. Binary Tree Zigzag Level Order Traversal——LeetCode
  11. WSAWaitForMultipleEvents()
  12. Mysql innodb 间隙锁
  13. Myeclipse安装jbpm6
  14. Http远程调用服务
  15. 1小时学会JQuery
  16. noip2017部分题目
  17. openpyxl工具总结
  18. 理解Docker镜像分层
  19. virt-manager中为centos 7.2 扩容根分区
  20. golang - channels

热门文章

  1. Windows下Eclipse提交MR程序到HadoopCluster
  2. Android布局尺寸思考
  3. 30天C#基础巩固------this,base,string中的方法,StringBuilder性能
  4. C语言的字符串分割
  5. MVC之前的那点事儿系列(4):Http Pipeline详细分析(上)
  6. Can't install mysql-python version 1.2.5 in Windows
  7. Spring MVC静态资源处理(转)
  8. EasyUI-扩大在DataGrid显示次网格的行
  9. 面试问题整理笔记系列 一 Java容器类
  10. [javaSE] 注解-JDK中的注解