攻防世界RE:simple-check-100

给了三个文件,先运行一下exe试试吧,就是输入key,乱输会直接关掉,应该是直接结束了。ida打开看一下。

检查了一下v8是不是正确的key,如果是那就执行下面的函数,否则错误结束。

反正输出flag的地方,和输入的v8也没什么关系,我们直接把checkkey这个校验给nop掉。用x64dbg试一下

为了防止运行完了直接结束,下一个断点。这样我们再乱输入key试试 

发现都是乱码啊,有可能linux下可以,我们就不试了,直接用ida接着看

 

看interestring_function就可以了

传入的参数是v7的地址,在ida能看出来,如果传入地址的话可以把v7这里看成一个数组。 

进入函数内部看一下操作

 

我们可以直接写程序。先把flag_data和v7都提取出来,然后再复制粘贴这一段代码,稍加修改,把v4直接换成v7就可以了。

运行一下

最终flag就出来了

代码:

#include <iostream>
char flag_data[28] =
{
  '\xDC',
  '\x17',
  '\xBF',
  '[',
  '\xD4',
  '\n',
  '\xD2',
  '\x1B',
  '}',
  '\xDA',
  '\xA7',
  '\x95',
  '\xB5',
  '2',
  '\x10',
  '\xF6',
  '\x1C',
  'e',
  'S',
  'S',
  'g',
  '\xBA',
  '\xEA',
  'n',
  'x',
  '\"',
  'r',
  '\xD3'
};
signed char v7[] = {
84, -56, 126, -29, 100, -57, 22, -102, -51, 17,
101, 50, 45, -29, -45, 67, -110, -87, -99, -46,
-26, 109, 44, -45, -74, -67, -2, 106};

int main()
{
    int* result; // eax
    unsigned int v2; // [esp+1Ch] [ebp-1Ch] BYREF
    int* v3; // [esp+20h] [ebp-18h]

    int j; // [esp+28h] [ebp-10h]
    int i; // [esp+2Ch] [ebp-Ch]
    for (i = 0; i <= 6; ++i)
    {
        v2 = *(unsigned long*)(4 * i + v7) ^ 0xDEADBEEF;
        result = (int*)&v2;
        v3 = (int*)&v2;
        for (j = 3; j >= 0; --j)
            result = (int*)putchar((char)(*((char*)v3 + j) ^ flag_data[4 * i + j]));
    }
    std::cout << v7 << std::endl;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值