亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 邏輯算法 > 正文

(看雪教程) 第3章 第4節 拆解教程

2019-09-10 09:02:10
字體:
來源:轉載
供稿:網友

========================================================================
ED!SON's Windows 95 拆解教程 V1.00 (中文翻譯: JIM TYAN)
========================================================================
附:ED!SON教程的示范程序下載
目錄
========
1. Windows 拆解簡介
2. SoftICE for windows 2.00 快速入門
3. 如何找注冊碼
3.1 Task Lock 3.00 - 一個簡單的、僅有注冊號保護的拆解例子
3.2 Command Line 95 - 容易的“用戶名/注冊號"注冊方式的拆解
4. 為Command Line 95制作注冊器
5. 當程序調用一個函數時,PUSH和CALL這些指令是如何工作的
6. 關于VB程序
附錄
========
A. 如何讓SOFTICE載入符號
B. 函數的語法
C. 到哪里獲取軟件
D. 如何與我聯系
1. WINDOWS拆解簡介
===================================
拆解一個WINDOWS程序要比拆解一個在DOS下運行的程序要容易得多。因為在WINDOWS
中,只要WINDOWS的函數被使用了,想對任何真正要尋找蛛絲馬跡的人隱藏什么東西
是比較困難的。
你需要的第一個(常常也是唯一的一個)工具就是SoftICE/Win 2.oo 它是NuMega
出品的一個非常強大的調試工具。有些人發現它很難用,但我會教你如何使用它進行
有效的調試,也希望你們能夠明白我將要告訴你們的:-)。 你應該看看在附錄A 中有
關SoftICE/Win 2.oo的一些資料。我在安裝SoftICE中從來沒有碰到任何問題, 如果
你碰到了,我只好讓你查它的參考手冊了。
你所需要的所有軟件的URL列在附錄C中
- ED!SON edison@ccnux.utm.my
2. SOFTICE/WIN 2.OO 快速入門
=========================================
首先你應該對SOFTICE的屏幕有個大概的了解

|--------------------|
| 寄存器窗 | 用 'R' 編輯
|--------------------|
| 數據窗 | 用 'D' 列出某個地址的數據 用 'E' 編輯
|--------------------|
| 代碼窗 | 用 'U' 反匯編 'A' 加入匯編代碼
|--------------------|
| 命令窗 | 在這里輸入命令和讀出結果
|--------------------|
其它重要的功能鍵(在缺省的鍵定義下)
'H'/F1 - 在線幫助
F5/Ctr+D - 運行
F8 - 單步執行,切入子程序和中斷
F10 - 單步執行,跳過子程序和中斷
F11 - 跳出子程序,回到CALL的下一條指令
3. 如何尋找注冊碼
=============================
最容易的練習莫過于找個共享軟件來試試把它注冊。
3.1 Task Lock 3.00 - 一個簡單的、僅有注冊號保護的拆解例子
=================================================================
這是一個簡單的保護,只有一個而且不會變化的注冊碼。
3.1.1 檢查程序
===========================
它是16 bit程序,還是32 bit的? 在哪里輸入注冊信息? 在它的幫助里有沒有
發現關于注冊的一些線索?在你繼續往下讀之前,去把它們找一找!
....你現在應該在找吧!.....你是在找嗎?.....你找到了嗎?.......
好,你現在知道了,它是一個32位的WINDOWS 95應用程序,你可以在一個選擇了
“Register|Register..."菜單就會彈出來的對話框中,輸入一個注冊碼來注冊
程序。通過閱讀它的幫助,你也知道可以有兩種注冊方式:Individual和Site
License。所以這里對合法的注冊碼就可能有兩次核對。
3.1.2 捕捉注冊代碼
===========================
注冊碼通常在普通的WINDOWS文字框中輸入。為了檢查輸入的注冊碼, 程序必須
采用下面這些函數中的一個來把文字框中的內容讀出來。
16-bit 32-bit
------ ------
GetWindowText GetWindowTextA GetWindowTextW
GetDlgItemText GetDlgItemTextA GetDlgItemTextW
32-BIT函數的最后一個字母告訴我們函數是使用單字節還是雙字節字符串。雙字
節的注冊碼是很少見的。
也許你已經體會到我的意思了...“如果我能在GetWindowText時中斷...", 你
的確能這樣做!但是你首先必須確認這些符號已經由SOFTICE載入了(詳見附錄A)
在SoftICE中設定一個“陷阱"(實際上我們叫斷點),你得先按Ctrl+D進入調
試狀態,然后用命令BPX,后面跟著是函數的名字或者內存地址。因為Task Lock
是32位程序,所以我們在GetWindowTextA處設一個斷點。 如果這個不行, 我們
可以再試其它的。
象這樣在SoftICE中輸入:
:bpx getwindowtexta
如果你得到“No LDT"這樣的錯誤信息,就要注意不要運行其它程序。我已經注
意到Norton Commander/Dos 會干擾這個功能。 你可以列出所有斷點來檢查一下
是否設好斷點:
:bl
你會看到這樣的信息:
00) BPX USER32!GetWindowTextA C=01
你可以再按一次Ctrl+D,從SoftICE中退出,。
好了,不管怎么樣,你已經設定好了斷點以捕捉任何對GetWinowTextA的調用。
現在我們來在該輸入注冊碼的地方輸入一些數字,然后按下OK....你只得到了
一個信息框告訴你輸入的注冊碼是無效的??磥聿皇荊etWindowTextA....我們
來試試GetDlgItemTextA。首先刪除舊的斷點:
:bc 0
(0 表示在斷點列表中的第0個斷點)
然后設定新的斷點:
:bpx getdlgitemtexta
再來試一次.....

