Znn3bq.jpeg
²é¿´: 485  |  »Ø¸´: 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)
R4:F(p),F(o)^G(p),F(n)^G(o)^H(p),F(m)^G(n)^H(o)^I(p)

??R4????????4???????§¹???WXYZ,?????????????:

-------------------------
<1>
W=F(p);
X=F(o)^G(p);
Y=F(n)^G(o)^H(p);
Z=F(m)^G(n)^H(o)^I(p);

<2>
m=d^D;
n=c^C^I(m);
o=b^B^H(m)^I(n);
p=a^A^G(m)^H(n)^I(o);
-------------------------

????????????????ABCD,abcd,WXYZ??????,??mnop???§Þ????

????abcd????????,??F(x)???????RF(x),??:
-----------------------
~<1>
p=RF(W);
o=RF(X^G(p));
n=RF(Y^G(o)^H(p));
m=RF(Z^G(n)^H(o)^I(p));

~<2>
d=m^D;
c=n^C^I(m);
b=o^B^H(m)^I(n);
a=p^A^G(m)^H(n)^I(o);
-----------------------

???????????????????????§Ö?????:d,c,b,a  (????????????§³????)

???????????????????,??????????????????RF(x)??????,??????????????????y=F(x)????????:

void TestRF()
{
  BYTE i,j;
  DWORD flag;
  for(i=0;i<=0xFF;i++)
  {
    flag=0;
    for(j=0;j<=0xFF;j++)
    {
      if(HIBYTE(HIWORD(CRC32_tab[j])) == i)
      {
        flag=1;
        printf("%X gets!\r\n",i);
        break;
      }
      if(j==0xFF)break;
    }
    if(!flag)printf("%X can't get RF\r\n",i);
    if(i==0xFF)break;
  }
}

???????????§Ö?0~255????RF(x)???????,?????RF(x)??????????,?????????????!

??????~<1> ~<2>????:

BYTE RF(BYTE x)
{
  BYTE j;
  for(j=0;j<=0xFF;j++)
  {
    if(HIBYTE(HIWORD(CRC32_tab[j])) == x)break;
  }
  return j;
}

BYTE F(BYTE x)
{
  return HIBYTE(HIWORD(CRC32_tab[x]));
}
BYTE G(BYTE x)
{
  return LOBYTE(HIWORD(CRC32_tab[x]));
}
BYTE H(BYTE x)
{
  return HIBYTE(LOWORD(CRC32_tab[x]));
}
BYTE I(BYTE x)
{
  return LOBYTE(LOWORD(CRC32_tab[x]));
}

#define MakeLong(a,b) MAKELONG(b,a)
#define MakeWord(a,b) MAKEWORD(b,a)

DWORD rCRC32(DWORD WXYZ,DWORD ABCD)
{
  BYTE p,o,n,m,a,b,c,d,W,X,Y,Z,A,B,C,D;

  W=HIBYTE(HIWORD(WXYZ));
  X=LOBYTE(HIWORD(WXYZ));
  Y=HIBYTE(LOWORD(WXYZ));
  Z=LOBYTE(LOWORD(WXYZ));

  A=HIBYTE(HIWORD(ABCD));
  B=LOBYTE(HIWORD(ABCD));
  C=HIBYTE(LOWORD(ABCD));
  D=LOBYTE(LOWORD(ABCD));

  p=RF(W);
  o=RF(X^G(p));
  n=RF(Y^G(o)^H(p));
  m=RF(Z^G(n)^H(o)^I(p));

  d=m^D;
  c=n^C^I(m);
  b=o^B^H(m)^I(n);
  a=p^A^G(m)^H(n)^I(o);

  return MakeLong(MakeWord(a,b),MakeWord(c,d));
}

DWORD RCRC32(DWORD WXYZ,DWORD abcd)
{
  BYTE p,o,n,m,a,b,c,d,W,X,Y,Z,A,B,C,D;

  W=HIBYTE(HIWORD(WXYZ));
  X=LOBYTE(HIWORD(WXYZ));
  Y=HIBYTE(LOWORD(WXYZ));
  Z=LOBYTE(LOWORD(WXYZ));

  a=HIBYTE(HIWORD(abcd));
  b=LOBYTE(HIWORD(abcd));
  c=HIBYTE(LOWORD(abcd));
  d=LOBYTE(LOWORD(abcd));

  p=RF(W);
  o=RF(X^G(p));
  n=RF(Y^G(o)^H(p));
  m=RF(Z^G(n)^H(o)^I(p));

  D=m^d;
  C=n^c^I(m);
  B=o^b^H(m)^I(n);
  A=p^a^G(m)^H(n)^I(o);

  return MakeLong(MakeWord(A,B),MakeWord(C,D));
}

