文章仅适合很初很初的新手。
以前从论坛下的CM 当时没看懂(其实那时根本不可能看懂,汇编基本的指令都不知道),到图书馆借了那本经典的汇编语言看了下。今天抽空试了试,没想到成功了 着实激动了把,好了废话不说 咱们开始:
先直接运行下程序 随便输入 发现有错误提示:“Nic z tego!!!”
用OD载入后就来到了这里:
00401000 >/$ 6A 00 PUSH 0 ; /hTemplateFile = NULL
00401002 |. 68 80000000 PUSH 80 ; |Attributes = NORMAL
00401007 |. 6A 03 PUSH 3 ; |Mode = OPEN_EXISTING
00401009 |. 6A 00 PUSH 0 ; |pSecurity = NULL
0040100B |. 6A 00 PUSH 0 ; |ShareMode = 0
0040100D |. 68 00000080 PUSH 80000000 ; |Access = GENERIC_READ
00401012 |. 68 6B234000 PUSH Crackme.0040236B ; |FileName = "ACG.key"
00401017 |. E8 84040000 CALL <JMP.&KERNEL32.CreateFileA> ; \CreateFileA
0040101C |. 83F8 FF CMP EAX,-1
0040101F |. 0F84 59010000 JE Crackme.0040117E
00401025 |. A3 73234000 MOV DWORD PTR DS:[402373],EAX
0040102A |. 6A 00 PUSH 0 ; /pFileSizeHigh = NULL
0040102C |. FF35 73234000 PUSH DWORD PTR DS:[402373] ; |hFile = NULL
00401032 |. E8 51040000 CALL <JMP.&KERNEL32.GetFileSize> ; \GetFileSize
然后查找字符串 就到了这里:
00401326 6A 10 PUSH 10 ; 这条由004012DF跳转而来
00401328 . 68 1B204000 PUSH Crackme.0040201B ; |Title = "-=ACG=- T h e B e s t -=ACG=-"
0040132D . 68 CE204000 PUSH Crackme.004020CE ; |Text = "Nic z tego!!!"
00401332 . FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hOwner
00401335 . E8 18010000 CALL <JMP.&USER32.MessageBoxA> ; \MessageBoxA
现在我们到004012DF去看看
00401260 . 83F8 05 CMP EAX,5 ; 这里下个断
00401263 . 0F82 BD000000 JB Crackme.00401326
00401269 . 6A 28 PUSH 28 ; /Count = 28 (40.)
0040126B . 68 2E214000 PUSH Crackme.0040212E ; |Buffer = Crackme.0040212E
00401270 . 68 EA030000 PUSH 3EA ; |ControlID = 3EA (1002.)
00401275 . FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hWnd
00401278 . E8 F3010000 CALL <JMP.&USER32.GetDlgItemTextA> ; \GetDlgItemTextA
0040127D . BF 06214000 MOV EDI,Crackme.00402106
00401282 . 33DB XOR EBX,EBX
00401284 . 33C0 XOR EAX,EAX
00401286 > 8A1F MOV BL,BYTE PTR DS:[EDI] ; 11<>
00401288 . 80FB 20 CMP BL,20 ; 此循环为将输入的用户名字母对用的ASCII码相加
0040128B . 0F82 95000000 JB Crackme.00401326
00401291 . 03C3 ADD EAX,EBX
00401293 . 47 INC EDI
00401294 . 803F 00 CMP BYTE PTR DS:[EDI],0
00401297 .^ 75 ED JNZ SHORT Crackme.00401286 ; 11<>
00401299 . C1C0 03 ROL EAX,3
0040129C . 35 A5150500 XOR EAX,515A5
004012A1 . 50 PUSH EAX
004012A2 . 33C0 XOR EAX,EAX
004012A4 . 33DB XOR EBX,EBX
004012A6 . 33FF XOR EDI,EDI
004012A8 . BE 2E214000 MOV ESI,Crackme.0040212E
004012AD > B8 0A000000 MOV EAX,0A ; 22<>
004012B2 . 8A1E MOV BL,BYTE PTR DS:[ESI]
004012B4 . 85DB TEST EBX,EBX ; 检测EBX是否为空 空则跳转 其实就是检查是否全部提取完
004012B6 . 74 15 JE SHORT Crackme.004012CD
004012B8 . 80FB 30 CMP BL,30
004012BB . 72 69 JB SHORT Crackme.00401326
004012BD . 80FB 39 CMP BL,39 ; 此循环为将输入的密码原样提取出来 存储在EDI寄存器中
004012C0 . 7F 64 JG SHORT Crackme.00401326
004012C2 . 83EB 30 SUB EBX,30
004012C5 . 0FAFF8 IMUL EDI,EAX
004012C8 . 03FB ADD EDI,EBX
004012CA . 46 INC ESI
004012CB .^ EB E0 JMP SHORT Crackme.004012AD ; 22<>
004012CD > 81F7 CA870000 XOR EDI,87CA
004012D3 . 8BDF MOV EBX,EDI
004012D5 . 58 POP EAX
004012D6 . 03C3 ADD EAX,EBX
004012D8 . 35 E7970700 XOR EAX,797E7
004012DD . 85C0 TEST EAX,EAX
004012DF . 75 45 JNZ SHORT Crackme.00401326 ; 这里跳转则完蛋 只要将ZF位改为1爆破就成功
这样爆破就成功了,总结整个过程关键是字符串查找,其他没什么了。
本想等写出注册机后再发帖的,可我研究了半天竟无一点思路,弱弱的说句好像不能写注册机。
我再贴几个很适合初学者的连接 对初学者帮助很大
OllyDBG 入门系列 作 者: CCDebuger
http://bbs.pediy.com/showthread.php?t=21284
http://bbs.pediy.com/showthread.php?t=21308
http://bbs.pediy.com/showthread.php?t=21330
http://bbs.pediy.com/showthread.php?t=21378
http://bbs.pediy.com/showthread.php?t=21532
http://bbs.pediy.com/showthread.php?t=23873
期望斑竹看在我坐在电脑前5个小时的份上给个邀请码 临时会员学习起来真的很不方便


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