zoukankan      html  css  js  c++  java
  • *reverse*练习3——攻防世界-hackme

    拿到题,查壳后用ida64打开。

    老样子查找字符串,找到

    点击进入,找到交叉函数F5反编译,

    由下到上分析,如果要输出即v18不为0,即v13=v16^v12,v13可以查到数据,不是flag,v16是整型,也不会是flag,所以猜测v12是我们要求的flag,v12[i]=v13[i]^v16就可以求出v12。

     这个函数是解题关键,但是我看不懂,

     但与v6相关的都%22了,所以尝试一下遍历0-21个数字来写脚本跑一下。

    以下是脚本代码

     #include <iostream>

    using namespace std;

    int main()
    {
        char v12[22]={0};
        int v6,v15,v11,v16;
        //表示byte时,都用unsigned char
        unsigned char v13[]= {0x5F,0xF2,0x5E,0x8B, 0x4E, 0x0E, 0xA3, 0xAA, 0xC7,0x93, 0x81, 0x3D,0x5F, 0x74,0xA3, 0x09,
                              0x91, 0x2B, 0x49, 0x28, 0x93, 0x67, 00,00
                             };
        //截取了前22个
        int i;

        for(i=0; i<22; i++)
        {
            v11 = v6 % 22 + 1;
            v15 = 0;
            while ( v15 < v11 )
            {
                ++v15;
                v16 = (1828812941 * v16 + 12345);
            }

            v12[i]=v13[i]^v16;
        }

        for(i=0; i<22; i++)
        {
            cout<<char(v12[i]);
        }
    }
    写脚本要注意,我用c++写的unsigned char与char的区别,还有数组初始化。
    解出flag

    flag{d826e6926098ef46}

  • 相关阅读:
    mongodb本地搭建过程
    vue-cli+webpack搭建简单的vue项目框架
    jquery效果
    通过类名查找类名里面的标签
    高亮显示代码部分
    高亮显示用户键盘输入(<kbd>)
    排版----描述
    排版----引用
    排版----首字母缩略语()
    排版----缩略语(<title>)
  • 原文地址:https://www.cnblogs.com/kubopiy/p/13453005.html
Copyright © 2011-2022 走看看