[分享] 破解入門

首先,我來講一下匯編語言的幾條常用命令:

——————————————————————————–

跳轉命令

——————————————————————————–

根據條件作出是否跳轉的決定,通常前面會有一個判斷語句,例如: CMP AX,BX JZ XX 上面兩條命令意為用AX減BX,它的值如果為0則跳轉到XX的標號行. 常用的跳轉命令有: JZ/JE 相等或為零為則跳轉
JNZ/JNE 不相等或不為零則跳轉
JL/JLE 小於/小於或等於則跳轉
JG/JGE 大於/大於或等於則跳轉
JMP 無條件跳轉

——————————————————————————–

比較語句

——————————————————————————–

CMP AX,BX AX 寄存器減去BX寄存器的內容
AND AX,BX AX 與BX做"與運算"
OR AX,BX AX 與BX做"或運算"
TEST AX,BX 與 AND AX,BX 命令有相同效果
XOR AX,AX 使AX的內容清零,每個寄存器與自己作異或運算等於清零動作.

——————————————————————————–

子程式

——————————————————————————–

一個子程的模樣長得像這個樣子 CALL 15F:334422 子程式是個很重要的概念,它是主程式的一個分支,用來做特定動作. 打個比方: 你要上班,先你是走路到車站,然後上車,然後下車,然後走到自己的辦公室. 這里如果要把上班編為一段程式的話,那麼就可以把"走路","搭車","走到辦公室"做為分支程式來處理. 說得再通俗一點就是: 你要破解的程式不可能就是一條主程式到底,肯定會呼叫下面的子程式,由子程式來處理你送出的注冊資訊,然後比較,然後標記是否注冊正確,這些都是靠它來完成的. 所以說,破解的關鍵在於,你找準程式在哪兒將會作注冊判斷,並進入那個注冊子程式,仔細觀察,你就成功了.子程式的返回碼是 RET

——————————————————————————–

算術運算

——————————————————————————–

ADD AX,BX 加法運算 AX=AX+BX
SUB AX,BX 減法運算 AX=AX-BX
INC AX 寄存器加一 AX=AX+1
DEC AX 寄存器減一 AX=AX-1
MUL 乘法運算
DIV 除法運算

——————————————————————————–

資料操作

——————————————————————————–

MOV AX,BX 資料傳送指令,將BX的值移送到AX中
XCHG AX,BX 將AX與BX的值互換

2.破解的工具介紹

修改檔案的工具: PCTOOLS, HVIEW, PSE等,這些都是DOS下的修改程式,如今是WINDOWS的天下,當然應該選用 ULTRA-EDIT了,它的功能可是非常強大哦,我會在下期將它放在破解工具區中.

除錯程式的工具: DEBUG, SYMDEB, GAMETOOLS, CM386等,太多了,但是這些都只能調試實模式下的程式,所以如果要破WINDOWS下的 軟體,必須備上: SOFT-ICE, TR, 等.

編碼相關工具: UNP, PKLITE, GT, WWPACK, UNWWPACK等是一些壓縮及解壓縮的工具,一個程式被壓縮的目的是防止有人破解它,它通過一定的運算法編輯,執行的時候用自己的壓縮算法 在記憶體中開辟一塊區域,解碼後再執行,所以如果你要破解一個被壓縮了的軟體時,在記憶體中看到的機械碼會與軟體本身不一樣,從而使你不能修改它. 所以另一類常駐式的修改工具相應而生,如 TSRCRACK.

檔案回寫工具: EXEWRITE, EXESHAPE等,這些工具的目的也是為了解壓縮程式,它通過害記憶體中追蹤到的一毓的寄存器的位址,加上一些運算來重新產生一個新的沒有編碼的軟體.

破解強手之路: SOFT-ICE

鬼佬的SOFT-ICE,功能非常強大,防當能力也是一流,所以幾乎沒有什麼程式它不能夠追不下去的. 說起來就有點讓人激動,確實如此,下面簡單地介紹一些它的常用指令:

命令代碼 命令意義 示例
S 在記憶體中搜尋指定字符串 S 0:F L30 ‘7979’ 在0:F至0:F+30的記憶體中搜尋’7979’字符
D 看記憶體內容 D EAX 查看EAX的記憶體內容
E 編輯記憶體內容 E DS:EAX 編輯DS:EAX的記憶體
R 修改寄存器內容 R EAX 1 修改EAX寄存器值為1
A 反匯編指令 A 11:22 在11:22的記憶體中直接反匯編機器指令
BPM/BPX 下中斷點指令 BPX HMEMCPY 下中斷點在’Hmemcpy’
BL 列出當前所有中斷點 BL
BC/BD 清除/禁止中斷點 BC * 清除所有的中斷點

另外,再介紹 ICE 常用的幾條快捷指令鍵,必須熟悉掌它們.

F4鍵 看USER的畫面
F5鍵 返回USER程式
F6鍵 游標在命令與記憶體區切換
F7鍵 讓程序執行到游標所在處
F8鍵 單步執行,遇到CALL則進入執行
F9鍵 在游標所在代碼處下中斷點
F10鍵 單步執行,遇到CALL則跳過執行
F12鍵 相當於指令P RET,返回主程式
CTRL-D鍵 呼叫ICE
F1鍵 ICE的幫助資訊,請詳細參看

3.KANJIWEB V3.0注冊實例破解

各位破解愛好者們,你們好.相信大家都盼這一集盼了很久吧?不錯,真刀實槍上戰場的時候到了,不要掉頭跑開哦.

這次拿來開刀的程式是我比較喜歡用的內碼識別及轉換工具,它也是我的破解處女作.這個小程序功能很不錯,不過不注冊的話,只能用一個月左右. 它每次安裝都會產生一個隨機數字,然後根據這個數字來算出注冊碼,所以每次安裝的注冊碼都不會完全相同.

首先,請準備一本草稿紙及一支筆,然後就可以開始了.

將 KanJiWeb V3.0的主程式 MultiWord 程式打開,然後單擊"X"形功能表,選擇"Register…"功能表,出現一個對話框: 最下面寫著: REGISTERED NO: 521608708 ,當然我們看到的數字肯定不一樣,因為是隨機的嘛!程式會根據這9個數字來重新算出9個字符的注冊碼來. 好,廢話少說,單擊 Register 按鈕,在 Serial NO: 中填入: 79797979. 第一步: 填好以後,記住不要急著按OK按鈕,因為我們先要進到 ICE 里面把中斷設好,不然的話怎麼攔它呀?按 CTRL-D組合鍵呼出 ICE 來. 在命令區內輸入: BPX MESSAGEBOX . 第二步: 現在按 F5鍵返回原程式,按下剛才未按下的 OK 按鈕. 第三步: 發生了什麼事? 看到了吧,厲害的ICE馬上攔到了,看看你現在在什麼地方:
User !messagebox
從此處開始 按 F10鍵單步跟蹤程式…
178F:0000 POP EAX
178F:0002 XOR EBX,EBX
178F:0005 POP DX
178F:0006 AND BX,BF7F
178F:000A PUSH EBX
178F:000C PUSH 00
178F:000E PUSH EAX
178F:0010 JMP 0013
178F:0013 PUSH BP
178F:0014 MOV BP,SP
178F:0016 PUSH 6B
178F:0019 MOV BX,[BP+14]
178F:001C TEST BX,BX
178F:001E JNZ 0025
178F:0020 XOR EAX,EAX
178F:0023 JMP 0028
178F:0025 CALL 00A0
178F:0028 PUSH EAX
…(略)
178F:0043 CALL 0119
178F:0046 MOV AX,[BP+08]
178F:0049 MOV CX,[BP+0A]
178F:004C TEST AX,0C08
178F:004F JNZ 0057
178F:0051 TEST CX,FFFE
178F:0055 JZ 005D
178F:0057 MOV BX,F005
178F:005A CALL 0105
178F:005D PUSH CX
178F:005E PUSH AX
178F:005F PUSH WORD PTR[BP+06]
178F:0062 PUSH CS
178F:0063 CALL 1DE2
當程式走到 178F:0063 CALL 1DE2 處時會出現注冊碼錯誤的資訊框,我們重新注冊一遍, 當再次走到此地時按F8鍵進入觀察:
178F:1DE2 Enter 0024,00
178F:1DE6 PUSH ESI
178F:1DE8 PUSH DS
178F:1DE9 MOV AX,1087
178F:1DEC MOV DS,AX
178F:1DEE MOV ESI,[BP+14]

當走到此處時,下命令: D BP+14 ,在記憶體區會看見一組數字: D0980200(4 BYTES), 你的數字和我寫的可能不一樣,再次下命令如下格式: D 000298D0 ,在記憶體區右邊欄里會看見一組9個字符,對了,這就是注冊碼了. 趕快用筆抄下來,那麼這個軟體就破解完成了,是不是很簡單啊?!

另外說明一下: 為什麼 D0980200 在用 D 命令查看時會是 000298D0 呢?因為在匯編中寄存器的位置是高位在後,低位在前, 所以變成 0200為第一個高字組,而排列時又為: 0002了,D098的排列一樣,排到 0200 的後面,變成是: 98D0.嗯,是有點復雜,不過習慣了就好了.

也許又有人問: 為什麼我會知道剛才那處是注冊碼露頭的地方呢? 老實說,要靠判斷及經驗的積累,光靠一處處的死看是看不出來的, 有個重要的概念給你們先提出來: 破解的時候,眼睛緊盯著很有問題的 CMP (比較命令)和 JNZ(跳轉命令)之類的語句,另外,像EAX,EDX,ESI,EDI,在算注冊碼的CALL處都會發生變化,注意它們的變化對你的破解會很有幫助.當進入一個CALL時,你要注意EBP的變化,它是隱藏真正注冊碼和你輸入的注冊碼的最後基地

KANJIWEB V3.0注冊實例破解
今天我再來給大家講一講KANJIWEB V3.0的破解,與上一個不同的是: 這次換用另一個中斷點,會有什麼不同呢?往下看看就知道了.
第一步,將KanJiWeb啟動,然後將注冊框敲出來,輸入注冊碼: ‘79797979’.輸入完了,不要急著按OK鍵.
第二步,切換到ICE中(知道怎麼切換吧:按CTRL-D鍵),下中斷: Bpx GetDlgItemText ,然後按F5鍵返回注冊程式.
第三步,按下注冊框的OK鍵,發生什麼事了,對,被ICE攔下來了,到此步,我們已經成功一半了.也許有的網友表示懷疑,但是你要給自己一點自信心嘛!不然,我怎麼教你也白搭.
第四步,將中斷暫時屏蔽,用什麼命令呢?對了: Bd * ,星號代表所有的中斷.
第五步,按一下F12鍵,在我的機器上是一次就夠了,你自己要試按.停下後,按F10鍵開始追蹤了…

10C7:3900 LEA AX,[BP+FF52]
… 略過
10C7:39C9 XOR BYTE PTR [SI],86
10C7:39CC INC SI
10C7:39CD LEA AX,[BP+FE2F]
10C7:39D1 CMP SI,AX
10C7:39D3 JB 39C9
程式在此循環九遍
10C7:39D5 LEA DI,[BP+FE26]
10C7:39D9 LEA SI,[BP-4A]
在此下命令: D SI /D DI
看見什麼了: SI=自己輸入的注冊碼
DI=真正的注冊碼
… 略過
10C7:39F4 OR AX,AX
10C7:39F6 JNZ 3A3A
… 略過
10C7:3A32 JMP 3A53
10C7:3A34 MOV SI,[BP-08]
10C7:3A37 JMP 3A6D
10C7:3A39 NOP
10C7:3A3A MOV SI,0001
10C7:3A4E CALL USER!MESSAGEBOX
當程式走到 10C7:3A4E 處就會出現注冊失敗的資訊框,那怎樣避免呢?很簡單,往上面看看有什麼地方可跳過此CALL呢? 找到了嗎?對了,它在: 10C7:3A32 JMP 3A53 處,但剛才為何沒走到此處呢?當你重新追蹤一遍會發現問題出在: 10C7:39F6 JNZ 3A3A 處, 知道了吧,如果沒有那個跳轉命令,就不會出現討厭的注冊失敗的資訊了.知道該怎麼辦呢?當然是動手干掉它了,將它NOP掉就可以了. NOP的機器碼是: 90. 下 CODE ON 命令,將 JNZ 3A3A 的兩個BYTE改為 9090 即可.

