3gstudent / feedback

0 stars 0 forks source link

C# base64编码PE文件还原的问题 #38

Closed jzking121 closed 4 years ago

jzking121 commented 4 years ago

学习《通过.NET实现内存加载PE文件》受益良多,其中有一份代码是将PE文件转换成base64。 GzipandBase64.cs

我想把base64编码后文件还原。

String AsBase64String = Convert.ToBase64String(compress);
我把更改为:
String AsBase64String = Convert.FromBase64String(compress);

发现报错如下:

GzipandBase64.cs(30,37): error CS1502: 与“System.Convert.FromBase64String(string)”最匹配的重载方法具有一些无效参数 GzipandBase64.cs(30,62): error CS1503: 参数 1: 无法从“byte[]”转换为“string”

多年前您在乌云知识库的文章也爆同样错误,所以想请教您一下。

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace test1
{
    class Program
    {
        static void Main(string[] args)
        {
            byte[] AsBytes = File.ReadAllBytes(@"C:\test\base64.txt");
            String AsBase64String = Convert.FromBase64String(AsBytes);
            StreamWriter sw = new StreamWriter(@"C:\test\calc.exe");
            sw.Write(AsBase64String);
            sw.Close();
        }
    }
}
3gstudent commented 4 years ago

如果是将base64字符串解码转换成exe,需要使用如下代码:

using System.IO;

String AsString = File.ReadAllText(@"C:\test\base64.txt");
byte[] bytes = Convert.FromBase64String(AsString);          
FileStream fs = new FileStream(@"C:\test\calc.exe", FileMode.Create);
fs.Write(bytes, 0, bytes.Length);
fs.Flush();
fs.Close();
jzking121 commented 4 years ago

非常感谢,已测试成功。 跟着您的脚步真是受益良多。