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

DLL內函數問題

缺席
Eruruu
一般會員


發表:9
回覆:13
積分:9
註冊:2006-07-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-03-02 00:09:50 IP:218.165.xxx.xxx 訂閱
請問有沒有什麼辦法可以把kernel32.dll裡的LoadLibraryA拿出來放到其它地方,
讓程式可以不用載入kernel32.dll而能使用該函數呢?
因為要在kernel32.dll被鎖的情況下使用它裡面的函數
------
わたしは..わたし
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-03-02 00:22:20 IP:211.22.xxx.xxx 未訂閱
不懂你的意思?!
LoadLibrary是Windows API,存在於DLL之中提供給所有的應用程式使用,以DLL的特性而言,每個應用程式都將載入的DLL放入到自己獨特的4GB空間裡,何來被鎖定?
===================引 用 文 章===================
請問有沒有什麼辦法可以把kernel32.dll裡的LoadLibraryA拿出來放到其它地方,
讓程式可以不用載入kernel32.dll而能使用該函數呢?
因為要在kernel32.dll被鎖的情況下使用它裡面的函數
Eruruu
一般會員


發表:9
回覆:13
積分:9
註冊:2006-07-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-03-02 00:48:02 IP:218.165.xxx.xxx 訂閱
方法很多啊,比如說A在B執行時用HOOK把B的某函數加入JMP,B的某函數就被A限制了,
總之,希望能把kernel32.dll裡的函數拿到別的地方放
------
わたしは..わたし
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-03-03 17:53:57 IP:61.64.xxx.xxx 訂閱
這是個好問題

好蠢

假設,你可以將之取出,確實也有方法可以,然後編譯

這跟將 kernel32.dll 當場複製一份,並改成其他名稱,再用 LoadLibrary 載入,有什麼不同

更不用說,你不需包含該部分程式碼

至於「
A在B執行時用HOOK把B的某函數加入JMP,B的某函數就被A限制」這句話,看不懂

你懂 DLL 是什麼東西嗎?
Eruruu
一般會員


發表:9
回覆:13
積分:9
註冊:2006-07-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-03-04 18:07:53 IP:61.223.xxx.xxx 訂閱
你懂 DLL 是什麼東西嗎?

雖然你的回答聽起來很妙,不過那只不過是錯覺,為什麼我要提到LoadLibrary 。
LoadLibrary 在kernel32.dll裡面,就算你複製kernel32.dll 成別的名字,請問你要怎麼
用LoadLibrary載入,還不是用kernel32.dll裡的LoadLibrary,我只要在LoadLibrary上加入jmp
到我的程序中,再用GetProcAddress(dll, "LoadLibraryA");或是任何一個kernel32.dll裡有的函數名,
那不管你怎麼複製kernel32.dll我都能把它檔下來,因為變的只有檔名,函數名又沒變
而且我這麼問是因為我的程式exe和dll中dll必須要在攔截程式開啟後才開

如果有其它方法的話,麻煩大家幫個忙,或是能把函數拿給遠程的dll的方法
------
わたしは..わたし
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-03-06 01:23:11 IP:61.64.xxx.xxx 訂閱
那我建議你看一篇文章「提問的智慧」
才不會沒人看得懂妳的問題

回到正題

這就成一個古早的「老問題」,我要如何「攔截攔截中斷,並不被別人欄走」

既然
加得進去,就表示「移除得了」,另外,名稱真的不會變嗎?
不能改嗎?不過是一堆 Binary code 更不用說是依據標準規格產生的,只要是標準規格,沒什麼不能改的
你要範例的話 http://delphi.ktop.com.tw/board.php?cid=35&fid=967&tid=87132
所以,改名?恩只要長度一樣,很簡單,改起來也很快,長度不一樣,需要在加上一道手續,就是 reallocation
除非你將整的功能廢掉,不過這時 Windows 大概也廢了,kernel32.dll 的東西全都不能用,那 windows 還能活嗎?

沒什麼不能破的,看 XBOX 就好了,出沒多久,就有破解方式
只看你有沒有動力去做而已

所以要是所檔名,哪複製即可,若是鎖函數名稱,那改名即可
要是鎖 address,那就 reallocation 或簡單的只有改 Base-Address
更不用說還可以反攔截、反反攔截、反反反反反反...到爽的反攔截

至於粹取程式來跑,也不是什麼難事
這種技術,也不是新的,很早就有了

舉例,很早已前,就有一種技術,叫撥殼,將程式叫進記憶體,然後回寫到硬碟,當然只回寫你要的部分
工具: DEBUG.EXE 即可做到,可以用來破密碼保護,所以後來很多軟體不再用「簡單的」密碼保護

所以你要腦筋靈活一點,就沒問題,工具與答案,就交給 google 大神

所以還是要問,你懂 DLL 嗎? 可不是問你「你懂如何使用與編譯 DLL嗎?」

你要是懂 DLL 格式,那 reallocation 、粹取、改名,都不是問題,問題是「你有時間與動力嗎?」,因為過程有時候很繁瑣又枯燥

最後,難道非用該函數不可?
大不了,自己寫,不會完全自己寫,哪可以用其他函數兜看看,總有辦法做到你要的
系統時間:2024-05-01 2:17:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!