老文章档案 · 2003 年

消费增埴卡管理 V2.0单机版 算法分析

破解教程 · 算法分析 · 2003-07-24 · 作者:fly 人气: · 出处:赢政天下整理收藏)

简单算法——消费增埴卡管理 V2.0单机版

下载页面: http://www.skycn.com/soft/7912.html

软件大小: 699 KB

软件语言: 简体中文

软件类别: 国产软件 / 共享版 / 商业贸易

应用平台: Win95/98/Me

加入时间: 2002-04-15 14:06:37

下载次数: 282

推荐等级: ****

开 发 商: http://www.leathernet.com.cn/

【软件简介】:适用于零售商场、电器商场、娱乐场所的会员消费管理,资料管理、消费增值管理。

【软件限制】:必须注册,否则无法使用。

【作者声明】:初学Crack,只是感兴趣,没有其它目的。失误之处敬请诸位大侠赐教!

【破解工具】:TRW2000娃娃修改版、Ollydbg1.09、FI2.5、W32Dasm8.93黄金版

—————————————————————————————————

【过 程】:

消费卡管理.exe可以反汇编。Visual FoxPro编写?不清楚。

系统代码:95065

试 炼 码:1357246890

根据失败提示可以找到下面的核心。

—————————————————————————————————

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:00407C05(C)

|

:00407C5F A1643B4100 mov eax, dword ptr [00413B64]

:00407C64 25FFFF0000 and eax, 0000FFFF

:00407C69 0F849B010000 je 00407E0A

:00407C6F 85C0 test eax, eax

:00407C71 0F8E1A020000 jle 00407E91

:00407C77 83F802 cmp eax, 00000002

:00407C7A 0F8F11020000 jg 00407E91

:00407C80 8B35043B4100 mov esi, dword ptr [00413B04]

====>ESI=AC 从[00413B04]处取值

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

[00413B04]内存处的值: 程序自给?!

0052027B 41 43 00 4D 45 00 00 00 32 31 00 37 00 AC.ME...21.7.

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

:00407C86 83C9FF or ecx, FFFFFFFF

:00407C89 8BFE mov edi, esi

:00407C8B 33C0 xor eax, eax

:00407C8D F2 repnz

:00407C8E AE scasb

:00407C8F F7D1 not ecx

:00407C91 83C1FE add ecx, FFFFFFFE

:00407C94 6683F9FF cmp cx, FFFF

:00407C98 7422 je 00407CBC

:00407C9A 6685C9 test cx, cx

:00407C9D 7C17 jl 00407CB6

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:00407CB4(C)

|

:00407C9F 0FBFC1 movsx eax, cx

:00407CA2 8A1430 mov dl, byte ptr [eax+esi]

1、 ====>DL=43(H) 即:C

2、 ====>DL=41(H) 即:A

:00407CA5 80FA3F cmp dl, 3F

:00407CA8 7406 je 00407CB0

:00407CAA 3A540420 cmp dl, byte ptr [esp+eax+20]

1、 ====>DL=43 [esp+eax+20]=33

即:注册码的第2位应是 C

2、 ====>DL=41 [esp+eax+20]=31

即:注册码的第1位应是 A

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

[esp+20]内存处的值是我的试炼码:

0064F9EC 31 33 35 37 32 34 36 38 39 30 1357246890

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

:00407CAE 7506 jne 00407CB6

====>不同则跳则OVER! 可下 R FL Z 改变跳转

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:00407CA8(C)

|

:00407CB0 49 dec ecx

:00407CB1 6685C9 test cx, cx

:00407CB4 7DE9 jge 00407C9F

====>循环2次

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:

|:00407C9D(C), :00407CAE(C)

|

:00407CB6 6683F9FF cmp cx, FFFF

:00407CBA 7508 jne 00407CC4

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:00407C98(C)

|

* Possible Reference to String Resource ID=00001: "èèèèèèèèèèèèèèèèèèèèèèèèèèèèèè"

|

:00407CBC C744241401000000 mov [esp+14], 00000001

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:00407CBA(C)

|

:00407CC4 8B3DE43A4100 mov edi, dword ptr [00413AE4]

====>EDI=ME 从[00413AE4]处取值

:00407CCA 83C9FF or ecx, FFFFFFFF

:00407CCD 33C0 xor eax, eax

:00407CCF F2 repnz

:00407CD0 AE scasb

