PersonalCorpus 版 (精华区)
发信人: CF (网事随风), 信区: Hacker
标 题: tKC的破解教程(一)
发信站: 哈工大紫丁香 (2000年09月18日09:49:01 星期一), 站内信件
Sun Bird
http://sunbirdsoftware.abc.yesite.com
应大家地要求,我决定写这个如何破解Windows程序的教程,但是这次我将教你使用
W32Dasm。我不会告诉你很多的破解细节,但会帮助你掌握破解的技巧。
当使用W32Dasm时,它不会给你注册码或序列号,它将指出在哪里以及如何修改(Patch)软
件以便你能够随意输入注册码。这正是我每次破解软件时所做的,这个教程将告诉你每一步
我是如何做的。
抱歉有很多语法错误,我希望你能够看得懂。
工具软件:
你需要以下的工具软件(我使用这些工具软件,我假设你也将使用它们):
W32Dasm 8.5或更高的版本
Hacker’s View 5.24
Norton Commander或Windows Commander(我将在后面解释为什么使用它)
Turbo Pascal 7.0
TASM和TLINK 3.0
当你向任何Cracker求助时,他们都会乐于提供你这些工具软件:-)
目录:
1)如何破解Quick View Plus 4.0
2)如何破解HEX WorkShop 2.51
3)如何制做你自己的补丁(patchers)
第一部分:Quick View Plus 4.0
运行ORDER32.EXE
单击$49 Single User License(当然你也可以单击$59)、ACCEPT、UNLOCK BY PHONE
随便输入注册码以得到错误信息(你需要写下这些信息),单击CANCEL退出软件
运行Norton Commander,进入QVP路径
将ORDER32.EXE复制为ORDER32.EXX(留作备份),将ORDER32.EXE复制为1.EXE(给W32Dasm
用)
运行W32Dasm,反编译1.EXE
当反编译完成后,单击STRING DATA REFERENCE,向下寻找字符串“You have entered an
incorrect code. Please check your entry”(你应该记得出错信息的),双击它
关闭SDR窗口,你会看到:
* Possible reference to String Resource ID=00041: "You have entered...
:004049F8 6A29 push 00000029
:004049FA FF353CCE4000 push dword ptr [0040CE3C]
好,现在你必须寻找在出错信息前的最后一个比较语句,例如CMP、JNE、JE、TEST等等,按
上箭头直到你找到:
:004049CD 755A jne 00404A29
* Possible reference to String Resource ID=00032: "You must select...
:004049CF 6A20 push 00000020
...
...
* Possible reference to String Resource ID=00040: "Unlock Error"
好,你知道当输入了错误的注册码后会跳转到哪里了。现在你想看看如果把“jne”改为“
je”会怎么样?确定绿色光条在004049CD 755A jne 00404A29上,你会在屏幕下面看到象这
样的偏移地址@Offset 00003DCDh,那就是你可以在ORDER32.EXE打补丁的地方
回到Norton Commander,运行HIEW ORDER32.EXE,按F4选择Decode模式(ASM),按F5输入
3DCD,你会看到:
00003DCD: 755A jne 000003E29
00003DCF: 6A20 push 020
00003DD1: FF15 call w,[di]
这就是你可以更改字节的地方,按F3输入74,按F9更新ORDER32.EXE,然后退出HIEW
运行ORDER32.EXE随便输入注册码,瞧!你已经破解了QVP4.0!小心!当你输入了真正的注
册码后会怎么样?它将跳转到错误信息对话框!怎么办?
再次运行HIEW ORDER32.EXE,按F4选择Decode、按F5输入3DCD、按F3输入EB、按F9。它将直
接跳转到注册成功对话框。
第二部分:HEX WorkShop 2.51
运行HWORKS32.EXE
单击Help、About HEX Wo…
随便输入注册码以得到错误信息(你需要写下这些信息),然后退出软件
运行Norton Commander,进入HWS路径
将HWORKS32.EXE复制为HWORKS32.EXX(留作备份),将HWORKS32.EXE复制为1.EXE(给
W32Dasm用)
运行W32Dasm,反编译1.EXE
当反编译完成后,单击FIND TEXT输入“You have entered an” (你应该记得出错信息的
),查找(你不会在SDR窗口找到它!)
你会看到:
Name: DialogID_0075, # of Controls=003, Caption:"Registration Unsucce..
001-ControlID:FFFF, Control Class:""Control Text:"You have entered an..
002-ControlID:FFFF, Control Class:""Control Text:"Please confirm you..
现在你知道当输入了错误的注册码时程序调用的控制标识(ControlID)了,单击FIND
TEXT输入“dialogid_0075”,直到如下代码:
* Possible reference to DialogID_0075
:0041E233 6A75 push 00000075
:0041E235 8D8D10FFFFFF lea ecx, dword ptr [ebp+FF10]
好,现在你必须寻找在出错信息前的最后一个比较语句,例如CMP、JNE、JE等等,按上箭头
直到你找到:
:0041E145 837DEC00 cmp dword ptr [ebp-14], 00000000
:0041E149 0F8479000000 je 0041E1C8
:0041E14F 8B8DFCFEFFFF mov ecx, dword ptr [ebp+FEFC]
现在你想看看如果把“je”改为“jne”程序会不会工作?确定绿色光条在0041E149
0F8479000000 je 0041E1C8上,你会在屏幕下面看到象这样的偏移地址@Offset 0001D549h
,那就是你可以在HWORKS32.EXE打补丁的地方
回到Norton Commander,运行HIEW HWORKS32.EXE,按F4选择Decode模式(ASM),按F5输入
1D549,你会看到:
0001D549: 0F847900 je 00001D5C6 ---------- (1)
0001D54D: 0000 add [bx][si],al
0001D54F: 8B8DFCFE mov cx,[di][0FEFC]
这就是你可以更改字节的地方,按F3输入0F85,按F9更新HWORKS32.EXE,然后退出HIEW
运行HWORKS32.EXE,输入任意注册码,它工作了吗?没有?!?呵呵,别担心,回到NC,将
HWORKS32.EXX复制回HWORKS32.EXE(现在你知道我为什么做一个EXX的备份了吧)。回到
W32Dasm,你应该在刚才的位置(0041E145)
按F3继续搜索“dialogid_0075”,应找到:
* Possible reference to DialogID_0075
:00430ADD 6A75 push 00000075
:00430ADF 8D8D10FFFFFF lea ecx, dword ptr [ebp+FF10]
好,现在你必须再次寻找在出错信息前的最后一个比较语句,例如CMP、JNE、JE等等,按上
箭头直到你找到:
:004309EF 837DEC00 cmp dword ptr [ebp-14], 00000000
:004309F3 0F8479000000 je 00430A72
:004309F9 8B8DFCFEFFFF mov ecx, dword ptr [ebp+FEFC]
现在你想看看如果把“je”改为“jne”程序会不会工作(它应该工作)?将光棒移到
004309F3 0F8479000000 je 00430A72处,你会在屏幕下面看到象这样的偏移地址@Offset
0002FDF3h,那就是你可以在HWORKS32.EXE打补丁的地方
回到Norton Commander,运行HIEW HWORKS32.EXE,按F4选择Decode模式(ASM),按F5输入
2FDF3,你会看到:
0002FDF3: 0F847900 je 00001D5C6 ---------- (1)
0002FDF7: 0000 add [bx][si],al
0002FDF9: 8B8DFCFE mov cx,[di][0FEFC]
这就是你可以更改字节的地方,按F3输入0F85,按F9更新HWORKS32.EXE,然后退出HIEW
再次运行HWORKS32.EXE并输入任意注册码,它工作了吗?瞧!祝贺你!你已经破解了HEX
WorkShop 2.51!
第三部分:补丁代码
这是Pascal源代码
------------------------<从此剪切>-------------------------------------------
Uses Crt;
Const A: Array[1..1] of Record {<-------- 1 字节需要修改}
A : Longint;
B : Byte;
End =
((A:$3DCD;B:$EB)); {<--------------- 偏移地址“3DCD”改为“EB”}
Var Ch:Char;
I:Byte;
F:File;
FN:file of byte;
Size:longint;
Begin
Writeln('TKC''s Little Patch');writeln('Crack for QVP 4.0 by TKC/PC ''97');
Assign(F,'ORDER32.EXE'); {<-------------- 将被修改的文件}
{$I-} Reset(F,1); {$I+}
If IOResult <> 0 then
begin
writeln('File not found!');
halt(1);
end;
For I:=1 to 1 do {<---------------------- 1 字节需要修改}
Begin
Seek(F,A[I].A);
Ch:=Char(A[I].B);
Blockwrite(F,Ch,1);
End;
Writeln('File successfully patched!');
End.
------------------------<剪切至此>-------------------------------------------
这是汇编源代码:
------------------------<从此剪切>-------------------------------------------
DOSSEG
.MODEL SMALL
.STACK 500h
.DATA
.CODE
PatchL EQU 6
Buffer Db PatchL Dup(1)
handle dw ?
intro db "TKC's Little Patch",0dh,0ah,"Crack for QVP 4.0 by TKC/PC '97$"
FileName db "ORDER32.EXE",0 ;<------- 将被修改的文件
notfound db 0dh,0ah,"File not found!$"
cracked db 0dh,0ah,"File successfully patched. Enjoy!$"
Cant db 0dh,0ah,"Can't write to file.$"
Done db "File has been made.$"
String db 0EBh,0 ;<------------- 改为“EB”
START:
mov ax,cs
mov ds,ax
mov dx,offset intro ;point to the time prompt
mov ah,9 ;DOS: print string
int 21h
jmp openfile
openfile:
mov ax,cs
mov ds,ax
mov ax,3d02h
mov dx,offset FileName
int 21h
mov handle,ax
cmp ax,02h
je filedontexist
jmp write
filedontexist:
mov ax,cs
mov ds,ax
mov dx,offset notfound
mov ah,9 ;DOS: print string
int 21h ;display the time prompt
jmp exit
Write:
mov bx,handle
mov cx,0000h
mov dx,3DCDh ;<------------- 偏移地址“3DCD”
mov ax,4200h
int 21h
mov cx,patchl
mov dx,offset String
mov ah,40h
mov cx,01h
int 21h
mov ax,cs
mov ds,ax
mov dx,offset cracked
mov ah,9 ;DOS: print string
int 21h ;display the time prompt
jmp Exit
Exit:
mov ah,3eh
int 21h
mov ax,4c00h
int 21h
END START
--------------------------<剪切至此>-----------------------------------------
最后几句话:
这是破解时常用的一些命令:
16进制代码
汇编源代码
含义
75 or 0F85
jne
不等于则跳转
74 or 0F84
je
等于则跳转
EB
jmp
无条件直接跳转
90
nop
空命令(无作用)
77 or 0F87
ja
大于则跳转
0F86
jna
不大于则跳转
0F83
jae
大于或等于则跳转
0F82
jnae
不大于或等于则跳转
0F82
jb
小于则跳转
0F83
jnb
不小于则跳转
0F86
jbe
小于或等于则跳转
0F87
jnbe
不小于或等于则跳转
0F8F
jg
大于则跳转
0F8E
jng
不大于则跳转
0F8D
jge
大于或等于则跳转
0F8C
jnge
不大于或等于则跳转
0F8C
jl
小于则跳转
0F8D
jnl
不小于则跳转
0F8E
jle
小于或等于则跳转
0F8F
jnle
不小于或等于则跳转
有关汇编的知识将对你帮助很大,特别是在Soft-ICE中则非常重要。使用W32Dasm,你可以
破解得更轻松,象疯狂的计算机:-)你不能反编译Visual Basic程序,因此你需要他妈的VB
反编译器。
这次就先到这吧。下次我将继续讲解W32Dasm调试模式(Debugger Mode)和如何去除提示注
册窗口(NAGS)。在这之后,我将写一个Soft-ICE 3.0的教程(安排好我的工作计划!):
-)
The Keyboard Caper
PhRoZeN CReW '94 - '97的创立人
1997年7月19日
--
再不学习,你就要......
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.227.121]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.685毫秒