这个是不是有问题,似乎根本不能解密,不清楚是不是作者故意这样做的还是如何什么。
0040143F |. FF15 98444000 CALL DWORD PTR [<&USER32.GetDlgItemTextA>] ; \GetDlgItemTextA
00401445 |. 8D85 FCFEFFFF LEA EAX, [LOCAL.65]
0040144B |. 50 PUSH EAX
0040144C |. E8 CF030000 CALL Password.00401820 //这个CALL取密长度,长度应在10个以内。否则跳走
00401451 |. 59 POP ECX
00401452 |. 83F8 0B CMP EAX, 0B
00401455 |. 73 1F JNB SHORT Password.00401476
00401457 |. 8D85 FCFEFFFF LEA EAX, [LOCAL.65]
0040145D |. 50 PUSH EAX
0040145E |. E8 BD030000 CALL Password.00401820
00401463 |. 59 POP ECX
00401464 |. 50 PUSH EAX
00401465 |. 8D85 FCFEFFFF LEA EAX, [LOCAL.65]
0040146B |. 50 PUSH EAX
0040146C |. E8 C5FEFFFF CALL Password.00401336 //这个CALL比对密码CALL
00401471 |. 83F8 01 CMP EAX, 1
00401474 |. 75 15 JNZ SHORT Password.0040148B
00401476 |> 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL
00401478 |. 68 12304000 PUSH Password.00403012 ; |Title = "Check"
0040147D |. 68 18304000 PUSH Password.00403018 ; |Text = "Password Error!"
00401482 |. 53 PUSH EBX ; |hOwner
00401483 |. FF15 60444000 CALL DWORD PTR [<&USER32.MessageBoxA>] ; \MessageBoxA
00401489 |. EB 13 JMP SHORT Password.0040149E
0040148B |> 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL
0040148D |. 68 12304000 PUSH Password.00403012 ; |Title = "Check"
00401492 |. 68 00304000 PUSH Password.00403000 ; |Text = "Password Correct!"
00401497 |. 53 PUSH EBX ; |hOwner
00401498 |. FF15 60444000 CALL DWORD PTR [<&USER32.MessageBoxA>] ; \MessageBoxA
感觉到最后,怎样也不会出来正确密码的。
00401336 /$ 8B5424 04 MOV EDX, DWORD PTR [ESP+4]
0040133A |. 31C9 XOR ECX, ECX
0040133C |> 813411 674523>/XOR DWORD PTR [ECX+EDX], 1234567
00401343 |. 8D0411 |LEA EAX, DWORD PTR [ECX+EDX]
00401346 |. 8020 0E |AND BYTE PTR [EAX], 0E
00401349 |. 83C1 04 |ADD ECX, 4
0040134C |. 83F9 08 |CMP ECX, 8
0040134F |.^ 75 EB \JNZ SHORT Password.0040133C
00401351 |. 31C9 XOR ECX, ECX
00401353 |> 8A0411 /MOV AL, BYTE PTR [ECX+EDX]
00401356 |. 0042 08 |ADD BYTE PTR [EDX+8], AL
00401359 |. 41 |INC ECX
0040135A |. 83F9 08 |CMP ECX, 8
0040135D |.^ 75 F4 \JNZ SHORT Password.00401353
0040135F |. 31C9 XOR ECX, ECX
00401361 |> 813411 DEBC9A>/XOR DWORD PTR [ECX+EDX], 89ABCDE
00401368 |. 8D0411 |LEA EAX, DWORD PTR [ECX+EDX]
0040136B |. 8020 0E |AND BYTE PTR [EAX], 0E
0040136E |. 83C1 04 |ADD ECX, 4
00401371 |. 83F9 08 |CMP ECX, 8
00401374 |.^ 75 EB \JNZ SHORT Password.00401361
00401376 |. 31C9 XOR ECX, ECX
00401378 |> 8A0411 /MOV AL, BYTE PTR [ECX+EDX]
0040137B |. 0042 09 |ADD BYTE PTR [EDX+9], AL
0040137E |. 41 |INC ECX
0040137F |. 83F9 08 |CMP ECX, 8
00401382 |.^ 75 F4 \JNZ SHORT Password.00401378
00401384 |. 66:817A 08 DE>CMP WORD PTR [EDX+8], 42DE //比对PWD最后两位。
0040138A |. 75 38 JNZ SHORT Password.004013C4 //不等则跳走
0040138C |. 66:8B42 08 MOV AX, WORD PTR [EDX+8] //取进AX
00401390 |. 66:35 EEEE XOR AX, 0EEEE //XOR 0xEEEE
00401394 |. 66:3D AC30 CMP AX, 30AC //注意这里 0x42DE ^ 0xEEEE = 0xAC30 就算进到这里,也肯定会跳走,运算本身有错误
00401398 |. 75 2A JNZ SHORT Password.004013C4
0040139A |. 66:8B02 MOV AX, WORD PTR [EDX]
0040139D |. 66:05 9235 ADD AX, 3592
004013A1 |. 66:3D 9AE5 CMP AX, 0E59A
004013A5 |. 75 1D JNZ SHORT Password.004013C4
004013A7 |. 813A 08B0817A CMP DWORD PTR [EDX], 7A81B008
004013AD |. 75 15 JNZ SHORT Password.004013C4
004013AF |. 817A 04 02BF8>CMP DWORD PTR [EDX+4], 388DBF02
004013B6 |. 75 0C JNZ SHORT Password.004013C4
004013B8 |. 807A 05 BF CMP BYTE PTR [EDX+5], 0BF
004013BC |. 75 06 JNZ SHORT Password.004013C4
004013BE |. 807A 06 8D CMP BYTE PTR [EDX+6], 8D
004013C2 |. 74 06 JE SHORT Password.004013CA
004013C4 |> 31C0 XOR EAX, EAX
004013C6 |. 40 INC EAX
004013C7 |. C2 0800 RETN 8
注意看,红色的地方, 其它地方就不用看了。
意思就是
if (! TRUE)
go Error;
if(7 != 8)
go error
if(...)
if(...)
if(....)
if(true)
return 0;
Error:
return 1