「配枪朱丽叶。」

RootのCTF学习笔记。

AFCTF2018/BUUCTF-Crypto:MagicNum

题目:

72065910510177138000000000000000.000000
71863209670811371000000.000000
18489682625412760000000000000000.000000
72723257588050687000000.000000
4674659167469766200000000.000000
19061698837499292000000000000000000000.000000

考了C语言浮点小数内存存储的问题。
以第一行为例:

72065910510177138000000000000000.000000

二进制后转为科学计数法:

S EEEEEEEE DDDDDDDDDDDDDDDDDDDDDDD
+ 105+127  11001100110000100000000
0111 0100 0110 0011 0110 0110 0110 0001

得到:

74    	  63    	  66    	  61

但是是以小端方式存储于内存中。

61    	  66    	  63    	  74

放入winhex中进行了验证:
https://s2.ax1x.com/2020/02/25/3YIvEd.png
第23456行同理,推得出flag。

顺便找了下出题人的出题代码:
AFCTF2018-Crypto_OfficialWriteUp | LuckyDog
https://s2.ax1x.com/2020/02/25/3YoVEj.png

#include <stdio.h>
char flag[]="afctf{sec_is_everywhere}";

int main()
{
	for(int i=0;i<6;++i){
		printf("%20f\n",*(float*)(flag+i*4));
	}
	return 0;
}