能力值:
( LV2,RANK:10 )
|
-
-
6 楼
00401880 6A FF push -1
00401882 68 B8224000 push CrackMe.004022B8 ; SE 处理程序安装
00401887 64:A1 00000000 mov eax,dword ptr fs:[0]
0040188D 50 push eax
0040188E 64:8925 0000000>mov dword ptr fs:[0],esp
00401895 83EC 34 sub esp,34
00401898 53 push ebx
00401899 55 push ebp
0040189A 56 push esi
0040189B 8BF1 mov esi,ecx
0040189D 57 push edi
0040189E 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
004018A2 897424 1C mov dword ptr ss:[esp+1C],esi
004018A6 E8 C5060000 call <jmp.&MFC42.#540_CString::CString>
004018AB 8B46 64 mov eax,dword ptr ds:[esi+64]
004018AE 83C6 64 add esi,64
004018B1 33DB xor ebx,ebx
004018B3 8B48 F8 mov ecx,dword ptr ds:[eax-8]
004018B6 B8 20000000 mov eax,20
004018BB 99 cdq
004018BC F7F9 idiv ecx
004018BE 895C24 4C mov dword ptr ss:[esp+4C],ebx
004018C2 40 inc eax
004018C3 74 0F je short CrackMe.004018D4
004018C5 8BF8 mov edi,eax
004018C7 56 /push esi
004018C8 8D4C24 14 |lea ecx,dword ptr ss:[esp+14]
004018CC E8 E1060000 |call <jmp.&MFC42.#939_CString::operator>
004018D1 4F |dec edi
004018D2 ^ 75 F3 \jnz short CrackMe.004018C7
004018D4 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
004018D8 E8 CF060000 call <jmp.&MFC42.#4204_CString::MakeUppe>
004018DD B9 08000000 mov ecx,8
004018E2 33C0 xor eax,eax
004018E4 8D7C24 21 lea edi,dword ptr ss:[esp+21]
004018E8 C64424 20 00 mov byte ptr ss:[esp+20],0
004018ED F3:AB rep stos dword ptr es:[edi]
004018EF 8B4424 10 mov eax,dword ptr ss:[esp+10]
004018F3 8D4C24 20 lea ecx,dword ptr ss:[esp+20]
004018F7 33FF xor edi,edi
004018F9 33F6 xor esi,esi
004018FB 2BC1 sub eax,ecx
004018FD 895C24 14 mov dword ptr ss:[esp+14],ebx
00401901 894424 18 mov dword ptr ss:[esp+18],eax
00401905 EB 04 jmp short CrackMe.0040190B
00401907 8B4424 18 /mov eax,dword ptr ss:[esp+18]
0040190B 8D4C3C 20 lea ecx,dword ptr ss:[esp+edi+20]
0040190F 8A1C08 |mov bl,byte ptr ds:[eax+ecx]
00401912 80FB 3A |cmp bl,3A
00401915 7E 11 |jle short CrackMe.00401928
00401917 8BC6 |mov eax,esi
00401919 BD 1F000000 |mov ebp,1F
0040191E 99 |cdq
0040191F F7FD |idiv ebp
00401921 02D3 |add dl,bl
00401923 80EA 3F |sub dl,3F
00401926 EB 11 |jmp short CrackMe.00401939
00401928 8B4424 14 |mov eax,dword ptr ss:[esp+14]
0040192C BD 11000000 |mov ebp,11
00401931 99 |cdq
00401932 F7FD |idiv ebp
00401934 02D3 |add dl,bl
00401936 80EA 27 |sub dl,27
00401939 0FBEC2 |movsx eax,dl
0040193C 8811 |mov byte ptr ds:[ecx],dl
0040193E BB 0F000000 |mov ebx,0F
00401943 99 |cdq
00401944 F7FB |idiv ebx
00401946 83C6 13 |add esi,13
00401949 47 |inc edi
0040194A 8811 |mov byte ptr ds:[ecx],dl
0040194C 8B4C24 14 |mov ecx,dword ptr ss:[esp+14]
00401950 83C1 08 |add ecx,8
00401953 81FE 60020000 |cmp esi,260
00401959 894C24 14 |mov dword ptr ss:[esp+14],ecx
0040195D ^ 75 A8 \jnz short CrackMe.00401907
0040195F 8B6C24 1C mov ebp,dword ptr ss:[esp+1C]
00401963 8D7C24 20 lea edi,dword ptr ss:[esp+20]
00401967 33F6 xor esi,esi
00401969 83EF 07 sub edi,7
0040196C E8 6FFAFFFF /call CrackMe.004013E0
00401971 0FBE05 99614000 |movsx eax,byte ptr ds:[406199]
00401978 99 |cdq
00401979 BB 0E000000 |mov ebx,0E
0040197E 8D4E 07 |lea ecx,dword ptr ds:[esi+7]
00401981 F7FB |idiv ebx
00401983 33C0 |xor eax,eax
00401985 8A040F |mov al,byte ptr ds:[edi+ecx]
00401988 80C2 0C |add dl,0C
0040198B 81E2 FF000000 |and edx,0FF
00401991 33C2 |xor eax,edx
00401993 8D1440 |lea edx,dword ptr ds:[eax+eax*2]
00401996 8D0490 |lea eax,dword ptr ds:[eax+edx*4]
00401999 99 |cdq
0040199A F7FB |idiv ebx
0040199C 8B45 68 |mov eax,dword ptr ss:[ebp+68]
0040199F 8B1D 9C614000 |mov ebx,dword ptr ds:[40619C]
004019A5 8A0430 |mov al,byte ptr ds:[eax+esi]
004019A8 FEC2 |inc dl
004019AA 83FB 20 |cmp ebx,20
004019AD 74 27 |je short CrackMe.004019D6
004019AF 3C 3A |cmp al,3A
004019B1 7E 04 |jle short CrackMe.004019B7
004019B3 04 C9 |add al,0C9
004019B5 EB 02 |jmp short CrackMe.004019B9
004019B7 04 D0 |add al,0D0
004019B9 0FBED8 |movsx ebx,al
004019BC 0FBED2 |movsx edx,dl
004019BF 8BC1 |mov eax,ecx
004019C1 33DA |xor ebx,edx
004019C3 99 |cdq
004019C4 B9 0E000000 |mov ecx,0E
004019C9 F7F9 |idiv ecx
004019CB 42 |inc edx
004019CC 3BDA |cmp ebx,edx
004019CE 75 06 |jnz short CrackMe.004019D6
004019D0 46 |inc esi
004019D1 83FE 20 |cmp esi,20
004019D4 ^ 75 96 \jnz short CrackMe.0040196C
004019D6 E8 45000000 call CrackMe.00401A20
004019DB 85C0 test eax,eax
004019DD 75 0E jnz short CrackMe.004019ED
004019DF 50 push eax
004019E0 50 push eax
004019E1 68 64404000 push CrackMe.00404064
004019E6 8BCD mov ecx,ebp
004019E8 E8 B3050000 call <jmp.&MFC42.#4224_CWnd::MessageBoxA>
004019ED 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
004019F1 C74424 4C FFFFF>mov dword ptr ss:[esp+4C],-1
004019F9 E8 5A050000 call <jmp.&MFC42.#800_CString::~CString>
004019FE 8B4C24 44 mov ecx,dword ptr ss:[esp+44]
00401A02 5F pop edi
00401A03 5E pop esi
00401A04 5D pop ebp
00401A05 5B pop ebx
00401A06 64:890D 0000000>mov dword ptr fs:[0],ecx
00401A0D 83C4 40 add esp,40
00401A10 C3 retn
算法部分 未分析。。。
强大的IDA F5。。。
int __fastcall sub_401880(int a1)
{
int v1; // edx@1
signed int v2; // ecx@1
int v3; // esi@1
int v4; // edi@2
int v5; // eax@4
int v6; // edi@4
signed int v7; // esi@4
char *v8; // ecx@6
char v9; // bl@6
char v10; // dl@7
int v11; // ebp@10
signed int v12; // esi@10
char v13; // al@11
char v14; // al@13
int v15; // eax@17
int v17; // esi@1
int v18; // eax@1
int v19; // [sp+1Ch] [bp-34h]@1
int v20; // [sp+10h] [bp-40h]@1
signed int v21; // [sp+4Ch] [bp-4h]@1
char v22; // [sp+20h] [bp-30h]@4
char v23; // [sp+21h] [bp-2Fh]@4
signed int v24; // [sp+14h] [bp-3Ch]@4
int v25; // [sp+18h] [bp-38h]@4
v17 = a1;
v19 = a1;
CString__CString(&v20);
v18 = *(_DWORD *)(v17 + 100);
v3 = v17 + 100;
v2 = *(_DWORD *)(v18 - 8);
v1 = 32 % v2;
v21 = 0;
if ( 32 / v2 != -1 )
{
v4 = 32 / v2 + 1;
do
{
CString__operator__(&v20, v3);
--v4;
}
while ( v4 );
}
CString__MakeUpper(&v20, v1);
v22 = 0;
memset(&v23, 0, 0x20u);
v6 = 0;
v7 = 0;
v5 = v20 - (_DWORD)&v22;
v24 = 0;
v25 = v20 - (_DWORD)&v22;
while ( 1 )
{
v8 = &v22 + v6;
v9 = *(&v22 + v6 + v5);
if ( v9 <= 58 )
v10 = v9 + v24 % 17 - 39;
else
v10 = v9 + v7 % 31 - 63;
*v8 = v10;
v7 += 19;
++v6;
*v8 = v10 % 15;
v24 += 8;
if ( v7 == 608 )
break;
v5 = v25;
}
v11 = v19;
v12 = 0;
do
{
sub_4013E0();
v13 = *(_BYTE *)(*(_DWORD *)(v11 + 104) + v12);
if ( dword_40619C == 32 )
break;
if ( v13 <= 58 )
v14 = v13 - 48;
else
v14 = v13 - 55;
if ( ((char)(13 * ((unsigned __int8)(byte_406199 % 14 + 12) ^ *((_BYTE *)&v25 + v12 + 8)) % 14 + 1) ^ v14) != (v12 + 7) % 14 + 1 )
break;
++v12;
}
while ( v12 != 32 );
v15 = sub_401A20();
if ( !v15 )
CWnd__MessageBoxA(v11, "注册失败!", v15, v15);
v21 = -1;
return CString___CString(&v20);
}
LZ去掉了成功的消息框把?还是我跟错了?
|