hgame2020-week2-re

hgame week2

hgame ctf week2的逆向wp
题目链接:
链接: https://pan.baidu.com/s/12tZPC3uM_tkSY50YhNUC4w 密码: fvho

unpack

这是一个elf脱壳的题目,我用的方法是先运行程序,然后使用gdb attach到程序,然后dump出来,

首先是先使程序运行起来,

然后查一下这个程序运行时该进程的pid, 使用ps和grep指令,

然后看一下这个进程空间,cat /proc/[pid]/maps

然后使用gdb去:gdb attach [pid]

这里我是要使用root才可以attack成功,有点奇怪?

然后进入以后使用gdb的dump指令,

dump binary memory [path] start_addr end_addr

这里整个dump下来,然后就可以得到这个文件,看到加密还是很简单:

在ida可以看到地址,然后下断,继续运行程序,可以在得到内存中的值:

然后直接可以得到flag:

crackme

首先查壳是一个.net文件,用dnSpy做的,打开可以直接诶看到源码,

private void button1_Click(object sender, EventArgs e)
{
   
	if (this.status == 1)
	{
   
		MessageBox.Show("你已经激活成功啦,快去提交flag吧~~~");
		return;
	}
	string text = this.textBox1.Text;
	if (text.Length != 46 || text.IndexOf("hgame{") != 0 || text.IndexOf("}") != 45)
	{
   
		MessageBox.Show("Illegal format");
		return;
	}
	string base64iv = text.Substring(6, 24);
	string str = text.Substring(30, 15);
	try
	{
   
		Aes aes = new Aes("SGc0bTNfMm8yMF9XZWVLMg==", base64iv);
		Aes aes2 = new Aes("SGc0bTNfMm8yMF9XZWVLMg==", "MFB1T2g5SWxYMDU0SWN0cw==");
		string text2 = aes.DecryptFromBase64String("mjdRqH4d1O8nbUYJk+wVu3AeE7ZtE9rtT/8BA8J897I=");
		if (text2.Equals("Same_ciphertext_"))
		{
   
			byte[] array = new byte[16];
			Array.Copy(aes2.EncryptToByte(text2 + str), 16, array, 0, 16);
			if (Convert.ToBase64String(array).Equals("dJntSWSPWbWocAq4yjBP5Q=="))
			{
   
				MessageBox.Show("注册成功!");
				this.Text = "已激活,欢迎使用!";
				this.status = 1;
			}
			else
			{
   
				MessageBox.Show("注册失败!\nhint: " + aes2.DecryptFromBase64String("mjdRqH4d1O8nbUYJk+wVu3AeE7ZtE9rtT/8BA8J897I="));
			}
		}
		else
		
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值