【逆向分析】BUUCTF 逆向题目 [BJDCTF2020]JustRE

admin 2023年12月5日03:35:53评论14 views字数 1849阅读6分9秒阅读模式

【逆向分析】BUUCTF 逆向题目 [BJDCTF2020]JustRE

题目地址:

https://buuoj.cn/challenges#[BJDCTF2020]JustRE

【逆向分析】BUUCTF 逆向题目 [BJDCTF2020]JustRE

https://files.buuoj.cn/files/b02a88388c5a572e39c2d40b8e9136fc/attachment.exe

【逆向分析】BUUCTF 逆向题目 [BJDCTF2020]JustRE

首先,查壳

【逆向分析】BUUCTF 逆向题目 [BJDCTF2020]JustRE

信息:     文件名: H:/第七届“强网杯”全国网络安全挑战赛/BUUCTF/[BJDCTF2020]JustRE/attachment.exe    大小: 40855(39.90 KiB)    操作系统: Windows(95)    架构: I386    模式: 32    类型: GUI    字节序: LE

使用IDA32打开文件

【逆向分析】BUUCTF 逆向题目 [BJDCTF2020]JustRE

【逆向分析】BUUCTF 逆向题目 [BJDCTF2020]JustRE

Shift+F12

【逆向分析】BUUCTF 逆向题目 [BJDCTF2020]JustRE

【逆向分析】BUUCTF 逆向题目 [BJDCTF2020]JustRE

.data:00407030 aBjdDD2069a4579 db ' BJD{%d%d2069a45792d233ac}',0

【逆向分析】BUUCTF 逆向题目 [BJDCTF2020]JustRE

交叉引用

【逆向分析】BUUCTF 逆向题目 [BJDCTF2020]JustRE

F5

【逆向分析】BUUCTF 逆向题目 [BJDCTF2020]JustRE

sprintf(String, " BJD{%d%d2069a45792d233ac}", 19999, 0);

sprintf

格式化的数据写入某个字符串

int sprintf( char *buffer, const char *format, [ argument] … );

字串格式化命令,主要功能是把格式化的数据写入某个字符串中。sprintf 是个变参函数,使用时经常出问题,而且只要出问题通常就是能导致程序崩溃的内存访问错误,但好在由sprintf 误用导致的问题虽然严重,却很容易找出,无非就是那么几种情况,通常用眼睛再把出错的代码多看几眼就看出来了。

%% 印出百分比符号,不转换。

%c 整数转成对应的 ASCII 字元。

%d 整数转成十进位。

%f 倍精确度数字转成浮点数。

%o 整数转成八进位。

%s 整数转成字符串。

%x 整数转成小写十六进位。

%X 整数转成大写十六进位。

$money = 123.1

$formatted = sprintf ("%06.2f", $money); // 此时变数 $ formatted 值为 "123.10"

$formatted = sprintf ("%08.2f", $money); // 此时变数 $ formatted 值为 "00123.10"

$formatted = sprintf ("%-08.2f", $money); // 此时变数 $ formatted 值为 "123.1000"

$formatted = sprintf ("%.2f%%", 0.95 * 100); // 格式化为百分比

//把整数123 打印成一个字符串保存在s 中。

sprintf(s, "%d", 123); //产生"123"

可以指定宽度,不足的左边补空格:

sprintf(s, "%8d%8d", 123, 4567); //产生:" 123 4567"

当然也可以左对齐:

sprintf(s, "%-8d%8d", 123, 4567); //产生:"123 4567"

也可以按照16 进制打印:

sprintf(s, "%8x", 4567); //小写16 进制,宽度占8 个位置,右对齐

sprintf(s, "%-8X", 4568); //大写16 进制,宽度占8 个位置,左对齐

#include <stdio.h>
int main() { // Use a constant for the buffer size const int bufferSize = 0x100; char String[bufferSize];
// Use snprintf to avoid potential buffer overflow int writtenChars = snprintf(String, bufferSize, "BJD{%d%d2069a45792d233ac}", 19999, 0);
// Check for snprintf failure if (writtenChars < 0 || writtenChars >= bufferSize) { fprintf(stderr, "Error: Buffer overflow or snprintf failuren"); return 1; }
// Use fputs instead of puts for better control (no automatic newline) if (fputs(String, stdout) == EOF) { fprintf(stderr, "Error: fputs failedn"); return 1; }
return 0;}

【逆向分析】BUUCTF 逆向题目 [BJDCTF2020]JustRE

flag{1999902069a45792d233ac}

原文始发于微信公众号(利刃信安攻防实验室):【逆向分析】BUUCTF 逆向题目 [BJDCTF2020]JustRE

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月5日03:35:53
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【逆向分析】BUUCTF 逆向题目 [BJDCTF2020]JustREhttps://cn-sec.com/archives/2268970.html

发表评论

匿名网友 填写信息