當前位置: 妍妍網 > 碼農

.NET8呼叫三方程式

2024-01-25碼農

點選上方 藍字 江湖評談 設為關註




概述

.NET8裏面呼叫第三方程式,比較傳統的方法 System.Process.Start() .比如呼叫一個托管的Exe,以下程式碼即可。

System.Diagnostics.Process.Start(@"E:\Visual Studio Project\Test_\ConsoleApp1\bin\Debug\net8.0\ConsoleApp1.exe");

上面的呼叫有個缺陷,有的托管程式它只有DLL,沒有Exe,那該怎麽辦呢? 還有一種非常古老的方法,之所以提到它, 有一些加密軟體至今還會用到

string path = @"E:\Visual Studio Project\Test_\ConsoleApp1\bin\Debug\net8.0\ConsoleApp1.dll";byte[] buffer = File.ReadAllBytes(path);Assembly asm = Assembly.Load(buffer);asm.EntryPoint.Invoke(null, newobject[] { args });

註意了,它這個asm.EntryPoint這個方法在.NET8裏面面臨被淘汰和棄用。它這種加密模式是怎麽樣的呢?

註意看Assembly.Load這個函式的參數是byte[]字節陣列,例子中是透過 ConsoleApp1.dll的路徑來讀取它裏面的二進制字節陣列,實際上的套用可以透過直接給buffer賦值二進制字節陣列來對原有的程式進行呼叫。比如:

byte[] buffer= newbyte[] { 0x4D,0x5A,0x90,0x00,0x03,0x00,0x00,0x00,0x04,0x00.........};Assembly asm = Assembly.Load(buffer);asm.EntryPoint.Invoke(null, newobject[] { args });

它這裏面的buffer直接復制二進制字節,這個字節裏面可以填充自己想要的二進制,然後對它裏面程式進行呼叫。 這些 二進制可以放到托管的DLL裏面, 在這些二進制裏面,可以進行壓縮, 混淆,加密之後 對托管DLL進行定位,賦值給buffer字節陣列。

以上是一個非常簡單的加密和第三方程式呼叫技巧。

往期精彩回顧