:00407CD1 F7D1 not ecx

:00407CD3 49 dec ecx

:00407CD4 8D7C2420 lea edi, dword ptr [esp+20]

====>EDI=1357246890

:00407CD8 8BE9 mov ebp, ecx

:00407CDA 83C9FF or ecx, FFFFFFFF

:00407CDD F2 repnz

:00407CDE AE scasb

:00407CDF F7D1 not ecx

:00407CE1 49 dec ecx

:00407CE2 2BCD sub ecx, ebp

:00407CE4 6685C9 test cx, cx

:00407CE7 7E32 jle 00407D1B

:00407CE9 33F6 xor esi, esi

:00407CEB 6685ED test bp, bp

:00407CEE 7E22 jle 00407D12

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:00407D10(C)

|

:00407CF0 8B15E43A4100 mov edx, dword ptr [00413AE4]

====>EDX=ME

:00407CF6 0FBFC6 movsx eax, si

:00407CF9 8A1410 mov dl, byte ptr [eax+edx]

1、 ====>DL=4D(H) 即:M

2、 ====>DL=45(H) 即:E

:00407CFC 80FA3F cmp dl, 3F

:00407CFF 740B je 00407D0C

:00407D01 0FBFF9 movsx edi, cx

:00407D04 03F8 add edi, eax

:00407D06 3A543C20 cmp dl, byte ptr [esp+edi+20]

1、 ====>DL=4D [esp+eax+20]=39

即:注册码的第9 位应是 M

2、 ====>DL=45 [esp+eax+20]=30

即:注册码的第10位应是 E

:00407D0A 7506 jne 00407D12

====>不同则跳则OVER! 可下 R FL Z 改变跳转

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:00407CFF(C)

|

:00407D0C 46 inc esi

:00407D0D 663BF5 cmp si, bp

:00407D10 7CDE jl 00407CF0

====>循环2次

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:

|:00407CEE(C), :00407D0A(C)

|

:00407D12 663BF5 cmp si, bp

:00407D15 7504 jne 00407D1B

:00407D17 FF442414 inc [esp+14]

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:

|:00407CE7(C), :00407D15(C)

|

:00407D1B 837C241402 cmp dword ptr [esp+14], 00000002

:00407D20 740A je 00407D2C

:00407D22 B8FEFFFFFF mov eax, FFFFFFFE

:00407D27 E941010000 jmp 00407E6D

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:00407D20(C)

|

:00407D2C 8B3D043B4100 mov edi, dword ptr [00413B04]

:00407D32 83C9FF or ecx, FFFFFFFF

:00407D35 33C0 xor eax, eax

:00407D37 F2 repnz

:00407D38 AE scasb

:00407D39 8B3DE43A4100 mov edi, dword ptr [00413AE4]

:00407D3F F7D1 not ecx

:00407D41 49 dec ecx

:00407D42 8D740C20 lea esi, dword ptr [esp+ecx+20]

:00407D46 83C9FF or ecx, FFFFFFFF

:00407D49 F2 repnz

:00407D4A AE scasb

:00407D4B F7D1 not ecx

:00407D4D 49 dec ecx

:00407D4E 8BD6 mov edx, esi

:00407D50 2BD1 sub edx, ecx

:00407D52 8BFE mov edi, esi

:00407D54 83C9FF or ecx, FFFFFFFF

:00407D57 F2 repnz

:00407D58 AE scasb

:00407D59 F7D1 not ecx

:00407D5B 49 dec ecx

:00407D5C 88040A mov byte ptr [edx+ecx], al

:00407D5F 8BCE mov ecx, esi

====>ECX=DESI=572468 即去掉第1、2、9、10位后的试炼码

:00407D61 E83A5B0000 call 0040D8A0

====>检测上面的中间几位是否为数字?

:00407D66 85C0 test eax, eax

:00407D68 750A jne 00407D74

====>不是数字则不跳则OVER!

:00407D6A B8FDFFFFFF mov eax, FFFFFFFD

:00407D6F E9F9000000 jmp 00407E6D

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:00407D68(C)

|

:00407D74 BA64014100 mov edx, 00410164

:00407D79 8BCE mov ecx, esi

====>ECX=ESI=572468

:00407D7B E8605B0000 call 0040D8E0

====>再次检测572468是否为数字?

不是数字则“invalid digital number!”。并且把572468转化为用16进制值表示!

