题目:Re backdoor
变量管理器遭到恶意修改,寻找变量管理器中包含的重要flag。
打开发现
随便输入,点Login没反应。这是个C#程序,使用dnSpy打开
在下面的代码出下断点,运行后随便输入,然后程序中断,这里就是关键的判断地方,具体算法逻辑通过逆向调试分析得知为1. DES加密 2. 连续三次base64加密。
DES加密密钥为
然后将结果和一个值比较,这个值通过调试得出为:ZGpSWWJtMVFSalJHVEVkck5rOWFaM0kyUjNVdlp6MDk=
根据加密算法,编写解密算法如下,我把加密部分也写出来:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.IO;
using System.Reflection;
using System.Security.Cryptography;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
MemoryStream memoryStream;
memoryStream = new MemoryStream();
Console.Write("输入明文:You got the key\n");
//加密第一步,DES加密
byte[] bytes = Encoding.UTF8.GetBytes("You got the key"); //输入明文
DESCryptoServiceProvider descryptoServiceProvider = new DESCryptoServiceProvider();
descryptoServiceProvider.Key = Encoding.ASCII.GetBytes("flagflag");
descryptoServiceProvider.IV = Encoding.ASCII.GetBytes("flagflag");
CryptoStream cryptoStream = new CryptoStream(memoryStream, descryptoServiceProvider.CreateEncryptor(), CryptoStreamMode.Write);
cryptoStream.Write(bytes, 0, bytes.Length);
cryptoStream.FlushFinalBlock();
string a = Encoding.ASCII.GetString(memoryStream.ToArray());
Console.Write("DES加密结果:" + a + "\n");
//加密第二步,base64加密
string b = Convert.ToBase64String(memoryStream.ToArray());
Console.Write("base64第一次加密结果:" + b + "\n");
//加密第三步,base64加密
byte[] c = Encoding.UTF8.GetBytes(b);
string d = Convert.ToBase64String(c);
Console.Write("base64第二次加密结果:" + d + "\n");
//加密第四步,base64加密
byte[] e = Encoding.UTF8.GetBytes(d);
string f = Convert.ToBase64String(e);
Console.Write("base64第三次加密结果:"+ f + "\n\n");
Console.Write("输入密文:"+f+"\n");
//解密第一步,base64解密
byte[] aa = Convert.FromBase64String("ZGpSWWJtMVFSalJHVEVkck5rOWFaM0kyUjNVdlp6MDk="); //这里传递需要解密的密文
string bb = System.Text.Encoding.ASCII.GetString(aa);
Console.Write("base64第一次解密结果:" + bb + "\n");
//解密第二步,base64解密
byte[] cc = Convert.FromBase64String(bb);
string dd = System.Text.Encoding.ASCII.GetString(cc);
Console.Write("base64第二次解密结果:"+dd + "\n");
//解密第三步,base64解密
byte[] ee = Convert.FromBase64String(dd);
string ff = System.Text.Encoding.ASCII.GetString(ee);
Console.Write("base64第二次解密结果:" + ff + "\n");
//解密第四步,DES解密,密钥flagflag
MemoryStream ms = new MemoryStream();
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
des.Key = ASCIIEncoding.ASCII.GetBytes("flagflag");
des.IV = ASCIIEncoding.ASCII.GetBytes("flagflag");
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(ee, 0, ee.Length);
cs.FlushFinalBlock();
Console.Write("DES解密结果:"+System.Text.Encoding.ASCII.GetString(ms.ToArray()) + "\n\n");
}
}
}
输入 You got the key,登录