首页
社区
课程
招聘
[原创]qwgboy2000's crackme Keyfile类型简单分析
2006-11-19 22:30 5280

[原创]qwgboy2000's crackme Keyfile类型简单分析

2006-11-19 22:30
5280
【破解日期】 2006年11月19日
【破解作者】 冷血书生
【作者邮箱】 meiyou
【作者主页】 hxxp://www.126sohu.com/
【使用工具】 OD
【破解平台】 Win9x/NT/2000/XP
【软件名称】 qwgboy2000's crackme
【下载地址】 本地
【软件大小】 152k
【加壳方式】 无
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
------------------------------------------------------------------------

--------
【破解内容】

00401076   push 80000000
0040107B   push qwgboy20.004200A8                ; keyfile.qwg
00401080   call dword ptr ds:[<&KERNEL32.CreateF>; kernel32.CreateFileA
00401086   cmp esi,esp
00401088   call qwgboy20.004031C0
0040108D   mov dword ptr ss:[ebp-8],eax
00401090   cmp dword ptr ss:[ebp-8],-1
00401094   jnz short qwgboy20.004010BA
00401096   mov esi,esp
00401098   push 10
0040109A   push qwgboy20.004200A0                ; 失败
0040109F   push qwgboy20.00420088                ; 很遗憾验证失败了!
004010A4   push 0
004010A6   call dword ptr ds:[<&USER32.MessageBo>; USER32.MessageBoxA
004010AC   cmp esi,esp
004010AE   call qwgboy20.004031C0
004010B3   xor eax,eax
004010B5   jmp qwgboy20.00401262
004010BA   mov esi,esp
004010BC   push 0
004010BE   mov eax,dword ptr ss:[ebp-8]
004010C1   push eax
004010C2   call dword ptr ds:[<&KERNEL32.GetFile>; kernel32.GetFileSize
004010C8   cmp esi,esp                           ; 获取文件大小比较
004010CA   call qwgboy20.004031C0
004010CF   mov dword ptr ss:[ebp-10],eax
004010D2   cmp dword ptr ss:[ebp-10],-1
004010D6   jnz short qwgboy20.004010F5
004010D8   mov esi,esp
004010DA   push 10
004010DC   push qwgboy20.00420080                ; 出错了
004010E1   push qwgboy20.00420064                ; 读文件时发生未知错误!
004010E6   push 0
004010E8   call dword ptr ds:[<&USER32.MessageBo>; USER32.MessageBoxA
004010EE   cmp esi,esp
004010F0   call qwgboy20.004031C0
004010F5   cmp dword ptr ss:[ebp-10],14          ; 与14比较
004010F9   jnz qwgboy20.00401243
004010FF   mov ecx,dword ptr ss:[ebp-10]
00401102   add ecx,2
00401105   push ecx
00401106   call qwgboy20.00401330
0040110B   add esp,4
0040110E   mov dword ptr ss:[ebp-30],eax
00401111   mov esi,esp
00401113   push 0
00401115   lea edx,dword ptr ss:[ebp-4]
00401118   push edx
00401119   mov eax,dword ptr ss:[ebp-10]
0040111C   push eax
0040111D   mov ecx,dword ptr ss:[ebp-30]
00401120   push ecx
00401121   mov edx,dword ptr ss:[ebp-8]
00401124   push edx
00401125   call dword ptr ds:[<&KERNEL32.ReadFil>; kernel32.ReadFile
0040112B   cmp esi,esp
0040112D   call qwgboy20.004031C0
00401132   mov esi,esp
00401134   mov eax,dword ptr ss:[ebp-8]
00401137   push eax
00401138   call dword ptr ds:[<&KERNEL32.CloseHa>; kernel32.CloseHandle
0040113E   cmp esi,esp
00401140   call qwgboy20.004031C0
00401145   mov ecx,dword ptr ss:[ebp-30]
00401148   add ecx,dword ptr ss:[ebp-10]
0040114B   mov byte ptr ds:[ecx],0
0040114E   mov edx,dword ptr ss:[ebp-30]
00401151   add edx,dword ptr ss:[ebp-10]
00401154   mov byte ptr ds:[edx+1],0
00401158   mov dword ptr ss:[ebp-C],0
0040115F   jmp short qwgboy20.0040116A
00401161   mov eax,dword ptr ss:[ebp-C]
00401164   add eax,1
00401167   mov dword ptr ss:[ebp-C],eax
0040116A   cmp dword ptr ss:[ebp-C],0A           ; 与A比较
0040116E   jge short qwgboy20.00401191
00401170   mov ecx,dword ptr ss:[ebp-30]
00401173   add ecx,dword ptr ss:[ebp-C]
00401176   xor edx,edx
00401178   mov dl,byte ptr ds:[ecx]              ; 取文件字节数前面10位
0040117A   mov eax,dword ptr ss:[ebp-C]
0040117D   movsx ecx,byte ptr ss:[ebp+eax-20]    ; qwgboy2000
00401182   cmp edx,ecx                           ; 比较是不是qwgboy2000
00401184   jnz short qwgboy20.0040118F           ; 不是就OVER
00401186   mov edx,dword ptr ss:[ebp-14]
00401189   add edx,1
0040118C   mov dword ptr ss:[ebp-14],edx
0040118F   jmp short qwgboy20.00401161           ; 循环比较
00401191   jmp short qwgboy20.0040119C
00401193   mov eax,dword ptr ss:[ebp-C]
00401196   add eax,1
00401199   mov dword ptr ss:[ebp-C],eax
0040119C   cmp dword ptr ss:[ebp-C],10           ; 与10比较
004011A0   jge short qwgboy20.004011CD
004011A2   mov ecx,dword ptr ss:[ebp-30]
004011A5   add ecx,dword ptr ss:[ebp-C]
004011A8   xor edx,edx
004011AA   mov dl,byte ptr ds:[ecx]              ; 取文件字节数11位到16位
004011AC   mov eax,dword ptr ss:[ebp-C]
004011AF   movsx ecx,byte ptr ss:[ebp+eax-2A]    ; 取文件字节数前面10位
004011B4   mov eax,dword ptr ss:[ebp-C]
004011B7   movsx eax,byte ptr ss:[ebp+eax-32]    ; PVFANX
004011BC   sub ecx,eax                           ; 文件字节数前面10位  - PVFANX的ASCII值
004011BE   cmp edx,ecx                           ; 结果与11位到16位比较
004011C0   jnz short qwgboy20.004011CB           ; 不是就OVER
004011C2   mov ecx,dword ptr ss:[ebp-14]
004011C5   add ecx,1
004011C8   mov dword ptr ss:[ebp-14],ecx
004011CB   jmp short qwgboy20.00401193           ; 循环比较
004011CD   jmp short qwgboy20.004011D8
004011CF   mov edx,dword ptr ss:[ebp-C]
004011D2   add edx,1
004011D5   mov dword ptr ss:[ebp-C],edx
004011D8   cmp dword ptr ss:[ebp-C],14           ; 与14比较
004011DC   jge short qwgboy20.004011FF
004011DE   mov eax,dword ptr ss:[ebp-30]
004011E1   add eax,dword ptr ss:[ebp-C]
004011E4   xor ecx,ecx
004011E6   mov cl,byte ptr ds:[eax]              ; 取后面四位
004011E8   mov edx,dword ptr ss:[ebp-C]
004011EB   movsx eax,byte ptr ss:[ebp+edx-3C]
004011F0   cmp ecx,eax                           ; 比较是不是cool
004011F2   jnz short qwgboy20.004011FD           ; 不是就OVER
004011F4   mov ecx,dword ptr ss:[ebp-14]
004011F7   add ecx,1
004011FA   mov dword ptr ss:[ebp-14],ecx
004011FD   jmp short qwgboy20.004011CF
004011FF   cmp dword ptr ss:[ebp-14],14
00401203   jnz short qwgboy20.00401224
00401205   mov esi,esp
00401207   push 40
00401209   push qwgboy20.00420058                ; 成功了!
0040120E   push qwgboy20.00420040                ; 哇!你真是太厉害了!
00401213   push 0
00401215   call dword ptr ds:[<&USER32.MessageBo>; USER32.MessageBoxA
0040121B   cmp esi,esp
0040121D   call qwgboy20.004031C0
00401222   jmp short qwgboy20.00401241
00401224   mov esi,esp
00401226   push 40
00401228   push qwgboy20.00420038                ; 加油
0040122D   push qwgboy20.0042001C                ; 继续努力,你会成功的!
00401232   push 0
00401234   call dword ptr ds:[<&USER32.MessageBo>; USER32.MessageBoxA
0040123A   cmp esi,esp
0040123C   call qwgboy20.004031C0
00401241   jmp short qwgboy20.00401260
00401243   mov esi,esp
00401245   push 40
00401247   push qwgboy20.00420038                ; 加油
0040124C   push qwgboy20.0042001C                ; 继续努力,你会成功的!
00401251   push 0
00401253   call dword ptr ds:[<&USER32.MessageBo>; USER32.MessageBoxA
00401259   cmp esi,esp
0040125B   call qwgboy20.004031C0
00401260   xor eax,eax
00401262   pop edi
00401263   pop esi
00401264   pop ebx
00401265   add esp,70
00401268   cmp ebp,esp
0040126A   call qwgboy20.004031C0
0040126F   mov esp,ebp
00401271   pop ebp
00401272   retn 10

/////////////////////////////////////////////////////////////////////////

总结:

1,判断是否有keyfile.qwg文件
2,再判断文件是不是20个字节
3,再判断前面10位是不是qwgboy2000  ---> 作者名字 :)
4,再判断文件字节数前面6位  - PVFANX 和11到16位是不是相等
5,最后判断后面四位是不是cool

满足上面条件,就注册成功啦
------------------------------------------------------------------------

--------
【破解总结】


第一次搞keyfile,还好不是太难,否则我也......
------------------------------------------------------------------------

--------

【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
打赏
分享
最新回复 (2)
雪    币: 405
活跃值: (10)
能力值: ( LV9,RANK:1130 )
在线值:
发帖
回帖
粉丝
binbinbin 28 2006-11-19 23:08
2
0
速度好快。很多人都没有看到这个crackme。

keyfile好啊。要是网络验证...
雪    币: 230
活跃值: (11)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
qwgboy2000 3 2006-11-20 08:51
3
0


快就一个字

佩服
游客
登录 | 注册 方可回帖
返回