Easy Crack
Easy Crack
以下为 Ghidra
反编译的密码校验函数摘录,类型、全局符号和字符串常量由原二进制提供,不是可独立编译的
C 程序。入口和窗口初始化代码不影响校验,未列入此段。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| void __cdecl checkPassword(HWND param_1)
{ byte bVar1; byte *pbVar2; int iVar3; char *pcVar4; bool bVar5;
CHAR local_64; char local_63; char local_62; char acStack_61 [97];
local_64 = '\0'; pcVar4 = &local_63; for (iVar3 = 0x18; iVar3 != 0; iVar3 = iVar3 + -1) { pcVar4[0] = '\0'; pcVar4[1] = '\0'; pcVar4[2] = '\0'; pcVar4[3] = '\0'; pcVar4 = pcVar4 + 4; } pcVar4[0] = '\0'; pcVar4[1] = '\0'; pcVar4[2] = '\0'; GetDlgItemTextA(param_1,1000,&local_64,100); if (local_63 == 'a') { iVar3 = _strncmp(&local_62,&DAT_00406078,2); if (iVar3 == 0) { pcVar4 = s_AGR3versing_0040606a; pbVar2 = (byte *)(acStack_61 + 1);
do { pcVar4 = (char *)((byte *)pcVar4 + 2); bVar1 = *pbVar2; bVar5 = bVar1 < (byte)*pcVar4; if (bVar1 != *pcVar4) { LAB_00401102: iVar3 = (1 - (uint)bVar5) - (uint)(bVar5 != 0); goto LAB_00401107; } if (bVar1 == 0) break; bVar1 = pbVar2[1]; bVar5 = bVar1 < ((byte *)pcVar4)[1]; if (bVar1 != ((byte *)pcVar4)[1]) goto LAB_00401102; pbVar2 = pbVar2 + 2; } while (bVar1 != 0);
iVar3 = 0; LAB_00401107: if ((iVar3 == 0) && (local_64 == 'E')) { MessageBoxA(param_1,s_Congratulation_!!_00406044,s_EasyCrackMe_00406058,0x40); EndDialog(param_1,0); return; } } } MessageBoxA(param_1,s_Incorrect_Password_00406030,s_EasyCrackMe_00406058,0x10); return; }
|
Ea5yR3versing
IDA
对同一校验逻辑的反编译摘录如下。String[1]、String[2:4]、String[4:]
和 String[0] 的检查分别约束输入的对应片段;符号
Str2 和 aR3versing
的字符串内容须从原二进制读取。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| int __cdecl sub_401080(HWND hDlg) { CHAR String[97]; __int16 v3; char v4;
memset(String, 0, sizeof(String)); v3 = 0; v4 = 0; GetDlgItemTextA(hDlg, 1000, String, 100); if ( String[1] != 'a' || strncmp(&String[2], Str2, 2u) || strcmp(&String[4], aR3versing) || String[0] != 69 ) return MessageBoxA(hDlg, aIncorrectPassw, Caption, 0x10u); MessageBoxA(hDlg, Text, Caption, 0x40u); return EndDialog(hDlg, 0); }
|