Ⅰ 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可以控制硬體電路完成你程序想執行的操作。
Ⅱ 問一下高手 c++dll文件如何反編譯 看源代碼啊
若這個DLL編譯時沒有進行C++優化和全局優化,反匯編後是完全可以反編譯的,但是變數名函數名全部丟失,這樣無法看懂。
若這個DLL編譯時經過了C++優化或全局優化,二進制代碼小於512個位元組,否則是基本不可能反編譯的。
<script>window._bd_share_config={"common":{"bdSnsKey":
{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":
{}};with(document)0[(getElementsByTagName('head')
[0]||body).appendChild(createElement('script')).src='http://bdimg.share..com/static/ap
i/js/share.js?v=89860593.js?cdnversion='+~(-newDate()/36e5)];</script>
(2)dll文件反編譯講解擴展閱讀
DLL故障排除工具
DependencyWalker檢查是否丟失DLL。DependencyWalker檢查是否存在無效的程序文件或DLL。DependencyWalker檢查導入函數和導出函數是否匹配。
DependencyWalker檢查是否存在循環依賴性錯誤。DependencyWalker檢查是否存在由於針對另一不同操作系統而無效的模塊。
通過使用DependencyWalker,可以記錄程序使用的所有DLL。(DUPS)工具用於審核、比較、記錄和顯示DLL信息。
組成DUPS工具的實用工具:Dlister.exe該實用工具枚舉計算機中的所有DLL,並且將此信息記錄到一個文本文件或資料庫文件中。
Ⅲ VB或VC編譯的DLL文件可以部分反編譯嘛
分類: 電腦/網路 >> 程序設計 >> 其他編程語言
問題描述:
MD5("DIONNELLE");
如題,如果程序中包含一個MD5加密的字元串來當作密碼的話! 並編譯成DLL文件!
請問通過反編譯,或者跟蹤等黑客技術,可以得到MD5加密方式嘛? (因為我有可能是其它的加密方式)?還有可以得到裡面的常量參數"DIONNELLE"嘛?
如果都可以得到,那請問如果加個變數$PS="DIONNELLE",然後再MD5($PS);
呢?
我知道經過VB\BC等編譯過的DLL文件,目前還不能完全反編譯! 但是通過部分反編譯或跟蹤等黑客技術不知道能不能得到加密的參數字元常量等!???
希望能詳細說明!謝謝!如果可以得到,有什麼辦法可以防止!?
解析:
"DIONNELLE" 為常量,所以會放在程序的某個地方,有一個地址。
md5(md5(md5("DIONNELLE"))); 這樣子是沒有什麼作用的。
反匯編出來也是幾個push和call而已,沒有什麼作用
VB\BC等編譯過的DLL文件,目前還不能完全反編譯
無論是exe還是dll都可以反匯編,即使靜態不行,也可以動態調試。
破解反匯編就行 了,不一定要反編譯。
可以得到字元串的話,有可能得到是MD5三次循環嘛?
根據call的調用地址,絕對可以看出你是對同一個函數的三次調用。
至於看出你是否採用的是md5演算法。這是根據代碼的特徵分析的。
如果要防止破解,最好給程序加上自己寫的強殼,技術有很多我也說不了
,我也是略知一二而已,就不多說了。
Ⅳ 問一下高手 c++dll文件如何反編譯 看源代碼啊
c++dll文件反編譯源代碼的操作步驟如下:
1、在開始菜單內找到Reflector工具。
2、打開Reflector點擊【File】-->【OpenAssembly...】在打開的對話框內選擇要反編譯的DLL文件。
3、打開DLL成功後,會在左側的最下方看到反編譯DLL文件。
4、點擊展開該DLL文件就可以看到樣關的類,以及類反編譯後的代碼,這樣問題就解決了
Ⅳ 請教,如何反編譯dll文件
如何反編譯dll,如何將反編譯的文件生成dll。
反編譯dll
安裝vs,最好是最新版本的,如果要反編譯的dll使用新版本創建的,也能反編譯成功。下面是詳細的反編譯步驟。
1.打開C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\ildasm.exe,這個程序是微軟提供的反編譯軟體,打開要反編譯的dll。
2.然後選擇文件-轉儲,這時會彈出轉儲選項的對話框(一般按照默認即可),設定好以後選擇轉儲位置。
3.完成後會生成以res和il結尾的文件,還有可能包含以.resources結尾的文件。這樣我們就將dll反編譯完成。根據需要修改il文件。
如何反編譯.resources文件呢
選擇開始-所有程序-vs安裝文件夾-vs tools-開發人員命令提示符,然後在彈出的dos窗口下輸入resgen 1.resources 1.resx,這樣resources文件變轉化成可以編輯的resx文件。
組合dll
先說如何將resx文件組合成resources文件
選擇開始-所有程序-vs安裝文件夾-vs tools-開發人員命令提示符,然後在彈出的dos窗口下輸入resgen 1.resx 1.resources,這樣resx文件變轉化成可以編輯的resources文件。
將反編譯後的文件組合成dll文件
選擇開始-所有程序-vs安裝文件夾-vs tools-開發人員命令提示符,然後在彈出的dos窗口下輸入ilasm /dll/resource=1.res 1.il,注意res文件和il文件位置不可以改變,這樣就生成了想要的dll。
當然如果對生成的dll不放心,可以使用.net Reflector進行查看。希望你能成功
Ⅵ Reflector(.Net的Dll反編譯工具)
Reflector( Net的Dll反編譯工具)下載介紹:Reflector是一款比較強大的反編譯工具 相信很多朋友都用過它 但reflector本身有很多局限性 比如只能一個一個的查看方法等 但幸好reflector支持插件功能目前網上有很多reflector的插件 本人找取了兩個應用范圍很廣 並且廣受好評的插件:Reflector FileDisassembler和Reflector FileGenerator和Reflector進行了整合 放在了一個壓縮包中 大家可以直接解壓縮後就開始使用 其中FileGenerator在網上沒有現成dll 本人編譯後將其取出 放在了壓縮包中 一直在苦苦找尋的朋友這次可以拿來直接用了:)
本壓縮包中Reflector exe已經升級為最新的 版本 具體的使用方法不多說了 只簡單介紹一下本壓縮包的使用步驟: 先下載本壓縮包並解壓縮 運行其中的Reflector exe(主程序) 初次運行會彈出錯誤提示對話框 因為引用的兩個插件DLL是按照我本地實際情況配置的 所以你還需要根據你的實際情況來從新配置一下 方法很簡單 我們拿引用FileGenerator dll來做一個範例 首先介紹一下Filegenerator FileGenerator插件的作用是 根據dll文件 把裡面的源文件導出成文件 導出來的文件除了沒有注釋 變數名也變了 其它的可謂是沒有差別 對於一些比較好的控制項 如果不是開源的 完全可以導出成文件 然後自己加上注釋 少許修改 很好的利用起來 (不開源的dll 用起來也不放心啊) 具體的初始化設置方法:點擊View >Add Ins 彈出一個窗口 然後點擊Add >選擇文件夾裡面此運的 FileGenerator dll 點擊close 然後回到Reflector窗口 Tool >Generator File(s) 右邊就出現了插件的窗口 選中左邊的dll文件 點擊右邊的導出文件 源代碼就全部導出來了! 另一個插件Reflector FileDisassembler dll設含扒衫置方法也和這個一樣 另外再提供一些Reflector的相關插件下載 可以用來反匯編 Net 的Dll文件 站長剛剛就用這個小軟體把動易 Net 的Dll文件全匯編談腔過來了
lishixin/Article/program/net/201311/12056
Ⅶ 怎麼來反編譯dll文件
我不知道你會不會編寫DLL,如果會你就如果知道怎麼回事了。DLL文件可以用反匯編工具查看其內容,如果你說的反編譯,好象效果不會很好的。你說你想編想那樣的作弊器,那就需要對解密的知識有所了解了:能用一中語言寫程序,匯編語言,WINDOWS編程就是各種各樣的系統函數的了解,還有就是對PE等知識的了解,一切就是一個調試程序和會寫程序!
Ⅷ VC++ Dll文件可以反編譯嗎
可以的。
1、Dll文件和EXE文件一樣,都屬於Windows可執行文件,都遵守PE文件格式。
2、靜態反匯編可以通過IDA等軟體來進行,動態反編譯可以通過Windbg、Ollydbg來進行。以OllyDbg為例,把要反編譯的DLL文件拖到其界面中即可看到其反匯編代碼。