全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:10252
推到 Plurk!
推到 Facebook!

請問如何自製加殼程式

尚未結案
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-02-22 13:26:40 IP:211.20.xxx.xxx 未訂閱
請問如何自製加殼程式 它是用什麼方法讓包起來的檔案在記憶體中解開並執行的
juneo
高階會員


發表:103
回覆:190
積分:118
註冊:2004-05-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-02-25 11:56:09 IP:211.75.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=46809 請善用搜尋功能^^ 自然就是寫程式最好的方式, 分享比獲得更快樂--Juneo
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-02-25 13:14:01 IP:211.20.xxx.xxx 未訂閱
你給的連結文章內好像沒有我要的東西耶    我在搜尋中找過"加殼",可是都只是軟體介紹 沒有說要怎麼自己寫出具有加殼功能的程式    我想做到的功能如下    可以將數個檔案包起來成為一個.EXE 在執行時,包起來的檔案直接在"記憶體"中解開並執行的 不是解開到目錄中,因為我不要人家找到我真正要執行的程式
juneo
高階會員


發表:103
回覆:190
積分:118
註冊:2004-05-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-02-25 16:01:58 IP:211.20.xxx.xxx 未訂閱
除非你不在Windows 底下運作 以前在DOS底下做過 解壓縮到硬碟的TEMP->執行->載到記憶體->刪除檔案    現在windows 在執行中的檔案會lock起來 也就是使用中的檔案不能被更動    既然山不轉路轉---逆向思考    在windows 底下開出虛擬磁碟空間,把檔案丟到這執行 不过只要知道你開的虛擬空間還是可以找到檔案 win2000查一下記憶體也可以追蹤到 這各方法重點是要解決,如何讓虛擬硬碟空間只有你的程式可以用 希望對你有所幫助 自然就是寫程式最好的方式, 分享比獲得更快樂--Juneo
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-02-25 16:49:59 IP:211.20.xxx.xxx 未訂閱
因為市面上有所謂的加殼程式可以做到我說的功能 不用產生TEMP檔,直接塞進記憶體 目前我只知道它跟檔案的 PE 格式有關,至於做法我還是不知道 所以想了解一下它是怎麼做到的 另外你提到的"虛擬硬碟空間"的技術 是否類似市面上"虛擬光碟"的技術 這個我也有興趣 不知您是否有資料或範例可以提供給我參考
conundrum
尊榮會員


發表:893
回覆:1272
積分:643
註冊:2004-01-06

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-02-26 15:17:14 IP:220.132.xxx.xxx 未訂閱
引言: 可以將數個檔案包起來成為一個.EXE 在執行時,包起來的檔案直接在"記憶體"中解開並執行的 不是解開到目錄中,因為我不要人家找到我真正要執行的程式
加殼程式=封裝方式 方式 = N種 但理論=一個 最經典的檔案壓縮找RAR或ZIP 光碟 |白|紅|N皮書 ISO等規則 至於如何讓虛擬硬碟空間只有你的程式可以用 空間=可置放的位置也就是簡單可說硬碟位置或利用RAMDISK模擬HDD 再來 AP的加殼 雖封裝的一種 但是 包起來的檔案直接在"記憶體"中解開並執行的 不是解開到目錄中 //沒看過這樣的東西耶可以舉例嗎 ? 矛盾中的矛盾 如是眼睛看不到的或檔案總管收尋不到的還是不算沒有喔 因為有很多壓縮與解壓時你看不到 只能說因為還不知道理論 win32 ,AP下的PE的資料 KTOP也很多但是如.net類 哈哈 至於這些技術 早在dos時代就有很多了 KTOP也有很多 不是很簡單嬤不是就簡單 目前較經典的RAMDISK應用 除了嵌入式系統可看 windows的可查winpe http://delphi.ktop.com.tw/topic.php?topic_id=50669 Linux的可查KNOPPIX GeeXboX LiveCD http://delphi.ktop.com.tw/topic.php?topic_id=61377 問對問題 請別攪混問題產生問題中的問題 因為不看理論 那就是問題的問題 不知您是否有資料或範例可以提供給我參考 juneo 兄提示的搜索 光這2個用心看就知道 你就可以知道是否了解與不了解 1 【Delphi】【發表】WinZPP 自製另類壓縮工具 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=31986 2 【BCB】【發表】檔案的分割與合併 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=22161 http://delphi.ktop.com.tw/topic.php?topic_id=42436 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=31613 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=63906 看完folkchen 網友的記錄 應該是不錯的所以就 哈哈 哈哈 發表人 - conundrum 於 2005/02/26 18:56:52
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-03-01 09:29:26 IP:211.20.xxx.xxx 未訂閱
該是用小說方式寫的文章,但是內容應該是真實的不是唬弄的 http://soft.yesky.com/SoftChannel/72356708445323264/20041216/1889603_2.shtml    以下是在網路上找到的說明
引言: 什麼是加殼和脫殼? 加殼:其實是利用特殊的演算法,對EXE、DLL檔裏的資源進行壓縮。類似WINZIP 的效果,只不過這個壓縮之後的檔,可以獨立運行,解壓過程完全隱蔽,都在記憶體中完成。解壓原理,是加殼工具在檔頭裏加了一段指令,告訴CPU,怎麼才能解壓自己。現在的CPU都很快,所以這個解壓過程你看不出什麼東東。軟體一下子就打開了,只有你機器配置非常差,才會感覺到不加殼和加殼後的軟體運行速度的差別。當你加殼時,其實就是給可執行的檔加上個外衣。用戶執行的只是這個外殼程式。當你執行這個程式的時候這個殼就會把原來的程式在記憶體中解開,解開後,以後的就交給真正的程式。所以,這些的工作只是在記憶體中運行的,是不可以瞭解具體是怎麼樣在記憶體中運行的。通常說的對外殼加密,都是指很多網上免費或者非免費的軟體,被一些專門的加殼程式加殼,基本上是對程式的壓縮或者不壓縮。因為有的時候程式會過大,需要壓縮。但是大部分的程式是因為防止反跟蹤,防止程式被人跟蹤調試,防止演算法程式不想被別人靜態分析。加密代碼和資料,保護你的程式資料的完整性。不被修改或者窺視你程式的內幕。 脫殼,是完全破除壓縮後軟體無法編輯的限制,去掉頭部的解壓縮指令,然後解壓出加殼前的完整軟體。這樣,你就可以對其“動刀”了。呵呵~~當然是和加殼相反喲。
它是壓縮和解壓縮的原理沒有錯,但是最重要的,也是我不明白的地方是 要如何讓解壓縮的過程在內存(記憶體)中動作,並且執行記憶體中的檔案而不是硬碟中的檔案 只果有玩過中文的話就知道有不少程式都是有加殼過的,還有不少遊戲也是(光是我玩過的仙境傳說、飛天歷險就都有,其他我沒有玩過的應該也有) 它們在執行過程並不會產生Temp檔 我提到PE是因為這類程式,是依該檔案的PE架構做某些處理後,直接放入記憶體 目前我僅知如此,不知有沒有人可以給我更多的資料
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-03-01 09:36:58 IP:211.20.xxx.xxx 未訂閱
補充 PE指的不是WIN PE 請看以下資料 http://old.ddvip.net/jmjm/shell/index.asp 中的 http://old.ddvip.net/jmjm/shell/64.htm 我只找到這些有關脫殼的文章,就是找不到加殼的技術文章
conundrum
尊榮會員


發表:893
回覆:1272
積分:643
註冊:2004-01-06

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-03-01 19:12:46 IP:220.132.xxx.xxx 未訂閱
 
(Portable Executable,PE) 格式檔案 也就是可移殖執行檔 既然是就是載入記憶體 安那甘有一點知道了    1 該是用小說方式寫的文章,但是內容應該是真實的不是唬弄的    // 請攪清楚 所有win32AP都是漏至記憶體執行的 所以才有動態資源檔 和所謂木馬,黑客 等一樣的
   如果說要說上文來比較 那還應該說其實都一樣因為工具幫你處理了 要自己寫這樣的工具=部份開發自己的函式庫或使用如KOL
   就是=你說的加殼一般 那為什麼網路看到的win32 ap都可加殼 因為是使用正規載入方式阿    加殼:其實是利用特殊的演算法,對EXE、DLL檔裏的資源進行壓縮。類似WINZIP 的效果    // 應該說封裝的一種 不論rar zip等都是封裝的一種 所謂的加殼/脫殼 單純說是把資源檔壓縮 因為一般編譯後的程式都殘留許多不用的資源
   由於這樣的壓縮他把原本通行道路給改了 才使的在動態的狀態下來正常執行 在靜態狀態下會變成無法使用正規方式讀取資源檔 
(除非你也了解 加殼程式的載入方式 也就是說你知道他的函式載入)
問題一 如果一個10mb的程式 加殼後 是1.8mb 但是你知道他在記憶體中與無加殼的原程式 有差嗎 應該說無感覺 有些更會更慢 因為原本通道已改了
因為在執行之後進入動態是一樣的 這和防破解中的    一般所謂的加殼 大都為原編譯器後在封裝 那可不可以與使用的編譯器一並加殼編譯 當然是可以的 不過這樣的大都不是免費的工具    要如何讓解壓縮的過程在內存(記憶體)中動作,並且執行記憶體中的檔案而不是硬碟中的檔案
//dll你知道嗎 使用dll的原理和加殼(封裝)是類同的    只果有玩過中文的話就知道有不少程式都是有加殼過的,還有不少遊戲也是(光是我玩過的仙境傳說、飛天歷險就都有,其他我沒有玩過的應該也有)
上述已說 加殼是封裝的一種 所以只能說 如果沒有那還真奇怪    我提到PE是因為這類程式,是依該檔案的PE架構做某些處理後,直接放入記憶體
上述也說了 所有win32的AP都是載入之後執行的 至於執行之後要使用那個資源檔等應該說在開發時的程式工具就可自行定義甚至修改
載入預設端口並自行由自己的開發工具直接修改BCB或delphi都有可設定的值啦 不然為什麼會有感染病毒的事發生     PE指的不是WIN PE
中的
http://old.ddvip.net/jmjm/shell/64.htm    光封裝的理論資料一邏框 exe dll iso rar zip img resources 等 PE只是封裝檔案結構下的其中之一 資源檔對印格式    最開使與最後
它是用什麼方法讓包起來的檔案在記憶體中解開並執行的    光這句 就有數種說法 那為什麼我說沒看過是 
1 所謂單純來說原本exe的resources為2mb通道14000壓縮之後=500k通道26700所以載入記憶體之後
加殼通道26700轉14000解resources出來對印
exe都是在與cup和ram跑來跑去也可以說cpu與RAM他們2個互相以要值給值除bug的狀態下找出正確值
和硬碟下執行ap產生的暫存跟本上可以說被誤導的說明 這exe產生的暫存是看設計者自己的架構所寫的邏輯產生方式    如果是說以rar zip等沒有暫存才是沒看過 因為在他的方式下已壓縮的不是單一檔如目錄 那遊戲的暗黑破壞神與魔獸這類是使用啥方式
解壓取檔案使用 那類似iso不過他是mqp 一樣是有暫存 不然系統預設的temp又不是給好看的 所以才說沒看到 哈哈    沒看到加殼 其實那都有免費的源碼 不過要自己除bug
http://delphi.ktop.com.tw/topic.php?topic_id=63906
該說的方向都說了 還能說啥
Albertz
初階會員


發表:2
回覆:57
積分:31
註冊:2002-09-05

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-03-01 21:15:31 IP:211.20.xxx.xxx 未訂閱
有看過 UPX 嗎?    http://sourceforge.net/project/showfiles.php?group_id=2331&package_id=2293
juneo
高階會員


發表:103
回覆:190
積分:118
註冊:2004-05-13

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-03-02 09:27:27 IP:211.20.xxx.xxx 未訂閱
我回覆看看你的疑問是否這樣 Windows 系統在執行檔案的時候工作狀態 以開啟WORD為例 點WORD執行程式->windows開啟暫存檔(通常在c:\winnt\temp\~*.tmp) 顯示word.....開始打字->結束程式->儲存暫存檔->結束word OK 當你在開啟WORD 並且再上面打上一些字,在去將暫存檔案叫出來, 只要不用WORD格式取出,應該是亂碼一堆,不知道你是不是要類似這樣的效果 Windows 我稱它為交換式系統,執行檔案<->暫存檔<->運作檔案 還是你所謂的"加殼"就是加密、演算法 or 執行加密?? 自然就是寫程式最好的方式, 分享比獲得更快樂--Juneo
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-03-02 11:38:40 IP:211.20.xxx.xxx 未訂閱
基本上加殼程式和者裝程式很像 但是不一樣 封裝程式:將程式打包,在執行時,將內容物(一堆檔案)依安裝過程COPY到其他目錄中,也可以執行其中的某個主要檔案 以上動作都在硬碟中作業,記憶體中執行的只有解封裝的程式,也就是安裝程式 加殼程式:一樣是將程式打包,並將解封裝程式包在最外層,成為一個執行檔,被打包的程式可能有壓縮也可能沒有,因為加殼的目的不在壓縮,而是檔案加密,只是因為目前的PC夠快,可以附屬壓縮的功能在其中 該檔被執行時,會將其內容(檔案)釋放於記憶體中,直接啟動它,不用存入硬碟,再執行硬碟中的檔案 另一個架構就有點類似虛擬空間,屬於遊戲程式的做法 將一堆程式(圖檔)包成一個大檔,另外的某程式要用到某個圖時 再由這個大檔中取出該檔,直接讀到記憶體中 這種圖檔的處理很好辦,沒有"啟動記憶體中的程式"的問題 第一種方式有"啟動記憶體中的程式",這是我不會的地方 我想可能和 WriteProcessMemory 這個API或其他的API有關 目前還在了解中 至於要釋放到記憶體中的不是整個檔丟進去,只要丟真正在做事情的部份 所以要先解析PE格式才能找出真正的"程式" P.S:EXE中不是只有做事情的程式,還有一些資料描述的東西,那些東東不用進去執行段的記憶體
juneo
高階會員


發表:103
回覆:190
積分:118
註冊:2004-05-13

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-03-02 16:15:35 IP:211.20.xxx.xxx 未訂閱
這裡有各很像你說的方式 也就是產生資源檔案 http://delphi.ktop.com.tw/topic.php?topic_id=60393 看一看相關的連結後 應該找的到你要的方式 執行檔(外殼)->解開->執行->結束->執行檔(外殼) 自然就是寫程式最好的方式, 分享比獲得更快樂--Juneo
jcjroc
高階會員


發表:21
回覆:279
積分:115
註冊:2002-09-18

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-03-03 14:04:31 IP:211.75.xxx.xxx 未訂閱
你可以去找一些組合語言的書,有些有提到這種技術的原理 包程式進入點的更改等,但最難的是在執行期的"脫殼 解密" 至於對PE表的讀寫倒是比較簡單,文章一堆
conundrum
尊榮會員


