某殼對.Net程式加密的原理及解密探討五(中繼資料還原以及IL解碼的改進)

來源:互聯網
上載者:User

前一回講了 IL位元組碼的解碼問題,並提供了一個小工具,但解碼的效果和 ildasm還是差很多,給閱讀也帶來了一些困難。還有就是有些檔案選擇檔案後解碼會出錯,這是因為maxtocode對檔案裡面的中繼資料進行了隨機加密。這一回主要解決中繼資料的還原以及對解碼進行改進。

題外話:國慶後maxtocode推出了3.12版,稱對.net formwork 2.0擷取msil代碼的方式進行了限制。即在不作任何改進的情況下,我們前面介紹的方法將無法取得IL位元組碼。dreaman已經找到了取消這個限制的方法了,不久tankaiha 就會整合完成新的 injectReflector 。就是前一回貼的第二張圖片,該工具已經在看雪發布了。

言歸正卷,maxtocode對net程式加密時還能對中繼資料進行隨機部分加密,即破壞靜態中繼資料的完整性。直接磁碟檔案裡面讀取的中繼資料是不完全正確的,所以導致瞭解碼程式取中繼資料資訊時出錯。解碼程式現在已經更新處理了這樣的異常。同時增加了中繼資料還原的功能。
怎麼還原?這個比il位元組碼要容易,根據中繼資料的特性,程式運行後在記憶體中必然有完整的中繼資料,我們所要做的就是從記憶體中直接dump出來就ok了。

中繼資料在記憶體中的位置可以從PE的CLI Header中取得,CLI Header的位置有可以從PE可選頭部中取得。
首先參考PE檔案結構取得PE檔案的可選頭部。在這個結構中有一個成員是 DataDirectory 數組。
其中DataDirectory[14] 就是記錄的 CLI Header的位移和大小。
在CLI Header結構:
 struct  _CLIHeader
{
 DWORD cbSize;//size of 72
 INT16 nMajor;//2
 INT16 nMinor;//0
 DWORD mdRVA; //中繼資料在記憶體中的便宜量
 DWORD mdSize;//中繼資料的大小
 DWORD dwFlags;
 DWORD tkEntry; //mdtMethodDef
 INT64 Resources;
 INT64 SrongNameSig;
 INT64 CodeManagerTable;//0
 INT64 VTableFixedup;
 INT64 ExprotTableJump;//0
 INT64 ManagedNativeHeader;//0}
在這個結構裡面就能找到中繼資料的位移量和大小。

dump的功能已經增加到新版的ilbytedecoder中了。

完成介面如下:

這個介面上上一回的介面,解碼的是同一段IL位元組碼。
效果已經類似ildasm的了,基本上可閱讀了。
同時提供了選擇 Raw MetaData的進行解碼的功能,這樣就不用擔心因為
原檔案的中繼資料被破壞導致解碼不正常了。
程式新加的dump功能可以將記憶體中的中繼資料儲存為 Raw MetaData檔案中。
:http://www.bbsftp.com/temp/ILByteDecoderV1.5.rar

另附injectReflector:

該工具可在看雪論壇下載。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.