3.1.3 在調試器中
=====================
哇!行了!你已經在SoftICE中了,就在函數GetDlgItemTextA開始的地方。按
F11鍵,回到調用函數的地方?,F在你到了SGLSET.EXE的內部,如果你還沒把握
的話,看看代碼窗和數據窗中間的一行,你應該看到這樣的東西:
----------SGLSET!.text+1B13----------
你可以這樣禁止一個斷點:
:bd 0
以后想再開啟它的話,可以這樣:
:be 0
代碼窗的第一行是:
CALL [USER32!GetDlgItemTextA]
按幾次Ctrl+Up 直到你看到下面這幾行。如果對匯編一點也不懂的話,看我加的 注解吧:
RET ; 函數結束
PUSH EBP ; 函數開始
MOV EBP ESP
SUB ESP 0000009C
PUSH ESI
> LEA EAX [EBP-34] ; EAX = EBP-34
PUSH EDI
MOVE ESI ECX
PUSH 32 ; 輸入字符串的最大長度
> PUSH EAX ; 輸入字符串的緩沖地址
PUSH 000003F4 ; 控制標識
PUSH DWORD PTR [ESI+1C] ; 對話框的句柄
CALL [USER32!GetDlgItemTextA] ; 取得輸入
PUSH指令保存那些數值以供后面使用。我已經在重要的地方加上了一個 '>'字符
作上記號. 看這幾行我們就知道字符緩沖區的地址保存在EAX中,而EAX等于 EBP-34。
所以我們來看看EBP-34那里有什么:
:d ebp-3
你應該能在數據窗中看到你輸入的東西。下面我們得來找開始核對輸入注冊碼的
地方。按F10一步一步地單步運行直到你發現與EBP-34有點關系的地方.... 你不
用單步運行多久,就會看到這些代碼
> LEA EAX [EBP+FFFFFF64] ; EAX = EBP-9C
LEA ECX [EBP-34] ; ECX = EBP-34
PUSH EAX ; 保存 EAX
PUSH ECX ; 保存 ECX
> CALL 00403DD0 ; Call 一子程序
ADD ESP 08 ; 刪除保存的信息
TEST EAX EAX ; 檢查返回值
JNZ 00402BC0 ; 如果不是零的話跳轉
對我來說,馬上就可以看出這象是一個字符比較程序。它們工作起來就是這樣:
* 輸入兩個字符串
如果相同就返回零
否則返回非零
那為什么程序要用一個字符串來和你輸入的相比較呢?看它是不是合法的?。?br/>能你已經想到了)。那么是什么東西躲在 [EBP+FFFFFF64] ? SoftICE處理負數
還不是很好,所以得算算:
100000000 - FFFFFF64 = 9C
在 SoftICE 用這樣的命令:
:? 0-FFFFFF64
100000000 對SoftICE來說太大了,但它還是給出了相同的結果。
現在是...來看看什么東西躲在EBP-9C那里的時候了...這樣輸入命令:
:d ebp-9c
數據窗口會顯示出一大排數字 ─ 注冊碼!但是記住我前面說過的...兩種注冊
方式對應兩個注冊碼....所以你把這些注冊碼抄下來以后,繼續用F10單步運行
....我們會遇到這些代碼
> LEA EAX [EBP-68] ; EAX = EBP-68
LEA ECX [EBP-34] ; ECX = EBP-34
PUSH EAX ; 保存 EAX
PUSH ECX ; 保存 ECX
> CALL 00403DD0 ; 再次調用子程序
ADD ESP 08 ; 刪除保存的信息
TEST EAX EAX ; 檢查返回結果
JNZ 00402BFF ; 如果非零跳轉
你在EBP-68處找到了什么?不錯吧...另一個注冊碼。
:d ebp-68
我們的練習結束了,希望一切順利。

