风球 发表于 2005-12-23 17:23:43

精修家电维修管理系统 V3.3算法分析(简单)

【破文标题】 精修家电维修管理系统 V3.3算法分析(简单)
【破解作者】 风球
【作者邮箱】 [email protected]
【使用工具】 PEiD,OllyDBG
【软件类别】国产软件 / 共享版 / 机械电子
【加入时间】2005-12-22 14:19:13
【软件大小】 3303 KB
【下载地址】 http://www.skycn.com/soft/25063.html
【软件简介】 精修家电维修管理系统是一套功能强大而又简便实用的维修管理软件,包括 维修服务、配件管理、资金管理、数据维
护、系统功能、帮助说明等功能模块.实现了维修服务企业日常营运的全面电脑自动管理,是维修服务行业进行电脑信息化管理的理
想选择。丢弃了传统用的纸和笔管理工单的模式。使工作效率大大的提高,提高工作效率,同时就能增加经济效益,同时也大大降低
了员工的劳动强度。
【破解声明】 初学CrAck,偶得一点心得,愿与大家分享^_^如有错误,请大侠们指出
===============================================================================
圣诞快到了```找个简单的软件写篇简单的破文```算是小礼吧```哈```祝兄弟们圣诞快乐!

[破解过程]
PEID查壳为Microsoft Visual C++ 6.0 ,知道是易语言程序,无壳```爽```有时间的话真的需要认真去学一下脱壳了
Od载入,根据错误提示,很容易就来到这里了```

00558B9B    55            push ebpx                     ; 此处下断,往下单步分析
00558B9C    8BEC            mov ebp,esp
00558B9E    81EC 1C000000   sub esp,1C
00558BA4    6A FF         push -1
00558BA6    6A 08         push 8
00558BA8    68 220E0116   push 16010E22
00558BAD    68 100E0152   push 52010E10
00558BB2    E8 F50A0700   call 精修家电.005C96AC
00558BB7    83C4 10         add esp,10
00558BBA    8945 FC         mov dword ptr ss:,eax                     ; 假码123456
00558BBD    68 2E000000   push 2E
00558BC2    FF75 FC         push dword ptr ss:                        ; (ASCII "123456")
00558BC5    E8 B15BF9FF   call 精修家电.004EE77B
00558BCA    83C4 08         add esp,8
00558BCD    83F8 00         cmp eax,0
00558BD0    B8 00000000   mov eax,0
00558BD5    0F94C0          sete al
00558BD8    8945 F8         mov dword ptr ss:,eax
00558BDB    8B5D FC         mov ebx,dword ptr ss:
00558BDE    85DB            test ebx,ebx
00558BE0    74 09         je short 精修家电.00558BEB
00558BE2    53            push ebx
00558BE3    E8 B20A0700   call 精修家电.005C969A
00558BE8    83C4 04         add esp,4
00558BEB    837D F8 00      cmp dword ptr ss:,0                         ; 判断注册码是否为空
00558BEF    0F84 56000000   je 精修家电.00558C4B                                 ; 不为空则跳
00558BF5    6A 00         push 0
00558BF7    6A 00         push 0
00558BF9    6A 00         push 0
00558BFB    68 01030080   push 80000301
00558C00    6A 00         push 0
00558C02    68 00000000   push 0
00558C07    68 04000080   push 80000004
00558C0C    6A 00         push 0
00558C0E    68 BF220000   push 22BF
00558C13    68 03000000   push 3
00558C18    BB 00030000   mov ebx,300
00558C1D    E8 840A0700   call 精修家电.005C96A6                                 ; 此CALL为“请输入注册码”
00558C22    83C4 28         add esp,28
00558C25    68 05000100   push 10005
00558C2A    68 220E0116   push 16010E22
00558C2F    68 100E0152   push 52010E10
00558C34    68 01000000   push 1
00558C39    BB 64030000   mov ebx,364
00558C3E    E8 630A0700   call 精修家电.005C96A6
00558C43    83C4 10         add esp,10
00558C46    E9 21030000   jmp 精修家电.00558F6C
00558C4B    FF35 6C000000   push dword ptr ds:                           ; ds:=5046B189(十进制1346810249即机器码)
00558C51    E8 1A030000   call 精修家电.00558F70                                 ; 跟进去,此CALL为 机器码 XOR 4217320
00558C56    8945 FC         mov dword ptr ss:,eax                     ; 出来结果eax=5006E861(十进制1342629985)
00558C59    6A FF         push -1
00558C5B    6A 08         push 8
00558C5D    68 220E0116   push 16010E22
00558C62    68 100E0152   push 52010E10
00558C67    E8 400A0700   call 精修家电.005C96AC
00558C6C    83C4 10         add esp,10
00558C6F    8945 F8         mov dword ptr ss:,eax                     ; eax=00163F10, (ASCII "123456")
00558C72    68 04000080   push 80000004
00558C77    6A 00         push 0
00558C79    8B45 F8         mov eax,dword ptr ss:
00558C7C    85C0            test eax,eax
00558C7E    75 05         jnz short 精修家电.00558C85
00558C80    B8 2E000000   mov eax,2E
00558C85    50            push eax
00558C86    68 01000000   push 1
00558C8B    BB 64010000   mov ebx,164
00558C90    E8 110A0700   call 精修家电.005C96A6
00558C95    83C4 10         add esp,10
00558C98    8945 F0         mov dword ptr ss:,eax
00558C9B    8955 F4         mov dword ptr ss:,edx
00558C9E    8B5D F8         mov ebx,dword ptr ss:
00558CA1    85DB            test ebx,ebx
00558CA3    74 09         je short 精修家电.00558CAE
00558CA5    53            push ebx                                           ; ebx=0014C480, (ASCII "123456")
00558CA6    E8 EF090700   call 精修家电.005C969A
00558CAB    83C4 04         add esp,4
00558CAE    DB45 FC         fild dword ptr ss:                        ; 上面出来的值5006E861 (十进制1342629985.)
00558CB1    DD5D E8         fstp qword ptr ss:                         ; st=1342629985.0000000000
00558CB4    DD45 E8         fld qword ptr ss:                        ; 堆栈 ss:=1342629985.000000
00558CB7    DC65 F0         fsub qword ptr ss:                         ; 与假码相减
00558CBA    D9E4            ftst                                             ; 结果与零比较,相等即注册成功
00558CBC    DFE0            fstsw ax                                           ; 保存状态字的值到AX
00558CBE    F6C4 01         test ah,1
00558CC1    74 02         je short 精修家电.00558CC5                           ; 相等则跳
00558CC3    D9E0            fchs
00558CC5    DC1D 370F0000   fcomp qword ptr ds:
00558CCB    DFE0            fstsw ax
00558CCD    F6C4 41         test ah,41
00558CD0    0F84 60020000   je 精修家电.00558F36                                 ; 跳则OVER,爆破NOP

===============================================================================
##########跟进CALL - 00558C51    E8 1A030000   call 精修家电.00558F70 来到 #########

00558F70    55            push ebp
00558F71    8BEC            mov ebp,esp
00558F73    81EC 04000000   sub esp,4
00558F79    68 01030080   push 80000301
00558F7E    6A 00         push 0
00558F80    68 E8594000   push 精修家电.004059E8
00558F85    68 01030080   push 80000301
00558F8A    6A 00         push 0
00558F8C    FF75 08         push dword ptr ss:                        ; 堆栈 ss:=5046B189机器码
00558F8F    68 02000000   push 2
00558F94    BB CC000000   mov ebx,0CC
00558F99    E8 08070700   call 精修家电.005C96A6                                 ; 再跟进
/////////////跟进来到这里/////////////
005C96A6    FF25 0C000000   jmp dword ptr ds:                               ; 单步
/////////////单步来到/////////////
10028DF1   A1 20AA0E10   mov eax,dword ptr ds:
10028DF6   0318            add ebx,dword ptr ds:
。。。。。。。。。
10028E16   52            push edx
10028E17   FF13            call dword ptr ds:                                 ; 再跟进
/////////////跟进来到这里/////////////
10059BE0   8B4424 0C       mov eax,dword ptr ss:
10059BE4   8B4C24 08       mov ecx,dword ptr ss:
。。。。。。。。。
10059BF1   E8 FAFEFFFF   call krnln.10059AF0                                 ; 再跟进
10059BF6   83C4 10         add esp,10
10059BF9   C3            retn
/////////////跟进来到这里/////////////
10059AF0   8B5424 10       mov edx,dword ptr ss:
10059AF4   8B4424 0C       mov eax,dword ptr ss:
10059AF8   83F8 01         cmp eax,1
10059AFB   8B0A            mov ecx,dword ptr ds:
10059AFD   7E 2F         jle short krnln.10059B2E
10059AFF   56            push esi
10059B00   8B7424 08       mov esi,dword ptr ss:
10059B04   57            push edi
10059B05   8D78 FF         lea edi,dword ptr ds:
10059B08   8BC6            mov eax,esi
10059B0A   83C2 0C         add edx,0C
10059B0D   83E8 00         sub eax,0
10059B10   74 0E         je short krnln.10059B20
10059B12   48            dec eax
10059B13   74 07         je short krnln.10059B1C
10059B15   48            dec eax
10059B16   75 0A         jnz short krnln.10059B22
10059B18   330A            xor ecx,dword ptr ds:               ; 异或运算机器码 XOR 4059E8(十进制4217320)
10059B1A   EB 06         jmp short krnln.10059B22
10059B1C   0B0A            or ecx,dword ptr ds:
10059B1E   EB 02         jmp short krnln.10059B22
10059B20   230A            and ecx,dword ptr ds:
10059B22   4F            dec edi
10059B23   ^ 75 E3         jnz short krnln.10059B08
10059B25   8B4424 10       mov eax,dword ptr ss:
10059B29   5F            pop edi
10059B2A   5E            pop esi
10059B2B   8908            mov dword ptr ds:,ecx               ; ecx=5006E861(1342629985)
10059B2D   C3            retn
===============================================================================

到此注册码算法已经追出了,是不是很简单啊,哈```下面再跟一下机器码的形成吧
根据\\.\PhysicalDrive0字符(易语言取硬盘特征字的东东)来到这里下断

