加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > C语言 > 正文

google?pagerank?checksum算法

发布时间:2020-12-15 03:25:27 所属栏目:C语言 来源:网络整理
导读:原来网上早就有了checksum的相关破解,下面试checksum的汇编代码和vb版的破解。 目前我所用的就是vb版的checksum代码。 checksum的汇编代码: GOOGLECHECK proc near var_8 = dword ptr -8 var_4 = dword ptr -4 url_offset = dword ptr? 8 url_length = dwo

原来网上早就有了checksum的相关破解,下面试checksum的汇编代码和vb版的破解。

目前我所用的就是vb版的checksum代码。

checksum的汇编代码:

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,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,byte ptr [ecx+9]
shl eax,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,byte ptr [ecx]
shl 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,edx
shl eax,8
xor edi,eax
sub esi,edi
sub esi,edx
mov eax,edi
shr eax,0Dh
xor esi,0Ch
xor edx,10h
xor edi,edi
sub [ebp+var_4],0Ch
sub esi,5
xor esi,edi
mov eax,3
sub edx,esi
xor edx,eax
mov ebx,ebx
sub edi,ebx
shl eax,0Ah
xor edi,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,eax

switch_9:
movzx eax,byte ptr [ecx+9] ; case 0x9
shl eax,10h
add esi,eax

switch_8:
movzx eax,byte ptr [ecx+8] ; case 0x8
shl eax,8
add esi,eax

switch_7:
movzx eax,byte ptr [ecx+7] ; case 0x7
movzx edx,byte ptr [ecx+4]
shl eax,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,byte ptr [ecx+1]
movzx ecx,byte ptr [ecx]
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,0Dh
xor ebx,ebx
mov eax,eax
sub ebx,edi
sub ebx,0Ch
xor ebx,esi
mov ecx,eax
shr ecx,3
xor ebx,ecx
sub edi,eax
mov ecx,ebx
shl ecx,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代码:

'=========================================================
' 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 If
End Function

Function sr(ByVal x,ByVal n)
??? If n = 0 Then
??????? sr = x
??? Else
??????? Dim y
??????? y = x And &H7FFFFFFF
??????? Dim z
??????? If n = 32 - 1 Then
??????????? z = 0
??????? Else
??????????? z = y CLng(2 ^ n)
??????? End If
??????? If y <> x Then
??????????? z = z Or CLng(2 ^ (32 - n - 1))
??????? End If
??????? sr = z
??? End If
End 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 = x
End Function

Private Function uadd(ByVal L1,ByVal L2)
??? Dim L11,L12,L21,L22,L31,L32
??? L11 = L1 And &HFFFFFF
??? L12 = (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 &HFFFFFF) + (L32 And &H7F) * &H1000000
??? If L32 And &H80 Then uadd = uadd Or &H80000000
End Function

Private Function usub(ByVal L1,L32
??? L11 = L1 And &HFFFFFF
??? L12 = (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 < 0 Then
??????? L32 = L32 - 1
??????? L31 = L31 + &H1000000
??? End If
??? usub = L31 + (L32 And &H7F) * &H1000000
??? If L32 And &H80 Then usub = usub Or &H80000000
End Function
?
Function mix(ByVal ia,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,12)
?
?b = usub(b,16)
?
?c = usub(c,5)
?
?a = usub(a,3)
?
?b = usub(b,10)
?
?c = usub(c,15)
?
?Dim ret(3)
??
?ret(0) = a
?ret(1) = b
?ret(2) = c
?
?mix = ret
End Function

Function gc(ByVal s,ByVal i)
?gc = Asc(Mid(s,i+1,1))
End Function

function GoogleCH(ByVal sURL)
?Dim iLength,a,c,k,iLen,m
?iLength = Len(sURL)

?a = &H9E3779B9
?b = &H9E3779B9
?c = GOOGLE_MAGIC
?k = 0
???
??? iLen = iLength
??? do while iLen >= 12
??????? a = uadd(a,(uadd(gc(sURL,k+0),uadd(sl(gc(sURL,k+1),8),k+2),16),sl(gc(sURL,k+3),24))))))
??????? b = uadd(b,k+4),k+5),k+6),k+7),24))))))
??????? c = uadd(c,k+8),k+9),k+10),k+11),24))))))

??m = mix(a,c)
??
??????? a = m(0)
??????? b = m(1)
??????? c = m(2)
???????
??????? k = k + 12

??????? iLen = iLen - 12
??? loop

??? c = uadd(c,iLength)

??? select case iLen ' all the case statements fall through
??????? case 11
???c = uadd(c,24))
???c = uadd(c,16))
???c = uadd(c,8))
???b = uadd(b,24))
???b = uadd(b,16))
???b = uadd(b,gc(sURL,k+4))
???a = uadd(a,24))
???a = uadd(a,16))
???a = uadd(a,8))
???a = uadd(a,k+0))
??????? case 10
???c = uadd(c,k+0))
??????? case 9
???c = uadd(c,k+0))
??????? case 8
???b = uadd(b,k+0))
??????? case 7
???b = uadd(b,k+0))
??????? case 6
???b = uadd(b,k+0))
??????? case 5
???b = uadd(b,k+0))
??????? case 4
???a = uadd(a,k+0))
??????? case 3
???a = uadd(a,k+0))
??????? case 2
???a = uadd(a,k+0))
??????? case 1
???a = uadd(a,k+0))
??? End Select
???
??? m = mix(a,c)
???
??? GoogleCH = m(2)
End Function

Function CalculateChecksum(sURL)
?CalculateChecksum = "6" & CStr(GoogleCH("info:" & sURL) AND &H7FFFFFFF)
End Function

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读