-
-
****资料管理系统 1.1.40注册算法
-
发表于: 2006-11-11 20:14 6040
-
【破文标题】拓思建筑工程资料管理系统 1.1.40注册算法
【破文作者】XXNB
【作者邮箱】支持PYG
【作者主页】http://free.ys168.com/?binbinbin7456
【破解工具】OD
【破解平台】xpsp2
【软件名称】拓思建筑工程资料管理系统 1.1.40
【软件大小】4062KB
【原版下载】http://www.newhua.com/soft/52073.htm
【保护方式】注册码
【软件简介】拓思建筑工程资料管理系统件是我公司软件开发人员与建工集团资深工程技术人员联合针对建筑公司,建筑监理公司,房地产公司以及各建筑相关行业从事资料管理,编写制作人员开发的。软件包内含有全套建筑工程竣工资料表格,全套建筑安全资料311页(范本,可填写使用),建筑工程项目管理表格(368页)。建筑工程监理制度及表格(143页,可填写使用)。是工程技术人员的得利助手。弹指飞间,资料搞定。
【破解声明】向大侠们学习!!!只为学习!
------------------------------------------------------------------------
【破解过程】
------------------------------------------------------------------------
1、字符串参考查找“注册成功”就可以找到断点。(能找到断点是破解软件的关键)。点“注册”按钮后中断在下面:
0050F69C /. 55 push ebp
0050F69D |. 8BEC mov ebp, esp
0050F69F |. 33C9 xor ecx, ecx ;这里随便下断点
0050F6A1 |. 51 push ecx
0050F6A2 |. 51 push ecx
0050F6A3 |. 51 push ecx
0050F6A4 |. 51 push ecx
0050F6A5 |. 51 push ecx
0050F6A6 |. 51 push ecx
0050F6A7 |. 51 push ecx
0050F6A8 |. 53 push ebx
0050F6A9 |. 8BD8 mov ebx, eax
0050F6AB |. 33C0 xor eax, eax
0050F6AD |. 55 push ebp
0050F6AE |. 68 DCF75000 push 0050F7DC
0050F6B3 |. 64:FF30 push dword ptr fs:[eax]
0050F6B6 |. 64:8920 mov fs:[eax], esp
0050F6B9 |. 8D55 F4 lea edx, [ebp-C]
0050F6BC |. 8B83 1C030000 mov eax, [ebx+31C]
0050F6C2 |. E8 8DC3F4FF call 0045BA54
0050F6C7 |. 8B45 F4 mov eax, [ebp-C] ; 假码出现
0050F6CA |. 8D55 F8 lea edx, [ebp-8]
0050F6CD |. E8 B694EFFF call 00408B88
0050F6D2 |. 8B45 F8 mov eax, [ebp-8] ; 假码又出现
0050F6D5 |. 50 push eax
0050F6D6 |. 8D55 EC lea edx, [ebp-14]
0050F6D9 |. 8B83 18030000 mov eax, [ebx+318]
0050F6DF |. E8 70C3F4FF call 0045BA54
0050F6E4 |. 8B45 EC mov eax, [ebp-14] ; "TOPTHINK"出现了这个字符串,这个是软件的名称
0050F6E7 |. 8D55 F0 lea edx, [ebp-10]
0050F6EA |. E8 9994EFFF call 00408B88
0050F6EF |. 8B45 F0 mov eax, [ebp-10] ; "TOPTHINK"又出现了这个字符串
0050F6F2 |. 50 push eax
0050F6F3 |. 8D55 E4 lea edx, [ebp-1C]
0050F6F6 |. 8B83 14030000 mov eax, [ebx+314]
0050F6FC |. E8 53C3F4FF call 0045BA54
0050F701 |. 8B45 E4 mov eax, [ebp-1C]
0050F704 |. 8D55 E8 lea edx, [ebp-18]
0050F707 |. E8 7C94EFFF call 00408B88
0050F70C |. 8B55 E8 mov edx, [ebp-18]
0050F70F |. 8B83 2C030000 mov eax, [ebx+32C]
0050F715 |. 59 pop ecx
0050F716 |. E8 75CDFFFF call 0050C490 ; 应该是算法call《《《《《《《《《《《《《------
0050F71B |. 84C0 test al, al ; 注册成功标志位
0050F71D |. 75 2C jnz short 0050F74B ; 关键跳转 一定要跳的!!
0050F71F |. 8D45 FC lea eax, [ebp-4]
0050F722 |. BA F0F75000 mov edx, 0050F7F0 ; 输入注册码不正确,请检查!
0050F727 |. E8 504CEFFF call 0040437C
0050F72C |. 6A 40 push 40
0050F72E |. 8B45 FC mov eax, [ebp-4]
0050F731 |. E8 6E50EFFF call 004047A4
0050F736 |. 8BD0 mov edx, eax
0050F738 |. B9 0CF85000 mov ecx, 0050F80C ; 输入错误
0050F73D |. A1 5C585100 mov eax, [51585C]
0050F742 |. 8B00 mov eax, [eax]
0050F744 |. E8 83CEF6FF call 0047C5CC
0050F749 |. EB 4E jmp short 0050F799
0050F74B |> 68 20F85000 push 0050F820 ; 注册成功!\n注册信息为:\n注册码:
0050F750 |. 8B83 2C030000 mov eax, [ebx+32C]
0050F756 |. FF70 5C push dword ptr [eax+5C]
0050F759 |. 68 4CF85000 push 0050F84C ; \n
0050F75E |. 68 58F85000 push 0050F858 ; 感谢您对我们的支持!请重新启动利康医药进销存系统!
0050F763 |. 8D45 FC lea eax, [ebp-4]
0050F766 |. BA 04000000 mov edx, 4
0050F76B |. E8 F44EEFFF call 00404664
0050F770 |. 6A 40 push 40
0050F772 |. 8B45 FC mov eax, [ebp-4]
0050F775 |. E8 2A50EFFF call 004047A4
0050F77A |. 8BD0 mov edx, eax
0050F77C |. B9 8CF85000 mov ecx, 0050F88C ; 注册成功
2、跟进算法0050F716 call 0050C490。我们得到:
0050C490 /$ 55 push ebp
0050C491 |. 8BEC mov ebp, esp
0050C493 |. 83C4 F0 add esp, -10
0050C496 |. 53 push ebx
0050C497 |. 33DB xor ebx, ebx
0050C499 |. 895D F0 mov [ebp-10], ebx
0050C49C |. 895D F4 mov [ebp-C], ebx
0050C49F |. 894D F8 mov [ebp-8], ecx
0050C4A2 |. 8955 FC mov [ebp-4], edx
0050C4A5 |. 8BD8 mov ebx, eax
0050C4A7 |. 8B45 FC mov eax, [ebp-4]
0050C4AA |. E8 E582EFFF call 00404794
0050C4AF |. 8B45 F8 mov eax, [ebp-8]
0050C4B2 |. E8 DD82EFFF call 00404794
0050C4B7 |. 8B45 08 mov eax, [ebp+8] ; 假码
0050C4BA |. E8 D582EFFF call 00404794
0050C4BF |. 33C0 xor eax, eax
0050C4C1 |. 55 push ebp
0050C4C2 |. 68 7AC55000 push 0050C57A
0050C4C7 |. 64:FF30 push dword ptr fs:[eax]
0050C4CA |. 64:8920 mov fs:[eax], esp
0050C4CD |. 8B45 FC mov eax, [ebp-4]
0050C4D0 |. E8 CF80EFFF call 004045A4 ; 这个是计算位数
0050C4D5 |. 3B43 4C cmp eax, [ebx+4C]
0050C4D8 |. 7F 19 jg short 0050C4F3
0050C4DA |. 8B45 FC mov eax, [ebp-4]
0050C4DD |. E8 C280EFFF call 004045A4
0050C4E2 |. 3B43 50 cmp eax, [ebx+50]
0050C4E5 |. 7C 0C jl short 0050C4F3
0050C4E7 |. 8B45 08 mov eax, [ebp+8]
0050C4EA |. E8 B580EFFF call 004045A4
0050C4EF |. 85C0 test eax, eax
0050C4F1 |. 75 04 jnz short 0050C4F7
0050C4F3 |> 33DB xor ebx, ebx
0050C4F5 |. EB 60 jmp short 0050C557
0050C4F7 |> 8D55 F4 lea edx, [ebp-C]
0050C4FA |. 8B45 08 mov eax, [ebp+8]
0050C4FD |. E8 16C4EFFF call 00408918
0050C502 |. 8B55 F4 mov edx, [ebp-C]
0050C505 |. 8D45 08 lea eax, [ebp+8]
0050C508 |. E8 6F7EEFFF call 0040437C
0050C50D |. 8D4D F0 lea ecx, [ebp-10]
0050C510 |. 8B55 FC mov edx, [ebp-4]
0050C513 |. 8BC3 mov eax, ebx
0050C515 |. E8 46FBFFFF call 0050C060 ; 这个才是关键call,要跟进的《《《《《《《《《《《《-
0050C51A |. 8B45 F0 mov eax, [ebp-10] ; 真码出现了 "0000932C03DC"
0050C51D |. 8B55 08 mov edx, [ebp+8] ; 假码到edx
0050C520 |. E8 6BC4EFFF call 00408990 ; 这个跟进发现原来是逐位比较函数
0050C525 |. 85C0 test eax, eax
0050C527 |. 74 04 je short 0050C52D ; 这个地方是关键,一定要跳的,不然下面清空了ebx就完蛋了
0050C529 |. 33DB xor ebx, ebx
0050C52B |. EB 2A jmp short 0050C557
0050C52D |> 8D43 48 lea eax, [ebx+48]
0050C530 |. 8B55 FC mov edx, [ebp-4]
0050C533 |. E8 007EEFFF call 00404338
3、跟进0050C515 call 0050C060 。得到下面
0050C096 |. 8BC6 mov eax, esi
0050C098 |. E8 070F0000 call 0050CFA4
0050C09D |. 8B45 DC mov eax, [ebp-24] ; 软件生成的机器码到eax
0050C0A0 |. 8D55 EC lea edx, [ebp-14] ; 本机硬盘序列号出现了
0050C0A3 |. E8 E0CAEFFF call 00408B88
0050C0A8 |. 837D EC 00 cmp dword ptr [ebp-14], 0
0050C0AC |. 75 0D jnz short 0050C0BB
0050C0AE |. 8D45 E0 lea eax, [ebp-20]
0050C0B1 |. 8B55 FC mov edx, [ebp-4]
0050C0B4 |. E8 C382EFFF call 0040437C
0050C0B9 |. EB 5D jmp short 0050C118
0050C0BB |> 8B45 EC mov eax, [ebp-14] ; 软件生成的机器码到eax
0050C0BE |. E8 E184EFFF call 004045A4 ; 计算位数
0050C0C3 |. 8BD8 mov ebx, eax
0050C0C5 |. 8D45 E8 lea eax, [ebp-18]
0050C0C8 |. 50 push eax
0050C0C9 |. 8BCB mov ecx, ebx
0050C0CB |. D1F9 sar ecx, 1 ; 右移1位。就是除以2
0050C0CD |. 79 03 jns short 0050C0D2
0050C0CF |. 83D1 00 adc ecx, 0
0050C0D2 |> BA 01000000 mov edx, 1 ; 这里赋值1
0050C0D7 |. 8B45 EC mov eax, [ebp-14] ; 软件生成的机器码到eax。是不是要循环?
0050C0DA |. E8 2587EFFF call 00404804
0050C0DF |. 8D45 E4 lea eax, [ebp-1C]
0050C0E2 |. 50 push eax
0050C0E3 |. 8BC3 mov eax, ebx
0050C0E5 |. D1F8 sar eax, 1 ; 右移1位。就是除以2
0050C0E7 |. 79 03 jns short 0050C0EC
0050C0E9 |. 83D0 00 adc eax, 0
0050C0EC |> 8BCB mov ecx, ebx
0050C0EE |. 2BC8 sub ecx, eax
0050C0F0 |. 8BD3 mov edx, ebx
0050C0F2 |. D1FA sar edx, 1
0050C0F4 |. 79 03 jns short 0050C0F9
0050C0F6 |. 83D2 00 adc edx, 0
0050C0F9 |> 42 inc edx
0050C0FA |. 8B45 EC mov eax, [ebp-14]
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"
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
- 寻求TMD壳带壳调试下断点的办法。 5526
- 求目标进程嗲用某DLL的基地址?? 3942
- 如何断下VB调用的Shell命令函数???请进 4135
- [求助]脱一个ASPR壳的DLL 遇到的问题,菜鸟求助啊 3870
- 已经运行成功的程序,如何从内存完美的Dump出来? 4876