DEBUG 在每個人的機器里都會有,只是很多人對它都很陌生,如果你掌握了它的用法,對你的日常使用及維護工作會帶來很大的方便,下面介紹一些它的基本指令用法:

指令 格式 功能 註解
A A [記憶體位址] 組譯匯編語言指令 A 100
C C [區段1] [區段範圍] [區段2] 將兩塊記憶體作比較 C 100 L20 200
D D [記憶體拉址] 顯示記憶體的內容 D 100
E E [記憶體位址] 編輯記憶體資料 E 100
F F [指定區段範圍] 填充指定記憶體區塊內容 F 100 L10 90
G G [區段:區址] 帶有任選斷點執行 G 100(現在不要試用)
H H [運算子] [運算子] 十六進制加減運算 H 44 33
I I [連接埠] 讀/顯示輸入位元組
L L [記憶位址]或[磁碟,磁軌,磁區] 裝入文件或磁區 L 100 2 1 2
M M [區段範圍] [記憶體位址] 傳送記憶體區塊 M 100 L10 110
N N [檔案名稱] 定義文件及參量 N bb.com
O O [連接埠位址] 輸出位元組到連接埠
P P [區段:區址] 在下一指令上停止 P 2
Q Q 退出DEBUG界面 Q
R R [寄存器] 顯示修改寄存器/標志 R AX
S S [記憶區段範圍] 對字符進行檢索 S 100 L70 ‘j’
T T [=記憶區段]或[數值範圍] 單步追蹤 T
U U [記憶位址] 對指令進行反匯編 U 100
W W [記憶區段]或[指定範圍] 寫入文件或磁盤扇區 W 100 0 1 1

下面對一些常用指令進行詳細剖析:
A (Assemble) 匯編指令
1,輸入匯編語句被匯編到記憶體的指定區段,此區段在開始時用A address 指定.
2,所有語句輸入完成後,按ENTER鍵返回
3,完成輸入後,可以用U命令觀看它的機械碼
D (Dump) 顯示命令
1,從指定的地址開始顯示內容,如果沒有指定地址,則從前一個D命令繼續顯示.
2,如果沒指定地址並是第一次,則從DS:100處開始顯示.

G (Go) 轉移命令
1,執行正在調試的程序,當執行到指定的地址時停止,並顯示寄存器樗和下一條要執行的命令
2,G [=address].用於執行正在調試沒有斷點的程式.
3,程序運行結束,DEBUG顯示"Porgram terminated normally"

R (Register) 寄存器命令
1,顯示一個寄存器的十六進制內容,並可根據需要改變它們.
2,顯示8個字母的狀態標志,並可根據需要更改它們之中的任一個或全部

U (Unassemble) 反匯編命令
1,對指令進行反匯編,它們的地址和十六進制以類似於匯編語言的語句一起顯示出來.
2,單獨用U命令從CS:100處開始反匯編
3,U命令預設段地址包含CS寄存器中.

DEBUG 技巧應用
1,用DEBUG對子目錄加密 DOS在管理文件目錄時,用32個位元組來保存根目錄和子目錄的資訊,對子目錄而言,0~10位元組為子目錄域,第11位元組為屬性.我們只要將子目錄屬性位元組的值從10H改為13H時,子目錄即具有拒絕DIR,TREE等命令的性能.例如:
對A盤的SUBDIK子目錄進行加密:
C:\>DEBUG
-L 100 0 5 7 (將A盤中目錄讀入記憶體)
-S 100 FFF “SUBDIK" (搜索子目錄)
-38EB:07c0 (搜索到的子目錄地址)
-E 07CB (07C)+0B=07CB 為屬性位元組位址)
38EB:07CB 10.13 (修改完成)
-W 100 0 5 7 (目錄寫回A盤中)
-Q (退出)

2,解除BIOS密碼
C:\>DEBUG
-O 70 10
-O 71 11
重新啟動,BIOS密碼已被攻破

3,冷啟動實現
C:\>DEBUG RESET.COM
-A 100
JMP FFFF:0000
INT 20
-RCX
00007
-W
-Q

4,熱啟動實現
C:\DEBUG BOOT.COM
-A 0100
MOV AX,0040
MOV DS,AX
MOV AX,1234
MOV SI,0072
MOV [SI],AX
JMP FFFF:0
INT 20
-RCX
0014
-W
-Q

