0X00 分析程序

**小程序:https://download.csdn.net/download/z_lit0/10695096
运行程序观察程序:
****核心原理20章内嵌补丁练习学习笔记
****核心原理20章内嵌补丁练习学习笔记
根据提示可知道需要**的地方为这俩字符串,将程序加载到od中观察:
****核心原理20章内嵌补丁练习学习笔记
看到pushad,尝试在popad处下断点:
****核心原理20章内嵌补丁练习学习笔记
****核心原理20章内嵌补丁练习学习笔记
****核心原理20章内嵌补丁练习学习笔记
发现程序并没有断下,那只好单步执行看看:
运行到0040109B函数,可以发现进入了一个解密循环,主要是使用xor 44解密ebx指向的地址
****核心原理20章内嵌补丁练习学习笔记
继续单步执行到004010BD函数又看见程序执行了两个解密循环,第二个解密循环解密的区域是ebx指向地址00401007和上面的004010F5不同区域。
****核心原理20章内嵌补丁练习学习笔记
第三个解密循环如下图又是和第一个解密循环相同的解密区域,说明进行双重加密操作。
****核心原理20章内嵌补丁练习学习笔记
继续运行遇到如下经过解密后的区域函数00401039:
****核心原理20章内嵌补丁练习学习笔记
位于00401046处循环,先取ebx指向地址004010F5的4个字节(004010F5即我们上面分析的双重加密过后的区域)和累加器edx(第一次为0)相加后保存在edx中,循环结束后,将004010F5的特征值记录到edx中,(其实就是加加加后的值的,即edx溢出后的值)
****核心原理20章内嵌补丁练习学习笔记
可以发现程序使用固定的值31eb8db0来比较,不相等就推出程序
****核心原理20章内嵌补丁练习学习笔记

0X01 **程序

****核心原理20章内嵌补丁练习学习笔记
发现程序调用了DialogBox,可以推测004010F5存储着字符串:
****核心原理20章内嵌补丁练习学习笔记
于是可以在空白区域内嵌补丁:
****核心原理20章内嵌补丁练习学习笔记
****核心原理20章内嵌补丁练习学习笔记
写好补丁,还要改下入口跳转函数,先跳转执行补丁代买再执行004011A2处的跳转跳转到真实区域。
****核心原理20章内嵌补丁练习学习笔记
修改之后还有在文件修改因为该区域经过了xor加密,不能直接写入需要转化一下,
E9 xor 7 = EE
F8 xor 7 = FF
01 xor 7 = 06
RVA = 00401083- 400000(imagebase) = 1083
根据pe view可知位于第一节区,第一节区的PointToRawData为400,VA = 1000
所以文件偏移为1083-1000+400 = 483
****核心原理20章内嵌补丁练习学习笔记
修改之后保存运行:
****核心原理20章内嵌补丁练习学习笔记
****核心原理20章内嵌补丁练习学习笔记

相关文章: