Time of Update: 2018-12-07
In my previous entry on IL modification we looked at the details for inserting a method call with a known (hardcoded) method token. We also used metadata to list the available methods, as a way to avoid this hardcoding.When listing the methods on a
Time of Update: 2018-12-07
被加密的程式集是 .Net 2.0的 winform程式。:http://www.bbsftp.com/temp/dngdemo.rar壓縮包中共兩個檔案:dngtest.exe 被加密的主程式。DNGRuntime.dll, DNGuard的運行庫檔案,也是一個DotNet的程式集,是用C++/CLI寫的,包含有本地代碼和IL代碼。運行庫的IL代碼也做了加密保護,本地代碼做了一些混淆。目前還只在
Time of Update: 2018-12-07
更新記錄同英文版。[+] Add X64 Platform Support.[+] Improved HVM Engine.[+] Improved DNGuard runtime behaviour . [+] Improved ASP.Net applications compatibility.[+] Improved support for Component developers.[+] Improved GUI.[+] Add Check for
Time of Update: 2018-12-07
.Net中的泛型和C++中的模版很相似,但在編譯行為上有些不同。之前做DNGuard HVM 時就遇到了加密泛型的麻煩問題,最近又發現了泛型在 ngen
Time of Update: 2018-12-07
前面提到了form關閉時的兩個奇怪現象,有不少朋友參與了討論。有些朋友還沒有看清楚問題的所在就很輕率的評論。A.Z. 在討論中已經找到的問題的基本所在,問題關鍵還是在 CalledClosing 這個變數的狀態。這個問題要從另外一個奇怪現象說起。為什麼直接給 form的DialogResult屬性賦值會導致form關閉?這個屬性的set函數如下:public void set_DialogResult(DialogResult value) { if
Time of Update: 2018-12-07
dotNet MSIL中的一些不常見IL指令在做HVM虛擬碼覆蓋率檢測時,在構造的一些dotNet程式樣本中總是缺少一些MSIL指令,沒有覆蓋所有的MSIL指令。如C#中的裝箱和unboxing的IL指令,可能很多人和我最初的想法一樣,裝箱是 box指令,unboxing是unbox指令,實際上這隻對了一半。裝箱使用的box指令沒有錯誤,但是unboxing不是用的unbox指令,而是 unbox.any 指令,在C#編譯的程式中就從來沒有發現過 unbox 指令。另外還有一批沒有發現的指令有
Time of Update: 2018-12-07
本文主要介紹一些dotNet加密保護工具的原理以及就其脫殼進行簡單探討。remotesoft protector、maxtocode、.Net Reactor、Cliprotector、themida .Net、xenocode native compiler、DNGuard。remotesoft
Time of Update: 2018-12-07
在 .Net程式加密的原理及解密探討三(執行個體解密) 一文中我們介紹了反射,主要提到三個函數 DumpAssembly,DumpType, DumpMethod。 這裡我們將就 DumpMethod 這個函數討論。前一篇我們已經提到的dump的整體流程。先把PE整體dump出來,然後在檔案後面增加一個段。接下來就是這次要講的反射和方法體重建。依靠上面的三個函數反射枚舉所有方法。取得 MethodBody 對象,重建 方法體,將方法體儲存到
Time of Update: 2018-12-07
DNGuard 是一款免費的DotNet核心模式的加密保護工具。這是第一個發布版本,版本號碼定為 1.0。只支援32位系統。目前還只在 xp和2003上做過測試,其它版本的系統還未測試,大家有條件的麻煩幫忙試試。運行本程式需要系統安裝 .Net 2.0 架構。支援加密2.0和1.1的程式集,不過還只測試了winform的。因為IL反組譯碼和IL彙編都是程式實現的,偷了懶,在IL彙編時都彙編成了2.0的格式。所以,加密後的程式集需要在 .Net 2.0
Time of Update: 2018-12-07
前面我們討論了 ngen 產生的 ni 檔案的還原,以及它的加強保護方式阻止還原。今天我在測試一個 ORM 程式時發現, 用加強保護模式的 ni 檔案運行會出現BadImageFormat 的 異常。我用ORM程式測試 HVM 核心,順便也測試了一下加強保護模式的 ni 檔案 。在前文 .Net Native Image 還原的原理和加強保護的方法 中提到了可以通過擦除原始ILCode來加強 ni 檔案的保護,讓其無法還原。我用這種模式處理了 這個ORM 程式,在進行資料操作時出現了
Time of Update: 2018-12-07
前面介紹了 讓 .Net 程式 脫離 .net framework架構 啟動並執行方法 ,但是有些朋友應用中還是遇到了一些問題,主要時需要自己提取架構程式以及應用的dll問題。這裡介紹一個偷懶提取方式。我們可以利用 Remotesoft linker的試用版來提取,試用版的擷取http://www.remotesoft.com/linker/try.html試用版提取時可以用 mdeploy 方式或者 native 方式。如果時 mdeploy
Time of Update: 2018-12-07
.Net 虛擬架構的實現原理前面介紹了利用第三方虛擬環境來實現 .Net程式脫離架構運行,並介紹了如何自己編寫載入器程式。今回我們介紹虛擬架構的核心實現原理,感興趣的朋友可以參考自己實現。在 讓 .Net 程式 脫離 .net framework架構 運行(原始碼實現說明) 中我們介紹的脫離架構啟動並執行方法,仍然需要依賴 rsdeploy.dll 才行。今回我們就介紹這個 dll 的實現原理。簡單的實現方式:首先我們需要用到一個 undocumented features
Time of Update: 2018-12-07
DNGuard HVM 專業版 v2.7 正式發布。專業版使用HVM保護技術,方法體IL代碼始終處於保護狀態。即使是在虛擬機器編譯過程中,在記憶體中也不會出現正確完整的ILCode。而是以HVM的虛擬碼形式出現。HVM虛擬機器通過參與Jit的編譯過程,協助Jit直接從HVM虛擬碼產生本地代碼。官方網站:http://www.dnguard.net/DNGuard 標準版零售價: 600 元/套DNGuard 專業版零售價: 5000 元/套2007-10-1 國慶促銷一個月(優惠活動):
Time of Update: 2018-12-07
A couple of days back, we tweaked the running IL a little bit. Today, let's modify it some more!We'll insert a method call at the beginning of the body of the Main method. The method we'll call is as easy as can be: it is part of the of the same
Time of Update: 2018-12-07
本文將在 .Net 反射脫殼機核心原始碼 的基礎上介紹,如何? Jit層脫殼 機。首先我們選擇使用 C++/CLI 來完成這個工作。反射部分需要用到 。Net的相關類庫,jit 層 hook 需要使用native c++ 方面的功能。本文假設您已經完成了 hook jit的工作,並截獲到了相關結構體。首先介紹一下代碼主要流程: 入口函數 void DumpAssembly(Assembly ass,string path) 枚舉所有type,調用 void DumpType(Type tp,
Time of Update: 2018-12-07
mscorwks.dll是dotNet的核心檔案,尤其是在net2.0中,以前分散的功能都集中到了這個dll中。net1.1中,還有一個檔案mscorsvr.dll 和 mscorwks.dll 是同等地位的。它們分別對應於 windows service程式以及 desktop 程式。在net2.0中,它們都統一到了 mscorwks。dll中。同時在net2.0中mscorsn.dll 的功能也合并到了
Time of Update: 2018-12-07
在之前介紹Jit層脫殼原理時曾提到兩個痛點,1。方法體的局部變數簽名。2。方法體的SEH 異常處理表。本文主要就第一個問題進行簡單探討,隨帶也涉及到一些第二個問題。前面提到過投機的方式擷取,不在本文討論範圍,投機總是過於僥倖。進入到Jit層後,局部變數簽名已經由token值轉變為了結構體 CORINFO_SIG_INFO ,可以推測,該轉變應該是在 ee 層調用 jit的預先處理過程中完成了。參考sscli的原始碼,很容易可以定位到一個關鍵函數 unsigned long __stdcall
Time of Update: 2018-12-07
最近一直學習DotNet相關資料,sscli真是好東西啊:P。一邊學習一邊把知識綜合了一下,做了這個小工具。保護原理和國人的remotesoft,maxtocode差不多。加密後的程式發布時也需要附帶一個運行庫,不過和那兩個不同,附帶的運行庫不是純native的dll,而是C++/CLI的混合程式集。工具已經有了雛形,整體核心架構完成了。用來加密了一個sample,運行正常。有些方面甚至超過了maxtocode。1.不依賴微軟的ildasm和ilasm程式。 IL反組譯碼和IL彙編都程式實現。
Time of Update: 2018-12-07
原文出處:http://blog.monstuff.com/If you remember the Omniscient Debugger, it was a Java debugger that instrumented the bytecode at runtime to trace calls and monitor variables. It did so by using a custom ClassLoader.Unfortunately the .NET classes that
Time of Update: 2018-12-07
今天查一個錯誤時發現這個問題。有一個frmEdit。在Closing事件裡面判斷資料是否修改,然後提示使用者是否需要儲存資料。提供了三個按鈕,yes,no,cancel。yes:儲存資料,關閉表單。no:直接關閉表單。cancel:不關閉表單。實際運行,點yes,cancel,處理都對,但是點 no,就會重複彈出這個對話方塊,如果一直點 no的話,就會一直出現。看一眼代碼沒有發現明顯問題,實際調試才發現問題所在。代碼如下:private void frmEdit_Closing(object