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毫秒