當前位置:首頁 » 操作系統 » dll源碼

dll源碼

發布時間: 2022-01-13 04:32:29

① dll文件如何反匯編成源碼,C++語言編寫

DLL 屬於可執行文件中的一類,又稱為動態鏈接庫,不能直接用DEBUG載入,一般由應用程序因使用該庫中的函數,而由操作系統在應用程序載入的同時被載入入特定地址,這個地址一般是DLL在鏈接時指定的。當DLL被載入到運行空間,根據輸出函數表,可以得到各個函數的入口地址,然後用DEBUG在各個入口下斷點,調用該函數時DEBUG將跟蹤進入該函數,從而實現反匯編。
反匯編屬於逆向工程,逆向工程的主要手段有兩大類,其中一類是動態分析,另一類是靜態分析。
前面提到的方法屬於動態分析,由DEBUG實現反匯編,該方法不容易得到完整的代碼,一般只能形成一段一段獨立分散的代碼,同時由於DEBUG的局限性,反匯編的代碼質量多不高,生成的代碼不能直接使用,原因在於DLL在載入時若沒有載入到指定地址空間,操作系統將對代碼進行重定向,所以DEBUG只能得到重定向後的代碼,這類代碼必須修改每一個重定向點,才能形成可執行代碼。作為WINDOWS32位操作系統, OLLYDBG是最為優秀的調試、跟蹤、反匯編工具,多窗口運行,可以方便的通過窗口操作完成各類動作,而不需要像一般DEBUG那樣由命令行來完成,OLLYDBG還有許多一般調試器不具備的功能,同時由於每一代高手不斷的修改,使其具有多種功能,同時帶來的就是混亂,誰也不知道有多少版本,誰也不清楚每個版本到底增加了什麼功能,但就這樣,也是瑕不掩疵, OLLYDBG任然是DEBUG中最強大,最好使用的。
靜態分析和動態分析不同,靜態分析直接打開原程序,載入而不運行,然後直接分析載入的代碼。目前靜態分析工具,最強大的當屬IDA,IDA支持幾乎所有種類的匯編語言。
IDA載入應用程序有許多選項,可以選擇完整的載入整個程序,也可以選擇載入程序的某個塊,一般可選擇的是否載入文件頭、資源表、輸入表、輸出表等等。
IDA還支持調試,也就是說,當你在進行反匯編過程時,可以直接使用IDA來調試跟蹤,以分析代碼的動態執行情況,不過就動態跟蹤來說,OLLYDBG更為強大。
IDA反匯編的正確率和代碼的復雜程度有關,對於正規開發的代碼,尤其是如果能夠獲得源程序的調試文件,即所謂的PDB文件,IDA可以讀取PDB文件中的信息,使得反匯編的效率和准確度大為提高,生成的代碼甚至比源代碼易讀。IDA將反匯編生成的結果存入IDB文件中。當你確認反匯編的結果達到你的要求,可以讓IDA輸出匯編源代碼,IDA也提供其他格式的輸出,例如HTML文件,便於用戶閱讀。樓主主要是用於分析DLL文件,一般來說這類文件更適合做靜態分析,所以推薦使用IDA來進行。
IDA對於分析那些加殼或含有大量花指令、混淆代碼、垃圾代碼的程序,反匯編的正確率會大為下降,因為IDA無法正確的確認當期位置上的數值是屬於代碼,還是屬於數據,是普通C字元,還是DELPHI的字元串,還是UNICODE字元串,是結構數據還是數組還是類表(DELPHI生成的代碼中含有大量的類表)等等。遇到這種情況,就需要使用者掌握許多技巧,例如可以通過使用者對當前數據的認識,指導IDA如何處理當前的數據。對於大批量的,具有某些規律的數據,IDA還提供了腳本語言(文件尾位idc),通過對腳本的執行來指導IDA如何進行反匯編。對於更為復雜的情況,例如程序是自解壓運行的,這時IDA就沒有任何能力來進行正確的分析,通常都會用OLLYDBG動態跟蹤,等程序完成自解壓後從內存中將解壓後的代碼完整的挖下來形成文件,再由IDA進行靜態分析。
對於成功進行反匯編的代碼,IDA根據代碼的入口、調用、轉移等指令,可以為使用者提供各種格式的程序的流程圖,IDA提供許多格式由用戶選擇,便於用戶理解程序的結構。

匯編語言的科學定義,其實就是介於機器碼(各種01)和高級語言(如C)之間的一種語言。你用C語言寫一段程序,其實要在機器上運行的話,機器是不懂的,要經過編譯器、匯編器編譯,變成匯編,最終再變成機器碼,機器根據這些機器碼的01可以控制硬體電路完成你程序想執行的操作。

② 如何調試帶有源代碼的dll文件

第一步,調試的准備。
用C#語言編寫一個測試dll文件的程序,由於dll源程序是c的,且運行結果是黑屏的,所以C#代碼也是運行在黑屏的console環境下。完整代碼如下。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace TestMelp{class Program{[DllImport(@D:\Visual Studio Projects\FileMelp\Debug\FileMelp.dll, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
extern static void cmd_melp(int argc, string[] argv);
static void Main(string[] args){//string cmd = melp -s -i D:/bin/bit -o D:/bin/output;
string cmd = melp -a -i D:/bin/inputD -o D:/bin/bitRight;
string[] argv = cmd.Split(new char[] { ' ' });
int argc = argv.Length;
cmd_melp(argc, argv);}}}由於調試的FileMelp.dll文件和本程序不在同一個文件夾下,容易出現文件地址問題,所以本測試程序的文件均採用絕對地址。另外cmd的格式要求不能有兩個連續的空格,也可以通過使用Trim函數,解決這個問題。
第二步,定位到自己改寫的帶有源代碼的dll工程。
本文的FileMelp.dll工程,是通過本空間的生成VS dll那篇博客生成的,具體實現方法不在贅述。下面的兩段代碼分別添加到FileMelp工程melp.h和melp.c文件最下面。
#ifndef LIB_H
#define LIB_H
extern _declspec(dllexport) void cmd_melp(int argc, char **argv);
/* 加入任意你想加入的函數定義*/#endifvoid cmd_melp(int argc, char **argv){main(argc,argv);}按F6,上述步驟實現FileMelp.dll動態庫的生成。
第三步,添加測試程序到dll源代碼處。
在FileMelp工程裡面,右擊FileMelp工程,選擇屬性。
或者按Alt+Enter,彈出如下界面。
在Configuration Properties\Debugging\Command選擇第一步生成的測試.exe文件。這樣完成了調試前的准備。接下來,在需要調試的代碼地方,添加斷點。

③ dll文件反編譯成源代碼

1、首先在反編譯工具中打開DLL文件。

④ 怎樣查看dll的代碼

DLL文件即動態鏈接庫文件,是一種可執行文件,它允許程序共享執行特殊任務所必需的代碼和其他資源。Windows提供的DLL文件中包含了允許基於Windows的程序在Windows環境下操作的許多函數和資源。

DLL多數情況下是帶有DLL擴展名的文件,但也可能是EXE或其他擴展名。它們向運行於Windows操作系統下的程序提供代碼、數據或函數。程序可根據DLL文件中的指令打開、啟用、查詢、禁用和關閉驅動程序。

DLL的全稱是DynamicLinkLibrary,中文叫做「動態鏈接文件」。在Windows操作系統中,DLL對於程序執行是非常重要的,因為程序在執行的時候,必須鏈接到DLL文件,才能夠正確地運行。而有些DLL文件可以被許多程序共用。因此,程序設計人員可以利用DLL文件,使程序不至於太過巨大。但是當安裝的程序越來越多,DLL文件也就會越來越多,如果當你刪除程序的時候,沒有用的DLL文件沒有被刪除的話,久而久之就造成系統的負擔了。

DLL是動態連接庫。使用動態連接庫的一些好處是:
1.多個應用程序共享代碼和數據:比如Office軟體的各個組成部分有相似的外觀和功能,這就是通過共享動態連接庫實現的。
2.在鉤子程序過濾系統消息時必須使用動態連接庫。
3.動態連接庫以一種自然的方式將一個大的應用程序劃分為幾個小的模塊,有利於小組內部成員的分工與合作。而且,各個模塊可以獨立升級。如果小組中的一個成員開發了一組實用常式,他就可以把這些常式放在一個動態連接庫中,讓小組的其他成員使用。
4.為了實現應用程序的國際化,往往需要使用動態連接庫。使用動態連接庫可以將針對某一國家、語言的信息存放在其中。對於不同的版本,使用不同的動態連接庫。在使用AppWizard生成應用程序時,我們可以指定資源文件使用的語言,這就是通過提供不同的動態連接庫實現的。
VC++、C++Builder、Delphi都可以編寫DLL文件。VisualBasic5.0以上版本也可以編寫一種特殊的DLL,即ActiveXDLL。

DLL不是獨立運行的程序,它是某個程序的一個部分,它只能由所屬的程序調用。用戶不能,也不需要打開它。

DLL函數查看器V2.0,但不建議修改。 代碼是經過加密的非專業人士是看不懂的!

⑤ 怎麼獲取dll源碼

C++的dll反編譯源代碼,應該是沒有辦法,最多用工具反編譯成匯編或一堆變數名為a,b,c,d等十分難以理解的代碼,且流程上可能還和源程序流程不是完全相同;C#若沒有用混淆器倒是可以用工具反編譯出代碼甚至包括注釋。

⑥ 有c++生成的dll文件能得到源碼嗎

在VC++中選擇新建一個Win32 Dynamic-Link Library。需要建立一個c/c++ head file和一個c/c++ source file並加入工程。頭文件中內容為輸出函數的聲明,源文件中內容為DllMain函數和輸出函數的定義。下面是一個最簡單的例子。

//dlldemo.h
#ifdef __cplusplus
#define EXPORT extern "C" __declspec(dllexport)
#else
#define EXPORT __declspec(dllexport)
#endif

EXPORT void CALLBACK DllFoo(void) ;

//dlldemo.c
#include <windows.h>
#include "dlldemo.h"

int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{

⑦ 如何將C#寫的dll文件反編譯為源碼

反編譯不了,vs自帶的反編譯軟體只能看見一些方法的名字啊,返回值之類的,具體代碼看不見
但是如果網上載的反編譯軟體的話可能會反編譯出來一些亂七八糟的東西,可以參考,但是你直接復制代碼然後編譯的話基本上都會報錯的
你可以多下載一些反編譯軟體,然後每個都參考一下

⑧ 怎麼把exe和dll文件分析及源碼

ollydbg調試和修改exe等文件內部指令,使用IDA生成稍顯易讀的逆向代碼。兩者結合效果比較好。前者用於運行調試,找到目標指令的位置,後者則是逆向前期用來分析exe文件內部結構的工具。
怎麼改,不能一言蔽之。大概的原理可以告訴你
使用ollydbg,運行,點擊菜單欄的打開,選擇你的exe文件,運行,找到main函數的位置,設置斷點,單步運行,知道找到你想找的指令的位置,更改該指令,注意要保證指令的總體大小不變,比如說原先該條指令的大小是4個位元組,那麼你可以使用4個NOP指令代替,大小不變,但是使用6個NOP或者3個NOP指令,總體大小就不同了,exe文件內部指令的相對地址都變了。
即最後的exe文件大小要不變,不然會損壞exe文件。。。
最後保存修改的內容。
不知道你有沒有個大概的印象,反匯編本來就很耗時耗力,需要耐心和經驗,還得看你的需求。
你可以上「看雪論壇」搜索相關的教程。

⑨ DLL文件怎麼樣才能查看其代碼

無法查看源代碼,DLL文件和pe2的EXE文件格式是一樣的。只是沒有入口函數winmain,文件名也不一樣。它是dynamic link library的縮寫,是為了程序動態調用的,也就是說可以不止一個程序調用它,通過這種方法,可以有效地避免浪費空間、浪費開發資源,和有效地使程序風格統一。如果你想看源代碼,只能通過反匯編工具查看他的匯編碼。別無他法。

⑩ DLL源代碼如何還原

這個很難吧,dll不是已經編譯過的代碼嗎,那不等於是機器碼差不多了,應該是沒辦法還原了,只能反編譯成匯編語言。那個也只一堆亂碼一樣的東東。

熱點內容
你知道甲魚密碼是多少嗎 發布:2024-12-22 10:26:32 瀏覽:811
我的世界國服伺服器開服 發布:2024-12-22 10:09:55 瀏覽:542
標題編譯策略 發布:2024-12-22 10:04:45 瀏覽:221
android開發xml 發布:2024-12-22 10:00:20 瀏覽:64
sql伺服器名稱什麼時候能寫ip 發布:2024-12-22 09:53:19 瀏覽:128
域控制伺服器怎麼設置ip 發布:2024-12-22 09:43:23 瀏覽:882
csvreaderpython 發布:2024-12-22 09:43:13 瀏覽:768
linux更改用戶 發布:2024-12-22 09:35:19 瀏覽:505
信息的編程加工 發布:2024-12-22 09:33:48 瀏覽:116
移動辦公專家伺服器地址寫什麼 發布:2024-12-22 09:25:13 瀏覽:147