欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

加密金刚锁V3.00注册算法----(中集) (9千字)

加密金刚锁V3.00注册算法----(中集) (9千字)


我们假设运算函数为f1(x),机器码为N0,N1,N2,N3,N4,N5,N6,N7,相应的机器码位置为:LNx(x=0
to 7),实际用到运算的机器码只有N0,N1,N3,N4,N5:
-----------------------------------------------
:0040B785 8BF1                    mov esi, ecx
:0040B787 881424                  mov byte ptr [esp], dl
:0040B78A 33DB                    xor ebx, ebx
:0040B78C 56                      push esi
:0040B78D E8A6720800              call 00492A38  <=====取机器码长度L(8)
:0040B792 59                      pop ecx
:0040B793 8BF8                    mov edi, eax
:0040B795 D1EF                    shr edi, 1    <=====右移一位
:0040B797 56                      push esi
:0040B7A3 8A141E                  mov dl, byte ptr [esi+ebx]  <====取机器码N0
:0040B7A6 59                      pop ecx
:0040B7A7 02C2                    add al, dl
:0040B7A9 8BD7                    mov edx, edi
:0040B7AB 0FAFD7                  imul edx, edi  <====(L shr 1)*(L shr 1)
:0040B7AE 8A0C24                  mov cl, byte ptr [esp]  <====取函数参数x
:0040B7B1 43                      inc ebx        <====EBX=EBX=1
:0040B7B2 32C1                    xor al, cl      <====N0 xor X
:0040B7B4 8A0C3E                  mov cl, byte ptr [esi+edi]  <=====取N4
:0040B7B7 02D1                    add dl, cl  <=====N4+(L shr 1)*(L shr 1)
:0040B7B9 8A0C2E                  mov cl, byte ptr [esi+ebp]  <=====取N1
:0040B7BC 32C2                    xor al, dl  <=====(N0 xor X) xor (N4+(L shr 1)*(L
shr 1))
:0040B7BE 8BD5                    mov edx, ebp
:0040B7C0 0FAFD5                  imul edx, ebp  <====L*L
:0040B7C3 02D1                    add dl, cl   
:0040B7C5 4D                      dec ebp
:0040B7C6 4F                      dec edi
:0040B7C7 32C2                    xor al, dl  <====从这里整理出公式:R1=(((N0 xor X)
xor ((L shr 1)*(L shr 1)+N4)) xor L*L
:0040B7C9 4F                      dec edi
:0040B7CA 4D                      dec ebp
:0040B7CB 4D                      dec ebp
:0040B7CC 4F                      dec edi
:0040B7CD 880424                  mov byte ptr [esp], al  <===保存R1,作为下一个数的计
算的参数
-------------------------------------------------
:0040B7FB 8BC3                    mov eax, ebx    <====EAX=LN3
:0040B7FD 8A0C24                  mov cl, byte ptr [esp]  <====取R1
:0040B800 F7EB                    imul ebx  <=====LN3*LN3
:0040B802 8A141E                  mov dl, byte ptr [esi+ebx]  <=====取N3
:0040B805 43                      inc ebx
:0040B806 02C2                    add al, dl    <=====N3+LN3*LN3
:0040B808 8BD7                    mov edx, edi  <=====LN1
:0040B80A 0FAFD7                  imul edx, edi <=====LN1*LN1
:0040B80D 32C1                    xor al, cl    <=====R1 xor (N3+LN3*LN3)
:0040B80F 8A0C3E                  mov cl, byte ptr [esi+edi]  <=====取N1
:0040B812 02D1                    add dl, cl  <=====N1+LN1*LN1
:0040B814 8A0C2E                  mov cl, byte ptr [esi+ebp]  <=====取N5
:0040B817 32C2                    xor al, dl  <====(R1 xor (N3+LN3*LN3)) xor
(N1+LN1*LN1)
:0040B819 8BD5                    mov edx, ebp  <====LN5
:0040B81B 0FAFD5                  imul edx, ebp <====LN5*LN5
:0040B81E 02D1                    add dl, cl  <====LN5*LN5+N5
:0040B820 4D                      dec ebp
:0040B821 4F                      dec edi
:0040B822 32C2                    xor al, dl  <====整理出公式:R2=((R1 xor
(N3+LN3*LN3)) xor (N1+LN1*LN1)) xor (LN5*LN5+N5)
:0040B824 4F                      dec edi
:0040B825 4D                      dec ebp
:0040B826 4D                      dec ebp
:0040B827 4F                      dec edi
:0040B828 880424                  mov byte ptr [esp], al  <====保存R2
----------------------------------------------
:0040B84C 33C0                    xor eax, eax
:0040B84E 8A1424                  mov dl, byte ptr [esp] <====取R2
:0040B851 8A0424                  mov al, byte ptr [esp] <====取R2
:0040B854 8BFE                    mov edi, esi
:0040B856 C1E202                  shl edx, 02  <===
:0040B859 C1F806                  sar eax, 06  <===
:0040B85C 0AC2                    or al, dl    <===整理出公式:R3=(R2 shl 2) or (R2 sar
6)
:0040B85E 33DB                    xor ebx, ebx
:0040B860 880424                  mov byte ptr [esp], al  <===保存R3
:0040B863 EB0B                    jmp 0040B870
----------------------------------------------
下面是前四位机器码运算:
:0040B865 8A17                    mov dl, byte ptr [edi]  <====取N0
:0040B867 8BC3                    mov eax, ebx    <====LN0
:0040B869 02C2                    add al, dl      <====N0+LN0
:0040B86B 43                      inc ebx
:0040B86C 300424                  xor byte ptr [esp], al  <====循环xor,结果为R4
:0040B86F 47                      inc edi
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040B863(U)
|
:0040B870 56                      push esi
:0040B871 E8C2710800              call 00492A38
:0040B876 D1E8                    shr eax, 1 
:0040B878 59                      pop ecx
:0040B879 3BD8                    cmp ebx, eax
:0040B87B 72E8                    jb 0040B865
:0040B87D 8A0424                  mov al, byte ptr [esp]  <====取R4
:0040B880 C1E006                  shl eax, 06    <====
:0040B883 33D2                    xor edx, edx
:0040B885 8A1424                  mov dl, byte ptr [esp]
:0040B888 C1FA02                  sar edx, 02
:0040B88B 0AC2                    or al, dl    <==== 整理出公式:R5=(R4 shl 6) or (R4
sar 2)
:0040B88D 880424                  mov byte ptr [esp], al  <====保存R5
:0040B890 56                      push esi
:0040B891 E8A2710800              call 00492A38
:0040B896 59                      pop ecx
:0040B897 8BD8                    mov ebx, eax
:0040B899 D1EB                    shr ebx, 1
:0040B89B 8D3C1E                  lea edi, dword ptr [esi+ebx]
:0040B89E EB0D                    jmp 0040B8AD
-------------------------------------------------
下面是后四位运算:
:0040B8A0 8BC3                    mov eax, ebx  <====LN5
:0040B8A2 F7EB                    imul ebx      <====LN5*LN5
:0040B8A4 8A17                    mov dl, byte ptr [edi]  <====取R5
:0040B8A6 43                      inc ebx
:0040B8A7 02C2                    add al, dl
:0040B8A9 300424                  xor byte ptr [esp], al  <===循环xor,结果为R6
:0040B8AC 47                      inc edi
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040B89E(U)
|
:0040B8AD 56                      push esi
:0040B8AE E885710800              call 00492A38
:0040B8B3 59                      pop ecx
:0040B8B4 3BD8                    cmp ebx, eax
:0040B8B6 72E8                    jb 0040B8A0
:0040B8B8 33C0                    xor eax, eax
:0040B8BA 8A0424                  mov al, byte ptr [esp]  <====取R6
:0040B8BD C1F806                  sar eax, 06  <=====
:0040B8C0 8A1424                  mov dl, byte ptr [esp]
:0040B8C3 C1E202                  shl edx, 02  <=====
:0040B8C6 0AC2                    or al, dl    <=====整理出公式:R7=(R6 sar 6) or (R6
shl 2)
:0040B8C8 880424                  mov byte ptr [esp], al  <====保存R7,同时作为函数的返
回值
:0040B8CB 8A0424                  mov al, byte ptr [esp]  <====取结果R7
:0040B8CE 5A                      pop edx
:0040B8CF 5D                      pop ebp
:0040B8D0 5F                      pop edi
:0040B8D1 5E                      pop esi
:0040B8D2 5B                      pop ebx
:0040B8D3 C3                      ret
------------------------------------------
下面是函数返回后的代码:
:0040D764 8B55A0                  mov edx, dword ptr [ebp-60]  <===取运算码位置LNX
:0040D767 8A4DA0                  mov cl, byte ptr [ebp-60]    <===取循环变量
:0040D76A 0FAFD6                  imul edx, esi                <===相乘
:0040D76D 02C2                    add al, dl                  <===R7+LNX*J
:0040D76F 8BD6                    mov edx, esi
:0040D771 2AC1                    sub al, cl                  <===R7+LNX*J-J
:0040D773 32C2                    xor al, dl                  <===(R7+LNX*J-J) xor
LNX,结果作为第二个函数的参数
:0040D775 BA02000000              mov edx, 00000002
:0040D77A FF4DD4                  dec [ebp-2C]
:0040D77D 8BD8                    mov ebx, eax
:0040D77F 8D45F0                  lea eax, dword ptr [ebp-10]
:0040D782 E8F9370900              call 004A0F80
:0040D787 66C745C82C00            mov [ebp-38], 002C
:0040D78D 33C0                    xor eax, eax
:0040D78F 8945EC                  mov dword ptr [ebp-14], eax
:0040D792 8D55EC                  lea edx, dword ptr [ebp-14]
:0040D795 FF45D4                  inc [ebp-2C]
:0040D798 8B45B4                  mov eax, dword ptr [ebp-4C]
:0040D79B E830FCFFFF              call 0040D3D0
:0040D7A0 8B4DEC                  mov ecx, dword ptr [ebp-14]
:0040D7A3 85C9                    test ecx, ecx
:0040D7A5 7405                    je 0040D7AC
:0040D7A7 8B4DEC                  mov ecx, dword ptr [ebp-14]
:0040D7AA EB05                    jmp 0040D7B1
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040D7A5(C)
|
:0040D7AC B90B7F4B00              mov ecx, 004B7F0B
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040D7AA(U)
|
:0040D7B1 8BD3                    mov edx, ebx  <====取参数
:0040D7B3 8B45B4                  mov eax, dword ptr [ebp-4C]
:0040D7B6 E819E1FFFF              call 0040B8D4  <====第二个运算函数
(未完待续)

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功