补丁教程
申明:本文中“压缩”也可用“加壳”来代替!
补丁petite
================
没有什么事情是不可能的!
作者:R!SC email:resc_1@hotmail.com
知识就是力量!
介绍:============
嗨,
我今天的任务就是都会你们怎么样补丁一个被压缩的文件。好多时候在我们想破解一个文件的时候,会发现程序已经被‘Petite'压缩过了,在没有专门的解压缩petite工具之前,我们不得不使用peitte自己的解压缩代码,在程序跳转到原始代码进入点(注:就是软件的OEP)之前跳转到我们自己的补丁代码,在内存中改变程序的指令,然后返回到原始程序,继续运行。这就是我的理论。在说过之后,我想就该做了。
这篇都学不是讲怎么样CRACK而是怎么样补丁一个压缩程序。
必须的工具:
Petite 1.3a (压缩文件) http://www.icl.ndirect.co.uk/petite/
SOFTICE on winxp (调试软件) http://www.driverbbs.com/down/DS26Full.rar
hex workshop 3.1 (十六进制编辑器) http://202.101.237.103/f/jwjjt/index.html
wdsm32十全大补版 (反汇编) http://202.101.237.103/f/jwjjt/index.html
!!!纸和笔!!! (HAHA!老调重谈)
外加上一些汇编知识,好OK!
作为一个破解者,你应该大至了解怎么补丁压缩文件,但是我从来没有看到过一篇关于它的教程,我相信会有人喜欢
这一篇都学的,HEHE!
你应该知道怎么样判断一个程序是被petite压缩过的:它有一个.pitite object,(注:用fi.exe)就可以了。)
通常在被压缩的程序的第255字节,会有“Compressed by Petite, Copyright(c)1998 Ian Luck”的字样。
我们现在开始:
在我们开始之前,要用笔和纸记下一些有用的变量,我们需要2个文件偏移,最少3个内存地址,2串补丁数据
就象是下面一样:
OFFSET#1 ; FILE OFFSET-WORD
OFFSET#2 ; FILE OFFSET-WORD
ADDR#1 ; MEMORY ADDRESS-LONG
ADDR#2 ; MEMORY ADDRESS-LONG
ADDR#3... ; " "
PATCH#1 ; 5 BYTES (CALL我们自己的代码)
PATCH#2 ; 补丁数据块
当petite解压缩完程序后,它就会CALL修改检测程序(它也已经解压缩过了),如果检测通过,程序就会运行
可以这样找到呼叫检测程序的CALL,,用hex workshop 打开petite.exe,搜索“5e5bc9c3e8",得到e8的偏移
(call指令的第一个字节),记下这OFFSET#1。它的偏移是17eb。向下移动来到引入表的未尾,直到来到一大块
全00处,如下:1CF0是最好的地方,记下为0FFSET#2
00001CD0 65 42 6F 78 41 00 4B 45 52 4E 45 4C 33 32 2E 64 eBoxA.KERNEL32.d
00001CE0 6C 6C 00 75 73 65 72 33 32 2E 64 6C 6C 00 00 00 ll.user32.dll... <-- 引入表结束
00001CF0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ <-- 补丁代码存放的地方
把OFFSET#1从”E8"改变Y为一个“CC” (也就是一个INT 03)
在OFFSET#2处输入“SOMETEXT",保存这个文件。
进入SOFTICE,下断点”BPINT 3",退出 SOFTICE,运行PETITE.EXE.
我们现在中断在SOFTICE中,下指令’E EIP E8'
记下这个地址为ADDR#1,这个地址是CALL 0040DDB0 ,
下指令“T 40 ' (运行40个指令)
你会来到象下面的代码处:
40de2a xor ebx, [esi]
40de2c rol ebx, cl
40de2e add esi, 04
40de31 dec ecx
40de32 jnz 40de2a
40de34 cmp [eax + 04], ebx
40de37 jz 40de41 <-- this jump means its not been tampered with这个跳转的意思是:如果跳,程序没有被修改)
记下这个跳转的地址40DE37为ADDR#2
下指令 S 0 L FFFFFFFF "SOMETEXT"
记下搜索到的地址为ADDR#3 (45AAF0)
如果你已经知道破解这个程序的关键点,那么就记下破解点的地址为ADDR#4
我选择改变程序中的“ $HAREWARE - see REGISTER.TXT for details ”为“ ”
下指令“S O L FFFFFFFF "$HAREWARE"
记下搜索到的地址ADDR#4(40F83B)
按F5继续运行,返回到WINDOW。
我们已经有了:
1,程序CALL检测修改程序在文件中的偏移,
2,程序CALL检测修改程序的地址。
3,程序判断有没有修改的跳转地址。
4,我们的补丁程序在内存中存放的地址。
5,我们将要补丁的地方的内存地址。
现在我们就要写我们的补丁程序了。
----------------------------------------------------------------------
OFFSET#1 = 17eb (call to tamper check)呼叫检测程序的指令在文件中的偏移
OFFSET#2 = 1cf0 (space after imports to put our patch)在收入表后放补丁代码的地方
ADDR#1 = 40ddb0 (call to tamper check)程序中呼叫检测程序的地址
ADDR#2 = 40de37 (address of tamper check conditional jump)程序判断是否被修改的跳转地址
ADDR#3 = 45aaf0 (address in memory where our patch will be loaded)补丁代码在程序内存中的地址
ADDR#4 = 40f83b (unpacked text what we want to patch)我们想补丁的解压缩文字在内存中的地址
PATCH#1 = WAIT 补丁代码
PATCH#2 = 4 IT
----------------------------------------------------------------------
再一次运行程序,SOFTICE中断在INT 03
F8来到40DDB0
下指令:A
'call 45aaf0' (ADDR#3 -- 'sometext')
/
/
记下当前指令改变为:e800050000 到PATCH#1
type in 'call 45aaf0' (ADDR#3 -- 'sometext')
F8运行这个CALL,这时EIP就是ADDR#3了。
下指令:'a eip'
>mov byte ptr [ADDR#2], eb ; 让检测修改的跳转一定要跳
>mov word ptr [ADDR#4], 000a ; 修改字符为我们想要的
>mov xxxx ptr [ADDR#x], your crackz ; 你自己想要补丁的代码
>jmp ADDR#1 ;补丁完成,返回程序
这时记下补丁程序形成的代码如下:
PATCH#1 = e8,00,05,00,00 ; call 45aaf0
PATCH#2 = c6,05,37,de,40,00,eb ; mov byte ptr [40de37], eb
66,c7,05,3b,f8,40,00,0a,00 ; mov word ptr [40f83b], 000a
e9,ab,32,fb,ff ; jmp 40ddb0
一步一步运行,看看补丁程序是否正确。如果正确,那么你接下来要做的事情就是写一个程序来补丁PETITE.EXE了。
(注:作者是自己编程,但我们可以用工具来制作,如:KEYMAKE1.65
可以到这来下载:http://www.sdgmxing.com/tools/Patchers.htm)
;---------------------start of risc_pet.asm---------------------
; to build risc_pet.com
;
; tasm risc_pet
; tlink /t risc_pet
.MODEL TINY
.CODE
.286
ORG 100h
start: jmp main
;_______________________________________________________________
intro db 0dh,0ah," Hi, guess who cracked Petite?",0dh,0ah
db " It was cracked by -R!SC- ",0dh,0ah,0dh,0ah,"$"
done db " Groovy! Patch Successful",0Dh,0Ah,"$"
error db " cant find file ? ",0Dh,0Ah,"$"
error2 db " file wrong size, should be 46,600 bytes ",0Dh,0Ah,"$"
filename db "petite.exe",0
PATCH1 db 0e8h,00,05,00,00 ; call 45aaf0
PATCH2 db 0c6h,005h,037h,0deh,040h,000h,0ebh ; mov byte ptr [40de37], eb
db 066h,0c7h,005h,03bh,0f8h,040h,0,0ah,0 ; mov word ptr [40f83b], 000a
db 0e9h,0abh,032h,0fbh,0ffh ; jmp 40ddb0
; 21 bytes of code to apply to the file + another 5 for the call to our code...
;_______________________________________________________________
main:
mov ah, 9 ; print title
lea dx, intro ; dx with offset of text
int 21h
mov ax, 3D02h ; Open File
lea dx, filename
int 21h
jnb Ok ; jump if everything ok
mov ah, 9 ; error with file
lea dx, error
int 21h
mov ax, 4C01h ; Exit with error
int 21h
;_______________________________________________________________
Ok:
mov bx, ax
mov ax, 4202h ; seek eof
xor cx, cx
xor dx, dx
int 21h
cmp ax, 0b608h ; 46,600
jne badsize
cmp dx, 0
jne badsize
sizepassed:
mov ax, 4200h ; file seek
mov cx, 0 ; hi order word of offset
mov dx, 017ebh ; lo order word of offset OFFSET#1
int 21h
mov ax, 4000h ; Write to file
mov cx, 5 ; number of bytes to write
lea dx, PATCH1
int 21h
mov ax, 4200h ; file seek
mov cx, 0
mov dx, 01cf0h ; OFFSET#2
int 21h
mov ax, 4000h
mov cx, 21
lea dx, PATCH2
int 21h
mov ax, 3E00h ; Close file
int 21h
mov ah, 9 ; Show msg
lea dx, done
int 21h
mov ax, 4C00h ; All Done And Exit
int 21h
badsize:
mov ah, 9 ; print to screen
lea dx, error2 ; message
int 21h
mov ax, 4C01h ; Exit with error
int 21h
end start
;-----------------------end of risc_pet.asm---------------------
用HEX打开PETITE.EXE,你都能看到在引入表结束和压缩代码开始之前之间,有很从的空间来写补丁(大约有274 bytes)
00001CD0 65 42 6F 78 41 00 4B 45 52 4E 45 4C 33 32 2E 64 eBoxA.KERNEL32.d
00001CE0 6C 6C 00 75 73 65 72 33 32 2E 64 6C 6C 00 00 00 ll.user32.dll... <-- 引入表结束
00001CF0 C6 05 37 DE 40 00 EB 66 C7 05 3B F8 40 00 0A 00 ..7.@..f..;.@... <-- mY pATCH cODE
00001D00 E9 AB 32 FB FF 00 00 00 00 00 00 00 00 00 00 00 ..2............. <-- mY pATCH cODE
00001D10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ }
00001D20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ }
00001D30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ }
00001D40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ }
00001D50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ }
00001D60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ }
00001D70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ } 可以放我们补丁代码的空间
00001D80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ }
00001D90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ }
00001DA0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ }
00001DB0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ }
00001DC0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ }
00001DD0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ }
00001DE0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ }
00001DF0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ }
00001E00 CA BD 0D 7C 14 D5 B9 38 3C BB 3B 49 86 B0 61 36 ...|...8<.;I..a6 <-- 压缩代码开始
00001E10 B0 81 05 22 46 5D 6B 74 41 83 1B 94 B0 A0 09 66 ..."F]ktA......f
在每个被PETITE压缩的程序上,引入表和被补丁的代码之间,你都能写上你自己的补丁。
R!SC -- January 1999
(I will survive without you.
Don't tell me that you wanna leave.
If you wanna leave, I wont beg you to stay,
and if you gotta go darling, maybe its better that way.
I'm gonna be strong, i'm gonna be fine,
don't worry about this heart of mine.)
Big hug to SaM, LoVE u, MiSSiNG u, fEW mORE dAYZ oF bORDEM, tHEN yA bACK !)
love me, hate me, u dont no me... (哈哈!自己看吧!让我困惑的是SAM不是男人的名字吗?难到R!SC是个女的?)
相关视频
相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么
热门文章 去除winrar注册框方法
最新文章
比特币病毒怎么破解 比去除winrar注册框方法
华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据
人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程
查看所有1条评论>>