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中进行了验证:
第23456行同理,推得出flag。
顺便找了下出题人的出题代码:
AFCTF2018-Crypto_OfficialWriteUp | LuckyDog
#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; }