老文章档案 · 2003 年

Advanced Evaluator 3.5 破解

赢政天下 [WINZHENG.COM] · 网络学院 · 2003-06-09 · 作者:Sam.com 人气: · 出处:赢政天下收集整理)

标题: Advanced Evaluator 3.5 (另一强大的科学计算器--注册运算也很强大哟)破解~~新手请进~~有详细注解~高手们做个注册机吧~~~呵呵

内容:

差点就要放弃啦~~~~~~~

软件名称:Advanced Evaluator 3.5 (功能强大的科学计算器)

下载地址:http://61.134.4.193:8080/appsoftware/calculator/ae35.zip (708KB)

注册形式:Name & Key (我用了Name:Sam Von Key:67676767) 30天限制,过了30天就不能用了

破解原因:同上次一样,找了一大堆计算器想算注册码,这个也一样不合我心意,但它有注册保护,刚好可以练一下

但这个比上次那个难多啦(对于我来说),看我的标题就知道啦,不过这次可增加了我不少经验值,顺便问

下大家,有哪个计算器软件或其它工具可以进行汇编的shl,nor,rol,xor等这些逻辑运算的请告诉我下载

地址~~~~谢谢大家~~~~

破解过程及心得:

这次破解简直是瞎猫捉到死老鼠,一开始当然是例行公事一样的填入我的Name&Key,打开Trw2000,输入bpx hmemcpy,然后按确定,Booom~~~Trw拦下来啦,然后就bd、pmodule,来到了程序的代码中,呵呵~~~~有谁算过这个过程要多长时间。通常来说这时我都会看看各个寄存器的值,一般来说这时eax的值就是你Name or Key的长度,而我这里是我Name的长度7,好啦它读了我的Name,马上用s命令查找'Sam Von'(s命令会用吧,反正我刚学的时候就不怎么会用,谁不懂就问吧),找到啦,当然是“bpm 地址 rw”啦,这个命令很好用的,只要任何程序读写了存放我的Name的地址,Trw就会中断了,我的猜想是程序读我的Name作比较或者作运算或者把它放到第二个地址去,所以我通常有个习惯就是用bpm把所有存放我Name & Key的地址都设中断,反正程序一读我的Name&Key就是要做小动作啦,所以这样比较容易跟也容易找到核心,当程序再次中断时,我发现它在拿我的Name和sudi比较,但我用sudi来注册时一样出错,那这个可能是黑名单吧,这里应该不是重点,再跟~~~~~~~又发现程序在查我Name的二进制,要用到二进制来运算,麻烦啦,继续~~~~~~中间好多F8 F10的不停的按,反正要注意各寄存器的值,在Trw中的汇编代码窗口右上角的提示很重要,多多留意,一发现出现有疑的数据就要d来看看。其中有几个地方应该都是运算重点,但我没有贴出代码,只给出地址,有兴趣的就自己看看吧:在4027EC处程序用我Name的16进制加上某个地址再与另一地址比较;在478B1B处程序作了运算(用了除法等命令);在479471-->4794B0处程序将我Name的二进制连续放在内存中然后比较、查表、运算。最下面我贴出那些代码是对Key的比较运算,反正我再跟下去就晕啦,因为后面的call很多,运算也很复杂,我看不懂代码,但我想后面应该就是运算核心啦,高手们可以研究一下。上面的过程我花了两天时间,始终搞不懂,你一定想问我为什么不用反汇编呢,其实我一早用过啦,程序是Delphi写的,里面一点有用的字串都没有,只有十多行而已(BTW:为什么纯Delphi的程序用W32dasm反汇编后在字串表中都只有几行呢,是程序本身的设计还是Delphi的限制呢),我开始怀疑是否是我的起点过高呢~~~~~~~~~~~~呵呵

眼花啦~~~~每次看下面运算的代码都不得重点,我实在看不懂运算的过程,而且后面的call太多啦,唉没心机啦,于是像傻子一样不停的按F10~~~~忽然在4799AB处停了下来,其实这里我以前也来过几次,不过总觉得比较语句应该是cmp al,01之类的才是重要的判断,不会同2比吧,给骗了~~~这时将al改为2就完全破解啦,这完全是我无路可走才想到乱改一气的,所以说捉到死老鼠啦~~~~~呵呵

再说两句,破解真的好累,写文章就更累~~~~这是我写的第三篇,这几天都没精神啦,另外我写的可能很乱很罗嗦,请大家原谅,我文笔本来就不好,加上我写的这些都是想保留下来以后温习用的,所以写的很详细(因为我是一个新手,功力0.6级),记得我刚开始学破解时到处找教程,但几乎每个教程都那么简单,可能我人蠢吧,很多东西看不懂,所以我就将破解的过程整理后贴出来咯,希望能帮得了一些新手,也请高手指正,毕竟这些都是我自己理解的东西~~~~难免有错的~~~~谢了~~~~~~~~~~~~~

以下为核心判断的call

* Referenced by a CALL at Addresses:

|:00478C93 , :00478CA2 , :00479039 , :00479049 , :0047974C

|:00479780 , :004799A6

|

:00478A48 53 push ebx

