【发布时间】:2025-11-25 06:10:01
【问题描述】:
我遇到了一点问题,这里的其他问题对我没有多大帮助。
我是一名安全专业的学生,我正在尝试为一个项目编写一个加密器。对于那些不知道它是什么的人,你可以在这里阅读。 http://www.gamekiller.net/tutorials-guides/17187-tut-making-crypter-vb6-using-rc4.html
无论如何,快速解释一下,加密程序是旨在通过加密程序然后在前面附加一个“存根”来绕过防病毒程序的程序,该程序是一个解密它的程序。我在拆分文件时遇到了一个非常烦人的问题。
最大的烦恼是我必须将加密的可执行文件放入一个字节数组中,因为字符串会杀死我的加密可执行文件中的某些字符,使其无法执行。更糟糕的是,我仍然必须“拆分”exe,这就是麻烦的开始。
存根的基本思想是:
- 获取当前exe路径
- 通过 File.ReadAllytes 读取所有字节
- 在分隔符“EVILDELIMITER”处拆分文件
- 获取最后一个字段(因为那是加密的 EXE)
- 使用 RC4 解密
- 使用 RunPE 运行。
除了最烦人的分裂部分,我什么都可以工作。如何在分隔符处拆分字节数组?有没有更简单的方法来做到这一点?
这是我目前的存根代码。
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);
}
感谢您的帮助。
【问题讨论】:
-
编码为 UTF8 并不理想。您可以获得无效的 unicode 代码点。您应该尝试遍历字节数组。
-
如何将我的字符串更改为字节数组?我需要更改分隔符才能搜索它,除非您知道一个函数可以让我搜索带有字符串值的字节数组。我还修复了代码,我不小心使用了旧的存根版本。
-
@Roger 它向我抛出了一堆错误:(它说字符串没有 ToArray
() 方法。