算法再探:CrackMe002--献给算法初学者(考验你的耐性)
算法再探:CrackMe002--献给算法初学者(考验你的耐性)简介:算法简单,但是比较长,用到了最常用的指令,非常适合初学者练习
希望你能够有耐心(不要暴力),把算法分析出来,并写出完美注册机~~
BTW: 高手们(成员级别)请略过,不要那么快贴分析过程出来,让大伙练
练手~~~ 不过高手们可以把它当做KeyGenMe来玩~ 嘿嘿 呵呵 辛苦了 看来这个东西不好弄 就不先玩这个了 ~ 飘云兄对学员太好了,做这个练习对算法的学习很有帮助 UPX壳脱后,运行不了????? 破不了壳,就将就了。 UPX脱壳后运行不了,也只好带壳修行了,明码比较,算法不写了,嘿嘿! 兄弟们:既然是算法分析 就简单的贴个过程吧~ 嘿嘿~~ 这个破文是用“破文圣手”做的,呵呵!!
【破文标题】CrackMe002算法分析
【破文作者】Busheler
【作者邮箱】[email protected]
【作者主页】
【破解工具】odbg110,win32dasm,PEiD v0.94,LordPE Deluxe V1.4,Import REConstructor V1.6
【破解平台】Windows2000
【软件名称】CrackMe002 By PiaoYun
【软件大小】87.0KB
【原版下载】https://www.chinapyg.com/attachment.php?aid=541
【保护方式】
【软件简介】算法简单,但是比较长,用到了最常用的指令,非常适合初学者练习希望你能够有耐心(不要暴力),把算法分析出来,并写出完美注册机~~
------------------------------------------------------------------------
一、脱壳:
PEiD v0.94查壳无发现,但可以找到OEP,试用LordPE Deluxe V1.4+Import REConstructor V1.6脱之,成功运行。
二、找资源:
win32dasm载入找到如下信息:
:0040172A 8B4664 mov eax, dword ptr
:0040172D 50 push eax
:0040172E FF15C4214000 call dword ptr
:00401734 83C438 add esp, 00000038
:00401737 85C0 test eax, eax
:00401739 7512 jne 0040174D
:0040173B 50 push eax
* Possible StringData Ref from Data Obj ->"恭喜"
|
:0040173C 682C304000 push 0040302C
* Possible StringData Ref from Data Obj ->"注册成功!"
|
:00401741 6820304000 push 00403020
:00401746 8BCE mov ecx, esi
:00401748 E8BD020000 call 00401A0A
三、踏上破解之路:
odbg110载入:
很容易找到关键点,因为是明码比较注册码很容易交出了!
用户名:busheler
注册码:817547681632518459232612948
004015A0 . 81EC FC010000SUB ESP,1FC
004015A6 . 53 PUSH EBX
004015A7 . 55 PUSH EBP
004015A8 . 56 PUSH ESI
004015A9 . 57 PUSH EDI
004015AA . 8BD9 MOV EBX,ECX
004015AC . 6A 01 PUSH 1
004015AE . 895C24 18 MOV DWORD PTR SS:,EBX
004015B2 . E8 59040000 CALL <JMP.&mfc42.#6334>
004015B7 . 8B53 60 MOV EDX,DWORD PTR DS:
004015BA . 83C9 FF OR ECX,FFFFFFFF
004015BD . 8BFA MOV EDI,EDX
004015BF . 33C0 XOR EAX,EAX
004015C1 . F2:AE REPNE SCAS BYTE PTR ES:
004015C3 . F7D1 NOT ECX
004015C5 . 2BF9 SUB EDI,ECX
004015C7 . 8DAC24 4401000>LEA EBP,DWORD PTR SS:
004015CE . 8BC1 MOV EAX,ECX
004015D0 . 8BF7 MOV ESI,EDI
004015D2 . 8BFD MOV EDI,EBP
004015D4 . 8B52 F8 MOV EDX,DWORD PTR DS:
004015D7 . C1E9 02 SHR ECX,2
004015DA . F3:A5 REP MOVS DWORD PTR ES:,DWORD PTR DS:
004015DC . 8BC8 MOV ECX,EAX
004015DE . 83E1 03 AND ECX,3
004015E1 . F3:A4 REP MOVS BYTE PTR ES:,BYTE PTR DS:
004015E3 . 0FBEB424 44010>MOVSX ESI,BYTE PTR SS:
004015EB . 85D2 TEST EDX,EDX
004015ED . 75 1D JNZ SHORT dumped_.0040160C
004015EF . 52 PUSH EDX
004015F0 . 68 44304000 PUSH dumped_.00403044
004015F5 . 68 34304000 PUSH dumped_.00403034
004015FA . 8BCB MOV ECX,EBX
004015FC . E8 09040000 CALL <JMP.&mfc42.#4224>
00401601 . 5F POP EDI
00401602 . 5E POP ESI
00401603 . 5D POP EBP
00401604 . 5B POP EBX
00401605 . 81C4 FC010000ADD ESP,1FC
0040160B . C3 RET
0040160C > 8BC2 MOV EAX,EDX ;第三组算码开始!
0040160E . 6A 0A PUSH 0A ; /radix = A (10.)
00401610 . 0FAFC6 IMUL EAX,ESI ; |
00401613 . 8BC8 MOV ECX,EAX ; |
00401615 . 8B3D D0214000MOV EDI,DWORD PTR DS:[<&msvcrt._itoa>] ; |MSVCRT._itoa
0040161B . C1E1 04 SHL ECX,4 ; |
0040161E . 03C8 ADD ECX,EAX ; |
00401620 . 8D0C88 LEA ECX,DWORD PTR DS: ; |
00401623 . C1E1 03 SHL ECX,3 ; |
00401626 . 2BC8 SUB ECX,EAX ; |
00401628 . 8D0C49 LEA ECX,DWORD PTR DS: ; |
0040162B . 8D1C88 LEA EBX,DWORD PTR DS: ; |
0040162E . 8D8424 AC01000>LEA EAX,DWORD PTR SS: ; |第三组算码结束!
00401635 . 50 PUSH EAX ; |string
00401636 . 8D0492 LEA EAX,DWORD PTR DS: ; |第一组算码开始!
00401639 . C1E0 04 SHL EAX,4 ; |
0040163C . 2BC2 SUB EAX,EDX ; |
0040163E . 8D0C46 LEA ECX,DWORD PTR DS: ; |
00401641 . 03C1 ADD EAX,ECX ; |
00401643 . 8D1480 LEA EDX,DWORD PTR DS: ; |
00401646 . 8D04D0 LEA EAX,DWORD PTR DS: ; |第一组算码结束!
00401649 . 50 PUSH EAX ; |value
0040164A . FFD7 CALL EDI ; \_itoa
0040164C . 8D04B6 LEA EAX,DWORD PTR DS: ;第二组码开始!
0040164F . 8D8C24 EC00000>LEA ECX,DWORD PTR SS:
00401656 . 6A 0A PUSH 0A
00401658 . 51 PUSH ECX
00401659 . 8D1480 LEA EDX,DWORD PTR DS:
0040165C . 8D0456 LEA EAX,DWORD PTR DS:
0040165F . C1E0 05 SHL EAX,5
00401662 . 03C6 ADD EAX,ESI
00401664 . 8D0440 LEA EAX,DWORD PTR DS:
00401667 . C1E0 04 SHL EAX,4 ;第二组码结束!
0040166A . 50 PUSH EAX
0040166B . FFD7 CALL EDI
0040166D . 8D8C24 9400000>LEA ECX,DWORD PTR SS:
00401674 . 6A 0A PUSH 0A
00401676 . 51 PUSH ECX
00401677 . 53 PUSH EBX
00401678 . FFD7 CALL EDI
0040167A . 81C3 20170000ADD EBX,1720 ;第四组开始!
00401680 . 8D5424 3C LEA EDX,DWORD PTR SS:
00401684 . 895C24 34 MOV DWORD PTR SS:,EBX
00401688 . 6A 0A PUSH 0A
0040168A . DB4424 38 FILD DWORD PTR SS:
0040168E . 52 PUSH EDX
0040168F . DC0D 38254000FMUL QWORD PTR DS: ;第四组结束!
00401695 . E8 D6030000 CALL <JMP.&msvcrt._ftol>
0040169A . 50 PUSH EAX
0040169B . FFD7 CALL EDI
0040169D . 8D7C24 48 LEA EDI,DWORD PTR SS:
004016A1 . 83C9 FF OR ECX,FFFFFFFF
004016A4 . 33C0 XOR EAX,EAX
004016A6 . 8D9424 AC00000>LEA EDX,DWORD PTR SS:
004016AD . F2:AE REPNE SCAS BYTE PTR ES:
004016AF . F7D1 NOT ECX
004016B1 . 2BF9 SUB EDI,ECX
004016B3 . 8BF7 MOV ESI,EDI
004016B5 . 8BD9 MOV EBX,ECX
004016B7 . 8BFA MOV EDI,EDX
004016B9 . 83C9 FF OR ECX,FFFFFFFF
004016BC . F2:AE REPNE SCAS BYTE PTR ES:
004016BE . 8BCB MOV ECX,EBX
004016C0 . 4F DEC EDI
004016C1 . C1E9 02 SHR ECX,2
004016C4 . F3:A5 REP MOVS DWORD PTR ES:,DWORD PTR DS:
004016C6 . 8BCB MOV ECX,EBX
004016C8 . 8D9C24 D801000>LEA EBX,DWORD PTR SS:
004016CF . 83E1 03 AND ECX,3
004016D2 . F3:A4 REP MOVS BYTE PTR ES:,BYTE PTR DS:
004016D4 . 8DBC24 1001000>LEA EDI,DWORD PTR SS:
004016DB . 83C9 FF OR ECX,FFFFFFFF
004016DE . F2:AE REPNE SCAS BYTE PTR ES:
004016E0 . F7D1 NOT ECX
004016E2 . 2BF9 SUB EDI,ECX
004016E4 . 8BF7 MOV ESI,EDI
004016E6 . 8BE9 MOV EBP,ECX
004016E8 . 8BFB MOV EDI,EBX
004016EA . 83C9 FF OR ECX,FFFFFFFF
004016ED . F2:AE REPNE SCAS BYTE PTR ES:
004016EF . 4F DEC EDI
004016F0 . 8BCD MOV ECX,EBP
004016F2 . C1E9 02 SHR ECX,2
004016F5 . F3:A5 REP MOVS DWORD PTR ES:,DWORD PTR DS:
004016F7 . 8BCD MOV ECX,EBP
004016F9 . 83E1 03 AND ECX,3
004016FC . F3:A4 REP MOVS BYTE PTR ES:,BYTE PTR DS:
004016FE . 8BFA MOV EDI,EDX
00401700 . 83C9 FF OR ECX,FFFFFFFF
00401703 . F2:AE REPNE SCAS BYTE PTR ES:
00401705 . F7D1 NOT ECX
00401707 . 2BF9 SUB EDI,ECX
00401709 . 8BF7 MOV ESI,EDI
0040170B . 8BFB MOV EDI,EBX
0040170D . 8BE9 MOV EBP,ECX
0040170F . 8BD7 MOV EDX,EDI
00401711 . 83C9 FF OR ECX,FFFFFFFF
00401714 . 52 PUSH EDX ; /s2
00401715 . F2:AE REPNE SCAS BYTE PTR ES: ; |
00401717 . 8BCD MOV ECX,EBP ; |
00401719 . 4F DEC EDI ; |
0040171A . C1E9 02 SHR ECX,2 ; |
0040171D . F3:A5 REP MOVS DWORD PTR ES:,DWORD PTR DS: ; |
0040171F . 8BCD MOV ECX,EBP ; |
00401721 . 83E1 03 AND ECX,3 ; |
00401724 . F3:A4 REP MOVS BYTE PTR ES:,BYTE PTR DS: ; |
00401726 . 8B7424 48 MOV ESI,DWORD PTR SS: ; |
0040172A . 8B46 64 MOV EAX,DWORD PTR DS: ; |
0040172D . 50 PUSH EAX ; |s1
0040172E . FF15 C4214000CALL DWORD PTR DS:[<&msvcrt._mbscmp>] ; \注册码比较,这里下断可直接看到注册码!
四、算法分析
a:用户名长度;
b:用户名第一个字符ASCII码十进制值。
x1 = ((a × 5 × 16 - a) × 3 + b) × 41
x2 = (((b + b × 4) × 5 × 2 + b) × 32 + b) × 3 × 16
x3 = (((a × b × 16 + a × b) × 4 + a × b) × 8 - a × b) × 3 × 4 + a × b
x4 = fix ((x3 + 5920) × 6.2831852)
算法虽然不复杂,还是有点繁琐,算啊。。。。算啊。。。。算啊。。。。算啊。。。。晕!
[ 本帖最后由 busheler 于 2006-1-8 14:31 编辑 ] 原帖由 busheler 于 2006-1-7 14:07 发表
这个破文是用“破文圣手”做的,呵呵!!
【破文标题】CrackMe002算法分析
【破文作者】Busheler
【作者邮箱】[email protected]
【作者主页】
【破解工具】odbg110,win32dasm,PEiD v0.94,LordPE Del ...
我看最好是把算法分析先放起来...
咱看了都没什么意思...
(算法文章都有了,咱们兄弟玩不一定有劲!)
页:
[1]
2