📄 windows-crack
字号:
这个破解教程的英文版以前已经post过了,我一直想找到它的中文翻译,
这个是在sjtubbs找到的。
========================================================================
ED!SON'sWindows95拆解教程V1.oo(中文翻译:JIMTYAN)
========================================================================
目录
========
1.Windows拆解简介
2.SoftICEforwindows2.oo快速入门
3.如何找注册码
3.1TaskLock3.00-一个简单的、仅有注册号保护的拆解例子
3.2CommandLine95-容易的“用户名/注册号”注册方式的拆解4.为Command
Line95制作注册器5.当程序调用一个函数时,PUSH和CALL这些指令是如何工作的6.
关于VB程序
附录
========
A.如何让SOFTICE载入符号
B.函数的语法
C.到哪里获取软件
D.如何与我联系
1.WINDOWS拆解简介
===================================
拆解一个WINDOWS程序要比拆解一个在DOS下运行的程序要容易得多。因为在WINDOWS
中,只要WINDOWS的函数被使用了,想对任何真正要寻找蛛丝马迹的人隐藏什么东西
是比较困难的。
你需要的第一个(常常也是唯一的一个)工具就是SoftICE/Win2.oo,它是NuMega
出品的一个非常强大的调试工具。有些人发现它很难用,但我会教你如何使用它进行
有效的调试,也希望你们能够明白我将要告诉你们的:-)。你应该看看在附录A中有
关SoftICE/Win2.oo的一些资料。我在安装SoftICE中从来没有碰到任何问题,如果
你碰到了,我只好让你查它的参考手册了。
你所需要的所有软件的URL列在附录C中
-ED!SON,edison@ccnux.utm.my
2.SOFTICE/WIN2.OO快速入门
=========================================
首先你应该对SOFTICE的屏幕有个大概的了解
|--------------------|
|寄存器窗|用'R'编辑
|--------------------|
|数据窗|用'D'列出某个地址的数据,用'E'编辑
|--------------------||代码窗|用'U'反汇编,'A'加入汇编代码
|--------------------||命令窗|在这里输入命令和读出结果
|--------------------|
其它重要的功能键(在缺省的键定义下)
'H'/F1-在线帮助
F5/Ctr+D-运行
F8-单步执行,切入子程序和中断
F10-单步执行,跳过子程序和中断
F11-跳出子程序,回到CALL的下一条指令
3.如何寻找注册码
=============================
最容易的练习莫过于找个共享软件来试试把它注册。
3.1TaskLock3.00-一个简单的、仅有注册号保护的拆解例子
=================================================================
这是一个简单的保护,只有一个而且不会变化的注册码。
3.1.1检查程序
===========================
它是16bit程序,还是32bit的?在哪里输入注册信息?在它的帮助里有没有
发现关于注册的一些线索?在你继续往下读之前,去把它们找一找!
....你现在应该在找吧!.....你是在找吗?.....你找到了吗?.......
好,你现在知道了,它是一个32位的WINDOWS95应用程序,你可以在一个选择了
“Register|Register...”菜单就会弹出来的对话框中,输入一个注册码来注册
程序。通过阅读它的帮助,你也知道可以有两种注册方式:Individual和Site
License。所以这里对合法的注册码就可能有两次核对。
3.1.2捕捉注册代码
===========================
注册码通常在普通的WINDOWS文字框中输入。为了检查输入的注册码,程序必须
采用下面这些函数中的一个来把文字框中的内容读出来。
16-bit32-bit
------------
GetWindowTextGetWindowTextA,GetWindowTextW
GetDlgItemTextGetDlgItemTextA,GetDlgItemTextW
32-BIT函数的最后一个字母告诉我们函数是使用单字节还是双字节字符串。双字
节的注册码是很少见的。
也许你已经体会到我的意思了...“如果我能在GetWindowText时中断...”,你
的确能这样做!但是你首先必须确认这些符号已经由SOFTICE载入了(详见附录A)
在SoftICE中设定一个“陷阱”(实际上我们叫断点),你得先按Ctrl+D进入调
试状态,然后用命令BPX,后面跟着是函数的名字或者内存地址。因为TaskLock
是32位程序,所以我们在GetWindowTextA处设一个断点。如果这个不行,我们
可以再试其它的。
象这样在SoftICE中输入:
:bpxgetwindowtexta
如果你得到“NoLDT”这样的错误信息,就要注意不要运行其它程序。我已经注
意到NortonCommander/Dos会干扰这个功能。你可以列出所有断点来检查一下
是否设好断点:
:bl
你会看到这样的信息:
00)BPXUSER32!GetWindowTextAC=01
你可以再按一次Ctrl+D,从SoftICE中退出,。
好了,不管怎么样,你已经设定好了断点以捕捉任何对GetWinowTextA的调用。
现在我们来在该输入注册码的地方输入一些数字,然后按下OK....你只得到了
一个信息框告诉你输入的注册码是无效的。看来不是GetWindowTextA....我们
来试试GetDlgItemTextA。首先删除旧的断点:
:bc0
(0表示在断点列表中的第0个断点)
然后设定新的断点:
:bpxgetdlgitemtexta
再来试一次.....
3.1.3在调试器中
=====================
哇!行了!你已经在SoftICE中了,就在函数GetDlgItemTextA开始的地方。按
F11键,回到调用函数的地方。现在你到了SGLSET.EXE的内部,如果你还没把握
的话,看看代码窗和数据窗中间的一行,你应该看到这样的东西:
----------SGLSET!.text+1B13----------
你可以这样禁止一个断点:
:bd0
以后想再开启它的话,可以这样:
:be0
代码窗的第一行是:
CALL[USER32!GetDlgItemTextA]
按几次Ctrl+Up直到你看到下面这几行。如果对汇编一点也不懂的话,看我加的注解吧:
RET;函数结束
PUSHEBP;函数开始
MOVEBP,ESP
SUBESP,0000009C
PUSHESI
>LEAEAX,[EBP-34];EAX=EBP-34
PUSHEDI
MOVEESI,ECX
PUSH32;输入字符串的最大长度
>PUSHEAX;输入字符串的缓冲地址
PUSH000003F4;控制标识
PUSHDWORDPTR[ESI+1C];对话框的句柄
CALL[USER32!GetDlgItemTextA];取得输入
PUSH指令保存那些数值以供后面使用。我已经在重要的地方加上了一个'>'字符
作上记号.看这几行我们就知道字符缓冲区的地址保存在EAX中,而EAX等于EBP-34。
所以我们来看看EBP-34那里有什么:
:debp-3
你应该能在数据窗中看到你输入的东西。下面我们得来找开始核对输入注册码的
地方。按F10一步一步地单步运行直到你发现与EBP-34有点关系的地方....你不
用单步运行多久,就会看到这些代码:
>LEAEAX,[EBP+FFFFFF64];EAX=EBP-9C
LEAECX,[EBP-34];ECX=EBP-34
PUSHEAX;保存EAX
PUSHECX;保存ECX
>CALL00403DD0;Call一子程序
ADDESP,08;删除保存的信息
TESTEAX,EAX;检查返回值
JNZ00402BC0;如果不是零的话跳转
对我来说,马上就可以看出这象是一个字符比较程序。它们工作起来就是这样:
*输入两个字符串
如果相同就返回零
否则返回非零
那为什么程序要用一个字符串来和你输入的相比较呢?看它是不是合法的!(可
能你已经想到了)。那么是什么东西躲在[EBP+FFFFFF64]?SoftICE处理负数
还不是很好,所以得算算:
100000000-FFFFFF64=9C
在SoftICE用这样的命令:
:?0-FFFFFF64
100000000对SoftICE来说太大了,但它还是给出了相同的结果。
现在是...来看看什么东西躲在EBP-9C那里的时候了...这样输入命令:
:debp-9c
数据窗口会显示出一大排数字—注册码!但是记住我前面说过的...两种注册
方式对应两个注册码....所以你把这些注册码抄下来以后,继续用F10单步运行
....我们会遇到这些代码:
>LEAEAX,[EBP-68];EAX=EBP-68
LEAECX,[EBP-34];ECX=EBP-34
PUSHEAX;保存EAX
PUSHECX;保存ECX
>CALL00403DD0;再次调用子程序
ADDESP,08;删除保存的信息
TESTEAX,EAX;检查返回结果
JNZ00402BFF;如果非零跳转
你在EBP-68处找到了什么?不错吧...另一个注册码。
:debp-68
我们的练习结束了,希望一切顺利。
3.2CommandLine95-容易的用户名/注册码方式的注册、注册器
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -