Author: david
This article address: http://blog.iyi.cn/user/david/archives/2005/01/210.html
It turned out that there was an online crack of Checksum.
The current version of the VB version is the Checksum code.
CHECKSUM assembly code:
Googlecheck Proc Near
VAR_8 = DWORD PTR-8
VAR_4 = DWORD PTR-4
URL_OFFSET = DWORD PTR 8
URL_LENGTH = DWORD PTR 0CH
Magic_dword = DWORD PTR 10H
Push EBP
MOV EBP, ESP
Push ECX
Push ECX
MOV EAX, [EBP URL_LENGTH]
CMP Eax, 0Ch
Push EBX
PUSH ESI
MOV ESI, [EBP MAGIC_DWORD]; = 0xE6359A60
Push EDI
MOV EDI, 9E3779B9H; Derived from the golden number, hi tea;)
MOV EBX, EDI
MOV [EBP VAR_4], EAX
JB jump_1
Push 0ch
POP ECX
XOR EDX, EDX
Div ECX
MOV ECX, [EBP URL_OFFSET]
MOV [EBP VAR_8], EAX
LOOP_1:
Movzx Eax, Byte PTR [ECX 7]
Movzx EDX, Byte Ptr [ECX 6]
SHL EAX, 8
Add Eax, EDX
Movzx EDX, Byte Ptr [ECX 5]
SHL EAX, 8
Add Eax, EDX
Movzx EDX, Byte Ptr [ECX 4]
Add Edx, EDI
SHL EAX, 8
Lea EDI, [EDX EAX]
Movzx Eax, Byte PTR [ECX 0BH]
Movzx EDX, Byte Ptr [ECX 0AH]
SHL EAX, 8
Add Eax, EDX
Movzx EDX, Byte Ptr [ECX 9]
SHL EAX, 8
Add Eax, EDX
Movzx EDX, Byte Ptr [ECX 8]
Add Edx, ESI
SHL EAX, 8
LEA ESI, [EDX EAX]
Movzx EDX, Byte Ptr [ECX 3]
Movzx Eax, Byte PTR [ECX 2]
SHL EDX, 8
Add Edx, EAX
Movzx Eax, Byte PTR [ECX 1]
SHL EDX, 8
Add Edx, EAX
Movzx Eax, Byte Ptr [ECX]
SHL EDX, 8
Add Edx, EAX
Sub EDX, EDI
Sub EDX, ESI
MOV EAX, ESI
SHR EAX, 0DH
Add Edx, EBX
XOR Edx, EAX
Sub EDI, EDX
Sub EDI, ESI
MOV EAX, EDX
SHL EAX, 8
XOR EDI, EAX
SUB ESI, EDI
SUB ESI, EDX
Mov Eax, EDI
SHR EAX, 0DH
XOR ESI, EAX
Sub EDX, EDI
Sub EDX, ESI
MOV EAX, ESI
SHR EAX, 0CH
XOR Edx, EAX
Sub EDI, EDX
Sub EDI, ESI
MOV EAX, EDX
SHL EAX, 10h
XOR EDI, EAX
SUB ESI, EDI
SUB [EBP VAR_4], 0CH
SUB ESI, EDX
Mov Eax, EDI
SHR EAX, 5
XOR ESI, EAX
Sub EDX, EDI
MOV EAX, ESI
SHR EAX, 3
Sub EDX, ESI
XOR Edx, EAX
MOV EBX, EDX
SUB EDI, EBX
Sub EDI, ESI
MOV EAX, EBX
SHL EAX, 0AH
XOR EDI, EAX
SUB ESI, EDI
Mov Eax, EDI
SUB ESI, EBX
SHR EAX, 0FH
XOR ESI, EAX
Add ECX, 0CH
DEC [EBP VAR_8]
JNZ loop_1
JMP Short Jump_2
JUMP_1:
MOV ECX, [EBP URL_OFFSET]
JUMP_2:
Add ESI, [EBP URL_LENGTH]
MOV EAX, [EBP VAR_4]
Dec EAX
CMP Eax, 0ah; Switch 11 Cases
Ja Defaultswitch; default
JMP DS: OFF_100307EA [EAX * 4]; Switch Jump
Switch_10:
Movzx Eax, Byte PTR [ECX 0AH]; Case 0xA
SHL EAX, 18H
Add ESI, ESI
Switch_9:
Movzx Eax, Byte PTR [ECX 9]; case 0x9
SHL EAX, 10h
Add ESI, ESI
Switch_8:
Movzx Eax, Byte PTR [ECX 8]; case 0x8
SHL EAX, 8
Add ESI, ESI
Switch_7:
Movzx Eax, Byte PTR [ECX 7]; Case 0x7
Movzx EDX, Byte Ptr [ECX 6]
SHL EAX, 8
Add Eax, EDX
Movzx EDX, Byte Ptr [ECX 5]
SHL EAX, 8
Add Eax, EDX
Movzx EDX, Byte Ptr [ECX 4]
SHL EAX, 8
Add Edx, EDI
Lea EDI, [EDX EAX]
JMP Short Switch_3; Case 0x3
Switch_6:
Movzx Eax, Byte Ptr [ECX 6]; Case 0x6
SHL EAX, 10h
Add Edi, EAX
Switch_5:
Movzx Eax, Byte PTR [ECX 5]; case 0x5
SHL EAX, 8
Add Edi, EAX
Switch_4:
Movzx Eax, Byte PTR [ECX 4]; case 0x4
Add Edi, EAX
Switch_3:
Movzx Eax, Byte PTR [ECX 3]; case 0x3
Movzx EDX, Byte Ptr [ECX 2]
SHL EAX, 8
Add Eax, EDX
Movzx EDX, Byte Ptr [ECX 1]
Movzx ECX, Byte Ptr [ECX]
SHL EAX, 8
Add Eax, EDX
SHL EAX, 8
Add ECX, EBX
LEA EBX, [ECX EAX]
JMP Short Defaultswitch; Default
Switch_2:
Movzx Eax, Byte PTR [ECX 2]; case 0x2
SHL EAX, 10h
Add Ebx, EAX
Switch_1:
Movzx Eax, Byte PTR [ECX 1]; case 0x1
SHL EAX, 8
Add Ebx, EAX
Switch_0:
Movzx Eax, Byte Ptr [ECX]; Case 0x0
Add Ebx, EAX
Defaultswitch:
SUB EBX, EDI; Default
SUB EBX, ESI
MOV EAX, ESI
SHR EAX, 0DH
XOR EBX, EAX
SUB EDI, EBX
Sub EDI, ESI
MOV EAX, EBX
SHL EAX, 8
XOR EDI, EAX
SUB ESI, EDI
SUB ESI, EBX
Mov Eax, EDI
SHR EAX, 0DH
XOR ESI, EAX
SUB EBX, EDI
SUB EBX, ESI
MOV EAX, ESI
SHR EAX, 0CH
XOR EBX, EAX
SUB EDI, EBX
Sub EDI, ESI
MOV EAX, EBX
SHL EAX, 10h
XOR EDI, EAX
SUB ESI, EDI
Mov Eax, EDI
SUB ESI, EBX
SHR EAX, 5
XOR ESI, EAX
SUB EBX, EDI
MOV EAX, ESI
MOV ECX, EAX
SUB EBX, EAX
SHR ECX, 3
XOR EBX, ECX
SUB EDI, EBX
Sub EDI, EAX
MOV ECX, EBX
SHL ECX, 0AH
XOR EDI, ECX
Sub Eax, EDI
Sub Eax, EBX
SHR EDI, 0FH
XOR Eax, EDI
POP EDI
POP ESI
POP EBX
Leave
Retn
Googlecheck Endp
; Switch Table
OFF_100307EA
DD Offset Switch_0
DD Offset Switch_1
DD Offset Switch_2
DD Offset Switch_3
DD Offset Switch_4
DD Offset Switch_5
DD Offset Switch_6
DD Offset Switch_7
DD Offset Switch_8
DD Offset Switch_9
DD Offset Switch_10
Checksum VB code:
'==================================================== ======== 'Functions for the checksum:' Function SL (Byval X, byval n) 'Function SR (Byval X, Byval N)' Function Zerofill (Byval A, BYVAL B) 'Private function uadd ( ByVal L1, ByVal L2) 'Private function usub (ByVal L1, ByVal L2)' function mix (ByVal ia, ByVal ib, ByVal ic) 'function gc (ByVal s, ByVal i)' function GoogleCH (ByVal sURL) 'function CalculateChecksum (SURL) '================================================ =========== Function sl (byval x, byval n) if n = 0 THEN SL = X else Dim K K = CLNG (2 ^ (32 - n - 1)) DIM D D = X AND (k - 1) DIM C C = D * ClNG (2 ^ n) IF X and K THEN C = C OR & H80000000 End if SL = c end ifend functionfunction sr (byval x, byval n) if n = 0 THEN SR = x else Dim y y y y y y y y y y y y y y y y y y y y y y y y y y y = 32 - 1 THEN Z = 0 else z = Y / CLNG (2 ^ n) end ififf Y <> x life z = z or clng (2 ^ (32 - n - 1)) end if sr = z end ifend function
Function Zerofill (BYVAL A, BYVAL B) DIM X IF (& H80000000 and a) THEN X = SR (A, 1) x = x And (Not & H80000000) x = x OR & H40000000 x = SR (X, B-1) ELSE X = SR (a, b) end if zerofill = XEND FUNCTIONPRIVATE FUNCTION UADD (Byval L1, BYVAL L2) DIM L11, L12 L21, L22, L31, L32 L11 = L1 AND & HFFFFFFL12 = (L1 AND & H7F000000) / & H1000000 IF L1 <0 Then L12 = L12 Or & H80 L21 = L2 And & HFFFFFF L22 = (L2 And & H7F000000) / & H1000000 If L2 <0 Then L22 = L22 Or & H80 L32 = L12 L22 L31 = L11 L21 If (L31 And & H1000000) Then L32 = L32 1 UADD = (L31 and & HFFFFF) (L32 and & H7F) * & H1000000 IF L32 and & H80 THEN UADD = UADD OR & H80000000000 Function
Private function usub (Byval L1, ByVal L2) DIM L11, L12, L21, L22, L31, L32 L11 = L1 AND & HFFFFFFL12 = (L1 AND H7F000000) / & H1000000 IF L1 <0 THEN L12 = L12 OR & H80 L21 = L2 AND & HFFFFFFL22 = (L2 and & H7F000000) / & H1000000 IF L2 <0 THEN L22 = L22 OR & H80 L32 = L12 - L22 L31 = L11 - L21 IF L31 <0 THEN L32 = L32 - 1 L31 = L31 & H1000000 END IF USUB = L31 (L32 and & H7F) * & H1000000 IF L32 and & H80 THEN USUB = USUB OR & H80000000000 Function Function Mix (Byval IA, BYVAL IB, BYVAL IC) DIM A, B, C A = IA B = IB C = IC A = USUB ( A, B) A = USUB (a, c) a = a xor Zerofill (C, 13) B = USUB (B, C) B = USUB (B, A) B = B xor SL (a, 8) c = USUB (C, A) C = USUB (C, B) c = c xor Zerofill (B, 13) A = USUB (a, b) a = usub (a, c) a = a xor Zerofill (C, 12) B = USUB (B, C) B = USUB (B, A) B = B xor SL (a, 16) C = USUB (C, A) c = USUB (C, B) c = c xor Zerofill (B, 5) A = USUB (a, b) a = usub (a, c) a = a xor zerofill (C, 3) B = USUB (B, c) b = USUB (b, a) b = b xor SL ( A, 10) C = USU B (c, a) c = usub (c, b) c = c xor Zerofill (b, 15) DIM RET (3) RET (0) = a ret (1) = b Ret (2) = C Mix = Reted FunctionFunction GC (Byval S, BYVAL I) GC = ASC (MID (S, I 1, 1) End Function
Function Googlech (Byval Surl) Dim Ilength, A, B, C, K, Ilen, M ^=
A = & h9e3779b9 b = & h9e3779b9 c = Google_Magic k = 0 Ilen = = 11 = uadd (A, (UADD (GC (SURL, K 0), UADD (SL (SURL, K 1 ), 8), UADD (SL (GC (SURL, K 2), 16), SL (GC (SURL, K 3), 24)))))))))))) B = UADD (B, (UADD (GC (GC) SURL, K 4), UADD (SL (SURL, K 5), 8), UADD (SL (GC (SURL, K 6), 16), SL (GC (SURL, K 7), 24))))))))))))))))))))))))))) C = UADD (C, (UADD (GC (SURL, K 8), UADD (SL (SURL, K 9), 8), UADD (Sl (SURL, K) 10), 16), SL (GC (SURL, K 11), 24)))))))))) M = Mix (a, b, c) a = m (0) b = m (1) c = m (2) k = k 12
Ilen = Ilen - 12 LOOP
C = uadd (c, ingngth)
Select Case Ilen 'All The Case Statements Fall Through Case 11 C = UADD (C, Sl (GC (SURL, K 10), 24)) C = UADD (C, SL (GC (SURL, K 9), 16 ))) C = UADD (C, Sl (GC (SURL, K 8), 8)) B = UADD (B, SL (GC (SURL, K 7), 24)) B = UADD (B, SL ( GC (SURL, K 6), 16)) B = UADD (B, SL (GC (SURL, K 5), 8)) B = UADD (B, GC (SURL, K 4)) A = UADD (A, SL (GC (SURL, K 3), 24)) A = UADD (A, SL (GC (SURL, K 2), 16))) A = UADD (A, SL (GC (SURL, K) 1), 8)) A = UADD (A, GC (SURL, K 0)) Case 10 C = UADD (C, Sl (GC (SURL, K 9), 16)) C = UADD (C, SL (GC (SURL, K 8), 8)) B = UADD (B, SL (GC (SURL, K 7), 24)) B = UADD (B, SL (GC (SURL, K 6) , 16)) B = UADD (B, SL (GC (SURL, K 5), 8)) B = UADD (B, GC (SURL, K 4)) A = UADD (A, SL (GC (SURL , K 3), 24)) A = UADD (A, SL (GC (SURL, K 2), 16))) A = UADD (A, SL (GC (SURL, K 1), 8)) A = UADD (A, GC (SURL, K 0)) Case 9 C = UADD (C, Sl (GC (SURL, K 8), 8)) B = UADD (B, SL (GC (SURL, K 7), 24) B = UADD (B, SL (GC (SURL, K 6), 16)) B = UADD (B, SL (GC (SURL, K 5), 8)) B = UADD ( B, GC (SURL, K 4)) A = UADD (A, SL (GC (SURL, K 3), 24)) A = UADD (A, SL (GC (SURL, K 2), 16)) A = UADD (A, SL (GC (SURL, K 1), 8)) A = UADD (A, GC (SURL, K 0)) Case 8 B = UADD (B , SL (GC (SURL, K 7), 24)) B = UADD (B, SL (GC (SURL, K 6), 16)) B = UADD (B, SL (GC (SURL, K 5) ), 8)) B = uAdd (B, GC (SURL, K 4)) A = UADD (A, SL (GC (SURL, K 3), 24)) A = UADD (A, SL (GC) SURL, K 2), 16)) A = UADD (A, SL (GC (SURL, K 1), 8)) A = UADD (A, GC (SURL, K 0)) Case 7 B = UADD (B, SL (GC (SURL, K 6), 16))) B = UADD (B, SL (GC (SURL, K
5), 8)) B = UADD (B, GC (SURL, K 4)) A = UADD (A, SL (GC (SURL, K 3), 24)) A = UADD (A, SL (GC) (SURL, K 2), 16))) A = UADD (A, SL (GC (SURL, K 1), 8)) A = UADD (A, GC (SURL, K 0)) Case 6 B = UADD (B, SL (GC (SURL, K 5), 8)) B = UADD (B, GC (SURL, K 4)) A = UADD (A, SL (GC (SURL, K 3), 24)) A = UADD (A, SL (GC (SURL, K 2), 16)))) A = UADD (A, SL (GC (SURL, K 1), 8)) A = UADD (A, GC (SURL, K 0)) Case 5 B = UADD (B, GC (SURL, K 4)) A = UADD (A, SL (GC (SURL, K 3), 24)) A = UADD (A , SL (GC (SURL, K 2), 16))) A = UADD (A, SL (GC (SURL, K 1), 8))) A = UADD (A, GC (SURL, K 0)))) Case 4 A = UADD (A, SL (GC (SURL, K 3), 24))) A = UADD (A, SL (GC (SURL, K 2), 16)) A = UADD (A, SL ( GC (SURL, K 1), 8)) A = UADD (A, GC (SURL, K 0)) Case 3 A = UADD (A, SL (GC (SURL, K 2), 16)) A = UADD (A, SL (GC (SURL, K 1), 8))) A = UADD (A, GC (SURL, K 0)) Case 2 A = UADD (A, SL (GC (SURL, K 1), 8)) A = uadd (a, gc (surl, k 0)) Case 1 a = uadd (A, GC (SURL, K 0)) End Select M = Mix (A, B, C) Googlech = m (2) End functionFunction CalculateChecksum (SURL) CalculateChecksum = "6" & CSTR (Googlech ("Info:" & SURL) AND & H7FFFFFF) end function
related articles:
Get research on Google PageRank values
IYI Web Stat. System (iYi Website Statistics System) I implemented the website statistics small plugin for PageRank