老文章档案 · 2003 年

如何突破crackcode的25位限制

网络学院 · 破解文章 · 2003-09-19 · 作者:当当虾 · 出处:赢政天下整理收藏

1、突破crackcode的25位限制的经过

在论坛中,有一些贴子常提到crackcode存在25位的限制。可是rufeng又隐退江湖,

(江湖盛传他可能在修炼内功,准备东山再起)。于是好友豆豆虾(学过一点汇编,知道

一些常用工具的使用),凡心欲动,本意是想一一步分析,对代码原理有个总的了解。

然后再对证下药。所谓手到病除。他说如果一一分析下去,也许在作修改的时候,就不

会在一个数据结构上兜圈子,当时猜想rufeng是定义一个25位的字符数组,没有考虑到

获得的结果会超过25位的情况。 【爆破,可以采取直捣黄龙;作注册机,得看懂整个注册

码;修改代码,得看懂程序的实现原理,然后再OEM自己的思路。】

2、为什么crackcode存在25位限制(打算介绍简单些,因为它牵扯到的面比较广)

crackcode调用getthreadcontext函数,返回一个结构指针,利用其读取被跟踪

程序的寄存器(eax、edx...)中的值(这个函数的功能非常的棒)。rufeng巧妙的应用

了六个寄存器(Edi,Esi,Ebx,Edx,Ecx,Eax),返回它们注册码,一个寄存器

只能存4个字符,所以6*4=24,确切的说,crackcode取到的字符长度不能超过24个。

比如EAX=44324432--->储存"D2D2"四个字符。

3、如何突破它的限制??

如果把程序通读一遍,似乎发现没有办法去突破这个限制,因为这是设计上的

失误。如果细细去琢磨crackcode,会发现它两次调用getthreadcontext函数。其实第

一次的时候,就可以得到要读取注册码的地址。根据crackcode.ini中Save_Code_Address

的值,对应寄存器储存的值。为什么crackcode要去两次调用getthreadcontext函数,其中

的奥秘,把程序认认真真的通读几遍(读到凌晨4点,窗外一片寂寂。在路灯下,几个清洁

工的身影,默默无闻的清洗大地,在我们匆匆来往的街道,还以清爽的感觉。)

好了!上面既然第一次调用的时候,已经能确定注册码的位置,何不拿它示问。于是可以

调用ReadProcessMemory,把注册码得到。

4、修改程序(代码修改位置401448---40149B)

我这有豆豆虾修改时的草稿:

=========判断save_code_address需要读取的寄存器===========

----deal with ebp----

mov ebx,40a64c -------crackcode对save_code_address处理后存放的地址

mov ecx,40a1cc

mov al,byte ptr [ebx]

cmp al,0f5 -------为什么要进行这样比较,crackcode代码分享笔记(三)中

有讲述。我把相关的部分放在附录中。

je final

----deal with eax----

sub ecx,4

cmp al,0f0

je final

----deal with ecx----

sub ecx,4

cmp al,0f1

je final

----deal with edx----

sub ecx,4

cmp al,0f2

je final

----deal with ebx----

sub ecx,4

cmp al,0f3

je final

----deal with esi----

sub ecx,4

cmp al,090

je final

----deal with edi----

sub ecx,4

//cmp al,0f7

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

==========以下为从内存中读取注册码,并显示========

final:

---deal with mem---

push 0

push 28 //size

push 409B80 //buffer ======缓冲区

push d,[ecx] //baseaddr ======存放注册码的地址。

push d,[40a410] //hprocess

call d,[405024] ====调用ReadProcessMemory.从存放注册码的地址读入缓冲区

---deal with mem---

display:

mov ebx,409B80 ===显示缓冲区

jmp 40149c

结束语:所有的人都恐惧孤独,但唯有在孤独之中,我们才能学会了解自己,学习如何处理

我们自己永恒的孤独。 :)

【爆破,可以采取直捣黄龙;作注册机,得看懂整个注册码;

修改代码,得看懂程序的实现原理,然后再OEM自己的思路。】

附录:

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

|

:004011A7 68AC614000 push 004061AC

:004011AC 56 push esi --》"Save_Code_Address"

:004011AD E81E080000 call 004019D0

:004011B2 59 pop ecx

:004011B3 85C0 test eax, eax

:004011B5 59 pop ecx