發表:893
回覆:1272
積分:643
註冊:2004-01-06

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-03-03 21:57:30 IP:218.175.xxx.xxx 未訂閱
在網路這麼多年 見過 dos Novell NDOS、IBM PC-DOS 暈倒98~2003系列os 這次 我遇到 可以對抗先人理論之言 實在無顏體認自我無知 感恩此篇 令我大開眼界 因為我該進修了 封裝 VS PE PE 卡偉大 封筆卡ez 感恩此篇
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#16 引用回覆 回覆 發表時間:2005-03-04 08:48:17 IP:211.20.xxx.xxx 未訂閱
>>PE 卡偉大 封筆卡ez     conundrum 大大,何出此言 是不是我的觀念有不對的地方 讓你感到朽木不可雕也 因為我看到的資料大多都是寫它是解開到記憶體中直接在記憶體中RUN 所以一直朝這個方向在想 如果對你的專業有衝突,我很抱歉 這方面我不懂,只是有看到這種說法想要了解一下 如有謬誤之處,敬請見諒、指教    juneo 你是不是也有在玩 飛天CB 呀 看你的人像好像是裡面的修羅族 前幾天我的帳號被盜用,東西被搬光光 < > 我就不玩了 < > 你所提供的連結,所述如下 >>例如我之前有把dll檔包起來,程式執行時再把dll放到指定目錄中,程式關閉就把dll檔刪除掉 我是希望可以不產生資源檔,不透過Windows的執行動作 直接把程式碼載入記憶體,並在記憶體中執行它 我找到了一篇文章可以給大家參考 它有寫出原理,但是還是沒有寫出實做要用到的API 序 號:233062 標 題:淺談殼的加載步驟及手動脫殼。 (6千字) 發信人:ljtt 時 間:2002-8-7 23:06:03 閱讀次數:727 詳細信息: 淺談殼的加載步驟及手動脫殼。 現在玩脫殼的人越來越多了,不知道是好事還是壞事。 現在玩手動脫殼一般三樣工具足矣:loader,ImpREC,TRW2000。也許是這三劍客的功能太強大,因此手動脫殼也變得像流水化作業。大致以下幾個步驟就搞定了。 1)loader找OEP.(OEP就是程序原來的入口點,即Original Entry Point) 2)TRW2000來Dump。也就是把內存映像保存為文件。 3)ImpREC修補Import Table.(也就是修補程序原來的API地址) 不過如果這樣,那麼我想手動脫殼也沒有必要了,因為更先進的工具如各種脫殼機會更快捷有效。既然是手動脫殼,當然想對殼有所瞭解,那麼讓我們看看殼是如何工作的吧。 殼和病毒從某些方面比較類似,都需要比原程序代碼更早的獲得控制權,這是通過在原程序的代碼執行前加入自己的一段代碼來實現的。注意我說的這是執行時的情況。對於文件中的情況,就是殼修改了原程序的執行文件的組織結構,從而達到殼的代碼能夠比原程序的代碼提前獲得控制權,並且不會影響原程序的正常運行,所以從這點上說,殼和病毒很類似。 現在的執行文件一般都是PE格式,如果你對PE格式一無所知,最好還是去看一看相關的資料。我沒有那麼地道的專業知識,也怕誤人子弟。 相關名詞 1)Entry Point (入口點) PE格式的可執行文件的執行時的入口點,即是PE格式中的Entry Point。 用PEditor或者LordPE之類的PE查看工具看看NotePad.exe,你就會看到Entry Point的值。 也就是說NotePad.exe在執行時的第一行代碼的地址應該就是這個值。(當然應該加上基地址) 2)Section (節區) PE格式文件是按節區進行規劃組織的,不同的節區一般保存的數據的作用也不相同。通常使用缺省方式編譯的程序文件,有CODE/DATA/TLS/.text/.data/.tls/.rsrc/.rdata/.edata/.reloc等不同的名稱,有的用於保存程序代碼,如CODE和.text節區,有的用於保存程序中的變量的,如DATA/.data節區,有的保存重定位信息,如.reloc,有的用於保存資源數據,如.rsrc。等等等等, 當然這是缺省情況下編譯器產生的結構。 而節區名稱和節區中的數據其實沒有必然的聯繫, 節區中保存的數據也沒有什麼硬性的限制。所以你可以在編譯時用開關參數改變這些情況。 3)ImageBase (基地址) 不僅程序文件按節區規劃,而且程序文件在運行時Windows系統也是按節區加載的。那麼每一塊的節區的順序如何?起始的地址是什麼呢? 這就由基地址決定。在程序的文件頭部保存了每個節區的描述信息,比如有前面提到的節區名稱,還有節區的大小,以及節區的相對虛擬地址(RVA)。 如果我們把節區的相對虛擬地址(RVA)加上基地址(ImageBase)就可以知道節區在內存中的虛擬地址(VA)了。Windows系統就是按照這個要求來加載各個節區的。這樣Windows系統依次把各個節區放到了它相應的虛擬地址空間。 所以如果我們把相對虛擬地址(RVA)看成是坐標的偏移量的話,那麼ImageBase就是原點了。有了這個原點,一切都簡單了。 好了有了簡要的介紹,我們來看看殼的加載過程吧。注意這裡說的是一般情況,不特指某個殼,如果那樣的話,我想那大概是洋洋灑灑幾萬字的了,好像我沒有寫過這麼長的。雖然我的五筆練得還不錯。 1)獲取殼自己所需要使用的API地址 如果你用PE查看工具看看加殼後的程序文件,會發現未加殼的程序文件和加殼後的程序文件的Import Table不太一樣, 加殼後的Import Table一般所引入的DLL和API很少,甚至只有Kernel32.dll以及GetProcAddress這個API。 我想你不會認為殼只用這個API就可以做所有的事吧。 殼還需要很多其他的API來完成它的工作。 當然他並不想讓你知道他想用哪個API,所以一般他只是在殼的代碼中動態加載這些API,而只把一些你嗅不過什麼味道的幾個API放在Import Table中。 當然這其中殼可能會用到一些Anti技術,不過這和本文主旨無關,所以就不說了。 2)解密原程序的各個節區(Section)的數據 殼出於保護原程序代碼和數據的目的,一般都會加密原程序文件的各個節區。既然是加密保存,那麼在程序執行時你總不能也保持加密狀態吧,所以解密是殼必做的工作之一。 一般殼按節區加密的,那麼在解密時也按節區解密,並且把解密的節區數據按照節區的定義放在合適的內存位置。 如果加殼時用到了壓縮技術,那麼在解密之前還有一道工序,當然是解壓縮。 這也是一些殼的特色之一,比如說原來的程序文件未加殼時1-2M大小,加殼後反而只有幾百K,這種瘦身技術當然會吸引了不少眼球。 3)重定位 前面我們提到了ImageBase,即程序的基地址,當然這只是程序文件中聲明的,程序運行時能夠保證系統一定滿足你的要求嗎? 對於EXE的程序文件來說,Windows系統會盡量滿足你的要求。 比如一般EXE文件的基地址為0x400000,而運行時Windows系統提供給程序的基地址也同樣是0x400000。在這種情況下就不需要進行地址"重定位"了。 由於不需要對EXE文件進行"重定位",所以很多殼在加殼時把原程序文件中用於保存重定位信息的節區乾脆也去掉了,這樣使得加殼後的文件更加小巧。有些工具提供Wipe Reloc的功能,其實就是這個作用。 不過對於DLL的動態鏈接庫文件來說,Windows系統沒有辦法保證每一次DLL運行時提供相同的基地址。這樣"重定位"就很重要了。 此時殼中也需要提供進行"重定位"的代碼,否則原程序中的代碼是無法正常運行起來的。從這點來說,加殼的DLL比加殼的EXE更難修正。 4)HOOK-API 我們知道程序文件中的Import Table的作用是讓Windows系統在程序運行時提供API的實際地址給程序使用。 在程序的第一行代碼執行之前,Windows系統就完成了這個工作。 而殼一般都修改了原程序文件的Import Table,那麼原程序文件的Import Table由誰來處理呢? 這當然由殼來自己處理了,因此殼不得不模仿Windows系統的工作來填充Import Table中相關的數據。 Import Table結構中與實際運行相關的主要是IAT結構, 這個結構中用於保存API的實際地址,因此殼所需要的就是填充這個結構中的數據。 不過殼不是填充這些實際的API地址,而是填充殼中用來HOOK-API的代碼的地址。 這樣殼中的代碼一旦完成了加載工作,在進入原程序的代碼之後,仍然能夠間接地獲得程序的控制權。 因為程序總是需要與系統打交道,與系統交道的途徑是API,而API的地址已經替換成了殼的HOOK-API的地址,那麼每一次程序與系統打交道,都會讓殼的代碼獲得一次控制權,一來殼可以進行反跟蹤繼續保護軟件,二來可以完成某些特殊的任務。 其實這就是所謂HOOK技術。 5)最後當然是跳轉到程序原入口點。 這個大家比較熟悉,找的就是它。脫殼時大多數也是在這個時候。從這個時候起殼要把控制權交還給原程序了。 以上是一個簡單的總結。這代表了大多數殼的加載過程,不過特殊的不包括在內,介紹一下讓大家瞭解一些。 當然還有一些殼充分利用了PE結構的特點,比如利用TLS加載的特點也挺有趣。。。。。 一點經驗: 手動脫殼不一定要在程序原入口點。沒有人規定你一定要在那裡動手。只要你能保證脫殼後程序正常執行就行了。 當然我們必需得知道這個原入口點的值,否則我們無法修復程序文件中的Entry Point的值了。 那麼手動脫殼還有比較常用的地方嗎?有 就是前面所提到的第2步完成後。此時Section數據已經解密,而且殼還沒有來得及進行Hook-Api,很多殼圖簡單沒有把原程序的Import Table破壞掉,這個時候正是我們下手的好時機。 要發現這個地方也很容易,一般重定位代碼的特徵是很明顯的。特別是有些殼有壓縮功能的時候,更是容易發現。 這個時候脫出來的文件組織一下可以達到和原程序幾乎相同的大小。而不是通常的內存映像大小。 抱歉,我寫得很倉促,各種錯誤來不及改正。不知道大家能不能看懂我在說什麼。希望大家不要以為我在自言自語。 永遠支持看雪。 永遠支持看雪論壇。 ljtt --------------------------------------------------------------------------------
conundrum
尊榮會員


