❶ 如何反編譯 android 中 /data/dalvik-cache/arm 下的文件
這個是動態庫的東西,反編譯不了的,就算成功,你也很難看懂。這就是它的安全性高,很多人用的緣故
❷ 反編譯修改dll文件後重新.net重新生成dll文件
反編譯之前要先檢查文件是否被混淆加密了,如果沒有那就要恭喜你了。
使用reflector反編譯dll源文件一定要安裝FileGenerator的插件,安裝好後就可以然後直接生成vs2005的工程了,然後用vs2005打開工程,修改反編譯代碼中異常的代碼,加入編譯環境所需的dll動態庫,編譯即可。
---------------------------------------------------------------------------------------------------------------
舉例來說:
1、比如inforeader.get_item("name").ToString(),其實應該是inforeader.["name"].ToString(),沒辦法,手工改吧
2、還有,他還會報方法參數問題的錯誤,比如aa.Compare("helloworld","d",5),在5的未知顯示參數錯誤,原來是本身這個位置的參數是一個枚舉類型,反編譯不知什麼原因變成了第五個,於是改成枚舉StringComparison.OrdinalIgnoreCase
3、。。。。。。
------------------------------
如有需要可與本人聯系。
❸ 有動態庫 dll 和.h 怎麼能反編譯 .c或.cpp嗎
可以反匯編,生成匯編語言。然後由匯編語言反寫代碼。
❹ 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#調用 c++ 動態庫麻煩嗎
在實際軟體開發過程中,由於公司使用了多種語言開發,在C#中可能需要實現某個功能,而該功能可能用其他語言已經實現了,那麼我們可以調用其他語言寫好的模塊嗎?還有就是,由於C#開發好的項目,我們可以利用reflector等反編譯工具反編譯出其源代碼,所以對於一些核心演算法,我們不希望被別人知道,因此為了增強代碼的安全性,我們需要將一些核心演算法用C或C++來編寫,然後用C#來調用這些已經寫好的介面。在面對以上情況時,我們該怎麼做呢?
方案一:重新實現
針對第一種情況,我們可以將C或者C++功能用C#來重新實現,這樣的話代碼比較統一,維護比較方便,但是這樣的話增加了軟體開發的成本,把C++的代碼功能改成C#涉及到指針和內存的操作比較繁瑣,況且有開發好的模塊為什麼不重復利用呢?針對第二種情況就不能得到有效解決,雖然可以使用混淆器對代碼進行混淆,但是任然不是很安全。
方案二:封裝COM組件 我們可以將C或者C++的函數封裝成COM組件,在C#中調用時比較方便,但是COM組件需要注冊,而且多次注冊可能也會導致一些問題,同時在處理C或者C++的類型與COM組件的類型轉換的時候也可能有些麻煩。
方案三:使用動態鏈接庫
我們可以直接調用C或者C++已經寫好的動態鏈接庫,這樣比較方便,這樣很好的解決了上述問題。
在實際項目中,我們需要使用C#調用C++的一些介面,因此我使用的是方案三採用動態庫,下面我就在實際中怎麼處理的進行說明。
在調用動態庫的過程中我也遇到了以下一些問題:
1、C++中有指針,C#中需要使用指針嗎?
由於C++中的動態庫中有指針參數,因此我也是用.NET的不安全代碼,使用了C#的指針,但是最後也還是出現了一些問題,如在C#中傳入的參數是一個二維數組時就出現了問題,這個問題我在網上找了好多資料也沒有解決,最後和c++程序員商量了下改變了傳入參數的參數類型。最後也沒有使用指針。
2、C#和C++中的類型如何轉換呢?
雖然C#和C++比較類似,但是其給我們的參數類型我們要與C#的參數類型一一對應起來,因此我找了一些資料把其類型一一對應了,具體看後續說明。
3、C++寫好的動態庫放到那個位置呢?
關於C++動態庫的位置也是個問題,在應用中我們使用了相對路徑和絕對路徑進行測試,有的發現在VS中可以調用到,但是發布後發現無法調用到動態庫,最後只要把動態的dll放到系統的目錄system32下面才解決了改問題,目前還沒找到其他的方法,如有其他的更好方法還請大家指點。
4、如何反編譯C++的dll的名稱,埠?
可以通過Dependency Walker工具進行反編譯查看別人寫的動態庫的信息
5、還有其他的一些細節,如C#調用動態庫需要指定其編碼、代碼寫法等等
public class TestDLL
{
[DllImport(@"SomClient.dll", EntryPoint = "CreateSomClient", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]
public static extern UInt32 CreateSomClient(String hostIp, UInt16 port);
[DllImport(@"SomClient.dll", EntryPoint = "ReleaseSomClient", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]
public static extern void ReleaseSomClient(ref UInt32 clientHandle);
}
參數說明:
EntryPoint 指定要調用的 DLL 入口點。
CharSet 控制名稱及函數中字元串參數的編碼方式。默認值為 CharSet.Ansi。
ExactSpelling 是否修改入口點以對應不同的字元編碼方式。
CallingConvention 指定用於傳遞方法參數的調用約定。默認值為 WinAPI。該值對應於基於32位Intel平台的 __stdcall。
BestFitMapping 是否啟用最佳映射功能,默認為 true。最佳映射功能提供在沒有匹配項時,自動提供匹配的字元
❻ 如何反編譯NET的dll文件
在Windows中,許多應用程序並不是一個完整的可執行文件,它們被分割成一些相對獨立的動態鏈接庫,即DLL文件,放置於系統中。當我們執行某一個程序時,相應的DLL文件就會被調用。一個應用程序可有多個DLL文件,一個DLL文件也可能被幾個應用程序所共用,這樣的DLL文件被稱為共享DLL文件。DLL文件一般被存放在C:\Windows\System目錄下。 1、如何了解某應用程序使用哪些DLL文件 右鍵單擊該應用程序並選擇快捷菜單中的「快速查看」命令,在隨後出現的「快速查看」窗口的「引入表」一欄中你將看到其使用DLL文件的情況。 2、如何知道DLL文件被幾個程序使用 運行Regedit,進入HKEY_LOCAL_MACHINE\Software\Microsrft\Windows\Current-Version\SharedDlls子鍵查看,其右邊窗口中就顯示了所有DLL文件及其相關數據,其中數據右邊小括弧內的數字就說明了被幾個程序使用,(2)表示被兩個程序使用,(0)則表示無程序使用,可以將其刪除。 3、如何解決DLL文件丟失的情況 有時在卸載文件時會提醒你刪除某個DLL文件可能會影響其他應用程序的運行。所以當你卸載軟體時,就有可能誤刪共享的DLL文件。一旦出現了丟失DLL文件的情況,如果你能確定其名稱,可以在Sysbckup(系統備份文件夾)中找到該DLL文件,將其復制到System文件夾中。如果這樣不行,在電腦啟動時又總是出現「***dll文件丟失……」的提示框,你可以在「開始/運行」中運行Msconfig,進入系統配置實用程序對話框以後,單擊選擇「System.ini」標簽,找出提示丟失的DLL文件,使其不被選中,這樣開機時就不會出現錯誤提示了。反編譯修改dll文件後重新.net重新生成dll文件更多
❼ dll文件怎麼打開編輯修改DLL文件怎麼反編譯
dll文件是動態鏈結庫文件,不能打開和編輯。有些工具軟體可以提取它裡面的圖標資源。我不清楚你為何要打開它,通常它可用vc++編寫製作。確實要學習它的內容,可找一些反編譯工具軟體,但要熟悉匯編語言,而且有些軟體是禁止反編譯的!
❽ 怎麼打開dll文件,dll反編譯
ll文件是動態鏈結庫文件,不能打開和編輯。有些工具軟體可以提取它裡面的圖標資源。我不清楚你為何要打開它,通常它可用vc++編寫製作。確實要學習它的內容,可找一些反編譯工具軟體,但要熟悉匯編語言,而且有些軟體是禁止反編譯的!
❾ 有一*.exe文件,看圖標判斷為vb生成,請問能反編譯而得到源代碼嗎非常感謝!
Create Project -> Application !
============
執行文件的建立
1、編譯格式的選擇
PowerBuilder 8.0對生成可執行文件提供了兩種編譯格式:偽代碼(Pcode,即pseudocode的縮寫)和機器代碼(Machinecode)。偽代碼是一種在所有PowerBuilder 平台上支持的解釋性語言,它的格式與PowerBuilder 運行庫(.pbl)一樣,在可執行狀態下保存單個對象,其優點是方便和可移植;機器代碼則是真正的完全脫離PowerBuilder 環境的可執行文件,其優點是速度快,但文件容量比較大。選擇編譯代碼格式一般基於以下三個方面:
①速度。若目標是優化運行速度和應用強化腳本處理,則選擇機器代碼。要是代碼中較多地使用了循環結構、浮點運算或整數演算法及函數調用,機器代碼將比偽代碼做得更好。但偽代碼的編譯速度比機器代碼快,特別是開發人員要快速地創建測試用的可執行文件時非常便利;
②大小。偽代碼生成的文件比機器代碼的小。如運行應用程序的終端機器容量緊張的話,就需要放棄較快的機器代碼而選擇偽代碼;
③移植。偽代碼對於跨平台的應用非常有用。它可以方便地跨平台(PowerBuilder 支持)使用,包括:Microsoft Windows (16位和32位)、AppleMacintosh和UNIX。機器代碼是依賴於平台的,也就是說要求生成和可執行應用平台一致,不過它可以獲得更好的性能。
2、動態庫的建立
發布PowerBuilder 8.0應用可以將一些對象不放到可執行文件中,而放到動態庫中在運行時裝入,這樣可以將應用程序分割成更小的模塊便於管理和維護。
選擇偽代碼(Pcode)編譯方式生成PowerBuilder動態庫(.pbd文件),選擇機器代碼(Machinecode)方式在Windows和UNIX平台上生成動態鏈接庫(.dll文件,如將test.pbl編譯成test.dll),在machine平台上生成平台支持的共享庫(如test.lib)。如果在Windows上有兩個應用,那麼編譯成的.pbd包含一個調用全局外部函數的用戶對象,為了保證正確調用函數必須為每個應用單獨編譯和發布.pbd文件。
當建立動態庫時,將源庫(.pbl文件)中所有對象的編譯版本拷貝到動態庫中。為了在某些庫中只使用所需的對象,可以將它們放到一個標準的PowerBuilder庫(.pbl)中。
在建立動態庫時,PowerBuilder並不檢查所有對象,只是簡單地去掉對象的源格式,因此,對於一些在畫筆或腳本中指定了使用資源(圖形、圖標或指針)的對象,若不想提供單獨的資源,則必須在資源文件(.pbr)中羅列出這些資源,這樣才能保證在建立動態庫時包含這些資源。
動態庫的建立有兩種途徑:一是在庫管理畫筆中建立;二是在工程畫筆中建立工程對象時一起建立。
3、資源文件的使用
可執行文件或動態庫中可以包含一些資源(圖形、圖標或指針),也可以將它們作為單獨的資源文件(.pbr文件)保存。
(1)單獨的分布資源
若某資源不包含在可執行文件或動態庫中,則在執行應用程序引用它時,PowerBuilder按查詢路徑查找該資源,因此,必須將它與應用程序一起放在查詢路徑下。
Windows的查詢路徑為:當前目錄,Windows目錄,Windows的System目錄和PATH環境變數中設置的所有目錄。
(2)資源文件
可以使用PowerBuilder資源文件(.pbr)替代單獨的資源,其中列出所有的動態分配的資源也可以包含動態分配的數據窗口對象。PowerBuilder將這些資源編譯後放入可執行文件或.pbd文件中,這些資源在執行時可直接使用。
若給數據窗口控制項動態分配數據窗口對象,則必須創建一個資源文件,且在可執行文件或動態庫文件中包含該對象,或在一個單獨的動態庫中包含它。
資源文件(.pbr)是一個ASCII碼文件,在其中列出了應用程序要有到的各種資源(如.bmp、.cur、.ico、.rle和.wmf文件)和數據窗口對象。使用文本編輯器(如Windows的記事本)創建一個文本文件,其中列出在應用中動態引用的資源文件,一行列出一個資源,格式如:
appico.ico
appbmp1.bmp
appbmp2.bmp
……
以上文件和對象都假設是在當前目錄中,如果存在於另一個目錄中,則必須包含所在路徑,格式如:
e:\myapp\test.jpg。
❿ linux 下如何將動態鏈接庫.so進行反編譯後,換編譯器重新編譯
程序能不能正常運行取決於程序和動態庫之間的ABI是否兼容。只要ABI兼容那麼編譯器版本就沒有影響。高版本的編譯器同樣可以使用低版本的ABI來生成目標代碼,但這個問題要具體分析。你解決問題的思路完全不對。