buuctf——luck_guy

本文介绍了使用IDA Pro工具进行逆向工程分析的过程,通过查找和分析字符串,发现了与flag有关的线索。在伪代码中识别了strcat函数用于合并字符串,并通过f1和f2的值推断出最终flag的组成。在case4和case5中找到f2的处理方式,通过对f2的十六进制值进行减1或减2操作来还原原始字符串。最终提供了脚本代码实现这一过程。
摘要由CSDN通过智能技术生成
  • luck_guy
  1. 拖进ida 然后shift+F12 找字符串。发现一条带有flag的字符串。

2.把有这个字符串所在的函数转成伪代码后可以看到这里有一个strcat的函数(查了一下啊这个好像是把前一个字符串和后一个合并然后得到一个新字符串的函数)

于是大胆推测这道题最后的flag 是f1和f2合并得到的flag

  1. 双击f1发现f1直接就是GXY{do_not,同理双击f2之后什么都没有发现于是返回伪代码。

  1. 3.发现在case 4和case 5中f2又出现了于是便推测在case 4或是case 5中可以获取到f2的值。发现在case 5 对case 4里处理过的f2又一次进行了处理,推测是以0X后加两位构成的十六进制数,则编写脚本里是将十六进制做减2或是减1处理再对应ascii码转换。

 

4.编写运行脚本(f2数组那里如果最后一位不加0会有乱码出现)

此题完。

脚本代码:

#include <stdio.h>

#include<string.h>

#include<iostream>

using namespace std;

int main()

{

char f2[] = { 0x69,0x63,0x75,0x67,0x60,0x6f,0x66,0x7f,0};

for (int i = 0; i < 8; i++)

{

if (i % 2 == 1)

f2[i]=f2[i] - 2;

else

f2[i]=f2[i] - 1;

}

char f1[] = "GXY{do_not_";

cout << f1 ;

cout << f2 ;

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值