深入Jit,實現dotNet代碼的加解密

來源:互聯網
上載者:User

這段時間在測試.Net Jit的容錯性,為了方便,就直接將代碼插入到Jit中進行測試了。
這個種方式就是我前面介紹DNGuard時提到的第一種增加核心強度防反射脫殼的方法。
這種技術即可用在dotnet代碼的保護上,也可以用在dotnet加密殼的解密上。

目前的加密殼都是將核心插入到ee中提供解密服務。而dotNet的反射功能也是在ee層實現的,
所以才暴露了加密殼之前的反射漏洞。

如果加密殼將核心插入到jit,和jit融合提供解密服務,那麼反射就基本上失效了。在 ee 層就無法擷取到解密的代碼了。
在這種情況下修複反射基本上是不現實的了,jit只是為ee提供編譯服務。當然如果實現了jit層的脫殼,然後反過來再從jit增加一個服務提供ee層調用也是可以修複反射的,但如果實現了jit層的脫殼,再修複反射就有點多此一舉了。

如果直接從Jit層脫目前ee層的加密殼是比較輕鬆的,根本不用考慮修複反射的問題,對.Net 2.0 , 1.1都管用。
這種方法對目前加密殼以及它們的各個版本都有效。只是jit層脫殼有一個問題要解決,因為只有方法被編譯時間才會進入jit,所以要完全脫殼需要讓方法都被編譯。
不過這個問題不大,從ee層或者反射著手都可以解決。之前對付某殼老版本時用過,當時該殼沒有躲過Profile,可以從profile裡面dump到代碼,同樣只有方法在編譯時間才能通過profile得到代碼。
用反射比較簡單,不用瞭解ee都可以,invoke一個方法時這個方法肯定會被編譯的。

Jit層脫殼可以通吃目前的ee層加密殼,加密殼如果還在ee層混就沒什麼前途了。

Jit層脫Jit層的加密殼,就如同目前用反射脫ee層的殼差不多(甚至可能還稍差一籌),沒法做到通吃,只能針對不同的加密殼核心做不同的脫殼核心才行。
Jit加密殼和Jit融合得越複雜,要脫殼難度就越大。不過這樣要保證加密殼的穩定性和相容性,就要做更多的工作了。
就是這個原因,我才做Jit的容錯性測試,DNGuard 2.0的核心使用的就是Jit層,容錯性測試差不多了。
DNGuard目前的核心基調就不會再調整了。

接下來就要著手DNGuard H-VM的實驗和測試了。這個也是純Jit層的。(H = half)

DNGRuntime在運行時動態還原程式集,進行程式集方法的拆分(即一個方法被拆分為兩個或多個),
拆分後的方法差不多是一半走jit,一半走DNG H-VM。

遵循如下約定:
如果方法A走Jit,則被方法A所調用的方法都走 DNG H-VM。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.