點選上方 藍字 江湖評談 設為關註
概述
在 .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字節陣列。
以上是一個非常簡單的加密和第三方程式呼叫技巧。
往期精彩回顧