:00478A49 56 push esi

:00478A4A 57 push edi

:00478A4B 55 push ebp

:00478A4C 8BEA mov ebp, edx

:00478A4E B202 mov dl, 02 <----dl=2 此为注册标志想办法保持这个数就行啦

:00478A50 8B7504 mov esi, dword ptr [ebp+04]<---[C60994]=252E---假密码

:00478A53 8B4804 mov ecx, dword ptr [eax+04]<---[C67F88]=1CD3---真密码

-------------------------------------------------------------------------------------------------

To:新手~~~~~~~~~~

我不知道程序将我的Name和Key作了什么运算,反正到了此处程序就拿这两个数作比较,我就称它们为真假密码吧,请留意程序并没有将密码连续放在内存中,而是分散的,它的存放是这样的[ebp(eax)]是密码的基地址,[ebp(eax)+4]是密码的值,[ebp(eax)+8]是下一个密码的基地址,程序先比较第一个密码,不等的话还会去比较第二个,这一点我就不明白啦,第一个不等就算啦嘛,为何还做下面的比较,就算后面的密码相等bl也不可能变为2呀,这是我第一次碰到的情况,所以我把它记了下来,不要说我罗嗦呀~~~~~~~~~~

-------------------------------------------------------------------------------------------------

:00478A56 3BF1 cmp esi, ecx

:00478A58 7D04 jge 00478A5E <---此处esi>ecx所以跳啦

:00478A5A 33D2 xor edx, edx <---不跳的话edx就被清为0啦

:00478A5C EB20 jmp 00478A7E

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

|:00478A58(C)

|

:00478A5E 3BF1 cmp esi, ecx <----再比不等dl就变为1啦

:00478A60 7E1C jle 00478A7E

:00478A62 B201 mov dl, 01

:00478A64 EB18 jmp 00478A7E <----一定跳啦,不过dl为1啦

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

|:00478A90(C)

|

:00478A66 8BC6 mov eax, esi <----基地址

:00478A68 8BEF mov ebp, edi

:00478A6A 8B7504 mov esi, dword ptr [ebp+04]<----第二个密码22B4

:00478A6D 8B4804 mov ecx, dword ptr [eax+04]<----211

:00478A70 3BF1 cmp esi, ecx

:00478A72 7D04 jge 00478A78 <------看~~就算相等也没用,刚才dl已经为1啦

:00478A74 33D2 xor edx, edx

:00478A76 EB06 jmp 00478A7E

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

|:00478A72(C)

|

:00478A78 3BF1 cmp esi, ecx

:00478A7A 7E02 jle 00478A7E

:00478A7C B201 mov dl, 01

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

|:00478A5C(U), :00478A60(C), :00478A64(U), :00478A76(U), :00478A7A(C)

|

:00478A7E 8B7008 mov esi, dword ptr [eax+08]<----下一个密码的基地址

:00478A81 85F6 test esi, esi

:00478A83 0F95C1 setne cl <----在Trw中此句是"setnz cl" 所以cl=1

:00478A86 8B7D08 mov edi, dword ptr [ebp+08]<----下一个密码的基地址

:00478A89 85FF test edi, edi

:00478A8B 0F95C3 setne bl <----bl=1,第二次到此bl=0下面就不跳啦共比较了四次

:00478A8E 22CB and cl, bl

:00478A90 75D4 jne 00478A66 <----在Trw中此句是jnz 所以跳了

:00478A92 8B7808 mov edi, dword ptr [eax+08]

:00478A95 85FF test edi, edi

:00478A97 0F94C1 sete cl

:00478A9A 8B7508 mov esi, dword ptr [ebp+08]

:00478A9D 85F6 test esi, esi

:00478A9F 0F95C3 setne bl

:00478AA2 22CB and cl, bl

:00478AA4 7402 je 00478AA8

:00478AA6 B201 mov dl, 01

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

|:00478AA4(C)

|

:00478AA8 85F6 test esi, esi

:00478AAA 0F94C1 sete cl

:00478AAD 85FF test edi, edi

:00478AAF 0F95C0 setne al

:00478AB2 22C8 and cl, al

:00478AB4 7402 je 00478AB8

:00478AB6 33D2 xor edx, edx

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

|:00478AB4(C)

| 上面的代码没能将dl=02

:00478AB8 8BC2 mov eax, edx <---此处edx=0所以al=0 注意ret后就是比较啦

:00478ABA 5D pop ebp

:00478ABB 5F pop edi

:00478ABC 5E pop esi

:00478ABD 5B pop ebx

:00478ABE C3 ret

=================================================================================================

:0047999A 8B45EC mov eax, dword ptr [ebp-14]

:0047999D 8945F0 mov dword ptr [ebp-10], eax

:004799A0 8B55F4 mov edx, dword ptr [ebp-0C]

:004799A3 8B45F0 mov eax, dword ptr [ebp-10]

:004799A6 E89DF0FFFF call 00478A48 <----上面的代码

:004799AB 3C02 cmp al, 02 <----呵呵~~~~~~~看下面的代码,根本没有跳转语句,跟

进后面的call找不到重点,所以说我是瞎撞的

