测试文件:https://adworld.xctf.org.cn/media/task/attachments/5d4117b968684b9483d0d4464e0a6fea

这道题要使用到gdb文件调试,gdb调试相关知识:https://www.cnblogs.com/Mayfly-nymph/p/11403150.html

1.准备

获得信息

  1. 32位文件

2.IDA打开

获得main函数的C语言代码

int __cdecl main(int argc, const char **argv, const char **envp)
{
setlocale(, &locale);
banner();
prompt_authentication();
authenticate();
return ;
}

2.1 代码分析

通过分析,可知authenticate();函数,储存着flag,进入函数

 void authenticate()
{
int ws[]; // [esp+1Ch] [ebp-800Ch]
wchar_t *s2; // [esp+801Ch] [ebp-Ch] s2 = decrypt(&s, &dword_8048A90);
if ( fgetws(ws, 0x2000, stdin) )
{
ws[wcslen(ws) - ] = ;
if ( !wcscmp(ws, s2) )
wprintf(&unk_8048B44);
else
wprintf(&unk_8048BA4);
}
free(s2);
}

通过第10~13行代码,我们可以知道s2就是我们需要flag(ws为输入值)

unk_8048B44内容

.rodata:08048B44 unk_8048B44     db  53h ; S             ; DATA XREF: authenticate+78↑o
.rodata:08048B45 db
.rodata:08048B46 db
.rodata:08048B47 db
.rodata:08048B48 db 75h ; u
.rodata:08048B49 db
.rodata:08048B4A db
.rodata:08048B4B db
.rodata:08048B4C db 63h ; c
.rodata:08048B4D db
.rodata:08048B4E db
.rodata:08048B4F db
.rodata:08048B50 db 63h ; c
.rodata:08048B51 db
.rodata:08048B52 db
.rodata:08048B53 db
.rodata:08048B54 db 65h ; e
.rodata:08048B55 db
.rodata:08048B56 db
.rodata:08048B57 db
.rodata:08048B58 db 73h ; s
.rodata:08048B59 db
.rodata:08048B5A db
.rodata:08048B5B db
.rodata:08048B5C db 73h ; s
.rodata:08048B5D db
.rodata:08048B5E db
.rodata:08048B5F db
.rodata:08048B60 db 21h ; !
.rodata:08048B61 db
.rodata:08048B62 db
.rodata:08048B63 db
.rodata:08048B64 db 20h
.rodata:08048B65 db
.rodata:08048B66 db
.rodata:08048B67 db
.rodata:08048B68 db 57h ; W
.rodata:08048B69 db
.rodata:08048B6A db
.rodata:08048B6B db
.rodata:08048B6C db 65h ; e
.rodata:08048B6D db
.rodata:08048B6E db
.rodata:08048B6F db
.rodata:08048B70 db 6Ch ; l
.rodata:08048B71 db
.rodata:08048B72 db
.rodata:08048B73 db
.rodata:08048B74 db 63h ; c
.rodata:08048B75 db
.rodata:08048B76 db
.rodata:08048B77 db
.rodata:08048B78 db 6Fh ; o
.rodata:08048B79 db
.rodata:08048B7A db
.rodata:08048B7B db
.rodata:08048B7C db 6Dh ; m
.rodata:08048B7D db
.rodata:08048B7E db
.rodata:08048B7F db
.rodata:08048B80 db 65h ; e
.rodata:08048B81 db
.rodata:08048B82 db
.rodata:08048B83 db
.rodata:08048B84 db 20h
.rodata:08048B85 db
.rodata:08048B86 db
.rodata:08048B87 db
.rodata:08048B88 db 62h ; b
.rodata:08048B89 db
.rodata:08048B8A db
.rodata:08048B8B db
.rodata:08048B8C db 61h ; a
.rodata:08048B8D db
.rodata:08048B8E db
.rodata:08048B8F db
.rodata:08048B90 db 63h ; c
.rodata:08048B91 db
.rodata:08048B92 db
.rodata:08048B93 db
.rodata:08048B94 db 6Bh ; k
.rodata:08048B95 db
.rodata:08048B96 db
.rodata:08048B97 db
.rodata:08048B98 db 21h ; !
.rodata:08048B99 db
.rodata:08048B9A db
.rodata:08048B9B db
.rodata:08048B9C db 0Ah
.rodata:08048B9D db
.rodata:08048B9E db
.rodata:08048B9F db
.rodata:08048BA0 db
.rodata:08048BA1 db
.rodata:08048BA2 db
.rodata:08048BA3 db

