【攻防世界】Reverse——secret-galaxy-300 writeup

由main函数查看相关代码,但是代码中并没有直接的关于flag的信息:

int __cdecl main(int argc, const char **argv, const char **envp)
{__main();fill_starbase(&starbase);print_starbase((int)&starbase);return 0;
}
void __cdecl fill_starbase(int a1)
{int i; // [esp+8h] [ebp-10h]int v2; // [esp+Ch] [ebp-Ch]v2 = 0;for ( i = 0; i <= 4; ++i ){*(_DWORD *)(a1 + 24 * i) = galaxy_name[i];*(_DWORD *)(24 * i + a1 + 4) = rand();*(_DWORD *)(24 * i + a1 + 8) = 0;*(_DWORD *)(24 * i + a1 + 12) = 0;*(_DWORD *)(24 * i + a1 + 16) = 24 * (i + 1) + a1;*(_DWORD *)(a1 + 24 * i + 20) = v2;v2 = 24 * i + a1;}
}
int __cdecl print_starbase(int a1)
{int result; // eaxconst char *v2; // edxint i; // [esp+1Ch] [ebp-Ch]puts("--------------GALAXY DATABASE-------------");printf("%10s | %s | %s\n", "Galaxy name", "Existence of life", "Distance from Earth");result = puts("-------------------------------------------");for ( i = 0; i <= 4; ++i ){if ( *(_DWORD *)(24 * i + a1 + 8) == 1 )v2 = "INHABITED";elsev2 = "IS NOT INHABITED";result = printf("%11s | %17s | %d\n", *(const char **)(24 * i + a1), v2, *(_DWORD *)(24 * i + a1 + 4));}return result;
}

注意到print_starbase只是打印了5个galaxy,但galaxy_name有6个元素:

c通过交叉引用,找到了下面的代码:

int __libc_csu_gala()
{int result; // eaxsc[0] = off_409014;sc[3] = &byte_40DAC0;sc[1] = 31337;sc[2] = 1;byte_40DAC0 = off_409004[0][8];byte_40DAC1 = off_409010[0][7];byte_40DAC2 = off_409008[0][4];byte_40DAC3 = off_409004[0][6];byte_40DAC4 = off_409004[0][1];byte_40DAC5 = off_409008[0][2];byte_40DAC6 = 95;byte_40DAC7 = off_409004[0][8];byte_40DAC8 = off_409004[0][3];byte_40DAC9 = off_40900C[0][5];byte_40DACA = 95;byte_40DACB = off_409004[0][8];byte_40DACC = off_409004[0][3];byte_40DACD = off_409004[0][4];byte_40DACE = off_409010[0][6];byte_40DACF = off_409010[0][4];byte_40DAD0 = off_409004[0][2];byte_40DAD1 = 95;byte_40DAD2 = off_409010[0][6];result = *((unsigned __int8 *)off_409008[0] + 3);byte_40DAD3 = off_409008[0][3];byte_40DAD4 = 0;return result;
}

但是上面代码中的result并不是我们要的flag,而是byte_40DAC0数组。解密方法有两种,一种是动态的就是在上面的代码中下断点,另一种是通过静态分析,用python改写上面的代码:


off_409004 = "Andromeda".encode('utf-8')
off_409008= "Messier".encode('utf-8')
off_40900C = "Sombrero".encode('utf-8')
off_409010  = "Triangulum".encode('utf-8')
off_409014 = "DARK SECRET GALAXY".encode('utf-8')def __libc_csu_gala():byte_40DAC = bytearray(21)  byte_40DAC[0] = off_409004[8]byte_40DAC[1] = off_409010[7]byte_40DAC[2] = off_409008[4]byte_40DAC[3] = off_409004[6]byte_40DAC[4] = off_409004[1]byte_40DAC[5] = off_409008[2]byte_40DAC[6] = 95byte_40DAC[7] = off_409004[8]byte_40DAC[8] = off_409004[3]byte_40DAC[9] = off_40900C[5]byte_40DAC[10] = 95byte_40DAC[11] = off_409004[8]byte_40DAC[12] = off_409004[3]byte_40DAC[13] = off_409004[4]byte_40DAC[14] = off_409010[6]byte_40DAC[15] = off_409010[4]byte_40DAC[16] = off_409004[2]byte_40DAC[17] = 95byte_40DAC[18] = off_409010[6]byte_40DAC[19] = off_409008[3]byte_40DAC[20] = 0return byte_40DAC.decode('utf-8')  result = __libc_csu_gala()
print(result)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/329356.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MYSQL InnoDB引擎

