【原创】某国产易语言编译软件的算法分析+易语言写的注册机源代码
004F5910 55 push ebp
004F5911 8BEC mov ebp, esp
004F5913 81EC 24000000 sub esp, 24
004F5919 C745 FC 0000000>mov dword ptr [ebp-4], 0
004F5920 C745 F8 0000000>mov dword ptr [ebp-8], 0
004F5927 C745 F4 0000000>mov dword ptr [ebp-C], 0
004F592E C745 F0 0000000>mov dword ptr [ebp-10], 0
004F5935 C745 EC 0000000>mov dword ptr [ebp-14], 0
004F593C 68 04000080 push 80000004
004F5941 6A 00 push 0
004F5943 A1 E00CB200 mov eax, dword ptr [B20CE0] ; 取机器码 -214198592820091220 给EAX
004F5948 85C0 test eax, eax
004F594A 75 05 jnz short 004F5951 ; 机器码不为空则跳
004F594C B8 7E324000 mov eax, 0040327E
004F5951 50 push eax
004F5952 68 01000000 push 1
004F5957 BB 30010000 mov ebx, 130
004F595C E8 DBF30100 call 00514D3C
004F5961 83C4 10 add esp, 10
004F5964 8945 FC mov dword ptr [ebp-4], eax
004F5967 68 01030080 push 80000301
004F596C 6A 00 push 0
004F596E 68 02000000 push 2
004F5973 68 04000080 push 80000004
004F5978 6A 00 push 0
004F597A A1 E00CB200 mov eax, dword ptr [B20CE0] ; 机器码-214198592820091220给EAX
004F597F 85C0 test eax, eax
004F5981 75 05 jnz short 004F5988 ; 不为空则跳
004F5983 B8 7E324000 mov eax, 0040327E
004F5988 50 push eax
004F5989 68 02000000 push 2
004F598E BB 38010000 mov ebx, 138
004F5993 E8 A4F30100 call 00514D3C ; 取机器码后2位20
004F5998 83C4 1C add esp, 1C
004F599B 8945 E8 mov dword ptr [ebp-18], eax ; 将20传给内存
004F599E 68 04000080 push 80000004
004F59A3 6A 00 push 0
004F59A5 8B45 E8 mov eax, dword ptr [ebp-18] ; 将20传给EAX
004F59A8 85C0 test eax, eax
004F59AA 75 05 jnz short 004F59B1 ; 不为空则跳
004F59AC B8 7E324000 mov eax, 0040327E
004F59B1 50 push eax
004F59B2 68 01030080 push 80000301
004F59B7 6A 00 push 0
004F59B9 68 03000000 push 3
004F59BE 68 02000000 push 2
004F59C3 BB 88010000 mov ebx, 188
004F59C8 E8 6FF30100 call 00514D3C
004F59CD 83C4 1C add esp, 1C
004F59D0 8945 E4 mov dword ptr [ebp-1C], eax ; 将EAX中的3个20传给内存
004F59D3 8B5D E8 mov ebx, dword ptr [ebp-18] ; 将20传给EBX
004F59D6 85DB test ebx, ebx
004F59D8 74 09 je short 004F59E3 ; 不为空就不跳
004F59DA 53 push ebx
004F59DB E8 4AF30100 call 00514D2A
004F59E0 83C4 04 add esp, 4
004F59E3 8B45 E4 mov eax, dword ptr [ebp-1C] ; 将202020传给EAX
004F59E6 50 push eax
004F59E7 8B5D F8 mov ebx, dword ptr [ebp-8]
004F59EA 85DB test ebx, ebx
004F59EC 74 09 je short 004F59F7 ; 检测EBX中是否为空
004F59EE 53 push ebx
004F59EF E8 36F30100 call 00514D2A
004F59F4 83C4 04 add esp, 4
004F59F7 58 pop eax
004F59F8 8945 F8 mov dword ptr [ebp-8], eax ; 将202020传给内存
004F59FB 68 02000080 push 80000002
004F5A00 6A 00 push 0
004F5A02 68 00000000 push 0
004F5A07 68 01030080 push 80000301
004F5A0C 6A 00 push 0
004F5A0E 68 00000000 push 0
004F5A13 68 04000080 push 80000004
004F5A18 6A 00 push 0
004F5A1A 68 B6424000 push 004042B6
004F5A1F 68 04000080 push 80000004
004F5A24 6A 00 push 0
004F5A26 A1 E00CB200 mov eax, dword ptr [B20CE0] ; 将机器码传给EAX
004F5A2B 85C0 test eax, eax
004F5A2D 75 05 jnz short 004F5A34 ; 不为空则跳
004F5A2F B8 7E324000 mov eax, 0040327E
004F5A34 50 push eax
004F5A35 68 04000000 push 4
004F5A3A BB 48010000 mov ebx, 148
004F5A3F E8 F8F20100 call 00514D3C
004F5A44 83C4 34 add esp, 34
004F5A47 8945 F4 mov dword ptr [ebp-C], eax
004F5A4A C745 F0 0100000>mov dword ptr [ebp-10], 1
004F5A51 68 04000080 push 80000004
004F5A56 6A 00 push 0
004F5A58 A1 E00CB200 mov eax, dword ptr [B20CE0] ; 机器码给EAX
004F5A5D 85C0 test eax, eax
004F5A5F 75 05 jnz short 004F5A66 ; 不为空则跳
004F5A61 B8 7E324000 mov eax, 0040327E
004F5A66 50 push eax
004F5A67 68 01000000 push 1
004F5A6C BB 30010000 mov ebx, 130
004F5A71 E8 C6F20100 call 00514D3C
004F5A76 83C4 10 add esp, 10
004F5A79 33C9 xor ecx, ecx
004F5A7B 50 push eax ; 取机器码长度
004F5A7C 8D45 F0 lea eax, dword ptr [ebp-10]
004F5A7F 8BD8 mov ebx, eax
004F5A81 58 pop eax
004F5A82 41 inc ecx
004F5A83 51 push ecx
004F5A84 53 push ebx
004F5A85 890B mov dword ptr [ebx], ecx
004F5A87 50 push eax
004F5A88 3BC8 cmp ecx, eax ; 取机器码长度
004F5A8A 0F8F EE000000 jg 004F5B7E ; 计次循环首(取机器码长度,i)
004F5A90 68 01030080 push 80000301
004F5A95 6A 00 push 0
004F5A97 68 01000000 push 1
004F5A9C 68 01030080 push 80000301
004F5AA1 6A 00 push 0
004F5AA3 FF75 F0 push dword ptr [ebp-10]
004F5AA6 68 04000080 push 80000004
004F5AAB 6A 00 push 0
004F5AAD A1 E00CB200 mov eax, dword ptr [B20CE0] ; 机器码赋值给EAX
004F5AB2 85C0 test eax, eax
004F5AB4 75 05 jnz short 004F5ABB
004F5AB6 B8 7E324000 mov eax, 0040327E
004F5ABB 50 push eax
004F5ABC 68 03000000 push 3
004F5AC1 BB 3C010000 mov ebx, 13C
004F5AC6 E8 71F20100 call 00514D3C ; 依次取机器码的ASCII值,并转换为10进制
004F5ACB 83C4 28 add esp, 28
004F5ACE 8945 E8 mov dword ptr [ebp-18], eax
004F5AD1 68 01030080 push 80000301
004F5AD6 6A 00 push 0
004F5AD8 68 01000000 push 1
004F5ADD 68 04000080 push 80000004
004F5AE2 6A 00 push 0
004F5AE4 8B45 E8 mov eax, dword ptr [ebp-18]
004F5AE7 85C0 test eax, eax
004F5AE9 75 05 jnz short 004F5AF0
004F5AEB B8 7E324000 mov eax, 0040327E
004F5AF0 50 push eax
004F5AF1 68 02000000 push 2
004F5AF6 BB 44010000 mov ebx, 144
004F5AFB E8 3CF20100 call 00514D3C
004F5B00 83C4 1C add esp, 1C
004F5B03 8945 E4 mov dword ptr [ebp-1C], eax
004F5B06 8B5D E8 mov ebx, dword ptr [ebp-18]
004F5B09 85DB test ebx, ebx
004F5B0B 74 09 je short 004F5B16
004F5B0D 53 push ebx
004F5B0E E8 17F20100 call 00514D2A
004F5B13 83C4 04 add esp, 4
004F5B16 68 01030080 push 80000301
004F5B1B 6A 00 push 0
004F5B1D FF75 E4 push dword ptr [ebp-1C]
004F5B20 68 01000000 push 1
004F5B25 BB 68010000 mov ebx, 168
004F5B2A E8 0DF20100 call 00514D3C
004F5B2F 83C4 10 add esp, 10
004F5B32 8945 E0 mov dword ptr [ebp-20], eax
004F5B35 FF75 E0 push dword ptr [ebp-20]
004F5B38 FF75 EC push dword ptr [ebp-14]
004F5B3B B9 02000000 mov ecx, 2
004F5B40 E8 6F17FFFF call 004E72B4
004F5B45 83C4 08 add esp, 8
004F5B48 8945 DC mov dword ptr [ebp-24], eax
004F5B4B 8B5D E0 mov ebx, dword ptr [ebp-20]
004F5B4E 85DB test ebx, ebx
004F5B50 74 09 je short 004F5B5B
004F5B52 53 push ebx
004F5B53 E8 D2F10100 call 00514D2A
004F5B58 83C4 04 add esp, 4
004F5B5B 8B45 DC mov eax, dword ptr [ebp-24]
004F5B5E 50 push eax
004F5B5F 8B5D EC mov ebx, dword ptr [ebp-14]
004F5B62 85DB test ebx, ebx
004F5B64 74 09 je short 004F5B6F
004F5B66 53 push ebx
004F5B67 E8 BEF10100 call 00514D2A
004F5B6C 83C4 04 add esp, 4
004F5B6F 58 pop eax
004F5B70 8945 EC mov dword ptr [ebp-14], eax
004F5B73 FF45 F0 inc dword ptr [ebp-10]
004F5B76 58 pop eax
004F5B77 5B pop ebx
004F5B78 59 pop ecx
004F5B79 ^ E9 04FFFFFF jmp 004F5A82
004F5B7E 83C4 0C add esp, 0C ; 循环结束 注册码第一半部分出现
004F5B81 C745 F0 0000000>mov dword ptr [ebp-10], 0
004F5B88 68 04000080 push 80000004
004F5B8D 6A 00 push 0
004F5B8F A1 E00CB200 mov eax, dword ptr [B20CE0] ; 将机器码给EAX
004F5B94 85C0 test eax, eax ; 检测EAX是否为空
004F5B96 75 05 jnz short 004F5B9D ; 不为空就跳
004F5B98 B8 7E324000 mov eax, 0040327E
004F5B9D 50 push eax
004F5B9E 68 01000000 push 1
004F5BA3 BB 30010000 mov ebx, 130
004F5BA8 E8 8FF10100 call 00514D3C
004F5BAD 83C4 10 add esp, 10
004F5BB0 33C9 xor ecx, ecx
004F5BB2 50 push eax
004F5BB3 8D45 F0 lea eax, dword ptr [ebp-10]
004F5BB6 8BD8 mov ebx, eax
004F5BB8 58 pop eax
004F5BB9 41 inc ecx
004F5BBA 51 push ecx
004F5BBB 53 push ebx
004F5BBC 890B mov dword ptr [ebx], ecx
004F5BBE 50 push eax
004F5BBF 3BC8 cmp ecx, eax ; 取机器码长度
004F5BC1 0F8F 96000000 jg 004F5C5D ; 计次循环首(取机器码长度,i)
004F5BC7 68 01030080 push 80000301
004F5BCC 6A 00 push 0
004F5BCE FF75 F0 push dword ptr [ebp-10]
004F5BD1 68 04000080 push 80000004
004F5BD6 6A 00 push 0
004F5BD8 8B45 EC mov eax, dword ptr [ebp-14] ; 取出第一部分注册码数据给EAX
004F5BDB 85C0 test eax, eax ; 检测EAX是否为空
004F5BDD 75 05 jnz short 004F5BE4 ; 不为空就跳
004F5BDF B8 7E324000 mov eax, 0040327E
004F5BE4 50 push eax
004F5BE5 68 02000000 push 2
004F5BEA BB 44010000 mov ebx, 144
004F5BEF E8 48F10100 call 00514D3C
004F5BF4 83C4 1C add esp, 1C
004F5BF7 68 01030080 push 80000301
004F5BFC 6A 00 push 0
004F5BFE 50 push eax
004F5BFF 68 01000000 push 1
004F5C04 BB 68010000 mov ebx, 168
004F5C09 E8 2EF10100 call 00514D3C ; 依次取第一部分机器码的ASCII值,并转换为10进制
004F5C0E 83C4 10 add esp, 10
004F5C11 8945 E4 mov dword ptr [ebp-1C], eax
004F5C14 FF75 E4 push dword ptr [ebp-1C]
004F5C17 FF75 EC push dword ptr [ebp-14]
004F5C1A B9 02000000 mov ecx, 2
004F5C1F E8 9016FFFF call 004E72B4 ; 第1部分注册码+依次取第一部分机器码的ASCII值,并转换为10进制
004F5C24 83C4 08 add esp, 8
004F5C27 8945 E0 mov dword ptr [ebp-20], eax
004F5C2A 8B5D E4 mov ebx, dword ptr [ebp-1C]
004F5C2D 85DB test ebx, ebx
004F5C2F 74 09 je short 004F5C3A
004F5C31 53 push ebx
004F5C32 E8 F3F00100 call 00514D2A
004F5C37 83C4 04 add esp, 4
004F5C3A 8B45 E0 mov eax, dword ptr [ebp-20]
004F5C3D 50 push eax
004F5C3E 8B5D EC mov ebx, dword ptr [ebp-14]
004F5C41 85DB test ebx, ebx
004F5C43 74 09 je short 004F5C4E
004F5C45 53 push ebx
004F5C46 E8 DFF00100 call 00514D2A
004F5C4B 83C4 04 add esp, 4
004F5C4E 58 pop eax
004F5C4F 8945 EC mov dword ptr [ebp-14], eax
004F5C52 FF45 F0 inc dword ptr [ebp-10]
004F5C55 58 pop eax
004F5C56 5B pop ebx
004F5C57 59 pop ecx
004F5C58 ^ E9 5CFFFFFF jmp 004F5BB9
004F5C5D 83C4 0C add esp, 0C ; 循环结束 第3部分注册码=第1部分注册码+第2部分注册码
004F5C60 68 01030080 push 80000301
004F5C65 6A 00 push 0
004F5C67 FF75 F0 push dword ptr [ebp-10]
004F5C6A 68 01000000 push 1
004F5C6F BB 68010000 mov ebx, 168
004F5C74 E8 C3F00100 call 00514D3C ; 临时文本=取机器码长度+1
004F5C79 83C4 10 add esp, 10
004F5C7C 8945 E8 mov dword ptr [ebp-18], eax
004F5C7F 68 01030080 push 80000301
004F5C84 6A 00 push 0
004F5C86 FF75 F4 push dword ptr [ebp-C]
004F5C89 68 01000000 push 1
004F5C8E BB 68010000 mov ebx, 168
004F5C93 E8 A4F00100 call 00514D3C ; 取临时文本左边第1位
004F5C98 83C4 10 add esp, 10
004F5C9B 8945 E4 mov dword ptr [ebp-1C], eax ; 取临时文本
004F5C9E 68 01030080 push 80000301
004F5CA3 6A 00 push 0
004F5CA5 FF75 FC push dword ptr [ebp-4] ; 取机器码长度
004F5CA8 68 01000000 push 1
004F5CAD BB 68010000 mov ebx, 168
004F5CB2 E8 85F00100 call 00514D3C
004F5CB7 83C4 10 add esp, 10 ; 取机器码长度
004F5CBA 8945 E0 mov dword ptr [ebp-20], eax ; 将机器码长度放在数据中
004F5CBD FF75 E0 push dword ptr [ebp-20] ; 保存临时文本数据
004F5CC0 FF75 F8 push dword ptr [ebp-8] ; 临时文本+临时文本+临时文本
004F5CC3 FF75 E4 push dword ptr [ebp-1C] ; 取临时文本左边第1位
004F5CC6 FF75 E8 push dword ptr [ebp-18] ; 取临时文本
004F5CC9 FF75 EC push dword ptr [ebp-14] ; 取第3部分注册码
004F5CCC B9 05000000 mov ecx, 5
004F5CD1 E8 DE15FFFF call 004E72B4 ; 取第3部分注册码+(取机器码长度+1的值)+临时文本左边第1位+取机器码的后2位+取机器码的后2位+取机器码的后2位+机器码长度
004F5CD6 83C4 14 add esp, 14
004F5CD9 8945 DC mov dword ptr [ebp-24], eax
004F5CDC 8B5D E8 mov ebx, dword ptr [ebp-18]
004F5CDF 85DB test ebx, ebx
004F5CE1 74 09 je short 004F5CEC
004F5CE3 53 push ebx
004F5CE4 E8 41F00100 call 00514D2A
004F5CE9 83C4 04 add esp, 4
004F5CEC 8B5D E4 mov ebx, dword ptr [ebp-1C]
004F5CEF 85DB test ebx, ebx
004F5CF1 74 09 je short 004F5CFC
004F5CF3 53 push ebx
004F5CF4 E8 31F00100 call 00514D2A
004F5CF9 83C4 04 add esp, 4
004F5CFC 8B5D E0 mov ebx, dword ptr [ebp-20]
004F5CFF 85DB test ebx, ebx
004F5D01 74 09 je short 004F5D0C
004F5D03 53 push ebx
004F5D04 E8 21F00100 call 00514D2A
004F5D09 83C4 04 add esp, 4
004F5D0C 8B45 DC mov eax, dword ptr [ebp-24]
004F5D0F E9 00000000 jmp 004F5D14
004F5D14 50 push eax ; 真正的注册码出现在EAX了
注册机源代码如下!
.版本 2
.子程序 _按钮1_被单击
.局部变量 尾部数据1, 文本型
.局部变量 长度, 文本型
.局部变量 尾部数据2, 文本型
文本1 = 算法转换 (编辑框1.内容)
长度 = 到文本 (取文本长度 (编辑框1.内容))
文本2 = 算法转换 (取文本左边 (文本1, 到整数 (长度)))
尾部数据1 = 取文本右边 (编辑框1.内容, 2)
尾部数据2 = 取文本左边 (尾部数据1, 1)
编辑框2.内容 = 文本1 + 文本2 + 到文本 (到整数 (长度) + 到整数 (1)) + 尾部数据2 + 尾部数据1 + 尾部数据1 + 尾部数据1 + 长度
.子程序 算法转换, 文本型
.参数 普通文本, 文本型
.局部变量 临时文本, 文本型
.局部变量 计次, 整数型
.局部变量 文本, 文本型
临时文本 = “”
文本 = “”
.计次循环首 (取文本长度 (普通文本), 计次)
.如果 (取代码 (普通文本, 计次) > 0)
临时文本 = 临时文本 + 到文本 (取代码 (普通文本, 计次))
.否则
临时文本 = 临时文本 + 到文本 (256 + 取代码 (普通文本, 计次))
.如果结束
.如果真 (取文本长度 (普通文本) - 计次 > 0)
临时文本 = 临时文本 + 文本
.如果真结束
.计次循环尾 ()
返回 (临时文本)
[培训]科锐逆向工程师培训第53期2025年7月8日开班!