攻防世界-Reverse-re1

知识点

1.IDA代码分析

2.16进制转换

步骤

附件为exe文件,功能是验证输入的flag正确否。

1.exeinfo查看文件信息,无壳,32为exe,用IDA32打开

2.IDA打开,找到main函数,F5反汇编。

3.代码分析。

首先将xmmword_413E34的值赋值给v5,

然后将键盘输入的值给v9,最后比较v5和v9的地址是否相等(我的理解是这样,因为&为取地址,但是也有可能是直接比价字符串,这里我不太清楚)。相等就输出aflag_0即成功。

所以要知道v5就得进入xmmword_413E34,里面是一串数(16进制数),下面qword_413E44也是。所以上图的第一段代码就是把这串字符赋值给v5。

综上,在程序运行后,内存中的一个地址存着flag的16进制,将输入的字符串的地址和flag的地址值比较,相等就输出aflag..。

下面括号里的可以跳过,是我自己的一些想法和不理解的

(至于为什么是地址比较,我是这么想的,有个&符,是取地址的意思,原来内存中就放了一串16进制在一个地址中,然后输入一串字符,如果这个字符串的16进制和原来的相等,就不会新开辟一个空间来存储,应该是直接使用原来的空间,所以为什么比较地址就能判断是否相等,然后就是为什么输入的是字符,在程序中就变成了16进制的比较,因为在内存中就是16进制或者二进制比价的,要把字符转化为16进制。然后还有一个点就是有两串16进制,第二串赋值给qword了,然后再赋值给v6,我不理解在哪里把v6的值和v5的值合一起了)

4.把两串16进制转换为字符为(或者直接使用IDA的转换功能):0tem0c1eW{FTCTUD }FTCTUD,然后因为计算机的大段存储和小端存储,所以从后往前重新排序:

0tem0c1eW{FTCTUD:DUTCTF{We1c0met0  

}FTCTUD:DUTCTF}

合起来即为DUTCTF{We1c0met0DUTCTF}

flag:DUTCTF{We1c0met0DUTCTF}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值