攻防世界--no-strings-attached
测试文件:https://adworld.xctf.org.cn/media/task/attachments/5d4117b968684b9483d0d4464e0a6fea
这道题要使用到gdb文件调试,gdb调试相关知识:https://www.cnblogs.com/Mayfly-nymph/p/11403150.html
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的更多相关文章
- 记录下做攻防世界的misc题
0x00 记录一下,代表自己做过 0x01 flag_universe 看简介是来自2018年的百越杯. 将文件下载下来后,就一个flag_universe.pcapng文件,wireshark打开. ...
- 攻防世界misc——János-the-Ripper
攻防世界misc---János-the-Ripper 附件题目,题目的文件名为:misc100. 下载后,拖入linux中,binwalk发现有隐藏文件.用"strings János- ...
- 攻防世界 Misc 新手练习区 ext3 bugku Writeup
攻防世界 Misc 新手练习区 ext3 bugku Writeup 题目介绍 题目考点 WinHex工具的使用 linux磁盘挂载mount命令 Writeup 下载附件拖进winhex分析一下,查 ...
- 【WP】攻防世界-杂项-Misc
长期更新一波 攻防世界 的杂项题解 这东西主要靠积累吧 攻防世界:https://adworld.xctf.org.cn 因为攻防世界的题目顺序经常变化,我也不改序号了,顺着之前写的位置往下写,推荐使 ...
- 攻防世界-MISC:something_in_image
这是攻防世界高手进阶区的第四题,题目如下: 点击下载附件一,得到一个压缩包,解压后得到一个文件,用010editor打开,搜索flag,即可得到flag 另外一种做法,根据题目包含image,使用ka ...
- CTF--web 攻防世界web题 robots backup
攻防世界web题 robots https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=506 ...
- CTF--web 攻防世界web题 get_post
攻防世界web题 get_post https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5 ...
- 攻防世界 web进阶练习 NewsCenter
攻防世界 web进阶练习 NewsCenter 题目是NewsCenter,没有提示信息.打开题目,有一处搜索框,搜索新闻.考虑xss或sql注入,随便输入一个abc,没有任何搜索结果,页面也没有 ...
- 【攻防世界】高手进阶 pwn200 WP
题目链接 PWN200 题目和JarvisOJ level4很像 检查保护 利用checksec --file pwn200可以看到开启了NX防护 静态反编译结构 Main函数反编译结果如下 int ...
- XCTF攻防世界Web之WriteUp
XCTF攻防世界Web之WriteUp 0x00 准备 [内容] 在xctf官网注册账号,即可食用. [目录] 目录 0x01 view-source2 0x02 get post3 0x03 rob ...
随机推荐
- 你不知道的hostname命令
一般hostname可以获取主机名,但是hostname实际上可以做更多的事情. 让我们先来看看它的帮助. Usage: hostname [-b] {hostname|-F file} set ho ...
- CA认证机制的简明解释
公钥机制面临的问题: 假冒身份发布公钥! 可以用CA来认证公钥的身份.CA有点像公安局,公钥就像身份证.公安局可以向任何合法用户颁发身份证以证明其合法身份.第三方只要识别身份证的真伪就能判断身份证持有 ...
- xargs 将标准输入转换成命令行参数
1. 命令功能 xargs 命令过滤器,接收管道或者标准输入传递的数据转换成xargs命令. 2. 语法格式 xargs [option] xargs 选项 参数 参数说明 -n 指定每行的最大参数 ...
- 狼人杀校园升级版:学霸大战学渣 Who is the king of examination!
之前在微博上看到一个很老的段子 写道 天黑请闭眼.学霸请睁眼,学霸请答题,好的学霸请闭眼:学渣请睁眼,学渣请坐弊,好的学渣请闭眼:监考老师请睁眼,监考老师请确定坐弊考生,监考老师请统一意见,好的监考老 ...
- html5 新增的页面 元素
figure 和 figcaption元素 test.html <!DOCTYPE html> <html lang="en"> <head> ...
- CSS3弹性盒模型flexbox布局
属性介绍 display: flex | inline-flex; (适用于父类容器元素上) 定义一个flex容器,内联或者根据指定的值,来作用于下面的子类容器.· box:将对象作为弹性伸缩盒显示. ...
- man hdparm
HDPARM(8) HDPARM(8) NAME hdparm - 获 ...
- pandas.DataFrame.drop_duplicates 用法说明
DataFrame.drop_duplicates(subset=None, keep='first', inplace=False) subset考虑重复发生在哪一列,默认考虑所有列,就是在任何一列 ...
- 【leetcode】447. Number of Boomerangs
题目如下: 解题思路:我首先用来时间复杂度是O(n^3)的解法,会判定为超时:后来尝试O(n^2)的解法,可以被AC.对于任意一个点,我们都可以计算出它与其余点的距离,使用一个字典保存每个距离的点的数 ...
- @ControllerAdvice全局数据绑定
@ModelAttribute 注解标记该方法的返回数据是一个全局数据,默认情况下,这个全局数据的 key 就是返回的变量名,value 就是方法返回值,当然开发者可以通过 @ModelAtt ...