-------------------------------------------------------------------------------------------------

在此如果将al改成02就OK啦(这里看起来很简单,当然啦这是结果,但想想之前的过程真的很恐怖,好多次想放弃啦,有耐心才会成功的,不过还要有点运气,有时按着F8就睡着啦,等你睡醒后看一眼,可能关键处就在那等左你呢~~~~~~哈哈)NAG消失,进入程序,再次运行,完全没问题,看看About没我的名字,Why??程序怎么判断我注册呢?注册表???好了,Regmon出手,程序读了HKEY_CURRENT_USER\AppEvents\precomp,好啦,试试改名,呵呵~~~~~~~出来啦,要我注册,其实程序并没有保存我的Name&Key只是如果不注册,此键值就有个标志,注册了就改为另一个标志(都不是明文,记不下来),气死我啦,把它改为Sam.com~~~~咦!!眼花了????怎么没叫我注册呢?再改为Sam Von~~~~我拷~~~还是进去了,原来程序只有一个不注册的标志,只要键值不是它就行啦,这东西注册挺贵的,不会这么儿戏吧,不过这鍵不是这么容易就能找得到的(找到也不敢乱动它吧呵呵~~~~~~~~~~~~),而且它的注册码算法很复杂(个人认为),请留意下面我提供的算法代码,注册码保护得这么好这里却~~~~~这该怎么形容呀~~~~哈哈哈哈~~~想不起~~~我语文很差的~~~~呵呵

-------------------------------------------------------------------------------------------------

:004799AD 8B4508 mov eax, dword ptr [ebp+08]

:004799B0 0F9400 sete byte ptr [eax]

:004799B3 8D45F0 lea eax, dword ptr [ebp-10]

:004799B6 E869EEFFFF call 00478824

:004799BB 8D45F4 lea eax, dword ptr [ebp-0C]

:004799BE E861EEFFFF call 00478824

:004799C3 33C0 xor eax, eax

:004799C5 5A pop edx

:004799C6 59 pop ecx

:004799C7 59 pop ecx

:004799C8 648910 mov dword ptr fs:[eax], edx

:004799CB 68E5994700 push 004799E5

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

|:004799E3(U)

|

:004799D0 8D45F8 lea eax, dword ptr [ebp-08]

:004799D3 BA02000000 mov edx, 00000002

:004799D8 E8AF9FF8FF call 0040398C

:004799DD C3 ret

以下应该是注册码算法的核心开始,想研究密码算法的请看看吧,我功力还不够~~~~~~~~~~~

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

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

|:00479592(C)

|

:0047956D 8D45F8 lea eax, dword ptr [ebp-08]

:00479570 8B55FC mov edx, dword ptr [ebp-04]<---此行运行过后d edx=>[edx]=67676767 是我输入的注册码,已变为Hex的啦

:00479573 4E dec esi

:00479574 3B72FC cmp esi, dword ptr [edx-04]

:00479577 7205 jb 0047957E

:00479579 E80697F8FF call 00402C84

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

|:00479577(C)

|

:0047957E 46 inc esi

:0047957F 0FB65432FF movzx edx, byte ptr [edx+esi-01]<---注册码第一位edx=67

:00479584 8B9495F8FBFFFF mov edx, dword ptr [ebp+4*edx-00000408]<--注意edx参与了运算我猜 它在查表,过了这行就d edx,二进制??算一算原来

是67的二进制,所以我开始怕了,这两个call我跟进 去却搞不懂,头晕啦,高手请吧

:0047958B E85CA6F8FF call 00403BEC

:00479590 46 inc esi

:00479591 4B dec ebx

:00479592 75D9 jne 0047956D

:00479594 EB12 jmp 004795A8 <---这里跳过去后应该就是算法的核心,高手研究一下吧

这段代码要运行好几次,因为注册码和姓名的每一位查表运算都要经过这里,我觉得好复杂呀,后面的代码我就不贴了,因为有很多call很难写清楚,请大家反汇编后找一找吧~~~~~~~~不说啦~~~~~~我开始眼花啦~~~~~~~

13:33 2001-3-10

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

相关文章:

·ASProtect的加密算法初步分析

·MD5算法研究

·Active Ebook Compiler的注册算法

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

·简单算法——小护士 V1.2

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

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

·加密算法之RSA算法

·加密算法之DES算法

·加密算法之ElGamal算法

相关软件:

·胜新通用人事工资管理系统 V5.01注册码算法

·胜新出纳-支票打印软件 V4.0X 的注册码算法

·胜新现代办公百宝箱 V5.01 的注册码算法

·胜新信函宝典-信封打印软件 V2.02 注册码的算法

·胜新通用企业计划管理系统的注册码算法

·共享软件加密算法库 2.5

·操作系统内存分配银行家算法模拟系统 XP

→ 特别推荐

→ 热点TOP10

关于我们 |

帮助(?)

| 广告服务 |

版权声明 |

商业合作 |

发展历程 |

加盟我们 |

联系我们

Copyright © 1999-2003

winzheng.com All Rights Reserved.

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

Powered

by:MeSky.Net

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

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

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