Ida动态修改android程序的内存数据和寄存器数值,绕过so文件的判断语句

本文详细解析了如何通过IDA Pro动态调试工具,修改内存数据和寄存器值,来绕过自毁程序密码检测,具体包括修改TracerPid值和动态修改R6寄存器,实现程序跳转控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们继续分析自毁程序密码这个app,我们发现该程序会用fopen ()打开/proc/[pid]/status这个文件,随后会用fgets()和strstr()来获取,于是我们在strstr()处下个断点,然后让hex view的数据与R0同步。每次点击继续,我们都会看到strstr传入的参数。当传入的参数变为TracerPid:XXXX的时候我们停一下。因为在正常情况下,TracerPid的值应该是0。但是当被调试的时候就会变成调试器的pid。

enter image description here

enter image description here

为了防止程序发现我们在调试,在这里我们需要把值改回0。我们在hex view的2那里点击右键,然后选择edit。随后我们输入30和00,再点击”apply changes”。就可以把TracerPid改为0了。然后就可以bypass这一次的反调试的检测。

enter image description here

但这个程序检测TracerPid的次数非常频繁,我们要不断的修改TracerPid的值才行,这种方法实在有点治标不治本,所以我们会在下一节介绍patch so文件的方法来解决这个问题。

另外在ida动态调试过程中,除了内存中的数据可以修改,寄存器的数据也是可以动态修改的。比如说程序执行到CMP R6, #0。本来R6的值是0,经过比较后,程序会跳转到4082A3FC这个地址。

enter image description here

但是如果我们在PC执行到4082A1F8这条语句的时候,将R6的值动态修改为0。程序就不会进行跳转了。

enter image description here

enter image description here

你甚至可以修改PC寄存器的值来控制程序跳转到任何想要跳转到的位置,简直和ROP的原理一样。但记得要注意栈平衡等问题。

enter image description here

 

转载于:https://www.cnblogs.com/joey-hua/p/4702827.html

在逆向工程领域,IDA Pro是一个强大的工具,它可以让我们深入分析程序的工作原理。为了更好地理解IDA Pro的功能,你可以参考《IDA逆向分析教程:从零开始》这份教程。它从基础概念讲起,帮助初学者逐步掌握逆向分析的技巧。 参考资源链接:[IDA逆向分析教程:从零开始](https://wenku.youkuaiyun.com/doc/2sw7fpy0uj) 首先,打开IDA Pro并加载你想要分析的程序。软件将自动生成程序的反汇编代码。此时,你需要识别各种CPU寄存器,它们在IDA中通常以特定的名称标记,如EAX、EBX等。了解这些寄存器对于理解程序如何处理数据至关重要。 接下来,查看程序中的数据传输指令。在IDA中,这些指令通常以MOV、LEA等关键词出现。数据传输指令的作用是将数据从一个位置移动到另一个位置,或者是计算内存地址。例如,MOV指令会将源操作数的值复制到目标操作数,而LEA指令则用于加载内存地址到寄存器中。 通过分析这些指令,你可以追踪程序数据的流动路径,理解其数值系统数据处理方式。为了更深入地了解CPU寄存器的作用以及数据传输指令的具体应用,可以参考教程中的“CPU寄存器数据传输指令”部分,那里会有详细的解释实例。 最后,利用IDA的调试器功能可以对程序进行动态分析。在调试过程中,你可以观察寄存器值的变化,以及数据如何在不同存储位置间传输。这有助于你更准确地理解程序的运行流程逻辑。 掌握了IDA Pro的基本操作CPU寄存器的功能后,你可以利用这些知识对更复杂的程序进行逆向分析。为了进一步扩展你的逆向工程技能,建议持续阅读《IDA逆向分析教程:从零开始》中的后续章节,这将有助于你在逆向工程的道路上稳步前行。 参考资源链接:[IDA逆向分析教程:从零开始](https://wenku.youkuaiyun.com/doc/2sw7fpy0uj)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值