DWORD CRC32(DWORD ABCD,DWORD abcd)
{
  BYTE p,o,n,m,a,b,c,d,W,X,Y,Z,A,B,C,D;

  A=HIBYTE(HIWORD(ABCD));
  B=LOBYTE(HIWORD(ABCD));
  C=HIBYTE(LOWORD(ABCD));
  D=LOBYTE(LOWORD(ABCD));

  a=HIBYTE(HIWORD(abcd));
  b=LOBYTE(HIWORD(abcd));
  c=HIBYTE(LOWORD(abcd));
  d=LOBYTE(LOWORD(abcd));

  m=d^D;
  n=c^C^I(m);
  o=b^B^H(m)^I(n);
  p=a^A^G(m)^H(n)^I(o);

  W=F(p);
  X=F(o)^G(p);
  Y=F(n)^G(o)^H(p);
  Z=F(m)^G(n)^H(o)^I(p);

  return MakeLong(MakeWord(W,X),MakeWord(Y,Z));
}

??????????????¡Â????,??????????????????,??CRC32§¹??,???????ABCD
???????????<1><2>????abcd,??abcd?????????????????????????!

????,"DonQuixote[CCG][iPB]"??????????CRC32??0x8A0C90C9,??????¦Ä??????????????????:

int main(int argc, char* argv[])
{

  DWORD x=rCRC32(~0x8A0C90C9,~CRC((BYTE*)"ipb",3));

  char str[5];
  memcpy(str,&x,4);
  str[4]=0;
  printf("x=%X\r\nstring=%s\r\n",x,str);

  return 0;
}

????????§»???:

DonQuixote[CCG][iPB]
123?Dp0
ccg_G??
ipbkw??

?????????????CRC32§¹???=0x8A0C90C9
(????§Ú???????????????,?????http://www.pediy.com/tools/Crypt ... N%20Hash%20Calculat

or%20.zip)

??????????????????????DWORD,????????????????§Þ????¦Ë???DWORD,????????????
??????WXYZ,abcd?????ABCD???????:
-------------------------
(mnop??????~<1>~<2>???)
~<2'>
D=m^d;
C=n^c^I(m);
B=o^b^H(m)^I(n);
A=p^a^G(m)^H(n)^I(o);
-------------------------
????????????????"§¹??"???,?????§Þ????¦Ë????????????

****************************************************************************************8

?????????§»???:

??????????????????????anti-debug??,?????§¹?úY???????????§¹???????
???????~<2'>??~<2>????????§¹?????????,?????????????:CRC(***A***)=A

????windows??????????CRC32§¹???,?????????§Õ??????????????????????§¹?????????????
??????????????RootKit?????????,??????????????????

???TCP/IP??????????CRC32§¹??,??????????§Õ?????????????????????????§¹??????

[ Last edited by sdlj8051 on 2006-10-6 at 12:34 ]
»Ø¸´´ËÂ¥

» ²ÂÄãϲ»¶

ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

sdlj8051

½ð³æ (ÖøÃûдÊÖ)

