| ²é¿´: 477 | »Ø¸´: 1 | |||
| µ±Ç°Ö÷ÌâÒѾ´æµµ¡£ | |||
sdlj8051½ð³æ (ÖøÃûдÊÖ)
|
[½»Á÷]
[תÌù]CRC32ÅöײµÄʵÏÖ
|
||
|
????????????????????? ??CRC32??????N??????§¹??,???§¹????0xFFFFFFFF,????N????????????????§¹??? ?????????????????????4????????§¹???????????????????????? ??: ???????????§¹????ABCD,?????§¹?????????abcd,§¹???????WXYZ,????4???????????mnop (??????????????????) ???????????ABCD+WXYZ???abcd ????4??????F(x),G(x),H(x),I(x)???????x????????,???????DWORD????¦Ë????¦Ë??4????? CRC32§¹??abcd???????????: R0:A,B,C,D R1:F(m),A^G(m),B^H(m),C^I(m) R2:F(n),F(m)^G(n),A^G(m)^H(n),B^H(m)^I(n) R3:F(o),F(n)^G(o),F(m)^G(n)^H(o),A^G(m)^H(n)^I(o)
|
» ²ÂÄãϲ»¶
303Çóµ÷¼Á
ÒѾÓÐ6È˻ظ´
07»¯Ñ§303Çóµ÷¼Á
ÒѾÓÐ5È˻ظ´
332Çóµ÷¼Á
ÒѾÓÐ6È˻ظ´
¿¼Ñе÷¼Á
ÒѾÓÐ7È˻ظ´
0856Çóµ÷¼Á
ÒѾÓÐ5È˻ظ´
×Ü·Ö293Çóµ÷¼Á
ÒѾÓÐ6È˻ظ´
275Çóµ÷¼Á
ÒѾÓÐ5È˻ظ´
085600 ²ÄÁÏÓ뻯¹¤ 329·ÖÇóµ÷¼Á
ÒѾÓÐ7È˻ظ´
²ÄÁÏÓ뻯¹¤328·Öµ÷¼Á
ÒѾÓÐ6È˻ظ´
291 Çóµ÷¼Á
ÒѾÓÐ6È˻ظ´
sdlj8051
½ð³æ (ÖøÃûдÊÖ)
- Ó¦Öú: 0 (Ó×¶ùÔ°)
- ¹ó±ö: 0.1
- ½ð±Ò: 1149.8
- ºì»¨: 3
- Ìû×Ó: 2254
- ÔÚÏß: 18.1Сʱ
- ³æºÅ: 71297
- ×¢²á: 2005-05-30
- רҵ: µç·Óëϵͳ
|
ÀûÓ÷´ÏòЧÑéдÁËÒ»¸öanti-debugµÄÀý×Ó£¬È«²¿´úÂëºÍÊý¾ÝÒ»ÆðЧÑ飬ȻºóÀûÓÃЧÑéÖµ½âÃÜ£¬µ±È»Ð§ÑéÖµÊÇÊÂÏÈÏëºÃµÄ£¬Õâ¸öÀý×ÓÀïЧÑéÖµ=0x123456789 ¼ÓÃÜǰµÄ´úÂ룺 .code check_start: start: mov esi,check_start call InitCRC32 mov ecx,check_end-check_start mov eax,0FFFFFFFFh call CRC32 mov ecx,(encrypt_end-encrypt_start) shr ecx,2 mov esi,encrypt_start decrypt: push eax push ecx mov ecx,4 call CRC32 mov [esi-4],eax pop ecx pop eax inc eax loop decrypt encrypt_start: jmp msgout msg db "this debugme cracked by none!",0,0,0,0,0,0,0,0,0 tmsg db "test CRC32 by DonQuixote[CCG][iPB]",0 msgout: invoke MessageBox,NULL,offset msg,offset tmsg,MB_OK invoke ExitProcess,NULL encrypt_end: InitCRC32: mov ecx, 256 _nexttable: lea eax, [ecx-1] push ecx mov ecx, 8 _nextbit: shr eax,1 jnc _notcarry xor eax, 0edb88320h _notcarry: dec ecx jnz _nextbit pop ecx mov [dwcrc32table + ecx*4 - 4], eax dec ecx jnz _nexttable ret CRC32: ;esi=data ;ecx=len of data ;eax=init of checksum or esi, esi jz _done or ecx, ecx jz _done _nextbyte: mov dl, [esi] xor dl, al movzx edx, dl shr eax, 8 xor eax, [dwcrc32table + edx*4] inc esi call antibp loop _nextbyte _done: not eax ret antibp: push seh push fs:[0] mov fs:[0],esp db 0CCh pop fs:[0] add esp,4 ret seh: mov eax,dword ptr ss:[esp+4h] mov ecx,dword ptr ss:[esp+0Ch] inc dword ptr ds:[ecx+0B8h] mov eax,dword ptr ds:[eax] xor eax,80000003h jnz start ;xor eax,eax and dword ptr ds:[ecx+4h],eax and dword ptr ds:[ecx+8h],eax and dword ptr ds:[ecx+0Ch],eax and dword ptr ds:[ecx+10h],eax and dword ptr ds:[ecx+14h],0FFFF0FF0h and dword ptr ds:[ecx+18h],0DC00h ret check_end: end start ¶ÔÓ²¼þ¶Ïµã×öÁËÒ»µã´¦Àí£¬¼ÓÃÜËã·¨ÈÔÈ»ÊÇCRC32 ÒòΪÓÃCRC32ЧÑéÒ»¸öDWORDʱ£¬ÖªµÀ ЧÑéÊý¾Ý ЧÑé³õÖµ ЧÑéÖµ 3¸öÖеÄ2¸ö¾Í¿ÉÒÔÇóÁíÍâÒ»¸ö CRC32:ÊÇCRC32ЧÑ飬eaxÖ¸¶¨Ð§Ñé³õÖµ(eax=0xFFFFFFFF¾ÍÊDZê×¼CRC32) ¼ÓÃÜʱµÄËã·¨£º #define LEN 0x141 BYTE data[LEN]; DWORD wantedcrc=0x12345678; DWORD filebase=0x400; int fixfile() { FILE*fh=fopen("E:\\Crack\\CRC32\\anti.exe","r+" ;fseek(fh,filebase,SEEK_SET); fread(data,1,LEN,fh); DWORD iendata=0x3A; for(int i=0;i<0x1A;i++) { *(DWORD*)(data+iendata)=rCRC32(~*(DWORD*)(data+iendata),(wantedcrc+i)); iendata+=4; } DWORD b=~StdCRC(data,0x5D); DWORD a=RevCRC(~wantedcrc,(DWORD*)(data+0x61),(0x141-0x61)/4); *(DWORD*)(data+0x5D)=rCRC32(a,b); fseek(fh,filebase,SEEK_SET); fwrite(data,1,LEN,fh); fclose(fh); return 0; } wantedcrc=0x12345678ÊÇÔ¤ÏÈÉ趨µÄЧÑéÖµ for(int i=0;i<0x1A;i++)²¿·Ö¼ÓÃÜÊý¾Ý RevCRC·´ÏòЧÑ飬ȻºóÔÚ*(DWORD*)(data+0x5D)ÕâÀïpatchÐÞ²¹Â룬ʹЧÑéÖµ=wantedcrc ·´ÏòЧÑéµÄ´úÂ룺 //return init reg DWORD RevCRC(DWORD reg,DWORD*pdata,int n) { for(int i=n-1;i>=0;i--)reg=RCRC32(reg,pdata); return reg; } //¸ù¾ÝÊý¾ÝºÍЧÑéÖµÇó³öЧÑé³õÖµ ÀûÓÃCRC32¼ÓÃܵı任Ҳ¿ÉÒÔÓ¦Óõ½ÐòÁкű任À¿ÉÒÔÔö¼ÓÒ»µãдKeyGenµÄÄѶȣº£© |













»Ø¸´´ËÂ¥
;