發表:893
回覆:1272
積分:643
註冊:2004-01-06

發送簡訊給我
#17 引用回覆 回覆 發表時間:2005-03-05 00:19:57 IP:218.175.xxx.xxx 未訂閱
 1 我不是殺咪大大 麥害我
2 觀念你沒錯阿 //是庵老王賣瓜
3 讓你感到朽木不可雕也 //沒這種事只是自己感到 要看要學要靜要冷
4 如果對你的專業有衝突,我很抱歉 
//我不會寫程式 所以沒專業一說問題 何來衝突 只有討論感覺不到的角度
5 如有謬誤之處,敬請見諒、指教 這句應該是我說 感恩 多謝指導    抱歉 PE 卡偉大 封筆卡ez 是自己對此篇的情緒 封 是一定的ㄟ
因為你禮貌性的問候 
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=51329
當本人自我記錄因為KTOP本來就是記錄用
所以最後一筆 (麥割po我ㄟ名) 問候庵了
因為此篇 也給你禮貌性回應了 ok    因為我發現 很多有意義的事情可以用在自己的周遭不一定要用在虛擬的世界
來的輕鬆自在與真實性 無障礙的科技 應該卡沒人有興趣 我卡有興趣 delphi 等缺缺了 哈哈    與人討論不乏認知問題與角度問題 最終的答案也不一定是決對 
討論的意義到底是殺咪 已經 無力
>     
        
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#18 引用回覆 回覆 發表時間:2005-03-15 08:36:46 IP:211.20.xxx.xxx 未訂閱
因為 Albertz 提供了原程式碼 分數就給他好了 大陸的看雪論壇也有不少資料 我再慢慢的K看看 謝謝大家了~~
juneo
高階會員


發表:103
回覆:190
積分:118
註冊:2004-05-13

發送簡訊給我
#19 引用回覆 回覆 發表時間:2005-03-15 09:14:16 IP:211.20.xxx.xxx 未訂閱
folkchen 我是有玩飛天^^ 不過僅限於測試Bug 我幾乎沒時間玩,盜用帳號問題不外乎就那幾各方式^^ 數學 程式 經驗=不懂^^
harrypp
中階會員


發表:7
回覆:124
積分:61
註冊:2006-08-31

發送簡訊給我
#20 引用回覆 回覆 發表時間:2009-03-26 11:14:39 IP:218.210.xxx.xxx 訂閱
你一次寫太多摻雜了好幾個問題,
要把程式或資料封裝進去程式很多方法,
以前VC會用resource的方式封裝進去。
更簡單的話就把程式碼當成字元陣列擺到程式裡面,
需要的話再把此陣列拿來用,
若有加密or壓縮就再解密or解壓縮放回記憶體。

至於要怎麼執行此段又是一個題目,
可以google查查dynamically load code。
系統時間:2024-11-25 22:59:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!