老文章档案 · 2003 年

破解 adbin 1.2

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

AdBin V1.2

程式猎人

简介:这个是一个上网加速的软件,它可以将你访问的网站时,可以将广告进行屏障掉,所

以这样就可以增加的上网速度。

追踪:RN:01234567

对于追踪这个软件,可是花了我几天的时间才将它追踪出来。在前几天,没有将它追踪

出来,因为这个软件在破解过程中的确有一定的难度,所以那几天没有将它追踪出来。

但是昨天我又将它拿出来进行破解,因为我昨天有一种不死不归的感觉。终于将这个软件给

破解出来了,那么现在再想一下,这个软件如果要定位的话,它应当属于中上水平。现在就

来向大家介绍如何在前几天没有将它追踪出来的情况。

:00402676 E8D6080000 call 00402F51

:0040267B A180564100 mov eax, dword ptr [00415680]

:00402680 53 push ebx

* Possible StringData Ref from Code Obj ->"VWhxVA"

|

:00402681 6852734000 push 00407352

:00402686 57 push edi

* Possible Reference to Dialog: DialogID_006C

|

:00402687 6A6C push 0000006C

:00402689 50 push eax

:0040268A E883F1FFFF call 00401812

:0040268F 83F801 cmp eax, 00000001

:00402692 0F85A8000000 jne 00402740

:00402698 8D45A4 lea eax, dword ptr [ebp-5C]

:0040269B 50 push eax

:0040269C E8DF870000 call 0040AE80

:004026A1 83F80A cmp eax, 0000000A ****

:004026A4 59 pop ecx

:004026A5 7225 jb 004026CC

:004026A7 8D45A4 lea eax, dword ptr [ebp-5C]

:004026AA 50 push eax

:004026AB E8D0870000 call 0040AE80

:004026B0 83F814 cmp eax, 00000014 ***

:004026B3 59 pop ecx

:004026B4 7716 ja 004026CC

:004026B6 8D45A4 lea eax, dword ptr [ebp-5C]

:004026B9 50 push eax

* Reference To: ABKernel.SetLic, Ord:001Dh

|

:004026BA FF1500104100 Call dword ptr [00411000]

:004026C0 6A01 push 00000001

* Reference To: ABKernel.SetEnabled, Ord:001Ch

|

:004026C2 FF151C104100 Call dword ptr [0041101C]

:004026C8 59 pop ecx

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

|:004025D4(U)

|

:004026C9 59 pop ecx

:004026CA EB74 jmp 00402740

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

|:004026A5(C), :004026B4(C)

|

:004026CC 53 push ebx

* Possible StringData Ref from Data Obj ->"Adbin"

|

:004026CD 6890414100 push 00414190

* Possible StringData Ref from Data Obj ->"The licence code you entered has "

->"been generated illegally."

|

:004026D2 6870424100 push 00414270

:004026D7 FFD6 call esi

现在我们当然是首先按正常的破解过程来破解它,这个软件在我刚刚破解时就发现了它是

一个比较特殊的注册过程。在上面就是这个软件的输入注册码后所进行的工作。在这里我们

将能得到什么呢?如果按照正常的注册比较过程的话,它在上面应当有比较的地方,但是在

这里我们将无法得到比较的地方,仅能得到的是比较你所输入注册码的位数值,在这里我们

可以轻松的得到这个软件所要求的位数,输入的注册码一定要满足A(H)<=RN<=14(H),如果

你没有满足上面的要求,程序会提示你输入的注册码不正确。我现在输入的RN:0123456789

后,程序没有出现提示了。但是我追踪后发现在这里它也仅仅是比较位数,没有进行注册码

的比较。那么这个软件就成了在开始时比较注册码方式的注册方法了。这种软件的破解关键

大于找到软件在那里进行比较的地方。于是就使用W32DASM进行反汇编,想要找到关键的比

较地方,如果要让我这么轻松就找到了,那么这个软件的难度也就无法称为中上水平了。

在W中发现了

* Possible StringData Ref from Data Obj ->"Software\Paw-Print\Adbin"

程序使用注册表选项,查找相应的选项,发现了下面比较敏感的选项。

RegistrationEval:VZYmhL4l39KA

RegistrationKey:0123456789

