XiaoZi's CrackMe
来源:互联网 发布:琅琊榜2刘昊然 知乎 编辑:程序博客网 时间:2024/06/07 06:14
不知道是不是经验累积还是这个CrackMe太简单的关系?一下子就弄出来了
新手可以拿这个来练练
扫了一眼破文,说主要是anti难
打开一下程序就把桌面给隐藏了。。总感觉像那种黑客恶作剧软件什么的
载入程序F9运行一下,会有一个内存访问异常(有一条指令往内存地址0处写数据)
00401564 |. C700 01000000 mov dword ptr [eax], 1
这条指令的上面有这样的设置异常处理程序的命令:
00401553 |> \68 00104000 push 00401000 ; /pTopLevelFilter = XiaoZi'C.0040100000401558 |. E8 F3000000 call <jmp.&KERNEL32.SetUnhandledExcep>; \SetUnhandledExceptionFilter
就是说,你在401000这个位置下个断点,Shift+F9运行停到断点之后再跟踪找到返回地址就行了,在这里的异常处理程序里面有这样一句
0040100A |. C787 B8000000>mov dword ptr [edi+B8], 0040156A
就是修改寄存器EIP为40156A,那就在这个地址下个断点就可以继续走了(其实就是引发异常的下一条指令)
当然你也可以直接把引发异常的指令直接nop掉
一直F8单步。。直到这里的时候
004015C1 |. 6A 00 push 0 ; /lParam = NULL004015C3 |. 68 56134000 push 00401356 ; |DlgProc = XiaoZi'C.00401356004015C8 |. 6A 00 push 0 ; |hOwner = NULL004015CA |. 6A 01 push 1 ; |pTemplate = 1004015CC |. FF35 70304000 push dword ptr [403070] ; |hInst = NULL004015D2 |. E8 07000000 call <jmp.&USER32.DialogBoxParamA> ; \DialogBoxParamA
就是创建对话框的时候,程序异常,来到这样一个位置:
7C92E4FF 8B0424 mov eax, dword ptr [esp]7C92E502 8BE5 mov esp, ebp7C92E504 5D pop ebp7C92E505 C3 retn
返回到程序领空是这个样子:
00401184 E8 79040000 call <jmp.&KERNEL32.CloseHandle> ; \CloseHandle00401189 FF35 6C304000 push dword ptr [40306C] ; /hObject = NULL0040118F |. E8 6E040000 call <jmp.&KERNEL32.CloseHandle> ; \CloseHandle00401194 |. C9 leave
在call一个CloseHandle的时候死掉,很显然是因为句柄值无效
再看看上面的代码,似乎都是在做坏事(anti),所以把滚动条拉倒最上面Ctrl+F查找所有”call 40101E”(40101E这个地方是专门做坏事的。。),然后逐个nop掉(一共有两个)
其中一个附近还有一个call
0040142B |. E8 EEFBFFFF call 0040101E00401430 |. E8 CCFEFFFF call 00401301
所谓近朱者赤 近墨者黑啊,也进去看看吧
00401301 /$ B8 74124000 mov eax, 0040127400401306 |. A3 90384000 mov dword ptr [403890], eax0040130B |. 8B18 mov ebx, dword ptr [eax]0040130D |. 66:81FB 753A cmp bx, 3A7500401312 |. 74 41 je short 0040135500401314 |. 68 94384000 push 00403894 ; /pOldProtect = anti.0040389400401319 |. 6A 40 push 40 ; |NewProtect = PAGE_EXECUTE_READWRITE0040131B |. 6A 10 push 10 ; |Size = 10 (16.)0040131D |. FF35 90384000 push dword ptr [403890] ; |Address = anti.0040127C00401323 |. E8 2E030000 call <jmp.&KERNEL32.VirtualProtect> ; \VirtualProtect00401328 |. A1 90384000 mov eax, dword ptr [403890]0040132D |. BB 753A0000 mov ebx, 3A7500401332 |. 66:8918 mov word ptr [eax], bx00401335 |. B8 7C124000 mov eax, 0040127C0040133A |. A3 90384000 mov dword ptr [403890], eax0040133F |. 8B18 mov ebx, dword ptr [eax]00401341 |. 66:81FB 7532 cmp bx, 327500401346 |. 74 0D je short 0040135500401348 |. A1 90384000 mov eax, dword ptr [403890]0040134D |. BB 75320000 mov ebx, 327500401352 |. 66:8918 mov word ptr [eax], bx00401355 \> C3 retn
在这里动态修改了验证密码部分的代码(只改了很少,不是整个算法改掉)
但是调试看来je(如果不实现的话就会修改)很少会不实现,以防万一还是改为jmp吧
破解方面就不说了,手法比较简单,断点MessageBoxA就可以到达验证密码的算法位置了
- XiaoZi's CrackMe
- Tiger's Crackme
- Duelist's Crackme #3
- Greedy Fly's Crackme
- Aesculapius's Crackme
- cyclops's Jade Crackme详解
- Diablo 2oo2’s CrackMe 2 算法分析
- 破解教程 第十四课 用S命令破解crackme实例(TRW2000下)
- 《PEDIY CrackMe 2007》学习笔记(一) - 序列号 - aalloverred - Taliesin‘s KGM1Tal
- Triangle CrackMe
- CrackMe-crackhead
- crackme 网站
- Crackme 1
- Crackme 2
- Crackme 3
- Crackme 4
- Crackme 20
- Crackme 21
- 自己的脱壳过程(PEtite2.2)
- RMAN常用命令总结
- CF325 A. Square and Rectangles 面积累加
- java设计模式---工厂方法模式
- hdu4472
- XiaoZi's CrackMe
- 归并排序
- 冒泡排序算法
- Google C++ Mocking Framework Cheat Sheet译文
- sgu 330——Numbers
- 层层递进Struts1(八)之总结
- Greedy Gift Givers
- 2013编程之美挑战赛---管道系统
- java设计模式---工厂方法模式