逆向攻防世界CTF系列29-secret-galaxy-300

32位无壳,扔进IDA,main函数包括

int __cdecl main(int argc, const char **argv, const char **envp)
{
  __main();
  fill_starbase((int)&starbase);
  print_starbase((int)&starbase);
  return 0;
}

其中跟进fill_starbase,应该是赋值,跟进print就是打印,没有发现什么输入,动态运行一下

image-20241112162654908

设置断点

image-20241112162721944

回去看看这几个galaxyname怎么来的

image-20241112162749178

跟进

image-20241112162806700

发现这个从来没用到,而且跟题目名类似,交叉引用off_409014

image-20241112162839925

逻辑其实就是从前几个字符串里拼接flag

设置断点

运行到这时,提取出enc

enc = [
  0x61, 0x6C, 0x69, 0x65, 0x6E, 0x73, 0x5F, 0x61, 0x72, 0x65,
  0x5F, 0x61, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x5F, 0x75, 0x73,
  0x00
]

for i in range(len(enc)):
    print(chr(enc[i]),end='')

aliens_are_around_us

解法二是gbd动调

image-20241112164244954

image-20241112164003554

用指令“x/100s 0x40DAC0”可以快速查看字符串值

或x/s 0x80485bc

根据文件不同自己配,比如这个40DAC0是32ELF

image-20241112164145315

image-20241112164226691

其中x指令是查看内存的值,100是查看几个字节,s表示以字符串形式查看

这样就可以直接看到flag啦