unk_8048BA4内容

.rodata:08048BA4 unk_8048BA4     db  41h ; A             ; DATA XREF: authenticate:loc_804878F↑o
.rodata:08048BA5 db
.rodata:08048BA6 db
.rodata:08048BA7 db
.rodata:08048BA8 db 63h ; c
.rodata:08048BA9 db
.rodata:08048BAA db
.rodata:08048BAB db
.rodata:08048BAC db 63h ; c
.rodata:08048BAD db
.rodata:08048BAE db
.rodata:08048BAF db
.rodata:08048BB0 db 65h ; e
.rodata:08048BB1 db
.rodata:08048BB2 db
.rodata:08048BB3 db
.rodata:08048BB4 db 73h ; s
.rodata:08048BB5 db
.rodata:08048BB6 db
.rodata:08048BB7 db
.rodata:08048BB8 db 73h ; s
.rodata:08048BB9 db
.rodata:08048BBA db
.rodata:08048BBB db
.rodata:08048BBC db 20h
.rodata:08048BBD db
.rodata:08048BBE db
.rodata:08048BBF db
.rodata:08048BC0 db 64h ; d
.rodata:08048BC1 db
.rodata:08048BC2 db
.rodata:08048BC3 db
.rodata:08048BC4 db 65h ; e
.rodata:08048BC5 db
.rodata:08048BC6 db
.rodata:08048BC7 db
.rodata:08048BC8 db 6Eh ; n
.rodata:08048BC9 db
.rodata:08048BCA db
.rodata:08048BCB db
.rodata:08048BCC db 69h ; i
.rodata:08048BCD db
.rodata:08048BCE db
.rodata:08048BCF db
.rodata:08048BD0 db 65h ; e
.rodata:08048BD1 db
.rodata:08048BD2 db
.rodata:08048BD3 db
.rodata:08048BD4 db 64h ; d
.rodata:08048BD5 db
.rodata:08048BD6 db
.rodata:08048BD7 db
.rodata:08048BD8 db 21h ; !
.rodata:08048BD9 db
.rodata:08048BDA db
.rodata:08048BDB db
.rodata:08048BDC db 0Ah
.rodata:08048BDD db
.rodata:08048BDE db
.rodata:08048BDF db
.rodata:08048BE0 db
.rodata:08048BE1 db
.rodata:08048BE2 db
.rodata:08048BE3 db

2.2 authenticate()函数

回到authenticate()函数的汇编代码

 .text:                 push    ebp
.text: mov ebp, esp
.text:0804870B sub esp, 8028h
.text: mov dword ptr [esp+], offset dword_8048A90 ; wchar_t *
.text: mov dword ptr [esp], offset s ; s
.text: call decrypt
.text: mov [ebp+s2], eax
.text: mov eax, ds:stdin@@GLIBC_2_0
.text:0804872D mov [esp+], eax ; stream
.text: mov dword ptr [esp+], 2000h ; n
.text: lea eax, [ebp+ws]
.text:0804873F mov [esp], eax ; ws
.text: call _fgetws
.text: test eax, eax
.text: jz short loc_804879C
.text:0804874B lea eax, [ebp+ws]
.text: mov [esp], eax ; s
.text: call _wcslen
.text: sub eax,
.text:0804875C mov [ebp+eax*+ws],
.text: mov eax, [ebp+s2]
.text:0804876A mov [esp+], eax ; s2
.text:0804876E lea eax, [ebp+ws]
.text: mov [esp], eax ; s1
.text: call _wcscmp
.text:0804877C test eax, eax
.text:0804877E jnz short loc_804878F
.text: mov eax, offset unk_8048B44
.text: mov [esp], eax
.text: call _wprintf
.text:0804878D jmp short loc_804879C