以我个人的经验来说,只要发现这个关键的地方就可以成功一半了。这样的软件通常在程

序中使用相应的注册键值来进行运算。我于是就在W中对RegistrationKey进行查找,大家一

定会想到了这个结果就是没有查找到。那么我没有查找到这个键值,我可以查找到你使用读

取这个键的函数,我查找读取注册表的函数,但是它没有什么用处,它也无法将引导我向成

功的彼岸,没有办法了。以上就是我前几天没有将这个软件破解出来的过程。昨天我想再尝

试一下破解这个软件,这回我得到使用前几天没有用过方法对它进行破解。

现在我们再说一些破解方面的事情,对于那种使用先输入注册码,再重新启动后进行比较

的注册过程,对于我们这些破解者来说,破解它们比破解那种直接进行注册码比较的软件增

加了一定的难度,通常就是这点难度使用那些初学者或者是掌握了一定的破解方法和技艺的

人也不好破解。对于这种软件的破解关键就是找到程序在启动时,在那个函数中对我们输入

的注册码进行比较的。我们破解者面对是几千个甚至是几万个函数,我们将如何找到它的比

较地方呢。对于不同的软件应当有着不同的破解方法,但是它有着几个相似的破解方法。那

么我在这里使用的就是过期的破解方法。

大家现在向上看,你们会发现在注册表中不仅有RegistrationKey这个键值,而且还有Reg

istrationEval这个键值,那么它有什么用处呢。我不是设计者,所以我也不知道,但是破

解经验告诉我,这个键值一定与注册有关,具体什么关系我也只有试一试才知道。于是我将

这个键值中的VZYmhL4l39KA设为空,再重新启动软件,现在软件告诉你它已经过期了。那么

这就说明它的值同注册肯定有关系,我又将它copy回注册表中,重新启动软件,它没有出现

提示过期。现在我就将这个作为我向它发起攻击的突破点。

现在调出trw,用它对这个软件进行追踪。

:0040B4A6 FF1504124100 Call dword ptr [00411204]

:0040B4AC 50 push eax

:0040B4AD E8FF7AFFFF call 00402FB1 <-出错,进入

:0040B4B2 8945A0 mov dword ptr [ebp-60], eax

:0040B4B5 50 push eax

在指出的地方出错,通常我们使用这种方法进行追踪的关键是找到能不能跳过此call的地

方,向上看没有发现,于是就进入call中。下同:

:00403035 8BCB mov ecx, ebx

:00403037 E8A0180000 call 004048DC <-出错,进入

:0040303C A10C584100 mov eax, dword ptr [0041580C]

:00404921 8BCF mov ecx, edi

:00404923 E84BC9FFFF call 00401273 <-出错,进入

:004012C9 8D8D4CFFFFFF lea ecx, dword ptr [ebp+FFFFFF4C]

:004012CF E824010000 call 004013F8 <-出错,进入

:0040152B FFD7 call edi

* Reference To: ABKernel.GetStat, Ord:0015h

:0040152D FF1514104100 Call dword ptr [00411014] <-出错,进入

:00401533 83F801 cmp eax, 00000001

:00401536 7405 je 0040153D

我来到这里就出现地址的变化,因为在通常我们的地址是004?????,而现在进入到00C???

??,这个地址中。我也是现在才明白,这时进入了程序中调用的dll程序了。那么它进入那

个dll中,上面就有答案,

* Reference To: ABKernel.GetStat, Ord:0015h

这个就是关键,它一定进入ABKernel.dll中,因为在W中可以发现程序有这样一个dll文件

。因为我使用Nu来追踪,所以当时不知道它进入了那个dll,我只知道找到比较的地方,,E

xported fn(): GetStat - Ord:0016h

:10003088 E851E0FFFF call 100010DE <-出错,进入

:1000308D A158160110 mov eax, dword ptr [10011658]

:10003092 C3 ret

进入call中如下:

:100010DE E85E1E0000 call 10002F41

:100010E3 85C0 test eax, eax

:100010E5 740E je 100010F5

:100010E7 83251416011000 and dword ptr [10011614], 00000000

:100010EE 83253416011000 and dword ptr [10011634], 00000000

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

|:100010E5(C)

|

