您的位置:首页精文荟萃破解文章 → 电子书制作软件 算法分析

电子书制作软件 算法分析

时间:2004/10/15 0:52:00来源:本站整理作者:蓝点我要评论(0)

 

 




(由于时间仓促,难免有不周之处。)
电子书制作软件介绍:我想熟悉电子书制作的人,应该知道这个软件。我喜欢它,是我常用的
一个工具。此软件是用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
当用户名为汉字时与此同。
另:因特殊原因,软件名称隐去。如果想知道这个软件的名称及下载地址请给我发消息。


    
    
     
    
    
     

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 去除winrar注册框方法

最新文章 比特币病毒怎么破解 比去除winrar注册框方法 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据

人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程