通过第6~7行代码,我们可以知道eax储存着decryp函数返回的flag值,再保存到s2

decrypt函数

wchar_t *__cdecl decrypt(wchar_t *s, wchar_t *a2)
{
size_t v2; // eax
signed int v4; // [esp+1Ch] [ebp-1Ch]
signed int i; // [esp+20h] [ebp-18h]
signed int v6; // [esp+24h] [ebp-14h]
signed int v7; // [esp+28h] [ebp-10h]
wchar_t *dest; // [esp+2Ch] [ebp-Ch] v6 = wcslen(s);
v7 = wcslen(a2);
v2 = wcslen(s);
dest = (wchar_t *)malloc(v2 + );
wcscpy(dest, s);
while ( v4 < v6 )
{
for ( i = ; i < v7 && v4 < v6; ++i )
dest[v4++] -= a2[i];
}
return dest;
}

2.3 gdb调试准备

综上所述,我们需要的flag保存在eax中,因此我们可以将断点设置在decrypt函数处,单步执行后,eax保存着我们需要的值,再读取eax值即可。

3.gdb调试

3.1 调试文件

gdb pro -q

设置断点

b decrypt

执行到断点

r

单步执行decrypt

n

显示寄存器

i r
eax            0x804e800
ecx 0x1480
edx 0x7d
ebx 0x0
esp 0xffff5300 0xffff5300
ebp 0xffffd328 0xffffd328
esi 0xf7fac000 -
edi 0xf7fac000 -
eip 0x8048725 0x8048725 <authenticate+>
eflags 0x282 [ SF IF ]
cs 0x23
ss 0x2b
ds 0x2b
es 0x2b
fs 0x0
gs 0x63

查看eax的值

x/6sw $eax

6:显示6行数据

s:字符串形式

w:word(4字节)形式

0x804e800:    U"9447{you_are_an_international_mystery}"x804e89c:    U"W\001\xf7ade1e8\xf7ade1ea\xf7ade1ec\xf7ade1ee\xf7ade1f0\xf7ade1f2\xf7ade1f4\xf7ade1f6\xf7ade1f8\xf7ade1fa\001\xf7ade200\xf7ade204\xf7ade208\xf7ade20c\xf7ade210\xf7ade214\xf7ade218\xf7ade21c\xf7ade220\xf7ade224\xf7ade228\xf7ade22a\xf7ade22c\xf7ade22e\xf7ade230\xf7ade232\xf7ade234\xf7ade236\xf7ade238\xf7ade23a\060\061\062\063\064\065\066\067\070\071\x175a\xf7ade268\xf7ae3fd0\xf7aefaa0\xf7af5808\001\xf7b07f4c"x804e968:    U"\xf7b07f54"x804e970:    U""x804e974:    U"\xf7b07f7c\xf7b088b8\xf7b09234\xf7b0aa74\xf7b0acec\xf7b0af64\xf7b0b29c\xf7b0d194\xf7b0f08c\xf7b0f3c4\xf7b0f67c\xf7b10f74\xf7b127b4\xf7b138e4\xf7b14854\xf7b14b6c\xf7b1a988\xf7b1fba4\021\x435f687a\x54552e4e\x382d46\021\x435f687a\x54552e4e\x382d46!\x804ea00\001\x804ea80\001"x804e9f4:    U""

4.get flag!

9447{you_are_an_international_mystery}

