0050C0FD |. E8 0287EFFF call 00404804 ; 这个call把机器码分成两个部分,每个部分6位 0050C102 |. FF75 E8 push dword ptr [ebp-18] ; 前六位入栈 0050C105 |. FF75 FC push dword ptr [ebp-4] ; 固定字符串入栈 0050C108 |. FF75 E4 push dword ptr [ebp-1C] ; 后六位入栈 0050C10B |. 8D45 E0 lea eax, [ebp-20] 0050C10E |. BA 03000000 mov edx, 3 0050C113 |. E8 4C85EFFF call 00404664 0050C118 |> C745 F0 00000>mov dword ptr [ebp-10], 0 0050C11F |. C745 F4 00000>mov dword ptr [ebp-C], 0 0050C126 |. 8B45 FC mov eax, [ebp-4] 0050C129 |. E8 7684EFFF call 004045A4 ; 计算位数 0050C12E |. 3B46 4C cmp eax, [esi+4C] ; 和64H比较 0050C131 |. 7F 0D jg short 0050C140 0050C133 |. 8B45 FC mov eax, [ebp-4] 0050C136 |. E8 6984EFFF call 004045A4 0050C13B |. 3B46 50 cmp eax, [esi+50] ; 和3H比较 0050C13E |. 7D 0C jge short 0050C14C 0050C140 |> 8BC7 mov eax, edi 0050C142 |. E8 9D81EFFF call 004042E4 0050C147 |. E9 91000000 jmp 0050C1DD 0050C14C |> 8B45 E0 mov eax, [ebp-20] ; 原来上面搞这么多是为了连接那三个字符串 0050C14F |. E8 5084EFFF call 004045A4 ; 又计算位数 0050C154 |. 8BD8 mov ebx, eax 0050C156 |. EB 37 jmp short 0050C18F 0050C158 |> /8B45 F0 /mov eax, [ebp-10] ; 循环一次得到的结果放到eax。第一次为0 0050C15B |. 8B55 F4 |mov edx, [ebp-C] 0050C15E |. 0346 68 |add eax, [esi+68] ; 123456789的16进制,这里是上一次循环的结果和123456789的16进制数相加 0050C161 |. 1356 6C |adc edx, [esi+6C] 0050C164 |. 52 |push edx 0050C165 |. 50 |push eax 0050C166 |. 8B45 E0 |mov eax, [ebp-20] 0050C169 |. 0FB64418 FF |movzx eax, byte ptr [eax+ebx-1] ; 从后面逐个取字符的AscII码 0050C16E |. 50 |push eax 0050C16F |. B8 59040000 |mov eax, 459 ; 常量459(1113) 0050C174 |. 5A |pop edx 0050C175 |. 8BCA |mov ecx, edx 0050C177 |. 33D2 |xor edx, edx 0050C179 |. F7F1 |div ecx ; 常量除以刚才取出的字符的ascii码 0050C17B |. 8BC2 |mov eax, edx ; 余数到eax 0050C17D |. 33D2 |xor edx, edx 0050C17F |. 290424 |sub [esp], eax ; 循环开始时候相加的结果-余数 0050C182 |. 195424 04 |sbb [esp+4], edx 0050C186 |. 58 |pop eax ; 这里是减后的结果 0050C187 |. 5A |pop edx 0050C188 |. 8945 F0 |mov [ebp-10], eax ; 存储相减的结果 0050C18B |. 8955 F4 |mov [ebp-C], edx 0050C18E |. 4B |dec ebx ; 计数器减1 0050C18F |> 8B45 E0 mov eax, [ebp-20] ; 字符串继续循环 0050C192 |. E8 0D84EFFF |call 004045A4 0050C197 |. 3BD8 |cmp ebx, eax 0050C199 |. 7F 04 |jg short 0050C19F 0050C19B |. 85DB |test ebx, ebx 0050C19D |.^ 7F B9 \jg short 0050C158 0050C19F |> 8B5E 60 mov ebx, [esi+60] 0050C1A2 |. 85DB test ebx, ebx 0050C1A4 |. 7F 11 jg short 0050C1B7 0050C1A6 |. FF75 F4 push dword ptr [ebp-C] ; /Arg2 0050C1A9 |. FF75 F0 push dword ptr [ebp-10] ; |Arg1 0050C1AC |. 8BD7 mov edx, edi ; | 0050C1AE |. 33C0 xor eax, eax ; | 0050C1B0 |. E8 77CEEFFF call 0040902C ; \TSJZ.0040902C 0050C1B5 |. EB 26 jmp short 0050C1DD 0050C1B7 |> FF75 F4 push dword ptr [ebp-C] ; /Arg2 0050C1BA |. FF75 F0 push dword ptr [ebp-10] ; |这里出现的应该是上面循环后得到的结果了932C03DC 0050C1BD |. 8BD7 mov edx, edi ; | 0050C1BF |. 8BC3 mov eax, ebx ; | 0050C1C1 |. E8 66CEEFFF call 0040902C ; \这个call是把上面的结果转成字符串。就是16进制直接转成 0050C1C6 |. 8B07 mov eax, [edi] ; 这个应该是真码了 "0000932C03DC" 0050C1C8 |. E8 D783EFFF call 004045A4 0050C1CD |. 8BC8 mov ecx, eax 0050C1CF |. 2B4E 60 sub ecx, [esi+60] 0050C1D2 |. 8B56 60 mov edx, [esi+60] 0050C1D5 |. 42 inc edx 0050C1D6 |. 8BC7 mov eax, edi 0050C1D8 |. E8 6786EFFF call 00404844 0050C1DD |> 33C0 xor eax, eax 0050C1DF |. 5A pop edx 0050C1E0 |. 59 pop ecx 0050C1E1 |. 59 pop ecx 0050C1E2 |. 64:8910 mov fs:[eax], edx 0050C1E5 |. 68 07C25000 push 0050C207 0050C1EA |> 8D45 DC lea eax, [ebp-24] 0050C1ED |. BA 05000000 mov edx, 5 0050C1F2 |. E8 1181EFFF call 00404308 0050C1F7 |. 8D45 FC lea eax, [ebp-4] 0050C1FA |. E8 E580EFFF call 004042E4 0050C1FF \. C3 retn
易语言注册机源码:
.版本 2
.程序集 窗口程序集1
.子程序 _按钮1_被单击 .局部变量 jiqima, 文本型 .局部变量 j1, 文本型 .局部变量 j2, 文本型 .局部变量 stringyuan, 文本型 .局部变量 len, 整数型 .局部变量 i, 整数型 .局部变量 stringdao, 文本型 .局部变量 a, 长整数型 .局部变量 b, 长整数型 .局部变量 x, 整数型 .局部变量 eax, 长整数型 .局部变量 yushu, 整数型 .局部变量 code1, 文本型
jiqima = 编辑框1.内容 j1 = 取文本左边 (jiqima, 6) j2 = 取文本右边 (jiqima, 6) stringyuan = j1 + “TOPTHINK” + j2 stringdao = 倒转字符串 (stringyuan) len = 取文本长度 (stringdao) a = 123456789 b = 1113
.计次循环首 (len, i) eax = eax + a x = 取代码 (stringdao, i) yushu = 1113 % x eax = eax - yushu .计次循环尾 ()
code1 = 取十六进制文本 (eax) 编辑框2.内容 = “0000” + code1
.子程序 倒转字符串, 文本型 .参数 string, 文本型 .局部变量 k, 整数型 .局部变量 RChar, 文本型 .局部变量 LChar, 文本型 .局部变量 WChar, 文本型
.判断循环首 (k < 取文本长度 (string))
LChar = 取文本左边 (string, 取文本长度 (string) - k) RChar = 取文本右边 (LChar, 1) k = k + 1 WChar = WChar + RChar .判断循环尾 () 返回 (WChar)
【破解总结】 ------------------------------------------------------------------------ 1、机器码分成两个部分,前6位和后6位。然后把固定字符串“TOPTHINK”插在中间,如:"00003ATOPTHINKDE67AD"。
2、逐个从后面开始取字符串"00003ATOPTHINKDE67AD"的Ascii码。然后常量1113除以取得的Ascii码值,得到余数。
3、在第一次循环的时候,用输入的假码减去上面得到的余数。得到的数再在循环开始时候加上常量123456789,加后的数将作为下一次循环的初始值。
4、在循环取完那个字符串后最终得到的数,转成16进制后直接转化为字符串,然后前面加上4个0就是真码了。如:"0000932C03DC" 上一页 1 2 |