作者:ru feng
第一章 如何成为一个Cracker
要成为一个Cracker,首先要有一定的汇编语言的知识,并且有一定的软件和硬件的知识,手头上有一种以上的调试软件,如debug或softice等等。其次就是要有一些辅助工具如pctools,unp,ultraedit32等等。如果你已经具备了以上的条件,那么你就有可能成为一位Cracker了。但如果你还什么都不会,那么你就得对以下的文章认真阅读了,这会使你对Crack有深入的了解,为你成为一位名符其实的[被屏蔽的不受欢迎关键词]高shou垫定基础。
对于不熟悉汇编语言的你,必须要知道一些组合语言,以下是本人常用到的:
cmp xx,yy 比较xx与yy
int ? 中断调用
inc xx 将xx中的值加一
dec xx 将xx中的值减一
loop 回圈
mov xx,yy 把yy的值搬到xx中
ret 反回主程序
nop 无动作
call 呼叫附程式
jz 若相等则跳跃
jnz 若不相等则跳跃
jmp 无条件跳跃
jb 若小于则跳跃
ja 若大于则跳跃
jg 若大于则跳跃
jge 若大于等于则跳跃
jl 若小于则跳跃
jle 若小于等于则跳跃
pop 弹出栈
push 压入栈
lea 装有效地址
lds 装DS段值及地址
les 装ES段值及地址
以上这些组合语言,必须要牢牢掌握,最好就是手头上有一本80x86汇编语言的书,当crack软件时可作参考,因为组合语言的指令太多,不容易完全掌握,而且对于一个初学者来说,也没有必要完全掌握这些指令,大家都知道汇编语言不是一门很容易学的语言,所以如果你不是执意成为一位顶尖[被屏蔽的不受欢迎关键词]高shou的话,就可以不必浪费时间在这方面了。但话也说回来,本人还是希望有志者,能够在此下一翻苦工,因为对汇编语言的掌握越深越能提高你的破解技能和成功率。
第二章 破解软件的基础
首先,我们必须有一个破解软件的调试平台,广泛使用的一般是winsoft-ice3.0这个软件,老版了,但使用中并没有觉得有什么的区别,所以我们还是以3.0版本为例,来说明是如何用它来破解软件的。
硬件要求:
以下是这个软件的简单介绍:
运行该软件的setup.exe,接着它会要求你输入名字,公司,注册码等等,输完后,就会就你选择你的显示卡的型号,选择完成后,你就可以Test一下你的显示卡的驱动程序是否合适,都满意后,就可以进行安装了。
安装完成后,重启机器后,就可以按Ctrl-D试一下是否可以进入winsoft-ice3.0的窗口,如果可以的话,就表示winsoft-ice3.0安装成功了。以下是winsoft-ice3.0中部分常用命令:
设置中断点
BPM,BPMB,BPMW,BPMD -在存储器地址被访问时引发中断
BPR -在存储器范围内设置中断点
BPIO -对I/O端口访问时中断
BPINT -呼叫INT中断时中断
BPX -设置/清除执行中断点
BMSG -设置Windows消息中断
BSTAT -断点统计表
CSIP -设置CS:EIP限定范围
处理中断点
BPE -编辑断点
BPT -把断点当模板
BL -列出当前断点
BC -清除断点
BD -关闭断点
BH -断点历史 显示/更改存储器
R -显示/更改寄存器
U -反译汇编指信令
D,DB,DW,DD,DS,DL,DT -显示存储器
E,EB,EW,ED,ES,EL,ET -编辑存储器
PEEK -从物理地址读取
POKE -写向物理地址
H -函数功能的帮助说明
? -评价表达式
VER -SoftICE版本号说明
WATCH -添加监视点
FORMAT -更改数据窗口的格式
DATA -更改数据窗口
显示系统信息
GDT -显示共用的描述符表格
LDT -显示局部的描述符表格
IDT -显示中断的描述符表格
TSS -显示任务状态段
CPU -显示cpu登记信息
PCI -显示PCI设备信息
MOD -显示windows模块表格
HEAP -显示windows共用的堆
LHEAP -显示windows局部的堆
VXD -显示windows的VxD图
TASK -显示windows任务表格 VCALL -显示VxD的调用
WMSG -显示windows消息
PAGE -显示记录表格信息
PHYS -显示所有虚拟的地址为物理地址
STACK -显示堆栈的调用
XFRAME -显示活跃的异常帧
MAPV86 -显示v86内存图
HWND -显示窗口句柄信息
CLASS -显示窗口类信息
VM -显示虚机信息
THREAD -显示线索信息
ADDR -显示/更改上下文地址
MAP32 -显示32位区域图
PROC -显示过程信息
QUERY -显示虚拟地址程序的位置图
WHAT -标识表达式的样式
I/O端口命令
I,IB,IW,ID -从I/O端口输入数据
O,OB,OW,OD -向I/O端口输出数据
流程控制命令
X -返回到主机调试程序或程序
G -执行到地址
T -单步执行指令
P -单步跳过CALLS,Int,等等
HERE -执行到当前光标行 EXIT -强制退出向当前DOS/Windows程序
GENINT -生成中断
HBOOT -系统引导(总复位)
方式控制
I1HERE -向SoftICE直接设置INT1
I3HERE -向SoftICE直接设置INT3
ZAP -快速插入INT1或INT3
FAULTS -激活/关闭SoftICE错误中断
SET -更改内部变量
定制命令
PAUSE -控制显示滚动方式
ALTKEY -向调用窗口设置键的顺序
FKEY -显示/设置功能键
DEX -显示/分配窗口数据表达式
CODE -显示在代码窗口代码指令
COLOR -显示/设置屏幕彩色
ANSWER -自动回答和重新传送控制台到调制解调器
DIAL -重新传送控制台到调制解调器
SERIAL -重新传送控制台
TABS -设置/显示键的设置
LINES -设置/显示在屏幕上线的数目
PRN -设置列表机输出端口
PRINT-SCREEN key -向列表机传送屏幕内容
MACRO -定义被指定的宏命令
实用命令 A -汇编代码
S -搜索数据
F -把数据填入存储器
M -移动数据
C -比较两数据区域
行编辑键用法
-恢复前一命令行
-恢复下一命令行
-光标右移
-光标左移
BKSP -退到字符末尾
HOME -开始行
END -结束行
INS -切换插入模式
DEL -删除字符
ESC -撤销当前命令
滚动键的用法
PageUp - Display previous page of display history
PageDn - Display next page of display history
Alt-_ - Scroll data window down one line
Alt-_ - Scroll data window up one line
Alt-PageUp - Scroll data window down one page
Alt-PageDn - Scroll data window up one page
Ctrl-PageUp - Scroll code window down one page
Ctrl-PageDn - Scroll code window up one page Ctrl-_ - Scroll code window down one line
Ctrl-_ - Scroll code window up one line
窗口命令
WC - 切换到代码窗
WD - 切换到数据窗
WF - 切换到浮点堆栈窗
WL - 切换到局部窗
WR - 切换到寄存器窗
WW - 切换到监视窗
EC - 激活/关闭代码窗
. - 当前指令定位
窗口控制
CLS - 清屏
RS - 恢复程序显示
ALTSCR - Change to alternate display
FLASH - Restore screen during P and T
符号/代码命令
SYM - 显示符号
SYMLOC - Relocate symbol base
EXP - 显示导出符号
SRC - Toggle between source, mixed & code
TABLE - Select/remove symbol table
FILE - Change/display current source file
SS - Search source module for string
TYPES - List all types, or display type definition LOCALS - Display locals currently in scope
BACK TRACE COMMANDS
SHOW - Display from backtrace buffer
TRACE - Enter back trace simulation mode
XT - Step in trace simulation mode
XP - Program step in trace simulation mode
XG - Go to address in trace simulation mode
XRSET - Reset back trace history buffer
SPECIAL OPERATORS
. - Preceding a decimal number specifies a line number
$ - Preceding an address specifies SEGMENT addressing
# - Preceding an address specifies SELECTOR addressing
@ - Preceding an address specifies indirection
还有一些最常用的功能键:
F1 = "H;"
F2 = "^WR;"
F3 = "^SRC;"
F4 = "^RS;"
F5 = "^X;"
F6 = "^EC;"
F7 = "^HERE;"
F8 = "^T;"
F9 = "^BPX;"
F10 = "^P;"
F11 = "^G @SS:ESP;" F12 = "^DATA;"
以上这些命令和功能键,每一个Cracker都必须熟记,因为这些是在crack软件时用到的。Winsoft-ice 中断於开视窗有以下几种方法:
bpx createwindow
bpx createwindowex
bpx dialogbox
bpx dialogboxparam
bpx createdialogindirect
bpx dialogboxindirect
bpx createdialogparam
bpx createdialogparamparam
bpx getdlgitemtexta
bpx getwindowtwxta
熟悉这些windows 98的开窗方法,对于一些特定的软件破解,有一些意想不到的收获。其次,我们需要有一种用于修改文件的软件,在这里我们向大家推荐ultraedit32这个软件,它支持32位长文件,支持长文件名,支持windows 98上改文件,它具有pctools的功能,相当好用。
第三章 破解windows 98软件的方法
一.可注册 windows 98软体.
特徵是当未注册时, 一进去会有延迟画面, 可能有时效限制(30天後不能用之类),在某个地方有个注册功能, 打开之後是个对话框, 要求输入密码, 有时还有姓名和公司名称.
程式如何判断注册与否?
通常两种方式:
1. 在程式码的某一处, 藏有 "注册印记". 如00表未注册, 01为已注册. 当然也有很奇怪的数字, 如 f8 03 表已注册.
2. install 时程式开 *.ini, 或写入 win.ini, 把资料存在那里.
程式如何保护:
最通常是用你的name当作key, 经过复杂演算法, 算出注册码。但也有一些并不是用你的name当作key算注册码的,而是name与注册码无关,注册码是固定,name是随便输入就可以了。对于前者,较容易可算出注册码,而后者要算注册码就不是一件容易的事了。关于两者的具体处理方法,会在下面文章详细介绍。
注册处理:
1. 当输入name, company, password 後, 立即比对, 正确的话立即做注册处理, 以後再也不判断, 不正确要求再输入. 不输入 name 的话, 保持 shareware 版.
2. 同1, 但以後一执行程式还是会判断.
3. 输入时不比对, 只写入资料於 *.ini, 程式执行时再比对.
对于第一种情况,是最容易破解的了,因为只要找到软件注册时的比较失败窗口的call,在向上找一找,就可以找到一个可以跳过这个call的jz或jnz,只要把这个jz改为jmp,就可以随便注册了,因为它们的只进行一次性的比较,所以只要在注册时强行使它们注册成功,则以后就不用管了。
它们的一般形式为:
xxxx:xxxxxxxx call 比较注册码的call
xxxx:xxxxxxxx test eax , eax
xxxx:xxxxxxxx jnz (或jz) xxxxxxxx 只要把这个jnz 改为jmp 就可以了
:
:
xxxx:xxxxxxxx call 比较失败的窗口的call
对于第二,第三种情况,就不能这么简单地破解了,而要追进比较注册码的call里去,如果可以算出注册码的,就万事大吉了,如果不能,就比较地麻烦了,只有按下面介绍的方法进行crack了,要知软件始终不是你写的,所以不可能所有的软件都可以crack的,只能各凭功力了。对于不能简单地算出注册码的软件,我们的唯一的方法是先在比较注册码的call里,设一个断点,然后再重新运行软件,如果软件被中断的,那么这个软件就有八成可以破解了,只要在比较注册码的call里找到那些jz或jnz会导致eax的值变化,把这些指令改为nop或jmp(视具体情况而定),则一般都可以迎韧而解了。
对于第一种情况的破解实例:
Hex32bit
这是一个多功能的编辑软件,有很强大的功能,是一个很好用的32位工具软件。
1.输入Registeration code:48484848(随意)
2.按CTRL-D 进入WIN S-ICE
3.下S 30:0 LFFFFFFF '48484848' 得一地址30:XXXXXXXX
4.下BPM 30:XXXXXXXX R
5.按F5 退出
6.用鼠标击Register
7.程序被WIN S-ICE 中断
8.按F12回到Hworks32的天空
9.直按F10至以下程式:
0137:0041635F CALL 00426A70 比较密码的CALL
0137:00416364 ADD ESP , 04
0137:00416367 MOV [EBP-10] , EAX
0137:0041636A CMP DWORD PTR [ EBP-10 ] , 00
0137:0041636E JZ 004163ED 错误时跳,只要改为nop…………就OK了
:
:
0137:004163E8 JMP 00416440
:
:
0137:0041640D CALL 004354EE 出现注册失败窗口的CALL
所以下code on 抄下机器代码,打开Hworks32.exe
找0f8479000000
改909090909090
OK!!!完工。
对于第二种情况的破解实例:
FLMASK3.00
1. 用WINSOFT-ICE载入FLMASK32.EXE
2. 输入Your Name :broodfusion(随意)
Registration Key : 48484848(随意)
3. 按CTRL-D进入WINSOFT-ICE ,下S 30:0 LFFFFFFFF '48484848'得一地址30:XXXX
4. 下BPM 30:XXXX R
5. 按F5退出
6. 确定Registration
7. 程序被WINSOFT-ICE中断
8. 按F12跳到FLMASK32的天空
9. 按F10直到以下程式:
0137:00452D1F CALL 00443118 比较注册码CALL
0137:00452D24 TEST AL , AL
0137:00452D24 JZ 00452E89 不正确时就跳
:
:
0137:00452E89 MOV DX , 0030
0137:00452E8D MOV EAX , 00001CFC
0137:00452E92 CALL 00443A54 出现错误窗口
10. 所以我们追进0137:00452D1F CALL 00443118中去
一直走下支会见到以下程式:
0137:00443145 CALL 00403BCC
0137:0044314A CMP EAX , 08 比较注册码是否8个数字
0137:0044314D JNZ 00443209 不等则跳,跳就失败
:
:
0137:004431BF CALL 004076A4 比较注册码是否正确
0137:004431BF CMP ESI , EAX
0137:004431C6 JNZ 00443209 不正确则跳
所以由汇编知识可知,只要把CMP ESI,EAX改为MOV EAX,ESI
把JNZ 00443209 改为NOP NOP
把JNZ 00443209 改为NOP NOP
则随意输入数字都可以注册了。
赶快下CODE ON指令抄下程序代码:
码0F85B6000000
改909090909090
码3BF07541
改8BC69090
用ULTRAEDIT32改FLMASK32.EXE就行了。
对于第三种情况的破解实例:
winzip6.3
1. 输入Name:broodfusion(随意)
2. 输入Registeration:48484848(随意)
3. 按CTRL—D 进入WIN S-ICE
4. 下S 30:0 LFFFFFFF '48484848' 得一地址30:XXXXXXXX
5. 下BPM 30:XXXXXXXX R
6. 按F5 退出
7. 用鼠标击Ok
8. 程序被WIN S-ICE 中断
9. 按F12回到WINZIP的天空
10. 直按F10至以下程式:
0137:00409D89 CALL 004096EA 比较注册码的CALL
0137:00409D8E TEST EAX,EAX 注册码不正确时EAX=00000000
0137:00409D90 JNZ 00409DD3 当注册码正确就跳
:
:
0137:00409DA8 CALL 004230FD 弹出注册失败的窗口
11.追进CALL 004096EA 按F10一直走,会见到以下程式
0137:004097FC PUSH EAX
0137:004097FD CALL 004465D0 比较注册码的CALL
0137:00409802 POP ECX
0137:00409803 POP ECX
0137:00409804 NEG EAX
0137:00409806 SBB EAX,EAX
0137:00409808 INC EAX
0137:00409809 MOV [004728F8],EAX 当EAX=00000001时注册码正确
0137:0040980E CMP DWORD PTR [004728F8] , 00
0137:00409815 JNZ 004098A6 正确时跳
12.追进CALL 004465D0 按F10一直走,会见到以下程式
0137:004465EC OR AL,AL
0137:004465EE JZ 0044661E
0137:004465F0 MOV AL,[ESI] 在此下D DS:ESI可看到所填写的注册码‘48484848’
0137:004465F2 INC ESI
0137:004465F3 MOV AH,[EDI] 在此下D DS:EDI 可看到正确的注册码‘8A0A07ab’
0137:004465F5 INC EDI
0137:004465F6 CMP AH,AL 比较注册码地方
0137:004465F8 JZ 004465EC
你用Ru Feng作名字可找到‘8A0A07ab’这组注册码。
而对于那些注册码是固定的软件,破解就不是那么有规律了,只能各凭技巧了,具体情况具体分析了。
例:
winplay3 2.0
1. 输入Your Name:broodfusion(随意)
2. 输入Registeration code:48484848(随意)
3. 按CTRL—D 进入WIN S-ICE
4. 下S 30:0 LFFFFFFF '48484848' 得一地址30:XXXXXXXX
5. 下BPM 30:XXXXXXXX R
6. 按F5 退出
7. 用鼠标击Register
8. 程序被WIN S-ICE 中断
9. 按F12回到WINPLAY3的天空
10. 直按F10至以下程式:
2C6F:XXXX CALL 2F17: 3D72 比较注册码
2C6F:XXXX OR DX,AX
2C6F:XXXX JNZ C632 不跳则显示成功窗口
至
2C6F:C632 PUSH 21
2C6F:C634 PUSH 0000FFFF
2C6F:C63A CALL 2C6F: 22AE 出现错误窗口
11. 按F8追进去CALL 2F17: 3D72
至
2F17:3E76 CALL 2F17: 357E
再追进去
至
2F17:35C6 PUSH DWORD PTR [BP+06]
2F17:35CA CALL 2F17: 340E
追进去至以下比较程式:
2F17:346F XOR AX,AX
REPNZ SCASB
NOT CX
DEC CX
CMP CX,12 表示正确注册码有18个数字
JNZ 3554 不等就跳,一跳就完了,所以改为四个NOP。
CMP BYTE PTR ES:[SI+06], 2D 说明正确注册码的格式为:
XXXXXX-XXXXXX-XXXX
JNZ 354E 不等就跳,一跳就完了,所以改为四个NOP。
CMP BYTE PTR ES:[SI+0D],2D
JNZ 354E 不等就跳,一跳就完了,所以改为四个NOP。
…………….
…………….
CALL 30F7: 25C0 比较注册码
ADD SP , 02
CMP AX , SI
JZ 34F6 相等就跳,所以改为JMP 34F6
……………..
……………..
CALL 30F7: 25C0
ADD SP , 02
MOV SI , AX
CMP SI, [1D36]
JGE 3522 跳则正确,不跳则错误,所以改为JMP 3522
…………….
…………….
12. 下CODE ON 把所有要改的机器码都抄下来,用ULTRAEDIT32在L3AUDIO.DLL中
修改。
机器码 改
0F85D700 90909090
0F85C800 90909090
0F85BF00 90909090
83C4023BC67406 83C4023BC6EB06
8BF03B36361D7D06 8BF03B36361D7D06
多谢版主提醒要不就捅娄子了:o ,这是个转贴
[
本帖最后由 broodfusion 于 2007-1-25 01:53 编辑 ]