:004011B6 7511 jne 004011C9

:004011B8 C605609740008B mov byte ptr [00409760], 8B

:004011BF C7054CA64000F0909090 mov dword ptr [0040A64C], 909090F0

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

|:004011B6(C)

|

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

|

:004011C9 68A8614000 push 004061A8

:004011CE 56 push esi

:004011CF E8FC070000 call 004019D0

:004011D4 59 pop ecx

:004011D5 85C0 test eax, eax

:004011D7 59 pop ecx

:004011D8 7511 jne 004011EB

:004011DA C605609740008B mov byte ptr [00409760], 8B

:004011E1 C7054CA64000F3909090 mov dword ptr [0040A64C], 909090F3

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

|:004011D8(C)

|

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

|

:004011EB 68A4614000 push 004061A4

:004011F0 56 push esi

:004011F1 E8DA070000 call 004019D0

:004011F6 59 pop ecx

:004011F7 85C0 test eax, eax

:004011F9 59 pop ecx

:004011FA 7511 jne 0040120D

:004011FC C605609740008B mov byte ptr [00409760], 8B

:00401203 C7054CA64000F1909090 mov dword ptr [0040A64C], 909090F1

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

|:004011FA(C)

|

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

|

:0040120D 68A0614000 push 004061A0

:00401212 56 push esi

:00401213 E8B8070000 call 004019D0

:00401218 59 pop ecx

:00401219 85C0 test eax, eax

:0040121B 59 pop ecx

:0040121C 7511 jne 0040122F

:0040121E C605609740008B mov byte ptr [00409760], 8B

:00401225 C7054CA64000F2909090 mov dword ptr [0040A64C], 909090F2

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

|:0040121C(C)

|

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

|

:0040122F 689C614000 push 0040619C

:00401234 56 push esi

:00401235 E896070000 call 004019D0

:0040123A 59 pop ecx

:0040123B 85C0 test eax, eax

:0040123D 59 pop ecx

:0040123E 7511 jne 00401251

:00401240 C605609740008B mov byte ptr [00409760], 8B

:00401247 C7054CA64000F7909090 mov dword ptr [0040A64C], 909090F7

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

|:0040123E(C)

|

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

|

:00401251 6898614000 push 00406198

:00401256 56 push esi

:00401257 E874070000 call 004019D0

:0040125C 59 pop ecx

:0040125D 85C0 test eax, eax

:0040125F 59 pop ecx

:00401260 7511 jne 00401273

:00401262 C6056097400090 mov byte ptr [00409760], 90

:00401269 C7054CA6400090909090 mov dword ptr [0040A64C], 90909090

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

|:00401260(C)

|

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

|

:00401273 6894614000 push 00406194

:00401278 56 push esi

:00401279 E852070000 call 004019D0

:0040127E 59 pop ecx

:0040127F 85C0 test eax, eax

:00401281 59 pop ecx

:00401282 7511 jne 00401295

:00401284 C605609740008B mov byte ptr [00409760], 8B

:0040128B C7054CA64000F5909090 mov dword ptr [0040A64C], 909090F5

====以上程序是对处理Save_Code_Address不同值,做相应的处理======

相当于

switch( Save_Code_Address )

{

case 'EAX':

code1=8B;

code2=909090F0;

break;

case 'EBX':

code1=8B;

code2=909090F0;

break;

case 'EC':

code1=8B;

code2=909090F0;

break;

case 'EDX':

code1=8B;

code2=909090F0;

break;

case 'EDI':

code1=8B;

code2=909090F0;

break;

case 'ESI':

code1=90;

code2=909090F0;

break;

case 'EBP':

code1=8B;

code2=909090F0;

break;

}

相关资讯:

·Tornado2之Licence暴力破解

·万能五笔2001注册码分析及暴力破解

·万能五笔2001注册码分析及暴力破解

·万能五笔2001注册码分析及暴力破解 ---可怜的思考者 (27千字)

·一个拨号软件的Win32Dasm暴力破解法

·CuteFTP V4.2.4之暴力破解

相关软件:

→ 特别推荐

→ 热点TOP10

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

关于我们 |

帮助(?)|

广告服务 |

版权声明 |

商业合作 |

发展历程 |

加盟我们 |

联系我们

Copyright (C) 1998-2004 winzheng.com All Rights Reserved.

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

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

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

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