BUU靶场之REVERSE

今天开始学习CTF中的逆向
大致流程:判断程序是多少位以及是否加了壳,使用IDA进行反编译,在编写脚本
相关工具
【ExeinfoPe】
链接:https://pan.baidu.com/s/16SAvRVydckWYHF3wS93pGQ
提取码:gb3e
【Unpacker_ASPack】
链接:https://pan.baidu.com/s/1m73KxWa-HJgivuvOEb2JFg
提取码:wj33
【UPX Unpacker】
链接:https://pan.baidu.com/s/1QWivSIFFNJuhlwqm3AnZhQ
提取码:er4f
【IDA7.6】
链接:https://pan.baidu.com/s/1VXtb0CB0p11mDmTQlJWtRQ
提取码:we3d

easyre

1、下载题目中的压缩包,使用Exeinfo PE工具查看详细信息,发现没加壳
在这里插入图片描述
2、使用IDA64查看,找到main()函数,按F5反编译,直接就能看到flag
在这里插入图片描述
在这里插入图片描述

reserse_1

用IDA64打开,找到sub_1400118C0()函数,点击Str2,可以看到Str2是{hello_world},把o替换成0,那么flag为{hell0_w0rld}
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

reserse_2

打开IDA64,找到main()函数,F5反编译,s2就是输入的flag,由代码可知flag=s2,for循环中的flag由于之前没有定义过,说明它是由值得,双击flag就可以看到它的值,for循环里面的代码作用是用1替换i和r,所以flag为{hack1ng_fo1_fun}
在这里插入图片描述
在这里插入图片描述

内涵的软件

用IDA32打开,找到main()函数,F5反编译,点击main_0,直接能看到类似flag的字符串,提交试了一下直接成功了,flag{49d3c93df25caad81232130f3d2ebfad}
在这里插入图片描述
在这里插入图片描述

新年快乐

1、使用Exeinfo PE工具看到加了UPX1的壳,使用UPX Unpacker工具进行脱壳
在这里插入图片描述
在这里插入图片描述
2、用IDA32打开脱壳后的程序,找到main()函数,F5反编译,flag=Str2=HappyNewYear!
在这里插入图片描述

xor

1、用IDA64打开,找到main()函数,F5反编译
在这里插入图片描述
2、双击查看global(右键,点DATA),一共有32位
在这里插入图片描述
在这里插入图片描述
3、在根据逻辑写个脚本xor.c

#include<stdio.h>

int main()
{
	int flag[33] = {0x66,0x0A,0x6B,0x0C,0x77,0x26,0x4F,0x2E,0x40,0x11,0x78,0x0D,0x5A,0x3B,0x55,0x11,0x70,0x19,0x46,0x1F,0x76,0x22,0x4D,0x23,0x44,0x0E,0x67,0x6,0x68,0x0F,0x47,0x32,0x4F};
	int i;
	for (i = 32; i > 0; --i )
	{
		flag[i] ^= flag[i - 1];
	}
    for(i = 0; i < 33; i++)
	{
		printf("%c",flag[i]);
	}
	return 0;
}

在这里插入图片描述

[ACTF新生赛2020]SoulLike

1、用IDA64打开,找到main()函数,F5反编译flag前10位为actf{actf{
在这里插入图片描述
2、这段代码是计算flag的11位到22位,且等于v8
在这里插入图片描述

3、查看一下sub_83A()函数,进行了一系列的运算,v8运算的最后结果就等于v3【每次运算得到的值,在进行下一位运算时会使用到】
在这里插入图片描述
在这里插入图片描述
4、编写脚本

#include<stdio.h>
#include<string.h>

int main()
{
	char a1[13] = "", temp[13] = "";
	char v3[] = {126,50,37,88,89,107,53,110,0,19,30,56};
	int i,j;
    for(i=0; i<12; i++)
	{
		
		for(j=0; j<255; j++)
		{
			strcpy(a1, temp);
			a1[i] = j;
			*a1 ^= 0x2Bu;
			a1[1] ^= 0x6Cu;
			a1[2] ^= 0x7Eu;
			.....
			a1[11] ^= 0x3Bu;
			
			if(a1[i] == v3[i])
			{
				temp[i] = j;
				break;
			}
		}
	}
	printf("flag{%s}", temp);
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值