Buuctf之SimpleRev做法

首先,查个壳,64bit,那就丢进ida64中进行反编译进来之后,我们进入main函数,发现里面没什么东西,那就shift+f12搜索字符串,找到关键字符串,双击进入然后再选中该字符串,ctrl+x进入应用该字符串的函数,如下图然后,边分析,边在旁边打上注释,在阐述里面的逻辑之前,我们先了解一个小知识点,我们都知道,两个十六进制数,由1个字节构成,也就是8个01代码,通常类型为8位的,就是正向读取,而一般64位的或者更大的,都要进行逆向读取,此处的src和v9[0]就大于64位,要进行逆向读取,这段代码的主逻辑大概就是,先进行一些字符串的复制和连接,然后将key中的大写字母转换为小写字母,然后getchar读取字符(该字符的范围在a~z和A~Z之间),再根据输入的字符对某段字符串进行处理,最后比对一下,相同则正确, str2[v2] = (v1 - 39 - key[v3 % v5] + 97) % 26 + 97;  此处的str2为下方的text(已知),key也为已知,采取爆破遍历算法,得到v1,即为flag,上代码


#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
	char key[] = "adsfkndcls";
	char text[] = "killshadow";
	for (int i = 0; i < 10; i++)   //10代表的是key的长度
	{
		for (int j = 65; j <= 122; j++)
		{
			//依次遍历爆破,把控好j的取值
			if (j >= 'A' && j <= 'Z' || j >= 'a' && j <= 'z')
			{
				if (text[i] == (j - 39 - key[i ] + 97) % 26 + 97)
				{
					printf("%c", j);
					break;
				}
			}
		}
	}
	return 0;
}

得到结果flag{KLDQCUDFZO},提交即可

  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值