测试文件: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. arm算力

    arm 算力运算 MIPS: Million Instructions executed Per SecondDMIPS: Dhrystone Million Instructions execute ...

  2. Orabbix无法获取Oracle DB Size和DB Files Size的解决方法

    Orabbix无法获取Oracle DB Size和DB Files Size的解决方法 这几天在研究Orabbix时发现在Zabbix中无法获取DB Size和DB Files Size的大小,后来 ...

  3. ORM大结局

    1.添加记录: # 一对多的添加方式: #pub_obj=Publish.objects.filter(name="橙子出版社").first() # book=Book.obje ...

  4. Linux学习-基于CentOS7的MariaDB数据库的主从复制

    一.MySQL主从复制原理 主从同步过程中主服务器有一个工作线程I/O dump thread,从服务器有两个工作线程I/O thread和SQL thread: 主服务器: dump Thread: ...

  5. 对logistic回归分析的两重认识

    logistic回归,回归给人的直观印象只是要求解一个模型的系数,然后可以预测某个变量的回归值.而logistic回归在应用中多了一层含义,它经常应用于分类中.第一重认识:logistic是给真正的回 ...

  6. Linux内核设计与实现 总结笔记(第四章)进程调度

    进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间. 调度程序没有太复杂的原理,最大限度地利用处理器时间的原则是,只要有可以执行的进程,那么就总会有进程正在执行. 一.多任务 多任 ...

  7. Ckeditor IE下粘贴word中图片问题

    自动导入Word图片,或者粘贴Word内容时自动上传所有的图片,并且最终保留Word样式,这应该是Web编辑器里面最基本的一个需求功能了.一般情况下我们将Word内容粘贴到Web编辑器(富文本编辑器) ...

  8. Queue2链队列

    链队列 1 #include <iostream> using namespace std; template <class T> class Queue { private: ...

  9. .net core跨平台

    https://www.cnblogs.com/artech/p/7812811.html .net简介:https://baike.baidu.com/item/.NET/156737?fr=ala ...

  10. [CSP-S模拟测试]:天才绅士少女助手克里斯蒂娜(数学+树状数组)

    题目描述 红莉栖想要弄清楚楼下天王寺大叔的显像管电视对“电话微波炉(暂定)”的影响. 选取显像管的任意一个平面,一开始平面内有个$n$电子,初始速度分别为$v_i$,定义飘升系数为$$\sum \li ...