攻防世界—no-strings-attached

2023-12-28 23:36:04

# 攻防世界—no-strings-attached

介绍下——IDA内置脚本 shift+F12

收获——要一个一个大致看出代码在干嘛

先运行一遍

`int __cdecl main(int argc, const char **argv, const char **envp)

{

setlocale(6, &locale);

banner();

prompt_authentication();

authenticate();

return 0;

}`

进来函数后F5

一个一个函数看,对应运行结果

setlocale——看不出来

banner——

time是时间种子,用来给rand用来随机的

wprintf我们看一下

可以发现就是最开始的显示的

同理可以发现后面也是题目提示

prompt_authentication——输出那个please的

authenticate——这个肯定就是flag关键了

```void authenticate()

{

int ws[8192]; // [esp+1Ch] [ebp-800Ch] BYREF

wchar_t *s2; // [esp+801Ch] [ebp-Ch]

s2 = decrypt((wchar_t *)&s, (wchar_t *)&dword_8048A90);

if ( fgetws(ws, 0x2000, stdin) )stdin就是输入缓冲区,fgetws类似于input

{

ws[wcslen(ws) - 1] = 0;最后一个字符是不是0

if ( !wcscmp(ws, s2) )比较,这个ws是我们输入的,说明s2就是给的flag

wprintf((int)&unk_8048B44);进入发现给success

else

wprintf((int)&unk_8048BA4);

}

free(s2);

}

```

不要在后面下断点,中间进行了数据清理

我们就在s2刚刚形成的时候就去看

你鼠标指向s2,他会给你一个地址

0x09888FE0

这里按箭头跟进

![flag](vx_images/411464422258190.png)

可以看见这个就是flag,但是我们提取有困难

![

在下面就会给我们新提取的

方法二:shift+f2

```import idc

v = [idc.get_wide_byte(0x09725FDC + i * 4) for i in range(100)]

print(bytes(v))

```

0x09725FDC这个是地址头,i是偏移地址,range因为我们不知道数据有多少,就大一点

文章来源:https://blog.csdn.net/wcj126/article/details/135280026
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。