c# - 在分隔符处拆分字节数组

标签 c# security

我遇到了一些问题,这里的其他问题对我帮助不大。

我是一名安全专业的学生,​​我正在尝试为一个项目编写一个密码器。对于那些不知道它是什么的人,您可以在这里阅读。 http://www.gamekiller.net/tutorials-guides/17187-tut-making-crypter-vb6-using-rc4.html

无论如何,快速解释一下,加密程序是一种旨在通过加密程序然后在前面附加一个“ stub ”(用于解密它的程序)来绕过防病毒软件的程序。我在拆分文件时遇到了一个非常烦人的问题。

最大的烦恼是我必须将加密的可执行文件放入一个字节数组,因为字符串会杀死我的加密可执行文件中的某些字符,使其无法执行。更糟糕的是,我仍然必须“拆分”exe,这就是麻烦的开始。

stub 的基本思想是:

  • 获取当前exe路径
  • 通过File.ReadAllytes读取所有字节
  • 在分隔符“EVILDELIMITER”处拆分文件
  • 获取最后一个字段(因为那是加密的 EXE)
  • 使用RC4解密
  • 使用 RunPE 运行。

除了最烦人的拆分部分外,我的所有东西都在工作。如何在分隔符处拆分字节数组?有更简单的方法吗?

这是我目前拥有的 stub 的代码。

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);
}

感谢您的帮助。

最佳答案

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;
}

关于c# - 在分隔符处拆分字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9755090/

相关文章:

javascript - 为什么这个 Javascript RegExp 测试不起作用?

node.js - enclosejs native 代码错误

security - 如何在我的登录密码中添加盐?

c# - 在代码中设置 WPF 图片源

c# - 当我更改表单数据网格的排序顺序时,在 form.ShowDialog() 上发生参数异常

C# 嵌入式 FTP 服务器

security - 为什么自动脚本首选公用 key 身份验证?

c# - Windows 窗体 : create the main application after login, 要运行哪个窗体?

c# - 为什么 Rhino Stubs 允许我对它们设定期望值?

c - 堆栈保护器适用于 strcpy() 示例但不适用于 gets() 示例