:100010F5 E900000000 jmp 100010FA

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

|:100010F5(U)

|

:100010FA 833D3416011000 cmp dword ptr [10011634], 00000000

:10001101 750A jne 1000110D

:10001103 B920160110 mov ecx, 10011620

:10001108 E8E3410000 call 100052F0 <-出错,进入

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

|:10001101(C)

|

:1000110D 833D1416011000 cmp dword ptr [10011614], 00000000

:10001114 750A jne 10001120

:10001116 B900160110 mov ecx, 10011600

:1000111B E8D0410000 call 100052F0 <-出错,进入

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

|:10001114(C)

|

:10001120 833D3416011000 cmp dword ptr [10011634], 00000000

:10001127 740D je 10001136

:10001129 833D1416011000 cmp dword ptr [10011614], 00000000

:10001130 7404 je 10001136

:10001132 33C0 xor eax, eax

:10001134 EB03 jmp 10001139

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

|:10001127(C), :10001130(C)

|

:10001136 6A01 push 00000001

:10001138 58 pop eax

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

|:10001134(U)

|

:10001139 50 push eax

:1000113A E89B1F0000 call 100030DA

:1000113F 59 pop ecx

:10001140 C3 ret

当我追踪到上面时,我终于对自己说,这个软件可能要破解成功了。因为现在我已经能够

看到胜利的曙光了。上面有push 01;pop eax这两个命令,所以它有可能表示注册成功。现

在的工作还是进入call中

:100052F0 B8D6D50010 mov eax, 1000D5D6

:100052F5 E8EA150000 call 100068E4

:100052FA 81EC10080000 sub esp, 00000810

:10005300 56 push esi

:10005301 8BF1 mov esi, ecx

:10005303 57 push edi

:10005304 8975E8 mov dword ptr [ebp-18], esi

:10005307 833E00 cmp dword ptr [esi], 00000000

:1000530A 0F8561020000 jne 10005571

:10005310 6A01 push 00000001

:10005312 5F pop edi

:10005313 6A00 push 00000000

:10005315 893E mov dword ptr [esi], edi

:10005317 E8B0FCFFFF call 10004FCC <-出错,进入

:1000531C 85C0 test eax, eax

:1000531E 59 pop ecx

:1000531F 0F844C020000 je 10005571

:10005325 53 push ebx

上面有一个比较的地方,也是这个软件出错的地方,故进入call中。

:1000516C 8D45C0 lea eax, dword ptr [ebp-40] <-0123456789

:1000516F 50 push eax

:10005170 E83B100000 call 100061B0

:10005175 83F80A cmp eax, 0000000A

:10005178 59 pop ecx

:10005179 7213 jb 1000518E

:1000517B 8D45C0 lea eax, dword ptr [ebp-40]

:1000517E 50 push eax

:1000517F E82C100000 call 100061B0

:10005184 83F814 cmp eax, 00000014 ***

:10005187 59 pop ecx

:10005188 0F86AC000000 jbe 1000523A

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

|:10005179(C)

|

:1000518E 6A00 push 00000000

* Possible StringData Ref from Data Obj ->"Adbin Licence"

|

:10005190 6830070110 push 10010730

* Possible StringData Ref from Data Obj ->"This version of Adbin from Paw-Print "

->"Software has been tampered with."

|

:10005195 6888060110 push 10010688

* Reference To: USER32.GetActiveWindow, Ord:00DDh

|

:1000519A FF1584E10010 Call dword ptr [1000E184]

:100051A0 50 push eax

* Reference To: USER32.MessageBoxA, Ord:01BEh

|

:100051A1 FF1580E10010 Call dword ptr [1000E180]

:100051A7 C7055816011004000000 mov dword ptr [10011658], 00000004

:100051B1 EB3D jmp 100051F0

当我来这里我终于对自己说,成功一半了,为什么?你们看到没有在这里我们已经可以看

到我输入的注册码了,它开始检查注册码的位数了。同我们在输入注册码时的一样,这就说

明我已经离比较的地方不远了。向下我就应当可以发现比较的地方。

:1000523A 6A01 push 00000001

:1000523C 8D45C0 lea eax, dword ptr [ebp-40]

:1000523F 5F pop edi

:10005240 57 push edi

