成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

開發筆記:如何對【動態鏈接庫】文件進行加密保護?

系統 Linux
因為目前我只在Windows平臺上有這個需求,這個方法相當于重寫了一套動態庫加載函數。那么,在Linux系統上如果也存在類似的需求,是否也有類似的:從內存緩沖區加載動態庫的實現?

問題描述

昨天,因產品需求,需要在Windows操作系統下寫一個小工具。

這個小工具中調用一個比較重要的DLL動態庫文件,來完成一些重要的功能。

一般來說,最直接的做法就是調用Win32 API函數,來動態的加載、獲取函數地址、釋放:

  • LoadLibrary(...);
  • GetProcAddress(...);
  • FreeLibrary(...);

但是,由于這個動態庫比較重要,如果直接把DLL文件放在文件目錄中,就增加了文件被反編譯的風險。

也就是說為了提高DLL文件的安全性,最好不要讓用戶看到/拿到文件;

即使拿到了文件,也不要讓用戶很容易的破解文件。

問題解決

關于分析過程就不多說了,這里直接給出目前的處理方式:

1.寫一個小工具軟件,對 DLL 文件進行加密

使用了AES對稱加密算法,主要是為了管理秘鑰簡單。

圖片

加密后的文件liba_enc.png與可執行文件放在一起。

此時,如果用戶獲取到了這個動態庫,由于沒有秘鑰,理論上是無法解開這個文件的。

不過,道高一尺魔高一丈。。。

2.修改應用程序,對加密的 DLL 文件進行解密

這個動態庫最終肯定是要被加載到應用程序的內存空間中被使用的,因此在被加載之前,需要被使用者(也就是應用程序)解密。

那么,應該解密到哪里呢?

用來加載動態庫的API?函數LoadLibrary(),需要的參數是文件的路徑。

也就是說:必須要把一個動態庫文件的路徑傳遞給該函數,才可以被正確的加載到內存中。

假如是在Linux?系統中,可以解壓到/tmp臨時文件系統中。

在動態庫使用期間文件一直存在;一旦使用結束就立刻刪除掉。

但是在Windows系統中沒有臨時文件系統之說。

即使存在類似的臨時文件空間,即使該DLL文件的使用周期非常短,仍然存在暴露給用戶的可能性。

只要用戶有機會能夠看到這個解密后的文件,就有方法把它dump出來,然后進行反編譯...

圖片

3.把加密的 DLL 文件解密到內存緩沖區中

目前,能想到的最好的方法就是:先把加密的DLL?文件解壓到一塊空閑的內存緩沖區中(比如:從堆空間中malloc出來的一塊空間),然后再按照動態庫的加載流程從這塊緩沖區中讀取字節流,加載到動態庫所屬的代碼空間中。

剛才說過,LoadLibrary(...)函數只能接受文件路徑作為參數,我們不能把緩沖區的首地址傳給它,因此需要使用其它方式來加載。

剛好,在github?上看到這樣一個開源C代碼:

圖片

圖中描述的功能正是我所需要的,簡直是量身定做:

  • 先把 DLL 文件讀取到一個緩沖區中;
  • 再從緩沖區中加載動態庫的內容;

只需要一個頭文件MemoryModule.h?和一個C?文件:MemoryModule.c,提供的函數也足夠簡單:

HMEMORYMODULE MemoryLoadLibrary(const void *, size_t);

FARPROC MemoryGetProcAddress(HMEMORYMODULE, LPCSTR);

void MemoryFreeLibrary(HMEMORYMODULE);

與Win32?提供的3個函數在語義上是對應的,唯一的區別是加載函數傳入的參數是:緩沖區的地址和長度。

經過測試證明:這個方法工作的很好,很完美的解決了我的問題!

4. Linux 操作系統怎么辦?

因為目前我只在Windows平臺上有這個需求,這個方法相當于重寫了一套動態庫加載函數。

那么,在Linux系統上如果也存在類似的需求,是否也有類似的:從內存緩沖區加載動態庫的實現?

我目前還沒有發現類似的代碼,如果您知道的話,不妨在留言中分享一下?灰常感謝!

責任編輯:武曉燕 來源: IOT物聯網小鎮
相關推薦

2013-03-02 18:00:38

軟件加密軟件授權WinLicense

2011-06-21 18:02:14

Qt 動態 鏈接庫

2009-10-29 16:36:49

VB.NET .DLL

2009-08-28 16:19:30

C#實現修改動態鏈接庫

2012-05-04 08:24:14

LinuxUnix

2012-05-08 14:48:23

LinuxUnix動態鏈接庫

2022-06-09 09:54:45

編譯軟件開發

2024-06-06 08:53:13

動態鏈接庫共享庫

2023-11-29 08:31:20

PythonRust

2022-05-03 23:44:21

Python動態鏈接庫Ctypes

2009-07-07 20:57:20

LinuxUnix動態鏈接庫

2024-03-01 20:59:11

C#DLL開發

2009-08-05 16:29:18

C#調用C++動態鏈接

2023-05-09 08:24:11

JNA鏈接庫代碼

2013-09-12 12:55:53

iOS開發

2011-05-18 17:15:45

2022-10-24 00:03:21

動態鏈接庫DLL

2021-11-11 17:36:07

鴻蒙HarmonyOS應用

2010-05-26 18:43:42

SVN庫

2022-07-12 13:23:59

靜態鏈接庫可執行文件C 目標文件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品国产高清一区二区三区 | 久久夜色精品国产 | 一区二区三区视频免费观看 | 一级欧美一级日韩片免费观看 | 成年视频在线观看福利资源 | 午夜精品久久久久久久久久久久久 | 午夜视频网 | 中文视频在线 | 国产日韩欧美电影 | 中文字幕视频一区二区 | 嫩草网| 岛国av在线免费观看 | 国产99久久精品一区二区300 | 日本国产高清 | 国产精品成人一区二区三区吃奶 | 久久在视频 | 99久久免费精品国产免费高清 | 日韩视频a| 亚洲三区在线播放 | 最近中文字幕免费 | 午夜性色a√在线视频观看9 | 天堂成人国产精品一区 | 国产精品美女久久久久久免费 | 91大片 | 国产精品久久久 | 久色视频在线观看 | www国产成人免费观看视频,深夜成人网 | 成人自拍视频网站 | 日韩精品在线一区 | 久久69精品久久久久久久电影好 | 免费在线观看h片 | 日韩三级电影一区二区 | 国产色| 日韩视频在线一区 | 成人欧美一区二区三区在线观看 | 国产精品久久久久久久久久软件 | 日本黄色一级片视频 | 久久综合久久久 | 在线视频91 | 四季久久免费一区二区三区四区 | 日本在线视 |