1000DDB6   68 CCCF0D10   push krnln.100DCFCC                      ; ASCII "\\.\PhysicalDrive0" //点击软件注册中断于此
1000DDBB   FF15 1C140C10   call dword ptr ds:[<&KERNEL32.CreateFile>; KERNEL32.CreateFileA
1000DDC1   8BF0            mov esi,eax
/////////// Ctcl+F9返回程序领空 ///////////
0050B60F    83C4 04         add esp,4
0050B612    8945 FC         mov dword ptr ss:,eax                     ; eax=5054670E=1347708686(我的硬盘特征字)
0050B615    837D FC 00      cmp dword ptr ss:,0                         ; 判断获取特征字是否成功
0050B619    0F84 82000000   je 精修家电.0050B6A1                               ; 获取不成功则跳
0050B61F    68 01030080   push 80000301
0050B624    6A 00         push 0
0050B626    68 87D61200   push 12D687
0050B62B    68 01030080   push 80000301
0050B630    6A 00         push 0
0050B632    FF75 FC         push dword ptr ss:
0050B635    68 02000000   push 2
0050B63A    BB CC000000   mov ebx,0CC
0050B63F    E8 62E00B00   call 精修家电.005C96A6                     ; 跟进知道此CALL为特征字 XOR 1234567
0050B644    83C4 1C         add esp,1C
0050B647    8945 F8         mov dword ptr ss:,eax                     ; EAX=5046B189即1346810249
0050B64A    68 01030080   push 80000301
0050B64F    6A 00         push 0
0050B651    FF75 F8         push dword ptr ss:
0050B654    68 01000000   push 1
0050B659    BB 68010000   mov ebx,168
0050B65E    E8 43E00B00   call 精修家电.005C96A6
0050B663    83C4 10         add esp,10
0050B666    8945 F4         mov dword ptr ss:,eax                     ; 机器码 ASCII "1346810249"
0050B669    6A 00         push 0
0050B66B    FF75 F4         push dword ptr ss:                        ; (ASCII "1346810249")
0050B66E    6A FF         push -1
0050B670    6A 08         push 8
0050B672    68 1E0E0116   push 16010E1E
0050B677    68 100E0152   push 52010E10
0050B67C    E8 3DE00B00   call 精修家电.005C96BE
0050B681    83C4 18         add esp,18
0050B684    8B5D F4         mov ebx,dword ptr ss:
0050B687    85DB            test ebx,ebx
0050B689    74 09         je short 精修家电.0050B694
0050B68B    53            push ebx0050B47F(ASCII "1346810249")
0050B68C    E8 09E00B00   call 精修家电.005C969A
0050B691    83C4 04         add esp,4
0050B694    8B45 F8         mov eax,dword ptr ss:
0050B697    E9 0F000000   jmp 精修家电.0050B6AB
0050B69C    E9 0A000000   jmp 精修家电.0050B6AB
0050B6A1    B8 00000000   mov eax,0                               ; 获取不成功跳到这里
0050B6A6    E9 00000000   jmp 精修家电.0050B6AB
0050B6AB    8BE5            mov esp,ebp
0050B6AD    5D            pop ebp
0050B6AE    C3            retn                               ; 返回
===============================================================================
下面来分析一下如果获取硬盘特征字不成功的话,返回什么值做机器码```我的机器是可以获取成功的
获取不成功则返回到这里

0050B46D   A3 4C0C9F01   mov dword ptr ds:,eax
0050B472   833D 4C0C9F01 0>cmp dword ptr ds:,0
0050B479   0F85 27000000   jnz 精修家电.0050B4A6
0050B47F   C705 500C9F01 0>mov dword ptr ds:,5             ; ds:<==5赋值,下面有用

/////////// 多次Ctrl+F9 返回到这里///////////
0050BA66   55            push ebp
0050BA67   8BEC            mov ebp,esp
0050BA69   81EC 04000000   sub esp,4
0050BA6F   E8 75FBFFFF   call 精修家电.0050B5E9
0050BA74   A3 4C0C9F01   mov dword ptr ds:,eax
0050BA79   833D 4C0C9F01 0>cmp dword ptr ds:,0
0050BA80   0F84 22000000   je 精修家电.0050BAA8
0050BA86   6A 00         push 0
0050BA88   68 00000000   push 0
0050BA8D   6A FF         push -1
0050BA8F   6A 08         push 8
0050BA91   68 360E0116   push 16010E36
0050BA96   68 100E0152   push 52010E10
0050BA9B   E8 1EDC0B00   call 精修家电.005C96BE
0050BAA0   83C4 18         add esp,18
0050BAA3   E9 87000000   jmp 精修家电.0050BB2F
0050BAA8   FF0D 500C9F01   dec dword ptr ds:               ; 计数器减一
0050BAAE   833D 500C9F01 0>cmp dword ptr ds:,0             ; 比较,ds:上面已赋过值5
0050BAB5   0F85 74000000   jnz 精修家电.0050BB2F                  ; 不相等则跳,修改标志位往下分析
0050BABB   6A 00         push 0                                 ; 上面是重复取5次进行试验???
0050BABD   68 00000000   push 0
0050BAC2   6A FF         push -1
0050BAC4   6A 08         push 8
0050BAC6   68 360E0116   push 16010E36
0050BACB   68 100E0152   push 52010E10
0050BAD0   E8 E9DB0B00   call 精修家电.005C96BE
0050BAD5   83C4 18         add esp,18
0050BAD8   C705 4C0C9F01 A>mov dword ptr ds:,12D12AB       ; 赋值12D12AB(即19731115作者的生日?)
0050BAE2   68 01030080   push 80000301
0050BAE7   6A 00         push 0
0050BAE9   FF35 4C0C9F01   push dword ptr ds:            ; ds:=012D12AB
0050BAEF   68 01000000   push 1
0050BAF4   BB 68010000   mov ebx,168
0050BAF9   E8 A8DB0B00   call 精修家电.005C96A6
0050BAFE   83C4 10         add esp,10
0050BB01   8945 FC         mov dword ptr ss:,eax
0050BB04   6A 00         push 0
0050BB06   FF75 FC         push dword ptr ss:                ; 堆栈 ss:=0020C2F8, (ASCII "19731115")
0050BB09   6A FF         push -1
0050BB0B   6A 08         push 8
0050BB0D   68 1E0E0116   push 16010E1E
0050BB12   68 100E0152   push 52010E10
0050BB17   E8 A2DB0B00   call 精修家电.005C96BE
0050BB1C   83C4 18         add esp,18
0050BB1F   8B5D FC         mov ebx,dword ptr ss:
0050BB22   85DB            test ebx,ebx
0050BB24   74 09         je short 精修家电.0050BB2F
0050BB26   53            push ebx                                 ; (ASCII "19731115")
0050BB27   E8 6EDB0B00   call 精修家电.005C969A
0050BB2C   83C4 04         add esp,4
0050BB2F   8BE5            mov esp,ebp
0050BB31   5D            pop ebp
0050BB32   C3            retn
===============================================================================
分析到此大概的算法就算完成了,来个总结吧```

[算法总结]
超简单的算法,注册码 = 机器码 XOR 4217320
             机器码:如果获取硬盘特征字成功,那么机器码=硬盘特征字 xor 1234567;否则机器=19731115。

用易语言源码表示上面的代码大概如下:
' 也就是算法注册机了,
' 今天顺便装个易语言来学习一下,对易语言还不熟悉,才刚刚开学习的```哈```如有错误,请指出
' 原软件好像设置了重复取硬盘特征字5次,我这里没表示出来

.局部变量 注册码, 整数型
.局部变量 机器码, 整数型
.局部变量 原特征码, 整数型

原特征码 = 取硬盘特征字 ()
.如果 (原特征字 ≠ 0)                  ' 检查获取硬盘特征字是否成功
    机器码 = 位异或 (原特征码, 1234567)' 返回新特征码
.否则
    机器码 = 19731115               ' 返回新特征码
.如果结束
注册码 = 位异或 (机器码, 4217320)
编辑框1.内容 = 到文本 (机器码)       ' 机器码
编辑框2.内容 = 到文本 (注册码)       ' 注册码

' 原来这个软件的机器码的获取是直接套用易语言里边“软件注册”的例子的,我是写完这篇东东才发现的,汗```对易语言编程不了
解的原因```有兴趣的自己去看吧

===================================================================2005年12月23日
【版权声明】 本文纯属技术交流,无其它目的,转载请注明作者并保持文章的完整, 谢谢!

[ 本帖最后由 风球 于 2005-12-27 10:49 AM 编辑 ]

冷血书生 发表于 2005-12-23 17:57:27

这还叫简单?

天哪!!

风球 发表于 2005-12-23 18:07:19

原帖由 冷血书生 于 2005-12-23 05:57 PM 发表
这还叫简单?

天哪!!

算法简单啊```只是贴长而已```哈```

龟心箭 发表于 2005-12-23 19:54:07

HOHO~
学习了~~~

vivian 发表于 2005-12-23 21:56:05

不错,向兄弟们学习!

soyushi 发表于 2005-12-25 14:58:23

E语言不习惯~~

lzq1973 发表于 2005-12-26 15:18:58

学习
                  再学习

清城浪子 发表于 2009-12-22 22:12:31

现在有新版了。。应该是取CPUID的。。希望能分析一下。

清城浪子 发表于 2009-12-22 22:14:33

新版是4.5的。
页: [1]
查看完整版本: 精修家电维修管理系统 V3.3算法分析(简单)