壳偷代码与OD脚本编写——UnPackMe_PELock1.06案例分析

需积分: 0 0 下载量 114 浏览量 更新于2023-12-31 收藏 590KB PDF 举报
本章将介绍被称为"stolen bytes"的概念以及与之相关的OD(OllyDbg)脚本编写方面的内容。我们将以UnPackMe_PELock1.06为例进行讲解,这款壳被广泛用作学习范例。在加载程序并停留在入口点处后,如果直接按下F9键运行,会发现该程序会弹出一个异常报错框。为了继续运行,我们可以按下shift+F9来忽略异常。然后,主程序对话框会弹出。在这个过程中,我们可以利用日志窗口中最后异常发生处的信息来定位OEP(原始入口点)。接下来,我们将介绍一种新的方法来定位最后一次异常发生处。我们将为Ring3异常分发函数KiUserExceptionDispatcher设置一个断点,因为所有的异常都会经过这个函数。在OD中找到这个函数后,我们对其进行分析。红色箭头标注的是NTDLL.DLL中KiUserExceptionDispatcher的起始地址。接下来是一个CALL指令,用于调用SEH链(结构异常处理链)中的异常处理函数。在执行完毕后,函数将返回,并根据返回结果决定下一步操作。 首先,让我们来解释一下什么是"stolen bytes"。在软件保护方面,壳(packer)被用来保护二进制文件免受逆向工程的威胁。"stolen bytes"是指通过某种手段恢复加密、压缩或混淆的代码,使其再次可执行。使用stolen bytes的目的是为了检测和绕过软件保护机制。 在我们的例子中,UnPackMe_PELock1.06是被PELock壳保护的。我们的目标是通过查找stolen bytes来解除对原始代码的保护,以便进行进一步的分析和修改。在OD中,我们可以定位到stolen bytes并还原其原始形态。在这个例子中,我们可以使用OD脚本来自动化这个过程。 为了定位stolen bytes,我们可以借助OD提供的多种调试和分析工具。在使用OD进行调试时,我们可以设置断点在程序执行过程中感兴趣的地方。对于软件保护壳,我们可以设置断点在stolen bytes的解密/解压缩/解混淆处。通过检查内存中的数据和寄存器的变化,我们可以追踪代码的执行路径。此外,我们还可以使用OD提供的动态数据窗口来查看内存中的数据变化。 一旦我们找到stolen bytes并恢复代码,我们就可以对其进行进一步分析和修改。例如,我们可以查找关键函数或验证某些假设。通过修改stolen bytes,我们可以绕过软件保护措施,改变程序的行为或提取隐藏的信息。 为了更好地理解stolen bytes的概念,我们可以参考一些经典的教程和示例。在这些教程中,UnPackMe_PELock1.06经常被用作范例,因为它展示了stolen bytes的常见用法和技术。通过学习这些教程,我们可以深入了解stolen bytes的原理和应用。 总之,在本章中,我们介绍了stolen bytes的概念,以及使用OD定位和恢复stolen bytes的方法。通过分析和修改stolen bytes,我们可以绕过软件保护措施,理解程序的内部运作,并进行进一步的分析和修改。对于研究和逆向工程人员来说,掌握stolen bytes的技术是非常重要的。希望本章的内容能够帮助读者更好地理解和应用stolen bytes的概念。