CTF 逆向题之 Bwarm

本文详细记录了一次VMP壳脱壳的实战过程,包括查壳、设置断点、跟踪内存变化、OEP定位、代码还原及修复重定向表等关键步骤。

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

        这个题本次攻防大赛的热身题,难度不算太大,坑就坑在是vmp壳,好吧今天把这个硬骨头啃了吧 : )

 首先,还是查壳,没啥说的 vmp2.0.7

 根据vmp系列脱壳教程,这个壳是1.8以上的方案进行脱壳。先拖入OD,下一个API断点  VirtualProtect (教程建议是下硬件断点,可能是我的OD有问题,硬件断点断不下来,只能是F2断点了 T_T)

然后F9开始跑,测试到第5次跑飞……

那么就在第四次的时开始候单步跟踪,先跳出VirtualProtect 函数 ,然后对代码段设置,内存访问断点

然后F9继续运行,断下来后,在ESP的地方跟踪内存数据,找到SEH结构化异常的上面35C地址那块,下一个硬件写入断点,并取消之前的内存访问断点

然后继续F9运行,再次断下来,这次再在代码断下内存访问断点,然后多次F9运行,注意观察栈帧的变化,快到SEH的地方就接近OEP了,此时已经跟踪到解压后的代码段,然后进行一下代码分析。

完成分析后,代码就还原了,然后单步跟踪,发现OEP 

发现OEP后,同时我们也注意到栈帧部分被压入了3条数据,这个就是VMP偷取的代码,我们需要进行还原,于是在当前位置查找一段 0000000000的内存段

然后,对VMP偷取的代码进行patch。最后跳转到OEP 也就是 jmp 012319C9

接着我们把当前的 01231FB5 设置为新的EIP,就可以进行dump内存操作了,填好起始地址和入口地址后,点击脱壳

把脱壳的文件保存为 dump.exe 然后尝试运行,发现不能运行,直接崩溃掉了

于是猜到可能是重定向表的问题造成,用PE编辑器修改一下这里,然后保存。

再次运行,OK !!

然后可以载入OD进行动态分析了。

为了方便调试,我们知道程序运行后,会提示输入字符串,那么我们先找到输入字符串的地方。

然后开始单步跟踪到这里,就是完成字符串输入后

继续跟踪,我们发现一个base64的字符串:dQkLdqXP=mLMAa8p=lnncQcq/GEPdGKXcNDl=Mnr=pcoBGPQdG1NA3Aw

那么另外一个字符串就是base64的字典了,也就是:0123456789+/=ABCDEFGHIabcdefghiJKLMNOPQRSTUVWXYZjklmnopqrstuvwxyz

于是,我们就可以根据这个对base64zi'f字符串进行解密:

坑了,竟然是乱码,还以为就这样搞定了呢,后来请教了一下大神,他说是字典有问题,于是我仔细的看了一下,确实

字典里面按说是不应该有‘=’ 这个字符的,按base64的说法这个是占位用的来补足字节数。所以按照大神的指点,我把大神的脚本用C++重新写了一遍(也是为了更好的理解反向分析的过程),终了跑出来了 T_T

最后,就是见证奇迹的时刻到了 * ^_^ *

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值