ÀûÓ÷´ÏòЧÑéдÁËÒ»¸ö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µÄÄѶȣº£©
2Â¥2006-08-23 18:15:28
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ sdlj8051 µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] ҩѧÇóµ÷¼Á +12 à¶¹þ¼ÓÓÍ 2026-04-14 14/700 2026-04-15 23:49 by ³ÂƤƤ
[¿¼ÑÐ] 291 Çóµ÷¼Á +40 »¯¹¤2026½ì±ÏÒµÉ 2026-04-09 41/2050 2026-04-15 21:54 by noqvsozv
[¿¼ÑÐ] ҩѧ305Çóµ÷¼Á +7 Â꿨°Í¿¨boom 2026-04-11 7/350 2026-04-15 13:21 by Î÷±±Íû¡ª·çɳ
[¿¼ÑÐ] ҩѧ305Çóµ÷¼Á +10 Â꿨°Í¿¨boom 2026-04-10 10/500 2026-04-14 15:55 by zs92450
[½Ìʦ֮¼Ò] ת³¤Æ¸ÁË +7 ¼òµ¥»¯xn 2026-04-13 7/350 2026-04-14 14:50 by xindong
[¿¼ÑÐ] 300·ÖÇóµ÷¼Á £¨085501»úеר˶£¬±¾¿ÆÑï´ó£© +9 xu@841019 2026-04-11 10/500 2026-04-14 08:48 by ľľmumu¡«
[¿¼ÑÐ] 297¹¤¿Æ£¬Çóµ÷¼Á? +13 ºÓÄÏũҵ´óѧ-ÄÜ 2026-04-12 13/650 2026-04-13 14:12 by dingyanbo1
[¿¼ÑÐ] ÉúÎïѧµ÷¼Á£¬Ò»Ö¾Ô¸Î÷ÄÏ´óѧ348£¬TopÆÚ¿¯Ò»Çø¶þ×÷¡¢¶þÇøÈý×÷£¬ÈýµÈ½±Ñ§½ðÈý´Î +5 candyyyi 2026-04-09 5/250 2026-04-13 09:02 by ¿Éµ­²»¿ÉÍü
[¿¼ÑÐ] Ò»Ö¾Ô¸Î÷±±¹¤Òµ´óѧ289 085602 +33 yangæÃ 2026-04-10 34/1700 2026-04-12 08:11 by Art1977
[ÕÒ¹¤×÷] ɽ¶«¸ßУ½Ìʦ¿¼ºË³¬¼¶ÎÞµ×Ïߣ¬Ô±¹¤¹ý²»ÏÂÈ¥À² +4 qut2026 2026-04-09 9/450 2026-04-12 00:54 by qut2026
[¿¼ÑÐ] Ò»Ö¾Ô¸Ïôó0856£¬306Çóµ÷¼Á +15 Bblinging 2026-04-11 15/750 2026-04-11 22:53 by 314126402
[¿¼ÑÐ] 346£¬¹¤¿ÆÇóµ÷¼Á +3 moser233 2026-04-09 3/150 2026-04-11 10:04 by zhq0425
[¿¼ÑÐ] ÖÐҩѧµ÷¼Á ³õÊÔ324 +4 Ñó¸Ê¾Õ¡¢ 2026-04-10 6/300 2026-04-11 09:41 by gong120082
[¿¼ÑÐ] ²ÄÁÏÓ뻯¹¤µ÷¼Á +12 ·ñ¼«Ì©À´2026 2026-04-10 13/650 2026-04-11 00:28 by wangjihu
[¿¼ÑÐ] µ÷¼Á +12 ¾í¾í¾íÐIJË_ 2026-04-09 13/650 2026-04-10 22:36 by Ftglcn90
[¿¼ÑÐ] 083200 305·Ö Çó¶þÂÖµ÷¼Á ²»½ÓÊÜ¿çרҵ +9 Claireyyyy 2026-04-09 10/500 2026-04-10 21:21 by Claireyyyy
[¿¼ÑÐ] ¼ª´ó¼ÆËã»ú¼¼Êõ331·Ö£¬Ó¢ÓïÁù¼¶£¬Çóµ÷¼Á +3 ·å·å021116 2026-04-09 3/150 2026-04-10 20:01 by chemisry
[¿¼ÑÐ] 085800 ÄÜÔ´¶¯Á¦Çóµ÷¼Á +6 °¢biu°¡°¡°¡°¡°¡ 2026-04-10 6/300 2026-04-10 15:03 by hemengdong
[¿¼ÑÐ] Òѵ÷¼Á +18 ²ñ¿¤Ã¨_ 2026-04-09 19/950 2026-04-09 22:10 by ²ñ¿¤Ã¨_
[¿¼ÑÐ] ²ÄÁÏר˶(0856) 339·ÖÇóµ÷¼Á +9 ¹þ¹þ¹þ¶ì¹þ¹þ¹þ 2026-04-09 10/500 2026-04-09 20:01 by Orcid
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û