点击上方蓝字 江湖评谈设为关注
概述
在.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, new object[] { args });
注意了,它这个asm.EntryPoint这个方法在.NET8里面面临被淘汰和弃用。它这种加密模式是怎么样的呢?
注意看Assembly.Load这个函数的参数是byte[]字节数组,例子中是通过ConsoleApp1.dll的路径来读取它里面的二进制字节数组,实际上的应用可以通过直接给buffer赋值二进制字节数组来对原有的程序进行调用。比如:
byte[] buffer= new byte[] { 0x4D,0x5A,0x90,0x00,0x03,0x00,0x00,0x00,0x04,0x00.........};
Assembly asm = Assembly.Load(buffer);
asm.EntryPoint.Invoke(null, new object[] { args });
它这里面的buffer直接复制二进制字节,这个字节里面可以填充自己想要的二进制,然后对它里面程序进行调用。这些二进制可以放到托管的DLL里面,在这些二进制里面,可以进行压缩,混淆,加密之后对托管DLL进行定位,赋值给buffer字节数组。
以上是一个非常简单的加密和第三方程序调用技巧。
往期精彩回顾