3.2 Command Line 95 -容易的用戶名/注冊碼方式的注冊、注冊器
=================================================================
這是一個非常好的例子,注冊碼的計算也很簡單。

3.1.1 檢查程序
===========================
檢查程序以后你知道它是32位的應用程序,要求輸入名字和注冊碼。 讓我們開始!
3.1.2 捕捉代碼
===========================
我們象拆解TaskLock那樣 ─ 設置斷點。我們可以在兩個可能性最大的兩個函數
都設上斷點:GetWindowTextA 和 GetDlgItemTextA. 按下Ctrl+D 進入SoftICE, 然后:
:bpx getwindowtexta
:bpx getdlgitemtexta
接下來進入注冊對話框,輸入一個名字和一些數字(多數情況下是一個整數),
我是這么寫的,然后按OK....
Name: ED!SON '96
Code: 12345
程序在 GetDlgItemTextA 處停住了,就象TaskLock一樣。我們按F11回到調用它
的地方。用 Ctrl+Up卷動窗口直到看到這些:
MOV ESI [ESP+0C]
PUSH 1E ; 最大長度
PUSH 0040A680 ; 緩沖地址
PUSH 000003ED ; 控制柄
PUSH ESI ; 對話柄
CALL [User32!GetDlgItemTextA]
數字40A680引起了我們的注意,看看那里有什么:
:d 40a680
如果沒有我們輸入的名字,數據窗口里有些什么呢?好了,我們來研究下面的一 段代碼
PUSH 00
PUSH 00
PUSH 000003F6 ; 控制柄
MOV EDI 0040A680 ; 保存緩沖區地址
PUSH ESI ; 對話柄
CALL [User32!GetDlgItemInt]
GetDlgItemInt 和 GetDlgItemText差不多,但它從文字框中返回一個整數。
它出在EAX中返回來的,所以單步運行通過這些代碼,再來看看寄存器窗....
對我而言是:
EAX=00003039
十六進制數3039是多少? 輸入:
:? 3039
我們得到:
00003039 0000012345 "09"
^ 16進制 ^ 十進制 ^ ASCII
正如你看到(和已經猜到)的那樣,它是你輸入的注冊碼。OK,下面怎么辦?讓
我們來看下面的代碼
MOV [0040A548] EAX ; 返回注冊碼
MOV EDX EAX ; 同時保存在DX中

3.1.3 計算注冊碼
==========================
這樣注冊碼就算出來了
MOV ECX FFFFFFFF ; 這幾行計算字符長度
SUB EAX EAX ; .
REPNZ SCASB ; .
NOT ECX ; .
DEC ECX ; ECX <-- 長度
MOVSX EAX BYTE PTR [0040A680] ; 讀入40A680處的一字節
IMUL ECX EAX ; ECX = ECX * EAX
SHL ECX 0A ; 左移 0A 次
ADD ECX 0002F8CC ; 結果加上2F8CC
MOV [0040A664] ECX
驗證合法性....
CMP ECX EDX ; 比較
JZ 00402DA6 ; 如果相同就....
當你運行到比較這一步時,就可以得到你真正的注冊碼:
:? ecx
對我而言它是:
000DC0CC 0000901324
也就是說我的正確的注冊碼是901324.
按F5或者Ctrl+D讓它運行,然后用正確的注冊碼(十進制)再來一次。這一次 成功了!


4. 為COMMAND LINE 95制作注冊器
=========================================
我們把上面計算注冊碼的代碼翻譯成C語言程序。 最明了的計算公式就是:
code=((uppercase_first_char * length_of_string) << 0x0A) + 0x2f8cc;
注(1): 別忘了一件事 就是把所有字符轉成大寫
(2): "<< 0x0A" 實際上就是 "乘以 2^10"
完整的程序就是:
#include <string.h>
#include <stdio.h>
int main()
{
unsigned long code;
unsigned char buffer[0x1e];
printf("CommandLine95 Keymaker by ED!SON '96/n");
printf("Enter name: ");
gets(buffer);
strupr(buffer);
code = ( ((unsigned long)buffer[0] *
(unsigned long)strlen(buffer))
<< 0x0A) + 0x2f8cc;
printf("Your code is: %lu" code);
return 0;
}
爽吧?

