1. 程式人生 > >Unity-反編譯由IL生成的DLL檔案

Unity-反編譯由IL生成的DLL檔案

    在Unity實際開發過程中,我們可能會用到大量的外掛,而很多外掛有可能並非開源,而是封裝成dll檔案。     使用免費非開源外掛時,外掛往往缺少維護,這對我們的開發是非常不利的。例如dll暴露的諸多介面,我們並不知道這些介面背後幹了什麼、底層用到哪些介面、有什麼使用上的潛規則、對效能影響如何。     根據網上發現的網友統計(統計來源:http://www.xuanyusong.com/archives/2664),多數的dll沒有做程式碼混淆、反逆向等工作。因此對於這類由IL生成的dll,我們可以直接使用現成的工具,對dll進行反編譯,檢視和學習dll內部到底幹了些什麼,是否存對效能產生影響的設計缺陷等等。     目前已存在有很多的翻遍應工具,例如ILSpy、.Net Reflector 8、Resharper等等。     下面我們使用免費開源的ILSpy為例,對UnityEngine.dll進行一次反編譯學習。 下載工具: <宣告:本文分享的是工具的簡單使用方法,僅供學習參考使用,請勿用作其他用途>
使用: 1、開啟ILSpy.exe,進入工具主介面: 2、點選工具選單欄的<File - Open>進入檔案瀏覽介面,在Unity安裝路徑中找到UnityEngine.dll並開啟 3、反編譯成功後,在左側列表中將顯示被反編譯dll的層次列表內容,而右側顯示原始碼。 反編譯後可以發現,UnityEngine.dll只是一個基於C#的包裝層,因此我們看到的只是UnityEngine的包裝程式碼以及一些比較基礎的邏輯程式碼,核心程式碼並不在其中。 原因是Unity本身是由C++編寫,即便要檢視,也應該需要使用OllyDebug等其他反彙編工具深度逆向(這已經不是本文的討論範疇),不能通過ILSpy這類IL反編譯工具獲得。

相關推薦

Unity-編譯IL生成DLL檔案

    在Unity實際開發過程中,我們可能會用到大量的外掛,而很多外掛有可能並非開源,而是封裝成dll檔案。     使用免費非開源外掛時,外掛往往缺少維護,這對我們的開發是非常不利的。例如dll暴露的諸多介面,我們並不知道這些介面背後幹了什麼、底層用到哪些介面、有什麼使用上的潛規則、對效能影響如何。

VS2008編譯C語言生成dll檔案

1、在C#中int關鍵字表示一種整型,是32位的,它對應的.NET Framework型別為System.Int32。 int 和 long是標準C#語言的關鍵字,在Microsoft.NET中相當於有一個別名:Int32 和 Int64。 2、編譯生成DLL檔案 1)開啟

如何編譯生成dll檔案以及如何呼叫dll檔案

1.vs2015下生成DLL檔案 檔案->新建->專案 點選確定選擇dll選項和空專案選項 點選完成  為專案新增c++原始檔mydll.cpp extern "C

C#使用命令列模式編譯生成dll檔案或者exe檔案

若要生成檔案 MathLibrary.DLL,請使用以下命令列編譯檔案 Add.cs 和檔案 Mult.cs: csc /target:library /out:MathLibrary.DLL Add.cs Mult.cs /target:library

解決方案:VS解決方案中出現無法生成DLL檔案

前言: 這幾天在學習牛腩新聞釋出系統,突然發現標準的過程原來是從D層倒著往U層敲,在敲的過程中,遇到了一個問題:D層生成的DLL檔案,在B層和U層中使用不了! 從早上10:00~15:30,自己弄了好久沒弄出來,在趙雨田的幫助下,一下子就發現了問題! 問題的

C++ 基礎(五)使用vs2015封裝c++生成.dll檔案、.lib檔案、.h檔案後,給另一個工程使用:使用前,需配置標頭檔案(.h)靜態庫(.lib)和 動態庫(.dll )專案屬性

一、簡介 我是一個認真的人,要麼不寫,要麼我就把步驟、截圖、程式碼,一 一 附上,方便大家參考學習。 1、為什麼要生成DLL和lib?      就是為了給VS工程呼叫(比如C#呼叫、C++工程)。 2、C#為什麼要呼叫DLL和lib? C++寫的程

java呼叫VC編譯而成的dll檔案

在JAVA中呼叫VC編寫的程式,JAVA提供一個本地方法,交給VC去實現,就是相當JAVA的介面與實現, 只不過中間的介面實現是VC實現的。 從而更好的實現了跨平臺的實用。 在Vc中建立一個空的dll工程,裡面什麼檔案也沒有,目的是Vc編譯生成的是DLL檔案,而不是EXE

IAR編譯ZStack-CC2530,生成HEX檔案完全配置

這兩天來一直在做Zstack-CC2530的實驗,讀了手冊也看了教程,卻怎麼也做不出應該有的結果,以為是自己改了協議棧的原始碼,一度把協議棧刪除又安裝N次,IAR(7.51A)解除安裝重灌,要不是電腦裡面裝了Visual Studio 2008 Teamedition以及一大堆的硬連線到第二硬碟,我

(接上篇)編譯兩種可執行檔案

上篇地址:http://blog.csdn.net/eliot_shao/article/details/78648314 上篇主要內容回顧: 上篇內容介紹了靜態編譯生成靜態庫,然後連結靜態庫生成可執行檔案的過程;也對比介紹了動態編譯生成動態庫然後連結動態庫生成可執行檔案的

Android 自動編譯、打包生成apk檔案 1

一、搭建搭建環境 1. 安裝JDK 和 Android SDK 2. 配置環境變數D:\android-sdk-windows\toolsC:\Program Files\Java\jdk

使用g++命令生成dll檔案實現lua呼叫C程式碼

首先安裝gcc環境,下載MinGW,MinGW只是一個管理工具,真正的環境還需要在裡面下載注意選中下載項後點擊選單項中Installation--->Apply Changes才會開始下載,會下載至MinGw安裝目錄下,確保bin目錄中存在lua52.dll,lua.e

Qt·程式碼封裝成dll檔案及所生成dll檔案的使用

開發環境:Qt5.8.0+Qt Creator 一、程式碼封裝成dll檔案 步驟一:建立工程 圖1:建立生成dll的工程 圖2 圖3 圖4: 此處需要勾選QtCore,因為後面需要使用該庫內QtCo

vue.js編譯時給生成檔案增加版本號

    vue.js在生成相關js和css檔案的時候,名稱是通過HASH的方式進行生成的,但是每次生成的檔案基本都是一樣的,那麼瀏覽器就會快取這些檔案,為了在更新的時候能夠保證js和css檔案能夠更新,那麼我們需要針對webpack的配置檔案進行修改;開啟webpack.pr

20、C#:使用VS2010生成dll檔案

假如已經有兩個專案:專案甲,專案乙,專案甲為主專案,專案乙為甲需要引用為DLL的專案 為了將專案乙生成為DLL,只需: 1.右擊專案乙--->屬性--->應用程式,其中最重要的為:目標框架

Eclipse中的Android專案編譯後沒有生成R檔案的兩種原因

筆者在用Eclipse寫Android專案,時常發生R檔案錯誤。 對此筆者總結了兩種原因:一種是res目錄下的檔案有Eclipse檢查不出的錯誤,但不能通過編譯,因此沒有生成R檔案。還有一種情況是已經

android編譯apk後,java檔案中出現的一些類似亂碼的問題

概述 java class  反編譯之後,偶爾回碰到一些不正常的程式碼 例如: label0 :_L1 MISSING_BLOCK_LABEL_30 JVM INSTR ret 7 JVM INSTR tableswitch 1 3: default 269、 JVM I

eclipse新建工程、新增編譯選項、生成執行檔案

一、新建工程 file->new->C project,彈出工程位置選擇框,取消use default location“”勾選,就可以自定義工程的存放位置 二、新增連結庫 例如編譯多執行緒程式時,gcc需要-lpthread選項,這個功能的配置位於: p

利用VS2010生成DLL檔案DLL中函式和全域性變數的使用

一、首先利用VS2010生成DLL檔案,步驟如下 1、開啟VS2010,在左邊的框欄中選擇C++,中間選擇win32控制檯應用程式,如下圖 2、確認後,彈出下面對話方塊 3、選擇下一步,彈出如

Dev c++工具將C程式碼生成dll檔案以及如何呼叫dll檔案

該篇文章是對工作中一個需求的總結,工作需求是要將C語言的函式介面,生成一個DLL檔案,讓labview呼叫。然後我嘗試用dev c++開發工具來實現這個功能,後來因為DLL生成了,但labview呼

編譯C#的dll檔案並修改,再重新生成dll

前話:自從換了份工作,著重於JAVA底層介面服務開發,就很少寫部落格文章了,一來事情比較忙,二來封閉式的開發讓我不能時刻把新的技術問題解決方案寫下來。 今天公司一個C#的專案svn上程式碼不是最新的,程式碼編寫人又離職了,只能把已編譯且下在使用的dll檔案取下來,反編譯後再