【吾爱破解2014CrackMe大赛】【第一组】
本帖最后由 ximo 于 2014-10-23 20:38 编辑OD载入后随便输入用户名注册码出现信息框点确定后在MessageBoxA下个断点
然后再次点击注册后成功断下
看了下堆栈窗口如图点击右键在调试窗口中跟随
如图然后来到这个CALL入口
然后跟进去分析发现关键跳转
在此处NOP即可
不过该CM的关键代码貌似是创建内存写入的 不能直接改着玩
然后继续在MessageBoxA下断回朔
来到
然后在CALL EAX前面00402868写个JMP根据EAX的值+偏移计算出补丁地址
保存两个nop即可
如代码
00408E21 60 pushad 入栈
00408E22 83E8 49 sub eax,0x49 根据偏移算出需要补丁的地址
00408E25 66:C700 9090 mov word ptr ds:,0x9090 写入nop
00408E2A 61 popad出栈
00408E2B 8D5424 3C lea edx,dword ptr ss:还原写JMP之前的代码1
00408E2F 52 push edx还原写JMP之前的代码2
00408E30^ E9 389AFFFF jmp CrackMe.0040286D 跳回下一句继续执行
但写好补丁后小编发现该内存不可写的问题于是在VirtualAlloc下断分析 回朔后如图
意思是创建内存的时候他传参数是可写的
那就只有一个可能了
他是创建内存后直接修改内存属性来实现内存不可写的
于是小编继续在VirtualProtect 下断回朔如图
现在想想总算是找到问题所在
然后看了下寄存器 EDX的值为20 可读可执行 不可写
挺蛋疼的
于是在00401A2C push edx这里写HOOK 跳到空白地址改寄存器
代码:
00408E3F BA 40000000 mov edx,0x40 保存edx为40 可读可写可执行
00408E44 52 push edx还原代码1
00408E45 51 push ecx还原代码2
00408E46 8B0E mov ecx,dword ptr ds:还原代码3
00408E48 51 push ecx还原代码4
00408E49^ E9 E38BFFFF jmp CrackMe.00401A31跳回继续执行
然后保存文件后输入随机账号注册码 出现注册成功提示 如图
答案有效,爆破成功。 改virtualprotect可以直接改数据,不用hook. 最后成绩:187*70%*50%=65分
评委评价:爆破有效。
谢谢参与,请继续加油。 我是用户 发表于 2014-10-22 15:17
改virtualprotect可以直接改数据,不用hook.
请问怎么改virtualprotect数据? bess 发表于 2014-11-3 16:07
请问怎么改virtualprotect数据?
VirtualProtect的NewProtect的值0x20是数据区的,你把它改成0x40就行,跟下edx的来源. 大牛们 好牛逼 ,菜鸟看得眼花
页:
[1]