:10005241 50 push eax <-RN:0123456789

:10005242 E8A9FCFFFF call 10004EF0

:10005247 59 pop ecx

:10005248 59 pop ecx

:10005249 33C9 xor ecx, ecx

:1000524B 3D85050000 cmp eax, 00000585 ***

:10005250 0F9DC1 setnl cl

:10005253 41 inc ecx

:10005254 8BC1 mov eax, ecx

:10005256 3BC7 cmp eax, edi

:10005258 A358160110 mov dword ptr [10011658], eax

:1000525D 0F8586000000 jne 100052E9

:10005263 6A03 push 00000003

到达这里我就知道已经到达这个软件的比较核心了。因为这里有所有我想得到的东西,一

是RN,二是比较命令。现在的任务就是找到实际注册码了,进入call中:

:10004EF0 55 push ebp

:10004EF1 8BEC mov ebp, esp

:10004EF3 83EC28 sub esp, 00000028

:10004EF6 834DF8FF or dword ptr [ebp-08], FFFFFFFF

:10004EFA 53 push ebx

:10004EFB 56 push esi

:10004EFC 57 push edi

:10004EFD 8B7D08 mov edi, dword ptr [ebp+08]

:10004F00 33DB xor ebx, ebx

:10004F02 895DFC mov dword ptr [ebp-04], ebx

:10004F05 8A07 mov al, byte ptr [edi]

:10004F07 84C0 test al, al

:10004F09 747A je 10004F85

* Possible StringData Ref from Data Obj ->"n61O0rRxdkVHt5ZwqYUzoNDmCybcghfaMLj4liT8pQ3J2I"

->"vWP9euS7BKFGEAXs"

|

:10004F0B BEB0040110 mov esi, 100104B0

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

|:10004F83(C)

|

:10004F10 0FBEC0 movsx eax, al

:10004F13 50 push eax

:10004F14 56 push esi

:10004F15 E856130000 call 10006270

:10004F1A 59 pop ecx

:10004F1B 85C0 test eax, eax

:10004F1D 59 pop ecx

:10004F1E 0F8490000000 je 10004FB4

:10004F24 2BC3 sub eax, ebx

:10004F26 2BC6 sub eax, esi

:10004F28 48 dec eax

:10004F29 8BC8 mov ecx, eax

:10004F2B 7903 jns 10004F30

:10004F2D 83C13E add ecx, 0000003E

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

|:10004F2B(C)

|

:10004F30 8D5C0B01 lea ebx, dword ptr [ebx+ecx+01]

:10004F34 83FB3E cmp ebx, 0000003E

:10004F37 7C0A jl 10004F43

:10004F39 8BC3 mov eax, ebx

:10004F3B 6A3E push 0000003E

:10004F3D 99 cdq

:10004F3E 5B pop ebx

:10004F3F F7FB idiv ebx

:10004F41 8BDA mov ebx, edx

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

|:10004F37(C)

|

:10004F43 837DF8FF cmp dword ptr [ebp-08], FFFFFFFF

:10004F47 7505 jne 10004F4E

:10004F49 894DF8 mov dword ptr [ebp-08], ecx

:10004F4C EB10 jmp 10004F5E

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

|:10004F47(C)

|

:10004F4E 83F907 cmp ecx, 00000007

:10004F51 7F61 jg 10004FB4

:10004F53 8B45FC mov eax, dword ptr [ebp-04]

:10004F56 6BC007 imul eax, 00000007

:10004F59 03C1 add eax, ecx

:10004F5B 8945FC mov dword ptr [ebp-04], eax

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

|:10004F4C(U)

|

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

相关文章:

·ASProtect的加密算法初步分析

·MD5算法研究

·Active Ebook Compiler的注册算法

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

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

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

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

·加密算法之RSA算法

·加密算法之DES算法

·加密算法之ElGamal算法

相关软件:

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

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

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

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

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

·共享软件加密算法库 V3.0

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

→ 特别推荐

→ 热点TOP10

关于我们 |

帮助(?)

| 广告服务 |

版权声明 |

商业合作 |

发展历程 |

加盟我们 |

联系我们

Copyright © 1999-2003

winzheng.com All Rights Reserved.

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

Powered

by:MeSky.Net

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

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

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