這一集里,我就一些網友提出的問題作一個系統的整理,我會從ICE的安裝開始一步步地說起,到ICE的使用界面介紹,及一些我的破文中的疑難之處.有許多問題都還弄不懂的朋友千萬要記住來看哦.
Soft-ICE的安裝
在下載本站的ICE後,用ZIP打開,選擇SETUP.EXE即直接進行安裝了
第一步,出現軟體的版本相關資訊,按NEXT進行下一步.
第二步,出現版權資訊,選擇YES,同意啦.
第三步,出現注冊碼,因為是已經破解版,所以不用輸注冊碼,有很多網友寫信來問注冊碼,其實不用管它啦.直接NEXT了.
第四步,選擇安裝目錄,預設為:C:\SIW95下,選擇完畢後按NEXT.
第五步,在Manufacturer中選擇合適的顯示器,在Model中選擇相應的類型,預設為:Standard VGA,一般不用更改,選擇好以後,按一下TEST再NEXT.
第六步,選擇滑鼠的連接埠配置,一般預設為:COM1,自己看著辦,再NEXT.
第七步,系統配置,有三個選擇,選擇第一個,讓ICE來配置AUTOEXEC.BAT文件,第三個不做任何改動.
第八步,同意以上幾種配置嗎?同意就按NEXT開始安裝了.
注: 有的網友寫信來說ICE經常死機,即出現’R’/’C’字樣,按’R’返回ICE的界面,打EXIT即可脫離ICE的環境,出現這種情況多半是因為 WINDOWS出現記憶體中的非法操作而導致的.建議的做法是:平時不使用它時,在AUTOEXEC.BAT文件中用REM語句屏掉ICE的啟動,需要時再讓它啟動.我就是這麼做的.

Soft-ICE界面講述
現在很多網友來信,問我的講座中的記憶體區指什麼地方? 下面做一個系統的介紹.
首先,在ICE啟動的情況下,按CTRL-D組合鍵呼出ICE,打入"R"指令,這時你看見的像: EAX=00000003 EBX=00300040 ECX=20783303 EDX=A0F23300 等,這就是寄存器顯示資訊,它會對你的破解很有幫助的.
第二欄長得像這個樣子: 0028:C000C0E7 JECXZ C000C0F4 ,這里你看到的就是程式的流程碼了,破解時也是要盯在這里,其中0028:C000C0E7是程式的區段:偏移址,你可以把它看作是命令: JECXZ C000C0F4的家,每條命令都有一條位址’家’.我把這一欄叫做程式流程區,如果敲入CODE ON即可看到該程式命令的機械碼了.
第三欄就是ICE的最底部,當你切入ICE時,游標停在那里,等待你輸入命令,我把它叫做命令區,如果你第一次操作,可打入HELP來看看ICE的一些命令介紹.
第四欄當你在命令區敲入D命令時,會出現如: 0030:00000000 9E0FC90065047000 – 1600DF0C65047000 …..e.p…..e.p. 這樣的東東,它就是我常說的記憶體區了.它分為左邊欄和右邊欄,右邊欄是記憶體中的ASCII碼,不過大部分你看到的都是亂碼.可使用E 位址 命令來修改左邊欄.

Soft-ICE中斷選擇
很多網友來信問為什麼他的中斷開的都不行呢?原因很簡單,其實開中斷也有一些技巧可言,很多中斷都是破解前輩們摸索出來的,我們現在只需要照做就行了,是不是幸福多了.一個中斷點的選擇好坏直接關係到程式破解力度的強弱,有的網友問我其中有什麼區別呢?關於這一點,我也只能簡單地說一說,因為本人的水平有限.
BPX HMEMCPY 注冊碼破解的萬能中斷點
BPX CREATEWINDOWEX 開窗攔截中斷,可用來破解時間過期程式
BPX LOCKMYTASK ErrorFree 試出來的,當你找不到合適的中斷時,可試試它,它是攔截你按一個按鈕的動作
BPX GETDLGITEMTEXT 注冊碼攔截中斷,對於有的程式並不生效,它在取碼時發生中斷.
BPX DIALOGBOX 攔截對話框中斷,16位程式
BPX DIALOGBOXPARAM 攔截對話框中斷,32位程式
BPX MESSAGEBOX 攔截送出資訊中斷
BPX UPDATEWINDOW 我試出來的中斷之一
BPX GETMESSAGE 我試出來的中斷之二

