[討論] 部份隱藏 dll functions

看板C_and_CPP (C/C++)作者 (卡卡獸)時間12年前 (2013/12/01 14:22), 編輯推噓5(5013)
留言18則, 8人參與, 最新討論串1/1
環境主要有兩種情況,不過我想應該大同小異 VC6.0 / Win XP VS2010 / Win 7 , Win 8 問題敘述 手邊的 dll source code 準備要 release 出去,然後部份 functions, global variable 必須隱藏起來 (假設叫 HideFunc 及 HideVar ), 不讓收到 release 版 source code 知道,但必須還要達成一個需求 簡單的說,公司內部的人必須可以自由調用 HideFunc 及 HideVar, 而 release 給公司以外之客戶不能調用 HideFunc 及 HideVar, 目前專案是將 HideFunc 及 HideVar 直接寫死在 dll 裡面,希望能有 最小幅度修改,達成以上需求。 我的解法 查過、試過一些方式,目前我是從 VS 的 def 檔做下手,用下面手法完成 HideFunc @1 NONAME 這樣下來,從 DumpBin.exe 或從 DepenceWalker 沒辦法取得其 func name , 而 HideVar 就算不特別動手腳,試過 DumpBin.exe 及 DepenceWalker 似乎沒辦法取得 HideVar ? 不用特別針對 dll 裡之 variable 動手腳? (這點想問是不是我測試結果有問題) 接下來的測試結果如下 (1) release 出去的版本只附 .h , .dll ,不對 HideFunc 及 HideVar 做 import , 即使使用 LoadLibrary , GetProcAddress 還是抓不到 HideFunc 與 HideVar , 這樣收到 dll 之 client 其實在使用上也麻煩,一般的 dll 函式要抓進來就要 走 LoadLibrary ,沒有 lib 做入口。 (2) 內部使用的版本會再附 .lib , HideFunc , HideVar 就不走 LoadLibrary, GetProcAddress 取出,直接走 #pragma comment(lib, "my.lib") 去引入。 接下來我有二個問題 (1) MSDN 上其實有記載, 用 def 去做 NONAME 隱藏,其實還是可以由 dumpbin 得到的 order 及 address 去把 function 調用出來,但這部份我不知道實際上 是怎麼實現的?是直接去分析 PE header ? 還是一般會有更簡便或通用的方式? 如果只由 order 及 address 把 func 調用出來很麻煩,或其實這技術還不 普及,我想可能還是考濾走這方法 (前提是若我沒找到比這方法更快速維護的) (2) 想請問版上先進,是否有不同的方式去達到相同之效果?由於目前只是在評估 階段,想多了解一下其他實現方式,像是安全性更高、或是更容易維護之類的, 這些我都想多了解。 參考書籍 程式設計師的自我修養 - CH 9 msdn : exporting from a dll using def files http://msdn.microsoft.com/en-us/library/d91k01sh.aspx 謝謝各位不吝賜教,感激不盡。 -- If there is no tomorrow, I want to see u last time. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.74.188

12/01 15:09, , 1F
推程式設計師的自我修養 中國真的不少這樣有水準的書
12/01 15:09, 1F

12/01 15:11, , 2F
老實說還是走license吧,不然你maintain會很痛苦
12/01 15:11, 2F

12/01 15:12, , 3F
沒有license,用了就告你,這是我工作幾年得到的最佳解
12/01 15:12, 3F

12/01 19:27, , 4F
http://dll_hide_part.codepad.org/ 修改標頭檔 my.h 裡
12/01 19:27, 4F

12/01 19:28, , 5F
面的 IS_INTERNAL 就可以產生不同版本的 dll 供內外部使用
12/01 19:28, 5F

12/01 20:05, , 6F
謝謝 purpose , 用 macro 控制也是一方法.
12/01 20:05, 6F

12/01 20:06, , 7F
@cobrasgo: 簡單的說,我是供應商,不是客戶端,是要防破的.
12/01 20:06, 7F

12/01 22:04, , 8F
c 是在說供應商沒錯啊
12/01 22:04, 8F

12/01 22:04, , 9F
^大
12/01 22:04, 9F

12/01 22:14, , 10F
了解.
12/01 22:14, 10F

12/01 23:22, , 11F
破解vs防破解 防破解的那方付出的成本永遠比較高
12/01 23:22, 11F

12/01 23:35, , 12F
@azureblaze , 我知道您說的, 只是有時候決策不是我能定的
12/01 23:35, 12F

12/01 23:35, , 13F
可以的話我也希望用幾支 keyfile 就過去了 Orz
12/01 23:35, 13F

12/02 10:27, , 14F
若要只能在公司內部用的話, API 內鍵連結 server 最簡單
12/02 10:27, 14F

12/02 10:28, , 15F
連不到 server 自動回傳 false就好
12/02 10:28, 15F

12/02 10:28, , 16F
server 找公司內的一台電腦架就可以了
12/02 10:28, 16F

12/02 12:29, , 17F
用RPC做?
12/02 12:29, 17F

12/03 23:45, , 18F
h 大和 l 大說的意見不錯,之前沒想過可以這樣搞
12/03 23:45, 18F
文章代碼(AID): #1IcjMQK3 (C_and_CPP)
文章代碼(AID): #1IcjMQK3 (C_and_CPP)