逻辑存储结构 架构 内存架构 磁盘结构 后台线程 事务原理 redolog undo log MVCC 基本概念 实现原理 隐藏字段 undo log readview

程序语言相关知识——偏向Eigen矩阵

1 查看 Eigen库表示的矩阵 方法 1.1 列矩阵x在监视中&#xff0c;这样查看&#xff0c;数值右侧的圈圈 可用于更新数值 随程序 1.2 比较全的方法&#xff1a;来自于知乎&#xff1a;https://zhuanlan.zhihu.com/p/625334009?utm_id0 1.3 eigen的用法&#xff1a;https://ww…

听GPT 讲Rust源代码--compiler(33)

File: rust/compiler/rustc_middle/src/macros.rs 在Rust源代码中&#xff0c;rust/compiler/rustc_middle/src/macros.rs文件的作用是定义了一些用于宏展开的辅助宏和宏规则。 首先&#xff0c;这个文件导入了许多其他相关的模块&#xff0c;这些模块定义了编译器内部所需要的…

如何使用 CMake 生成一个静态库

文章目录 tutorial_3/CMakeLists.txttutorial_3/src/CMakeLists.txtcmake_tutorial/tutorial_3/src/hello.cpptutorial_3/src/hello.h根目录的 CMakeLists.txtsrc 目录的 CMakeLists.txthello.cpp 和 hello.h构建过程总结 tutorial_3/CMakeLists.txt cmake_minimum_required(V…

关于对象存储的若干事

引言 最近在阅读鸣嵩的一篇文章&#xff0c;数据库的下一场革命&#xff1a;S3 延迟已降至原先的 10%&#xff0c;云数据库架构该进化了 收获很多&#xff0c;过去时间也基于对象存储做过一些功能实现&#xff0c;特记录下。关于鸣嵩&#xff1a; 曹伟&#xff0c;花名鸣嵩&am…

Redis入门-安装和启动

​ 大家好我是苏麟 , 今天开始聊聊Redis . 大纲 Redis简介官网 Redis下载Redis服务启动与停止Redis客户端图形工具 Redis简介 Redis是一个基于内存的 key-value 结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件。 Redis是一个开源&#xff08;BSD许可&#xff0…

GA算法简介

GA算法简介 前言一、GA是什么二、GA简介1.思想2.流程3.过程 前言 今天学习一下优化中非常出名的遗传(GA)算法 &#xff0c;它的起源可是来自达尔文的生物进化论。 一、GA是什么 百科定义&#xff1a;遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;最早是…

【教3妹学编程-算法题】赎金信

3妹&#xff1a;“太阳当空照&#xff0c;花儿对我笑&#xff0c;小鸟说早早早&#xff0c;你为什么背上炸药包” 2哥 :3妹&#xff0c;什么事呀这么开森。 3妹&#xff1a;2哥你看今天的天气多好啊&#xff0c;最近一周都是大晴天&#xff0c;艳阳高照 2哥&#xff1a;是啊&am…

提升技术,必看的8个开源库,都很通俗易懂

提升技术&#xff0c;必看的8个开源库&#xff0c;都很通俗易懂 随着工作年限越来越高&#xff0c;越来越觉得闭门造车是一种非常不好的习惯&#xff0c;还是得多看看别人是怎么写代码的&#xff0c;毕竟人外有人嘛&#xff0c;所以我觉得多看看开源库的源码&#xff0c;是一种…

微软开源时空预测Fost的使用和解读

一、引言 时空预测是指对未知系统状态在时间和空间上的预测&#xff0c;它是地球系统科学、交通运输、智慧城市等领域的重要技术和工具。时空预测的目的是利用历史数据和当前信息&#xff0c;通过建立时空依赖关系&#xff0c;来推断未来的变化趋势和可能的情景。时空预测的应…

rosbag 源码阅读笔记-1

这篇文字想通过在自己的机器上查找rosbag的源码在哪里&#xff08;而不是通过google搜索&#xff09;&#xff0c;来和大家分享一些ros和python的常用命令&#xff0c;了解一下rosbag的调用过程。 怎么查到源码在哪里 当然我们可以直接上ros的官网去查看&#xff0c;路径在这…

MySQL 临时表

MySQL 临时表 MySQL 临时表在我们需要保存一些临时数据时是非常有用的。 临时表只在当前连接可见&#xff0c;当关闭连接时&#xff0c;MySQL 会自动删除表并释放所有空间。 在 MySQL 中&#xff0c;临时表是一种在当前会话中存在的表&#xff0c;它在会话结束时会自动被销毁…