另外,本人曾遇到過任何中斷無效的東東,怎麼辦呢?這時候可以使用ICE附帶的Symbol Loader程式來載入.

目標軟體: 心奕1.0
首先打開程序,選擇"幫助"=>"注冊心奕" 然後在注冊名框中輸入coolfly,在注冊碼框中輸入"79797979″.這是我的習慣,你也可以輸入任意數字.
按CTRL-D鍵呼出ICE,下中斷: bpx hmemcpy. 記住,下完中斷後,按F5鍵返回程序,然後才可以按下注冊畫面的確認鍵.這時被ICE攔下,試按F12鍵,看多少次會出現失敗畫面. 記住你剛才的按下,如N次.再次重復動作,被攔下時,按N-1次F12鍵,停下後開始按F10鍵單獨追蹤程式:
15F:00403B9D CMP EAX,01
15F:00403BAD JNZ 00403C95 … 15F:00403C53 CALL [ECX+10] =>按F10鍵帶過此CALL時會出現失敗窗. 15F:00403C56 TEST EAX,EAX 15F:00403C58 JZ 00403C77 判斷15F:00403C53的那個CALL必定有問題,在此設斷(將游標放到那一行,然後按下F9鍵即可).重新注冊會被直接在此攔到,按F8鍵進入這個CALL:

15F:10001722 CALL 10001880 當程式走到此處時,停下來.
15F:10001727 TEST EAX,EAX 此時如果你輸入的注冊碼不對,則EAX的值肯定為0,正確則為1
15F:10001729 JZ 10001830
重新注冊,進入15F:10001722的CALL:
15F:10001880 PUSH FF

15F:1000189B MOV EDI,[EBX+28] 在此用D EDI可看到自己的注冊名 …
15F:100018AC MOV EAX,[EAX-08] 在此用D EAX可看到自己的注冊碼 …
15F:100018C8 MOVSX EDX,BYTE PTR[ECX+EDI] 15F:100018CC LEA EAX [EAX*4+EAX] 15F:100018CF INC ECX 15F:100018D0 CMP ECX,ESI ESI中存有注冊名的個數N 15F:100018D2 LEA EAX,[EAX*2+EDX] 15F:100018D5 JL 100019C8 程式在此會有N個循環,由注冊名來算出注冊碼. … 15F:100018FF CALL 10001AE8 15F:10001904 MOV EAX,[EBX+24] 用D EAX可看到自己輸入的注冊碼 15F:10001907 MOV EDX,[ESP+18] 用D EDX可看到真正的注冊碼:bbdb0b92 抄下它吧,大功告成,下結論吧:
Name: coolfly S/N: bbdb0b92
到此為止,是不是覺得很簡單,不要害怕,有什麼不懂的可以來問我,共同學習,不要不懂裝懂哦,年輕人要以學習為重.
目標軟體: IP搜索客V1.0
首先用右鍵單擊該程序圖標,選擇注冊
在注冊框里面輸入: 79797979
按CTRL-D鍵切換到ICE,輸入: bpx hmemcpy 下中斷,然後按F5鍵回到程序中,按程序的注冊按鈕,這時被ICE攔到,開始按F12慢慢走,同時要記住數按F12的次數,直到出現失敗畫面出現.
此為一按.
再次重復上面的步驟,不過按F12的次數為上一次按數減1.
此為二按!
二按後,在此停下:
15F:0040327B MOV ESI,[ESP+14]
15F:0040327F MOV EAX,[EDI+5C]
15F:00403282 MOV DL,[EAX] 在此下D EAX命令可以看到真正的注冊為:268279.此號因程序給出的序號不同而不同.
15F:00403284 MOV BL,[ESI] 在此下D ESI命令可以看到79797979,是自己下的注冊碼


下面的程式都是一些判斷注冊碼是否正確的程式,只要將EAX中的東東抄下即可完成破解了.

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s


%d 位部落客按了讚: