第一次写这东西 看到这个
HappyTowns 第17个 CrackMe 好象没有人给出全面的解答。 我 就分析了一下 不过我写不出注册机啊
大家别笑我:)
先断到下面:
004011C8 |. 8BF0 MOV ESI,EAX ; 用户名长度不能小于6
004011CA |. 83FE 06 CMP ESI,6
004011CD |. 0F8C 3B020000 JL CrackMe_.0040140E
004011D3 |. 83FE 0F CMP ESI,0F ; 用户名长度不能大于15
004011D6 |. 0F8F 32020000 JG CrackMe_.0040140E
004011DC |. 8D4C24 4C LEA ECX,DWORD PTR SS:[ESP+4C]
004011E0 |. 56 PUSH ESI
004011E1 |. 51 PUSH ECX
004011E2 |. E8 39020000 CALL CrackMe_.00401420 ; 小写字母转换成大写
004011E7 |. 83C4 08 ADD ESP,8
004011EA |. 85C0 TEST EAX,EAX
004011EC |. 0F84 1C020000 JE CrackMe_.0040140E
004011F2 |. 33ED XOR EBP,EBP
004011F4 |. 33C9 XOR ECX,ECX
004011F6 |. 3BF5 CMP ESI,EBP
004011F8 |. 7E 2F JLE SHORT CrackMe_.00401229
004011FA |> 33FF /XOR EDI,EDI
004011FC |. 3BCD |CMP ECX,EBP
004011FE |. 7E 24 |JLE SHORT CrackMe_.00401224
00401200 |> 8A543C 4C |/MOV DL,BYTE PTR SS:[ESP+EDI+4C]
00401204 |. 8A440C 4C ||MOV AL,BYTE PTR SS:[ESP+ECX+4C]
00401208 |. 3AD0 ||CMP DL,AL ; 用户名必须为a-z A-Z之间字符
0040120A |. 75 13 ||JNZ SHORT CrackMe_.0040121F
0040120C |. 3BCE ||CMP ECX,ESI
0040120E |. 8BC1 ||MOV EAX,ECX
00401210 |. 7D 0D ||JGE SHORT CrackMe_.0040121F
00401212 |> 8A5404 4D ||/MOV DL,BYTE PTR SS:[ESP+EAX+4D]
00401216 |. 885404 4C |||MOV BYTE PTR SS:[ESP+EAX+4C],DL
0040121A |. 40 |||INC EAX
0040121B |. 3BC6 |||CMP EAX,ESI
0040121D |.^ 7C F3 ||\JL SHORT CrackMe_.00401212
0040121F |> 47 ||INC EDI
00401220 |. 3BF9 ||CMP EDI,ECX
00401222 |.^ 7C DC |\JL SHORT CrackMe_.00401200
00401224 |> 41 |INC ECX
00401225 |. 3BCE |CMP ECX,ESI
00401227 |.^ 7C D1 \JL SHORT CrackMe_.004011FA
00401229 |> 8D4424 4C LEA EAX,DWORD PTR SS:[ESP+4C]
0040122D |. 50 PUSH EAX ; /String
0040122E |. FF15 04504000 CALL DWORD PTR DS:[<&KERNEL32.lstrlenA>] ; \lstrlenA
00401234 |. 8BF0 MOV ESI,EAX
00401236 |. 83FE 06 CMP ESI,6
00401239 |. 0F8C CF010000 JL CrackMe_.0040140E
0040123F |. 8D4C24 4C LEA ECX,DWORD PTR SS:[ESP+4C]
00401243 |. 8D5424 20 LEA EDX,DWORD PTR SS:[ESP+20]
00401247 |. 51 PUSH ECX ; /String2
00401248 |. 52 PUSH EDX ; |String1
00401249 |. FF15 00504000 CALL DWORD PTR DS:[<&KERNEL32.lstrcpyA>] ; \lstrcpyA
0040124F |. B3 41 MOV BL,41
00401251 |. 896C24 10 MOV DWORD PTR SS:[ESP+10],EBP
00401255 |. 8D7434 20 LEA ESI,DWORD PTR SS:[ESP+ESI+20]
00401259 |> 80FB 4A /CMP BL,4A
0040125C |. 75 0A |JNZ SHORT CrackMe_.00401268
0040125E |. B3 49 |MOV BL,49
00401260 |. C74424 10 010>|MOV DWORD PTR SS:[ESP+10],1
00401268 |> 0FBEC3 |MOVSX EAX,BL
0040126B |. 8D4C24 20 |LEA ECX,DWORD PTR SS:[ESP+20]
0040126F |. 50 |PUSH EAX
00401270 |. 51 |PUSH ECX
00401271 |. E8 2A020000 |CALL CrackMe_.004014A0
00401276 |. 83C4 08 |ADD ESP,8
00401279 |. 85C0 |TEST EAX,EAX
0040127B |. 75 03 |JNZ SHORT CrackMe_.00401280
0040127D |. 881E |MOV BYTE PTR DS:[ESI],BL
0040127F |. 46 |INC ESI
00401280 |> 8A5424 10 |MOV DL,BYTE PTR SS:[ESP+10]
00401284 |. 896C24 10 |MOV DWORD PTR SS:[ESP+10],EBP
00401288 |. FEC2 |INC DL
0040128A |. 02DA |ADD BL,DL
0040128C |. 80FB 5B |CMP BL,5B
0040128F |.^ 75 C8 \JNZ SHORT CrackMe_.00401259
00401291 |. 8B8C24 E00100>MOV ECX,DWORD PTR SS:[ESP+1E0]
00401298 |. 8D8424 140100>LEA EAX,DWORD PTR SS:[ESP+114]
0040129F |. 68 C9000000 PUSH 0C9 ; /Count = C9 (201.)
004012A4 |. 50 PUSH EAX ; |Buffer
004012A5 |. 68 E9030000 PUSH 3E9 ; |ControlID = 3E9 (1001.)
004012AA |. 51 PUSH ECX ; |hWnd
004012AB |. FF15 AC504000 CALL DWORD PTR DS:[<&USER32.GetDlgItemTe>; \GetDlgItemTextA
004012B1 |. 83F8 0E CMP EAX,0E ; 密码长度必须为14位
004012B4 |. 0F85 54010000 JNZ CrackMe_.0040140E
004012BA |. 8D9424 140100>LEA EDX,DWORD PTR SS:[ESP+114]
004012C1 |. 50 PUSH EAX
004012C2 |. 52 PUSH EDX
004012C3 |. E8 58010000 CALL CrackMe_.00401420 ; 密码必须为a-z A-Z之间字符
004012C8 |. 83C4 08 ADD ESP,8
004012CB |. 85C0 TEST EAX,EAX
004012CD |. 0F84 3B010000 JE CrackMe_.0040140E
004012D3 |. 8B5C24 10 MOV EBX,DWORD PTR SS:[ESP+10]
004012D7 |. 896C24 1C MOV DWORD PTR SS:[ESP+1C],EBP
004012DB |. 8B6C24 1C MOV EBP,DWORD PTR SS:[ESP+1C]
004012DF |. 8B7C24 1C MOV EDI,DWORD PTR SS:[ESP+1C]
004012E3 |> 8B4424 1C /MOV EAX,DWORD PTR SS:[ESP+1C]
004012E7 |. 8A9404 140100>|MOV DL,BYTE PTR SS:[ESP+EAX+114]
004012EE |. 8A8C04 150100>|MOV CL,BYTE PTR SS:[ESP+EAX+115]
004012F5 |. 8DB404 150100>|LEA ESI,DWORD PTR SS:[ESP+EAX+115]
004012FC |. 80FA 4A |CMP DL,4A
004012FF |. 884C24 17 |MOV BYTE PTR SS:[ESP+17],CL
00401303 |. 75 02 |JNZ SHORT CrackMe_.00401307
00401305 |. B2 49 |MOV DL,49
00401307 |> 33C9 |XOR ECX,ECX
00401309 |. 8D7424 20 |LEA ESI,DWORD PTR SS:[ESP+20]
0040130D |> 33C0 |/XOR EAX,EAX
0040130F |> 381406 ||/CMP BYTE PTR DS:[ESI+EAX],DL
00401312 |. 75 0A |||JNZ SHORT CrackMe_.0040131E
00401314 |. 8B5C24 10 |||MOV EBX,DWORD PTR SS:[ESP+10]
00401318 |. 8BE9 |||MOV EBP,ECX
0040131A |. 894424 18 |||MOV DWORD PTR SS:[ESP+18],EAX
0040131E |> 40 |||INC EAX
0040131F |. 83F8 05 |||CMP EAX,5
00401322 |.^ 7C EB ||\JL SHORT CrackMe_.0040130F
00401324 |. 41 ||INC ECX
00401325 |. 83C6 05 ||ADD ESI,5
00401328 |. 83F9 05 ||CMP ECX,5
0040132B |.^ 7C E0 |\JL SHORT CrackMe_.0040130D
0040132D |. 33F6 |XOR ESI,ESI
0040132F |. 8D4C24 20 |LEA ECX,DWORD PTR SS:[ESP+20]
00401333 |> 33C0 |/XOR EAX,EAX
00401335 |> 8A5424 17 ||/MOV DL,BYTE PTR SS:[ESP+17]
00401339 |. 3811 |||CMP BYTE PTR DS:[ECX],DL
0040133B |. 75 04 |||JNZ SHORT CrackMe_.00401341
0040133D |. 8BFE |||MOV EDI,ESI
0040133F |. 8BD8 |||MOV EBX,EAX
00401341 |> 40 |||INC EAX
00401342 |. 41 |||INC ECX
00401343 |. 83F8 05 |||CMP EAX,5
00401346 |.^ 7C ED ||\JL SHORT CrackMe_.00401335
00401348 |. 46 ||INC ESI
00401349 |. 83FE 05 ||CMP ESI,5
0040134C |.^ 7C E5 |\JL SHORT CrackMe_.00401333
0040134E |. 3BEF |CMP EBP,EDI
00401350 |. 895C24 10 |MOV DWORD PTR SS:[ESP+10],EBX
00401354 |. 75 3A |JNZ SHORT CrackMe_.00401390
00401356 |. 8B4424 18 |MOV EAX,DWORD PTR SS:[ESP+18]
0040135A |. 85C0 |TEST EAX,EAX
0040135C |. 75 0A |JNZ SHORT CrackMe_.00401368
0040135E |. C74424 18 040>|MOV DWORD PTR SS:[ESP+18],4
00401366 |. EB 04 |JMP SHORT CrackMe_.0040136C
00401368 |> FF4C24 18 |DEC DWORD PTR SS:[ESP+18]
0040136C |> 85DB |TEST EBX,EBX
0040136E |. 75 07 |JNZ SHORT CrackMe_.00401377
00401370 |. BB 04000000 |MOV EBX,4
00401375 |. EB 01 |JMP SHORT CrackMe_.00401378
00401377 |> 4B |DEC EBX
00401378 |> 8B4424 18 |MOV EAX,DWORD PTR SS:[ESP+18]
0040137C |. 8BD5 |MOV EDX,EBP
0040137E |. 895C24 10 |MOV DWORD PTR SS:[ESP+10],EBX
00401382 |. 8D0CA8 |LEA ECX,DWORD PTR DS:[EAX+EBP*4]
00401385 |. 03D1 |ADD EDX,ECX
00401387 |. 8D0CBB |LEA ECX,DWORD PTR DS:[EBX+EDI*4]
0040138A |. 8A4414 20 |MOV AL,BYTE PTR SS:[ESP+EDX+20]
0040138E |. EB 46 |JMP SHORT CrackMe_.004013D6
00401390 |> 8B4C24 18 |MOV ECX,DWORD PTR SS:[ESP+18]
00401394 |. 3BCB |CMP ECX,EBX
00401396 |. 75 30 |JNZ SHORT CrackMe_.004013C8
00401398 |. 85ED |TEST EBP,EBP
0040139A |. 75 07 |JNZ SHORT CrackMe_.004013A3
0040139C |. BD 04000000 |MOV EBP,4
004013A1 |. EB 01 |JMP SHORT CrackMe_.004013A4
004013A3 |> 4D |DEC EBP
004013A4 |> 85FF |TEST EDI,EDI
004013A6 |. 75 07 |JNZ SHORT CrackMe_.004013AF
004013A8 |. BF 04000000 |MOV EDI,4
004013AD |. EB 01 |JMP SHORT CrackMe_.004013B0
004013AF |> 4F |DEC EDI
004013B0 |> 8D04A9 |LEA EAX,DWORD PTR DS:[ECX+EBP*4]
004013B3 |. 8BCD |MOV ECX,EBP
004013B5 |. 03C8 |ADD ECX,EAX
004013B7 |. 8D14BB |LEA EDX,DWORD PTR DS:[EBX+EDI*4]
004013BA |. 8A440C 20 |MOV AL,BYTE PTR SS:[ESP+ECX+20]
004013BE |. 8BCF |MOV ECX,EDI
004013C0 |. 03CA |ADD ECX,EDX
004013C2 |. 8A4C0C 20 |MOV CL,BYTE PTR SS:[ESP+ECX+20]
004013C6 |. EB 16 |JMP SHORT CrackMe_.004013DE
004013C8 |> 8D14AB |LEA EDX,DWORD PTR DS:[EBX+EBP*4]
004013CB |. 8BC5 |MOV EAX,EBP
004013CD |. 03C2 |ADD EAX,EDX
004013CF |. 8D0CB9 |LEA ECX,DWORD PTR DS:[ECX+EDI*4]
004013D2 |. 8A4404 20 |MOV AL,BYTE PTR SS:[ESP+EAX+20]
004013D6 |> 8BD7 |MOV EDX,EDI
004013D8 |. 03D1 |ADD EDX,ECX
004013DA |. 8A4C14 20 |MOV CL,BYTE PTR SS:[ESP+EDX+20]
004013DE |> 8B5424 1C |MOV EDX,DWORD PTR SS:[ESP+1C]
004013E2 |. 3A4414 3C |CMP AL,BYTE PTR SS:[ESP+EDX+3C]
004013E6 |. 75 26 |JNZ SHORT CrackMe_.0040140E
004013E8 |. 3A4C14 3D |CMP CL,BYTE PTR SS:[ESP+EDX+3D]
004013EC |. 75 20 |JNZ SHORT CrackMe_.0040140E
004013EE |. 83C2 02 |ADD EDX,2
004013F1 |. 83FA 0E |CMP EDX,0E
004013F4 |. 895424 1C |MOV DWORD PTR SS:[ESP+1C],EDX
004013F8 |.^ 0F8C E5FEFFFF \JL CrackMe_.004012E3
004013FE |. 5F POP EDI
004013FF |. 5E POP ESI
00401400 |. 5D POP EBP
00401401 |. B8 01000000 MOV EAX,1
00401406 |. 5B POP EBX
00401407 |. 81C4 CC010000 ADD ESP,1CC
0040140D |. C3 RETN
0040140E |> 5F POP EDI
0040140F |. 5E POP ESI
00401410 |. 5D POP EBP
00401411 |. 33C0 XOR EAX,EAX
00401413 |. 5B POP EBX
00401414 |. 81C4 CC010000 ADD ESP,1CC
0040141A \. C3 RETN
用户名长度要在6-15之间
用户名只能是a-z A-Z之间的字符
密码必须长度为14
密码只能是a-z A-Z之间的字符
输入的用户名每一个字符最好不要重复 因为前面做了验证 有重复的字母有可能会去掉一些。
例如:输入用户名为KYOFGH然后做一个运算 构造一个字符串为
KYOFGHABCDEILMNPQRSTUVWXZ 把26个字符其余的的字符在后面补齐(除了字母J)
把以上字符分为5组
KYOFG HABCD EILMN PQRST UVWXZ
0 1 2 3 4
取密码第一位字符在上面的字符串中寻找
如果密码中含有J则让J=I
找到后 ebp=找到后的组数=z1 [esp+18]=找到后的第几个字符=z2
取密码第二位字符在上面的字符串中寻找
找到后 edi=找到后的组数=y1 ebx=[esp+10]=找到后的第几个字符=y2
比较密码前2位找到的组数是否相同
如果不同:则看找的第x个字符中的x是否相同:如果不同
则al=上面字符串中第(y2+z1*4+z1)个字符
cl=上面字符串中第(z2+y1*4+y1)个字符
如果组数不相同 第x个字符中的x相同。则看z1是否为0(不等0则减1,等0则变为4)
再看y1是否为0,(不等0则减1,等0则变为4)
则al=上面字符串中第(z2+z1*4+z1)个字符
cl=上面字符串中第(y2+y1*4+y1)个字符
如果密码前2位找到的组数相同:找的第x个字符中的x都减1
则al=上面字符串中第(z2-1+z1*4+z1)个字符
cl=上面字符串中第(y2-1+y1*4+y1)个字符
程序中有一字符串:CRACKINGFORFUN
分别取这个字符串2位 取7次 跟密码换算后比较
因为注册成功需要al=C cl=R
所以,
al=第8个字符 cl=第17个字符
可分别解上面方程组看哪种适合得出pass1=b pass2=s
(在这里我解一个给大家看)
(首先 y2+z1*4+z1=8
z2+y1*4+y1=17 (这个方程要z1<>y1 z2<>y2)
并且y1 y2 z1 z2都属于(0,1,2,3,4)里面的值
那么解出来z1=1 z2=2 y1=3 y2=3
因为这个方程条件是z1<>y1 z2<>y2
所以解是成立的 则密码第一位就是第一组中的第2个字符 就是b
密码第二位就是第3组中的第3个字符 就是s)
再看密码第3位与第4位
al=A cl=C
al=第6个字符 cl=第8个字符
可分别解上面方程组看哪种适合得出pass3=b pass4=d
再看密码第5位与第6位
al=K cl=I
al=第0个字符 cl=第11个字符
可分别解上面方程组看哪种适合得出pass5=y pass6=e
再看密码第7位与第8位
al=N cl=G
al=第14个字符 cl=第4个字符
(这个方程有点特殊 我也解一下)
首先还是
y2+z1*4+z1=14
z2+y1*4+y1=4 (这个方程要z1<>y1 z2<>y2)
解出来z1=2 z2=4 y1=0 y2=4
但是 方程条件为 这个方程要z1<>y1 z2<>y2 所以这个方程不成立
再看下面这个z2-1+z1*4+z1=14
y2-1+y1*4+y1=4 (方程条件为z1=y1)
解出来z1=3 z2=0 y1=1 y2=0 因为条件是z1=y1所以也不成立
再看第3个方程
z2+z1*4+z1=14
y2+y1*4+y1=4 (方程条件为z1<>y1,z2=y2,则看z1是否为0(不等0则减1,等0则变为4)
再看y1是否为0,(不等0则减1,等0则变为4)
解出来 z1=2 z2=4 y1=0 y2=4
看来符合条件 那么z1=2+1=3 y1=0+1=1
所以 则密码第7位就是第3组中的第4个字符 就是t
密码第8位就是第1组中的第4个字符 就是d
可分别解上面方程组看哪种适合得出pass7=t pass8=d
再看密码第9位与第10位
al=F cl=O
al=第3个字符 cl=第2个字符
可分别解上面方程组看哪种适合得出pass9=g pass10=f
再看密码第11位与第12位
al=R cl=F
al=第17个字符 cl=第3个字符
可分别解上面方程组看哪种适合得出pass11=s pass12=o
再看密码第13位与第14位
al=U cl=N
al=第20个字符 cl=第14个字符
可分别解上面方程组看哪种适合得出pass13=z pass14=e
所以用户名为:kyofgh密码为:bsbdyetdgfsoze
好了 基本上就是这样
我水平低 不知道有什么简便的算法 希望大家批评指点。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)