Poner 发表于 2014-10-21 21:52

【吾爱破解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跳回继续执行

然后保存文件后输入随机账号注册码 出现注册成功提示 如图



ximo 发表于 2014-10-22 14:57

答案有效,爆破成功。

我是用户 发表于 2014-10-22 15:17

改virtualprotect可以直接改数据,不用hook.

ximo 发表于 2014-10-23 20:38

最后成绩:187*70%*50%=65分
评委评价:爆破有效。
谢谢参与,请继续加油。

hack_koko 发表于 2014-10-23 23:33

bess 发表于 2014-11-3 16:07

我是用户 发表于 2014-10-22 15:17
改virtualprotect可以直接改数据,不用hook.

请问怎么改virtualprotect数据?

我是用户 发表于 2014-11-3 16:56

bess 发表于 2014-11-3 16:07
请问怎么改virtualprotect数据?

VirtualProtect的NewProtect的值0x20是数据区的,你把它改成0x40就行,跟下edx的来源.

yutao531315 发表于 2014-11-4 02:29

大牛们 好牛逼 ,菜鸟看得眼花
页: [1]
查看完整版本: 【吾爱破解2014CrackMe大赛】【第一组】