逆向工程核心原理20章内嵌补丁练习学习笔记

导航

  • 0X00 分析程序
  • 0X01 破解程序

0X00 分析程序

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

0X01 破解程序

逆向工程核心原理20章内嵌补丁练习学习笔记_第13张图片
发现程序调用了DialogBox,可以推测004010F5存储着字符串:
逆向工程核心原理20章内嵌补丁练习学习笔记_第14张图片
于是可以在空白区域内嵌补丁:
逆向工程核心原理20章内嵌补丁练习学习笔记_第15张图片
逆向工程核心原理20章内嵌补丁练习学习笔记_第16张图片
写好补丁,还要改下入口跳转函数,先跳转执行补丁代买再执行004011A2处的跳转跳转到真实区域。
逆向工程核心原理20章内嵌补丁练习学习笔记_第17张图片
修改之后还有在文件修改因为该区域经过了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章内嵌补丁练习学习笔记_第18张图片
修改之后保存运行:
逆向工程核心原理20章内嵌补丁练习学习笔记_第19张图片
在这里插入图片描述

你可能感兴趣的:(安全)