:00407D80 8BF8 mov edi, eax

====>EDI=EAI=8BC34(H)=572468(D)

:00407D82 66A1643B4100 mov ax, word ptr [00413B64]

:00407D88 663D0100 cmp ax, 0001

:00407D8C 7546 jne 00407DD4

:00407D8E 66A10A3B4100 mov ax, word ptr [00413B0A]

:00407D94 8B15103B4100 mov edx, dword ptr [00413B10]

:00407D9A 33C9 xor ecx, ecx

:00407D9C 8ACC mov cl, ah

:00407D9E 25FF000000 and eax, 000000FF

:00407DA3 8BF1 mov esi, ecx

:00407DA5 8BC8 mov ecx, eax

:00407DA7 E854FBFFFF call 00407900

:00407DAC 8B150C3B4100 mov edx, dword ptr [00413B0C]

:00407DB2 03F8 add edi, eax

:00407DB4 6685F6 test si, si

:00407DB7 7504 jne 00407DBD

:00407DB9 33C9 xor ecx, ecx

:00407DBB EB03 jmp 00407DC0

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:00407DB7(C)

|

:00407DBD 8D4E01 lea ecx, dword ptr [esi+01]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:00407DBB(U)

|

:00407DC0 E83BFBFFFF call 00407900

:00407DC5 8BC8 mov ecx, eax

:00407DC7 85C9 test ecx, ecx

:00407DC9 7438 je 00407E03

:00407DCB 8BC7 mov eax, edi

:00407DCD 99 cdq

:00407DCE F7F9 idiv ecx

:00407DD0 8BC2 mov eax, edx

:00407DD2 EB27 jmp 00407DFB

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:00407D8C(C)

|

:00407DD4 663D0200 cmp ax, 0002

:00407DD8 7529 jne 00407E03

:00407DDA 8B150C3B4100 mov edx, dword ptr [00413B0C]

:00407DE0 A1103B4100 mov eax, dword ptr [00413B10]

:00407DE5 8B0D483C4100 mov ecx, dword ptr [00413C48]

====>ECX=17359(H)=95605(D)呵呵,系统代码

:00407DEB 52 push edx

:00407DEC 668B150A3B4100 mov dx, word ptr [00413B0A]

:00407DF3 50 push eax

:00407DF4 E897FBFFFF call 00407990

====>算法CALL!得出下面的EAX值。进入!

:00407DF9 2BC7 sub eax, edi

====>EAX=A2802 - 8BC34=16BCE

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:00407DD2(U)

|

:00407DFB 85C0 test eax, eax

====>相减结果是否为0?即:上面2部分是否相等?

:00407DFD 0F848E000000 je 00407E91

====>不为0则不跳则OVER!

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:

|:00407DC9(C), :00407DD8(C)

|

:00407E03 B8FBFFFFFF mov eax, FFFFFFFB

:00407E08 EB63 jmp 00407E6D

:00408013 FF1500424100 call dword ptr [00414200]

====>BAD BOY!“无效的注册码!”

—————————————————————————————————

进入算法CALL:407DF4 call 00407990

* Referenced by a CALL at Addresses:

|:00407DF4 , :004081DA

|

:00407990 53 push ebx

:00407991 56 push esi

:00407992 668BDA mov bx, dx

:00407995 8BF1 mov esi, ecx

:00407997 8B54240C mov edx, dword ptr [esp+0C]

====>EDX=21 从[esp+0C]处取值

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

[esp]内存处的值:

0052027B 41 43 00 4D 45 00 00 00 32 31 00 37 00 AC.ME...21.7.

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

:0040799B 8ACB mov cl, bl

:0040799D 57 push edi

:0040799E 81E1FF000000 and ecx, 000000FF

:004079A4 E857FFFFFF call 00407900

====>检测21是否为数字?

并且把21转化为用16进制值表示!EAX=15(H)=21(D)

:004079A9 8B542414 mov edx, dword ptr [esp+14]

====>EDX=7 从[esp+14]处取值

:004079AD 8BF8 mov edi, eax

====>EDI=EAX=15

:004079AF 33C0 xor eax, eax

:004079B1 8AC7 mov al, bh

:004079B3 6685C0 test ax, ax

:004079B6 7512 jne 004079CA

:004079B8 33C9 xor ecx, ecx

:004079BA E841FFFFFF call 00407900

====>检测7是否为数字?

并且把7转化为用16进制值表示!EAX=7(H)=7(D)

:004079BF 03FE add edi, esi

====>EDI=15 + 17359=1736E

:004079C1 0FAFC7 imul eax, edi

====>EAX= 7 * 1736E=A2802(H)

呵呵,把上面运算的结果A2802(H)转化成10进制值665602(D),就是注册码的中间部分了!

:004079C4 5F pop edi

:004079C5 5E pop esi

:004079C6 5B pop ebx

:004079C7 C20800 ret 0008

—————————————————————————————————

【算 法 总 结】:

1、注 册 码第1、2位固定为:AC (呵呵,猜一下?)

2、注册码倒数第1、2位固定为:ME (呵呵,猜一下?)

3、注册码中间几位的运算:

①、取系统代码:95065,转化为16进制值:17359(H)

②、17359 + 15=1736E

③、1736E * 7=A2802(H)=665602(D),就是注册码的中间部分了!

既:(系统代码 + 15) * 7 运算结果的10进制值

呵呵,说明一下:上面的参数只是我的机子调试时程序自给的,我不知道是否是固定参数,所以只能猜测一下。但是注册码的校验过程应该是大体相同的。

—————————————————————————————————

【KeyMake之内存注册机】:

呵呵,内存注册机有点麻烦,需要说明中间几位必须是数字,还要改变几个跳转。

—————————————————————————————————

【注册信息保存】:

1、注册表中

REGEDIT4

[HKEY_CLASSES_ROOT\{3zFjGOObUI}]

@="NUQ=$!!5!&1!1!#5!(1!+!$5Q.4)U!!!!!!\"=R1!!>`^\"1T9W.49Q-EV&!!!!N!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#!!!!!!!!N!!!!!!!I!>-(!Q!&!\"5!%!!I!\"!!J!%!!!)!!!!!!!!!!.>Z5!%!!!!!!!!!.!!!!!!!!!!!!!!!!!!!!"

2、REGEDIT4

[HKEY_CLASSES_ROOT\SystemAppIDs]

@="6!1!!!!!!!!\"\\-XJ';E>04W*638U!"

3、C:\WINDOWS\SYSTEM 下的access.ctl文件。

如果想重新注册必须把以上3处删干净,否则,呵呵……

真是狡兔三窟呀。如此保存注册信息的方式使我想起了网络电话 Talking anywhere 5.0,简直是一模一样。

—————————————————————————————————

【整 理】:

系统代码:95065

注 册 码:AC665602ME

—————————————————————————————————

Cracked By 巢水工作坊——fly【OCN】

2003-03-21 18:36:32

(出处:赢政天下整理收藏)

相关文章:

·语音界面2.0算法分析及注册机源码!

·侠客系统修改器1.21破解手记--算法分析

·中文拨号上网计时计费器 V4.12注册算法分析

·ClockWise 3.22e注册码算法分析

·CoolClock V1.02注册算法分析

·Directory Scanner v1.5 注册算法分析

·Disk Chief 1.2 简单注册算法分析

·EffeTech HTTP Sniffer 3.2注册算法分析

·eLib2.01算法分析

·EZ MP3 Recorder 1.15 注册算法分析

相关软件:

→ 特别推荐

→ 热点TOP10

我为人人《《==》》人人为我

关于我们 |

帮助(?)

| 广告服务 |

版权声明 |

商业合作 |

发展历程 |

加盟我们 |

联系我们

Copyright © 1999-2003

winzheng.com All Rights Reserved.

繁体版:由华琦数码技术提供

Powered

by:MeSky.Net

2003-2004 年,宽带刚刚普及,下载站的文章区是许多人学电脑的第一课堂。
🕰 → 🤖 从那时到现在

当年一篇教程能让一台电脑焕然一新;今天的效率工具换成了 AI。 想知道当下最可靠的 AI 模型怎么选?看 赢政指数——我们用了 28 年的选软件严谨,现在用来评测大模型。

档案性质声明:本页为赢政天下(1998-2011)老文章的历史档案复原, 内容反映当年发表时的原貌——包括当年的技术表述、软件版本与观点,部分方法在今天已不适用或不合规,仅作互联网历史记录与研究用途, 不提供任何形式的下载。原始数据经由公共网络存档(Internet Archive)复原。发现问题请联系我们
← 返回老文章档案 · 软件史档案馆 · 赢政天下站史