4. 當程序調用一個函數時,PUSH和CALL這些指令是如何工作的
============================================================================
我們重新來看看TaskLock中的這段代碼
PUSH 32 ; 字符串最大長度
PUSH EAX ; 字符緩沖區地址
PUSH 000003F4 ; 控制標識
PUSH DWORD PTR [ESI+1C] ; 對話框柄
CALL [USER32!GetDlgItemTextA] ; 獲得字符串
如果認為是C語言編譯出來的話,這個CALL應該是這樣:
GetDlgItemTextA(hwndDlg 0x3F4 buffer 0x32);
^ [ESI+1C] ^ EAX
PUSH把數據保存在叫做堆棧的地方。每個PUSH把新的數據放在堆棧的頂部,被調
用的子程序就挨個地檢查躺在堆棧中的數據,按照定義來使用它們。
附錄
A. 讓SoftICE載入符號
==============================
你可以用exp getwindowtext命令來檢查SoftICE是否已經為GetWindowText裝入
了符號,象這樣:
:exp getwindowtext
如果你沒有得到所有GetWindowText函數的列表,你就得編輯/SIW95/WINICE.DAT,
在"Examples of export symbols that can be included for chicago"這段文字
以后的那些 'exp='的行首去掉';',為了節省內存,選擇最重要的幾個就可以了:
kernel32.dll
user32.dll
gdi32.dll
編輯完后,重新起動計算機使其生效。

B. 函數語法
============================
如果你看看下面的函數聲明,對我們上面講到的函數調用就容易明白了:
int GetWindowText(int windowhandle char *buffer int maxlen); int
GetDlgItemText(int dialoghandle int controlid char *buffer
int maxlen);
int GetDlgItemInt(int dialoghandle int controlid int *flag int type);
這些函數的詳細描述,可參考Windows/Win32編程手冊

