老文章档案 · 2003 年

电子书制作软件 算法分析

赢政资讯 · 破解文章 · 2003-07-15 · 作者:飞狐 人气: · 出处:赢政天下整理收藏

(由于时间仓促,难免有不周之处。)

电子书制作软件介绍:我想熟悉电子书制作的人,应该知道这个软件。我喜欢它,是我常用的

一个工具。此软件是用aspack加的壳,很容易去的。未注册版本不能编辑和编译大于15个节点的项目。此次pj只是为了学习它的算法。为了作者的权益,我想各位如果喜欢这个软件

的话,请购买正版软件,以支持作者继续开发下去。同时也请作者海涵。

使用工具:trw2000。win32dasm(我用它只是为了取它的代码)

你可以设中断BPX HMEMCPY 剩下怎么追法就不用我说了吧。

:004F2440 8BD8 mov ebx, eax

:004F2442 8B55FC mov edx, dword ptr [ebp-04]

:004F2445 8BC3 mov eax, ebx

:004F2447 E89464FFFF call 004E88E0

:004F244C C6434400 mov [ebx+44], 00

* Possible StringData Ref from Code Obj ->"F0E1"此字符串的作用是与你的用户名所计算

的数值相异或。

|

:004F2450 BA70254F00 mov edx, 004F2570此处地址存的就是F0E1

:004F2455 8BC3 mov eax, ebx

:004F2457 E82864FFFF call 004E8884

:004F245C 8BC3 mov eax, ebx

:004F245E E81967FFFF call 004E8B7C按F8进入吧。

:004F2463 837B3400 cmp dword ptr [ebx+34], 00000000

:004F2467 0F84CB000000 je 004F2538

:004F246D 8B4334 mov eax, dword ptr [ebx+34]真码

:004F2470 8B55F8 mov edx, dword ptr [ebp-08]假码

:004F2473 E83429F1FF call 00404DAC比较二者是否相等。

如果你单纯想找到注册码,那么至此就可以了,如果你想学习它的算法,就请继续

往下看。

*******************************************************************

注册算法:

首先是计算注册码的前两位。

:004E89AA BF64000000 mov edi, 00000064它实际就是注册码的前两位

:004E89AF 8D45F0 lea eax, dword ptr [ebp-10]

:004E89B2 50 push eax

:004E89B3 897DDC mov dword ptr [ebp-24], edi

:004E89B6 C645E000 mov [ebp-20], 00

:004E89BA 8D55DC lea edx, dword ptr [ebp-24]

:004E89BD 33C9 xor ecx, ecx

* Possible StringData Ref from Code Obj ->"%1.2x"

|

:004E89BF B8688B4E00 mov eax, 004E8B68

:004E89C4 E8CB17F2FF call 0040A194按F8进入吧。

欲知它的作用请看下文

:00409F52 80F944 cmp cl, 44

:00409F55 7415 je 00409F6C

:00409F57 80F955 cmp cl, 55

:00409F5A 7422 je 00409F7E

:00409F5C 80F958 cmp cl, 58

:00409F5F 0F8530FFFFFF jne 00409E95

:00409F65 B910000000 mov ecx, 00000010除数

:00409F6A EB17 jmp 00409F83

:00409F86 31D2 xor edx, edx为零

:00409F88 F7F1 div ecx EAX为64

:00409F8A 80C230 add dl, 30余数DL与30相加

:00409F8D 80FA3A cmp dl, 3A

:00409F90 7203 jb 00409F95

:00409F92 80C207 add dl, 07

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

|:00409F90(C)

|

:00409F95 4E dec esi串首地址减1

:00409F96 8816 mov byte ptr [esi], dl把结果存入ESI中

:00409F98 09C0 or eax, eax为刚才计算时的商。

:00409F9A 75EA jne 00409F86不相等就继续计算,

总结:此部分代码首先是计算注册码的第二位,然后再计算第一位,结果是64

:00409F9C 8D4D9F lea ecx, dword ptr [ebp-61]

:00409F9F 29F1 sub ecx, esi

:00409FA1 8B55DC mov edx, dword ptr [ebp-24]

:00409FA4 83FA10 cmp edx, 00000010

:00409FA7 7601 jbe 00409FAA

:00409FA9 C3 ret

***************************

第二步是根据你的用户名以及字符串F0E1计算剩下的几位注册码。注意所计算的ASCII值就是注册码,

用户名的位数乘以2就是注册码的位数。

0167:004E89DC MOV DWORD [EBP-14],01

0167:004E89E3 MOV EAX,[EBP-04]你所输入的用户名

0167:004E89E6 MOV EDX,[EBP-14]用户名的序号。

0167:004E89E9 MOVZX EAX,BYTE [EAX+EDX-01]取用户名中的一个字节

0167:004E89EE ADD EAX,EDI EDI是上一次计算出的密码。

0167:004E89F0 MOV ECX,FF除数

0167:004E89F5 CDQ

0167:004E89F6 IDIV ECX

0167:004E89F8 MOV EBX,EDX余数存入EBX中

0167:004E89FA CMP ESI,[EBP-0C] ESI是字符串F0E1的序号,

[EBP-0C]是F0E1这个字符串的个数(也就是4)

0167:004E89FD JNL 004E8A02大于就跳

0167:004E89FF INC ESI序号加1

0167:004E8A00 JMP SHORT 004E8A07

0167:004E8A02 MOV ESI,01重新赋值为1

0167:004E8A07 MOV EAX,[EBP-08]<==为字符串F0E1

0167:004E8A0A MOVZX EAX,BYTE [EAX+ESI-01]从字符串F0E1中取一个字符。

0167:004E8A0F XOR EBX,EAX二者相互异或。运行后EBX的值就是注册码。

0167:004E8A11 LEA EAX,[EBP-28]

0167:004E8A14 PUSH EAX

0167:004E8A15 MOV [EBP-24],EBX把注册码存入[EBP-24]中。

0167:004E8A18 MOV BYTE [EBP-20],00

0167:004E8A1C LEA EDX,[EBP-24]

0167:004E8A1F XOR ECX,ECX

0167:004E8A21 MOV EAX,004E8B68

0167:004E8A26 CALL 0040A194

0167:004E8A2B MOV EDX,[EBP-28]

0167:004E8A2E LEA EAX,[EBP-10]

0167:004E8A31 CALL 00404C70

0167:004E8A36 MOV EDI,EBX

0167:004E8A38 INC DWORD [EBP-14]

0167:004E8A3B DEC DWORD [EBP-1C]

0167:004E8A3E JNZ 004E89E3

举例说明:用户名:abcde(它们的ASCII值分别是61、62、63、64、65)

一、首先按照第一步的方法计算它的前两位注册码即64。

二、根据你的用户名以及字符串F0E1计算后几位注册码。

有几位用户名就得计算几次。

1、计算3、4位的密码。

取用户名的首字a(61),与前一步的注册码(64)相加,结果为c5;然后c5除以FF,

余数为c5,最后取F0E1中的F(ASCII值为46)相异或,结果为83,这就是第三、四

位的注册码。

2、计算5、6位的密码。

取用户名的第二个字符b(62),与前一步的注册码(83)相加,结果为e5;然后e5除以FF,

余数为e5,最后取F0E1中的0(ASCII值为30)相异或,结果为D5,这就是第五、六

位的注册码。

3、计算7、8位的密码。

取用户名的第三个字符c(63),与前一步的注册码(D5)相加,结果为138;然后138除以FF,

余数为39,最后取F0E1中的E(ASCII值为45)相异或,结果为7C,这就是第七、八

位的注册码。

4、计算9、10位的密码。

取用户名的第四个字符d(64),与前一步的注册码(7C)相加,结果为E0;然后E0除以FF,

余数为E0,最后取F0E1中的1(ASCII值为31)相异或,结果为D1,这就是第九、十

位的注册码。

5、计算11、12位的密码。

取用户名的第五个字符e(65),与前一步的注册码(D1)相加,结果为136;然后136除以FF,

余数为37,因为字符串F0E1已经循环完毕,所以重新设指针,取F0E1中的F(ASCII值为46)相异或,结果为71,这就是第11、12

位的注册码。

也就是:用户名:abcde 注册码:6483D57CD171

当用户名为汉字时与此同。

另:因特殊原因,软件名称隐去。如果想知道这个软件的名称及下载地址请给我发消息。

相关资讯:

·语音界面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 (C) 1998-2004 winzheng.com All Rights Reserved.

特别感谢 蓝芒科技 提供下载站及论坛服务器

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

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

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