攻防世界—no-strings-attached

# 攻防世界—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因为我们不知道数据有多少,就大一点

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Nickname

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值