C. 如何與我聯系
================
On IRC (EFNet): In #Ucf96 #Cracking
By e-mail: edison@ccnux.utm.my OR an461165@anon.penet.fi On my
homepage:http://www.geocities.com/SoHo/2680/cracking.html
======================================================================
譯后記:
花了一個下午的時間(上班時間啊?。?,譯完這篇拆解教程。不知大家看不看
得懂?ED!SON的文章是很淺顯易懂的,我擔心會讓我毛手毛腳地鬧出歧義來,
如果真有什么錯誤的話,帳應該算在我頭上(請大家來信指出)。ED!SON的這
篇文章對初學者來說非常值得一讀,我就是看完這篇文章以后,馬上連續CRACK
了幾個程序(就這么快、這么簡單!)下次我就把CRACK WINZIP6.2的過程講講
吧(WINZIP6.2的注冊器已經泛濫成災了,就當練習練習吧)。歡迎來信交流,
你CRACK了什么程序,別忘了告訴我你用的方法;如果覺得我翻譯得還算看得下
去話,就給些鼓勵吧。
CFIDO ID : Jim Tyan
EMAIL : jimtyan@tasteful.com
田學軍 8878888 CALL 29549 jimtyan@tasteful.co

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久久网站| 九九九热精品免费视频观看网站| 欧美国产日韩二区| 亚洲18私人小影院| 一本一本久久a久久精品综合小说| 日韩av在线免费看| 91国语精品自产拍在线观看性色| 国产精品尤物福利片在线观看| 亚洲成av人影院在线观看| 97视频在线观看免费高清完整版在线观看| 亚洲第一天堂无码专区| 亚洲国模精品一区| 久久91亚洲精品中文字幕| 精品视频在线观看日韩| 午夜精品免费视频| 亚洲最大的免费| 第一福利永久视频精品| 亚洲综合色激情五月| 国产精品久久久久久久午夜| 日韩在线免费视频观看| 欧美久久精品一级黑人c片| 久久亚洲欧美日韩精品专区| 色噜噜狠狠狠综合曰曰曰88av| 精品中文字幕视频| 奇米四色中文综合久久| 日韩av电影国产| 国产精品久久久久久久久免费看| 国产日韩换脸av一区在线观看| 欧美性生活大片免费观看网址| 国产va免费精品高清在线| 主播福利视频一区| 成人av在线亚洲| 中文字幕日韩精品有码视频| 亚洲一级片在线看| 欧美日韩国产色| 俺去了亚洲欧美日韩| 色综合导航网站| 亚洲国产精品99| 4438全国亚洲精品在线观看视频| 国产美女精品视频免费观看| 国产精品日韩电影| 亚洲第五色综合网| 亚洲精品suv精品一区二区| 久久伊人精品天天| 国产精品久久久久久一区二区| 亚洲电影免费观看高清| 久久久噜噜噜久久中文字免| 欧美日韩激情视频8区| 97热精品视频官网| 亚洲欧美综合另类中字| 欧美电影《睫毛膏》| 欧美精品一二区| 一区二区三区四区精品| 国产一区二区三区四区福利| 欧美中在线观看| 亚洲一区亚洲二区| 亚洲第一福利网| 国产不卡精品视男人的天堂| 91沈先生在线观看| 国产综合久久久久久| 欧美大片免费观看在线观看网站推荐| 日韩欧美在线免费| 欧美激情亚洲综合一区| 亚洲xxxxx性| 国精产品一区一区三区有限在线| 日韩二区三区在线| 欧美性xxxx极品hd欧美风情| 青青草精品毛片| 91av在线国产| 96精品视频在线| 亚洲激情免费观看| 亚洲成人久久久| 在线成人免费网站| 91在线视频精品| 久久免费少妇高潮久久精品99| 色先锋久久影院av| 日韩欧美国产免费播放| 中文字幕一精品亚洲无线一区| 日韩中文字幕网址| 欧美猛男性生活免费| 精品久久久久久久久久久久久| 日本国产一区二区三区| 国模叶桐国产精品一区| 欧洲美女免费图片一区| 在线亚洲午夜片av大片| 国产成人亚洲综合91精品| 国产大片精品免费永久看nba| 亚洲欧美国产高清va在线播| 国产成人aa精品一区在线播放| 国产精品久久久久久久久借妻| 日韩av在线不卡| 国产精品视频专区| 欧美大片第1页| 伊人成人开心激情综合网| 国产欧洲精品视频| 国产成人一区二区三区小说| 午夜精品一区二区三区视频免费看| 992tv成人免费视频| 久久亚洲欧美日韩精品专区| 91精品美女在线| 久久久精品视频在线观看| 亚洲成人黄色在线| 亚洲少妇激情视频| 欧洲美女7788成人免费视频| 九九热最新视频//这里只有精品| 日韩精品在线视频| 久久久999国产| 91欧美精品成人综合在线观看| 欧美壮男野外gaytube| 97国产精品视频人人做人人爱| 欧美一级淫片aaaaaaa视频| 亚洲免费电影在线观看| 国产欧美日韩精品在线观看| 一夜七次郎国产精品亚洲| 欧美激情欧美狂野欧美精品| 成人国产精品av| 亚洲午夜女主播在线直播| 国产精品国产自产拍高清av水多| 91亚洲精华国产精华| 亚洲国产小视频| 亚洲免费视频观看| 欧美超级免费视 在线| 91高清视频免费观看| 国产成人涩涩涩视频在线观看| 亚洲深夜福利网站| 国内精品美女av在线播放| 正在播放国产一区| 深夜福利国产精品| 久久影视电视剧凤归四时歌| 国产精品久久久久av免费| 国产欧美欧洲在线观看| 亚洲天堂一区二区三区| 欧美在线一级视频| 色老头一区二区三区| 国产精品99久久久久久白浆小说| 韩国v欧美v日本v亚洲| 国产精品亚洲美女av网站| 欧美中文字幕在线播放| 98精品国产高清在线xxxx天堂| www.日韩免费| 欧美一区二区.| 久久av红桃一区二区小说| 亚洲成人国产精品| 亚洲国产女人aaa毛片在线| 日韩动漫免费观看电视剧高清| 日韩欧中文字幕| 国产精品免费电影| 久久久精品视频成人| 国产精品成人va在线观看| 日韩国产高清污视频在线观看| 97视频在线观看视频免费视频| yw.139尤物在线精品视频| 日韩女优人人人人射在线视频| 韩国欧美亚洲国产| www.日韩欧美| 国产美女扒开尿口久久久| 精品亚洲va在线va天堂资源站| 日韩精品免费在线视频观看| 日韩在线观看免费全集电视剧网站| 国产一区二区三区视频在线观看| 国产丝袜高跟一区| 亚洲福利视频网| 日本精品一区二区三区在线播放视频| 亚洲精品理论电影|