qwgboy2000's crackme Keyfile类型简单分析
【破解日期】 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:,eax
00401090 cmp dword ptr ss:,-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:
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:,eax
004010D2 cmp dword ptr ss:,-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:,14 ; 与14比较
004010F9 jnz qwgboy20.00401243
004010FF mov ecx,dword ptr ss:
00401102 add ecx,2
00401105 push ecx
00401106 call qwgboy20.00401330
0040110B add esp,4
0040110E mov dword ptr ss:,eax
00401111 mov esi,esp
00401113 push 0
00401115 lea edx,dword ptr ss:
00401118 push edx
00401119 mov eax,dword ptr ss:
0040111C push eax
0040111D mov ecx,dword ptr ss:
00401120 push ecx
00401121 mov edx,dword ptr ss:
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:
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:
00401148 add ecx,dword ptr ss:
0040114B mov byte ptr ds:,0
0040114E mov edx,dword ptr ss:
00401151 add edx,dword ptr ss:
00401154 mov byte ptr ds:,0
00401158 mov dword ptr ss:,0
0040115F jmp short qwgboy20.0040116A
00401161 mov eax,dword ptr ss:
00401164 add eax,1
00401167 mov dword ptr ss:,eax
0040116A cmp dword ptr ss:,0A ; 与A比较
0040116E jge short qwgboy20.00401191
00401170 mov ecx,dword ptr ss:
00401173 add ecx,dword ptr ss:
00401176 xor edx,edx
00401178 mov dl,byte ptr ds: ; 取文件字节数前面10位
0040117A mov eax,dword ptr ss:
0040117D movsx ecx,byte ptr ss: ; qwgboy2000
00401182 cmp edx,ecx ; 比较是不是qwgboy2000
00401184 jnz short qwgboy20.0040118F ; 不是就OVER
00401186 mov edx,dword ptr ss:
00401189 add edx,1
0040118C mov dword ptr ss:,edx
0040118F jmp short qwgboy20.00401161 ; 循环比较
00401191 jmp short qwgboy20.0040119C
00401193 mov eax,dword ptr ss:
00401196 add eax,1
00401199 mov dword ptr ss:,eax
0040119C cmp dword ptr ss:,10 ; 与10比较
004011A0 jge short qwgboy20.004011CD
004011A2 mov ecx,dword ptr ss:
004011A5 add ecx,dword ptr ss:
004011A8 xor edx,edx
004011AA mov dl,byte ptr ds: ; 取文件字节数11位到16位
004011AC mov eax,dword ptr ss:
004011AF movsx ecx,byte ptr ss: ; 取文件字节数前面10位
004011B4 mov eax,dword ptr ss:
004011B7 movsx eax,byte ptr ss: ; 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:
004011C5 add ecx,1
004011C8 mov dword ptr ss:,ecx
004011CB jmp short qwgboy20.00401193 ; 循环比较
004011CD jmp short qwgboy20.004011D8
004011CF mov edx,dword ptr ss:
004011D2 add edx,1
004011D5 mov dword ptr ss:,edx
004011D8 cmp dword ptr ss:,14 ; 与14比较
004011DC jge short qwgboy20.004011FF
004011DE mov eax,dword ptr ss:
004011E1 add eax,dword ptr ss:
004011E4 xor ecx,ecx
004011E6 mov cl,byte ptr ds: ; 取后面四位
004011E8 mov edx,dword ptr ss:
004011EB movsx eax,byte ptr ss:
004011F0 cmp ecx,eax ; 比较是不是cool
004011F2 jnz short qwgboy20.004011FD ; 不是就OVER
004011F4 mov ecx,dword ptr ss:
004011F7 add ecx,1
004011FA mov dword ptr ss:,ecx
004011FD jmp short qwgboy20.004011CF
004011FF cmp dword ptr ss:,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,还好不是太难,否则我也......
------------------------------------------------------------------------
--------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
[ 本帖最后由 冷血书生 于 2006-11-19 22:46 编辑 ] 哈哈。老大啊,一次你发多少个论坛啊。我看到就有三个了。还是支持 学习,收藏!!支持!!!! 好东西
看懂了~
hoho~~~~ ;) 太强了,看不大明白,不过还是支持下
页:
[1]