我开始学习加密技术,我想创建自己的文件加密器。 运行程序后,您必须选择要加密的文件,然后选择存根。目前它现在正在加密,但它绑定了两个文件。选择这两个文件后,它将创建文件first.exe。 Splitter字符串用于程序知道存根代码的结束位置以及原始文件代码何时开始。就是这样做的
当你运行first.exe时,它将创建文件cos.exe,它应该是原始文件。但是当我运行它时,它不起作用。它显示“此应用程序无法在您的计算机上运行”,它说我需要找到我的操作系统的版本。 以下是套管的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string stubpath, filepath;
private void Form1_Load(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
{
filepath = openFileDialog1.InitialDirectory + openFileDialog1.FileName;
}
if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
{
stubpath = openFileDialog1.InitialDirectory + openFileDialog1.FileName;
}
byte[] originalfile = File.ReadAllBytes(filepath);
byte[] array = Encoding.ASCII.GetBytes("password");
byte[] originalstubfile = File.ReadAllBytes(stubpath);
byte[] arr1 = Combine(array, originalfile);
ByteArrayToFile("first.exe", Combine(originalstubfile,arr1));
}
public bool ByteArrayToFile(string fileName, byte[] byteArray)
{
try
{
using (var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write))
{
fs.Write(byteArray, 0, byteArray.Length);
return true;
}
}
catch (Exception ex)
{
return false;
}
}
public static byte[] Combine(byte[] first, byte[] second)
{
byte[] ret = new byte[first.Length + second.Length];
Buffer.BlockCopy(first, 0, ret, 0, first.Length);
Buffer.BlockCopy(second, 0, ret, first.Length, second.Length);
return ret;
}
}
}
以下是存根的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string exePath = Application.ExecutablePath;
byte[] originalfile = File.ReadAllBytes(exePath);
var str = System.Text.Encoding.Default.GetString(originalfile);
string[] tokens = str.Split(new[] { "password" }, StringSplitOptions.None);
//0 stub
//1 original file
byte[] toBytes = Encoding.ASCII.GetBytes(tokens[1]);
File.WriteAllBytes(System.AppDomain.CurrentDomain.BaseDirectory+ "cos.exe", toBytes);
}
}
}
编辑:
Here is the error(Polish Language)
另外我发现当我删除分割器字符串并且我不使用存根但我使用2个文件,如ex。 putty.exe然后它工作,所以我认为存根中存在问题。