攻防世界--no-strings-attached的更多相关文章

  1. 记录下做攻防世界的misc题

    0x00 记录一下,代表自己做过 0x01 flag_universe 看简介是来自2018年的百越杯. 将文件下载下来后,就一个flag_universe.pcapng文件,wireshark打开. ...

  2. 攻防世界misc——János-the-Ripper

    攻防世界misc---János-the-Ripper 附件题目,题目的文件名为:misc100. 下载后,拖入linux中,binwalk发现有隐藏文件.用"strings  János- ...

  3. 攻防世界 Misc 新手练习区 ext3 bugku Writeup

    攻防世界 Misc 新手练习区 ext3 bugku Writeup 题目介绍 题目考点 WinHex工具的使用 linux磁盘挂载mount命令 Writeup 下载附件拖进winhex分析一下,查 ...

  4. 【WP】攻防世界-杂项-Misc

    长期更新一波 攻防世界 的杂项题解 这东西主要靠积累吧 攻防世界:https://adworld.xctf.org.cn 因为攻防世界的题目顺序经常变化,我也不改序号了,顺着之前写的位置往下写,推荐使 ...

  5. 攻防世界-MISC:something_in_image

    这是攻防世界高手进阶区的第四题,题目如下: 点击下载附件一,得到一个压缩包,解压后得到一个文件,用010editor打开,搜索flag,即可得到flag 另外一种做法,根据题目包含image,使用ka ...

  6. CTF--web 攻防世界web题 robots backup

    攻防世界web题 robots https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=506 ...

  7. CTF--web 攻防世界web题 get_post

    攻防世界web题 get_post https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5 ...

  8. 攻防世界 web进阶练习 NewsCenter

    攻防世界 web进阶练习 NewsCenter   题目是NewsCenter,没有提示信息.打开题目,有一处搜索框,搜索新闻.考虑xss或sql注入,随便输入一个abc,没有任何搜索结果,页面也没有 ...

  9. 【攻防世界】高手进阶 pwn200 WP

    题目链接 PWN200 题目和JarvisOJ level4很像 检查保护 利用checksec --file pwn200可以看到开启了NX防护 静态反编译结构 Main函数反编译结果如下 int ...

  10. XCTF攻防世界Web之WriteUp

    XCTF攻防世界Web之WriteUp 0x00 准备 [内容] 在xctf官网注册账号,即可食用. [目录] 目录 0x01 view-source2 0x02 get post3 0x03 rob ...

随机推荐

  1. 【学习】009 NIO编程

    NIO概述 什么是NIO? Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式. Ja ...

  2. python3-filter

    Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是 ...

  3. BitMap位图

    BitMap位图算法https://blog.csdn.net/varyall/article/details/79662029 常见面试题 题1:在2.5亿个整数找出不重复的整数,内存不足以容纳着2 ...

  4. 设置div 居中 和得到dom元素高度

    javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网 ...

  5. 黑客教父郭盛华:提升家庭WiFi的10个方法

    中国黑客教父,知名网络安全专家郭盛华曾发博文表示:“WiFi是互联网发展过程中最重要的发展之一,虚拟世界没有百分百的安全,所以杀毒软件并不可以抵抗全部的黑客攻击.“ 用户WiFi密码尽量不要使用简单单 ...

  6. man VGCREATE

    VGCREATE(8)                                                        VGCREATE(8) NAME/名称       vgcreat ...

  7. linux运维、架构之路-linux磁盘管理

    一.企业中磁盘选购: 1.线上的业务,用SAS磁盘 2.线下的业务,用SATA磁盘,磁带库 3.线上高并发.小容量(多人浏览力图片)的业务,SSD磁盘 4.根据数据的访问热度,智能分析分层存储,SAT ...

  8. hibernate插入中文字段时,无法插入数据库

    体现: hibernate插入数据时,一直报错: Caused by: java.sql.SQLException: Incorrect string value: '\xE5\xBC\xA0\xE4 ...

  9. hud 4347 The Closest M Points(KD-Tree)

    传送门 解题思路 \(KD-Tree\)模板题,\(KD-Tree\)解决的是多维问题,它是一个可以储存\(K\)维数据的二叉树,每一层都被一维所分割.它的插入删除复杂度为\(log^2 n\),它查 ...

  10. Unity 中使用预编译指令区分平台

    在实际项目开发过程中,我们经常会根据平台来写一些逻辑 #if UNITY_EDITOR #elif UNITY_IPHONE #elif UNITY_ANDROID #endif 使用预编译指令能很好 ...