晚上做几个简单的ctf逆向睡的更好

logmein

elf文件 ida看看main函数伪代码

void __fastcall __noreturn main(__int64 a1, char **a2, char **a3)
{
  size_t v3; // rsi
  int i; // [rsp+3Ch] [rbp-54h]
  ]; // [rsp+40h] [rbp-50h]
  int v6; // [rsp+64h] [rbp-2Ch]
  __int64 v7; // [rsp+68h] [rbp-28h]
  ]; // [rsp+70h] [rbp-20h]
  int v9; // [rsp+8Ch] [rbp-4h]

  v9 = ;
  strcpy(v8, ":\"AL_RT^L*.?+6/46");
  v7 = 28537194573619560LL;
  v6 = ;
  printf("Welcome to the RC3 secure password guesser.\n", a2, a3);
  printf("To continue, you must enter the correct password.\n");
  printf("Enter your guess: ");
  __isoc99_scanf("%32s", s);
  v3 = strlen(s);
  if ( v3 < strlen(v8) )
    sub_4007C0(v8);
  ; i < strlen(s); ++i )
  {
    if ( i >= strlen(v8) )
      ((void (*)(void))sub_4007C0)();
    if ( s[i] != (char)(*((_BYTE *)&v7 + i % v6) ^ v8[i]) )
      ((void (*)(void))sub_4007C0)();
  }
  sub_4007F0();
}

这里要看懂他的算法:

看到19行sacnf接收输入  然后v3为输入的长度v3 < strlen(v8)调用sub_4007C0函数传入v8

sub_4007C0:

接着看sub_4007F0

函数看完 26行左右就是flag的行

输入的字符要等于  经过处理的v7和v8的异或。

v7 int64  v7要转换为16进制然后在转换为字符串,而且字符是小端序,所以把得到的字符翻转然后和v8的每一位进行异或。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BYTE unsigned char

int main(int argc, char* argv[]) {
    unsigned int i;
    ] = ":\"AL_RT^L*.?+6/46";
    __int64 v7 = ;
    ;

    ] = "";
    ; i < strlen(v8); ++i) {
        s[i] = (char)(*((BYTE*)&v7 + i % v6)^v8[i]);
    }

    printf("%s\n", s);

    system("PAUSE");
    ;
}

re1

F5看看伪代码

将用户输入的flag存入v9,然后将v9和v5比较,如果值相同输出aFlag
既然需要比较flag,那正确的flag应该已经作为一个常量保存在程序内部,可以尝试直接查找flag

ida查看程序的字符串  有时候ida会把字符串当数据 所以这里直接查看hex view

game

看看有没得壳

打开程序,是一个小游戏,直接输入12345678就能直接拿到flag

在函数中搜索main

看main_0()

    void __cdecl main_0()
    {
      signed int i; // [esp+DCh] [ebp-20h]
      int v1; // [esp+F4h] [ebp-8h]

      sub_13FA7BE(&unk_14AB110);
      sub_13FA7BE(&unk_14AB158);
      sub_13FA7BE(&unk_14AB1A0);
      sub_13FA7BE(&unk_14AB1E8);
      sub_13FA7BE(&unk_14AB230);
      sub_13FA7BE(&unk_14AB278);
      sub_13FA7BE(&unk_14AB2C0);
      sub_13FA7BE(&unk_14AB308);
      sub_13FA7BE(&unk_14AAFD0);
      sub_13FA7BE("|              by 0x61                                 |\n");
      sub_13FA7BE("|                                                      |\n");
      sub_13FA7BE("|------------------------------------------------------|\n");
      sub_13FA7BE(
        "Play a game\n"
        "The n is the serial number of the lamp,and m is the state of the lamp\n"
        "If m of the Nth lamp is 1,it's on ,if not it's off\n"
        "At first all the lights were closed\n");
      sub_13FA7BE("Now you can input n to change its state\n");
      sub_13FA7BE(
        "But you should pay attention to one thing,if you change the state of the Nth lamp,the state of (N-1)th and (N+1)th w"
        "ill be changed too\n");
      sub_13FA7BE("When all lamps are on,flag will appear\n");
      sub_13FA7BE("Now,input n \n");
       )
      {
         )
        {
          sub_13FA7BE("input n,n(1-8)\n");
          sub_13F9418();
          sub_13FA7BE("n=");
          sub_13F96D4("%d", &v1);
          sub_13FA7BE("\n");
           && v1 <=  )
            break;
          sub_13FA7BE("sorry,n error,try again\n");
        }
        if ( v1 )
        {
          sub_13F76D6(v1 - );
        }
        else
        {
          ; i < ; ++i )
          {
             )
              j____report_rangecheckfailure();
            byte_14D2E28[i] = ;
          }
        }
        j__system("CLS");
        sub_13F8054();
        ] ==
          && byte_14D2E28[] ==
          && byte_14D2E28[] ==
          && byte_14D2E28[] ==
          && byte_14D2E28[] ==
          && byte_14D2E28[] ==
          && byte_14D2E28[] ==
          && byte_14D2E28[] ==  )
        {
          sub_13F7AB4();
        }
      }
    }

发现最后跳转的sub_13F7AB4()的函数可能有东西 跟进

int sub_457AB4(void)
{
  return sub_45E940();
}

再跟进sub_45E940()

    int sub_13FE940()
    {
      signed int i; // [esp+D0h] [ebp-94h]
      char v2; // [esp+DCh] [ebp-88h]
      char v3; // [esp+DDh] [ebp-87h]
      char v4; // [esp+DEh] [ebp-86h]
      char v5; // [esp+DFh] [ebp-85h]
      char v6; // [esp+E0h] [ebp-84h]
      char v7; // [esp+E1h] [ebp-83h]
      char v8; // [esp+E2h] [ebp-82h]
      char v9; // [esp+E3h] [ebp-81h]
      char v10; // [esp+E4h] [ebp-80h]
      char v11; // [esp+E5h] [ebp-7Fh]
      char v12; // [esp+E6h] [ebp-7Eh]
      char v13; // [esp+E7h] [ebp-7Dh]
      char v14; // [esp+E8h] [ebp-7Ch]
      char v15; // [esp+E9h] [ebp-7Bh]
      char v16; // [esp+EAh] [ebp-7Ah]
      char v17; // [esp+EBh] [ebp-79h]
      char v18; // [esp+ECh] [ebp-78h]
      char v19; // [esp+EDh] [ebp-77h]
      char v20; // [esp+EEh] [ebp-76h]
      char v21; // [esp+EFh] [ebp-75h]
      char v22; // [esp+F0h] [ebp-74h]
      char v23; // [esp+F1h] [ebp-73h]
      char v24; // [esp+F2h] [ebp-72h]
      char v25; // [esp+F3h] [ebp-71h]
      char v26; // [esp+F4h] [ebp-70h]
      char v27; // [esp+F5h] [ebp-6Fh]
      char v28; // [esp+F6h] [ebp-6Eh]
      char v29; // [esp+F7h] [ebp-6Dh]
      char v30; // [esp+F8h] [ebp-6Ch]
      char v31; // [esp+F9h] [ebp-6Bh]
      char v32; // [esp+FAh] [ebp-6Ah]
      char v33; // [esp+FBh] [ebp-69h]
      char v34; // [esp+FCh] [ebp-68h]
      char v35; // [esp+FDh] [ebp-67h]
      char v36; // [esp+FEh] [ebp-66h]
      char v37; // [esp+FFh] [ebp-65h]
      char v38; // [esp+100h] [ebp-64h]
      char v39; // [esp+101h] [ebp-63h]
      char v40; // [esp+102h] [ebp-62h]
      char v41; // [esp+103h] [ebp-61h]
      char v42; // [esp+104h] [ebp-60h]
      char v43; // [esp+105h] [ebp-5Fh]
      char v44; // [esp+106h] [ebp-5Eh]
      char v45; // [esp+107h] [ebp-5Dh]
      char v46; // [esp+108h] [ebp-5Ch]
      char v47; // [esp+109h] [ebp-5Bh]
      char v48; // [esp+10Ah] [ebp-5Ah]
      char v49; // [esp+10Bh] [ebp-59h]
      char v50; // [esp+10Ch] [ebp-58h]
      char v51; // [esp+10Dh] [ebp-57h]
      char v52; // [esp+10Eh] [ebp-56h]
      char v53; // [esp+10Fh] [ebp-55h]
      char v54; // [esp+110h] [ebp-54h]
      char v55; // [esp+111h] [ebp-53h]
      char v56; // [esp+112h] [ebp-52h]
      char v57; // [esp+113h] [ebp-51h]
      char v58; // [esp+114h] [ebp-50h]
      char v59; // [esp+120h] [ebp-44h]
      char v60; // [esp+121h] [ebp-43h]
      char v61; // [esp+122h] [ebp-42h]
      char v62; // [esp+123h] [ebp-41h]
      char v63; // [esp+124h] [ebp-40h]
      char v64; // [esp+125h] [ebp-3Fh]
      char v65; // [esp+126h] [ebp-3Eh]
      char v66; // [esp+127h] [ebp-3Dh]
      char v67; // [esp+128h] [ebp-3Ch]
      char v68; // [esp+129h] [ebp-3Bh]
      char v69; // [esp+12Ah] [ebp-3Ah]
      char v70; // [esp+12Bh] [ebp-39h]
      char v71; // [esp+12Ch] [ebp-38h]
      char v72; // [esp+12Dh] [ebp-37h]
      char v73; // [esp+12Eh] [ebp-36h]
      char v74; // [esp+12Fh] [ebp-35h]
      char v75; // [esp+130h] [ebp-34h]
      char v76; // [esp+131h] [ebp-33h]
      char v77; // [esp+132h] [ebp-32h]
      char v78; // [esp+133h] [ebp-31h]
      char v79; // [esp+134h] [ebp-30h]
      char v80; // [esp+135h] [ebp-2Fh]
      char v81; // [esp+136h] [ebp-2Eh]
      char v82; // [esp+137h] [ebp-2Dh]
      char v83; // [esp+138h] [ebp-2Ch]
      char v84; // [esp+139h] [ebp-2Bh]
      char v85; // [esp+13Ah] [ebp-2Ah]
      char v86; // [esp+13Bh] [ebp-29h]
      char v87; // [esp+13Ch] [ebp-28h]
      char v88; // [esp+13Dh] [ebp-27h]
      char v89; // [esp+13Eh] [ebp-26h]
      char v90; // [esp+13Fh] [ebp-25h]
      char v91; // [esp+140h] [ebp-24h]
      char v92; // [esp+141h] [ebp-23h]
      char v93; // [esp+142h] [ebp-22h]
      char v94; // [esp+143h] [ebp-21h]
      char v95; // [esp+144h] [ebp-20h]
      char v96; // [esp+145h] [ebp-1Fh]
      char v97; // [esp+146h] [ebp-1Eh]
      char v98; // [esp+147h] [ebp-1Dh]
      char v99; // [esp+148h] [ebp-1Ch]
      char v100; // [esp+149h] [ebp-1Bh]
      char v101; // [esp+14Ah] [ebp-1Ah]
      char v102; // [esp+14Bh] [ebp-19h]
      char v103; // [esp+14Ch] [ebp-18h]
      char v104; // [esp+14Dh] [ebp-17h]
      char v105; // [esp+14Eh] [ebp-16h]
      char v106; // [esp+14Fh] [ebp-15h]
      char v107; // [esp+150h] [ebp-14h]
      char v108; // [esp+151h] [ebp-13h]
      char v109; // [esp+152h] [ebp-12h]
      char v110; // [esp+153h] [ebp-11h]
      char v111; // [esp+154h] [ebp-10h]
      char v112; // [esp+155h] [ebp-Fh]
      char v113; // [esp+156h] [ebp-Eh]
      char v114; // [esp+157h] [ebp-Dh]
      char v115; // [esp+158h] [ebp-Ch]

      sub_13FA7BE("done!!! the flag is ");
      v59 = ;
      v60 = ;
      v61 = ;
      v62 = ;
      v63 = ;
      v64 = ;
      v65 = ;
      v66 = ;
      v67 = ;
      v68 = ;
      v69 = ;
      v70 = ;
      v71 = ;
      v72 = ;
      v73 = ;
      v74 = ;
      v75 = ;
      v76 = ;
      v77 = ;
      v78 = ;
      v79 = ;
      v80 = ;
      v81 = ;
      v82 = ;
      v83 = ;
      v84 = ;
      v85 = ;
      v86 = ;
      v87 = ;
      v88 = ;
      v89 = ;
      v90 = ;
      v91 = ;
      v92 = ;
      v93 = ;
      v94 = ;
      v95 = ;
      v96 = ;
      v97 = ;
      v98 = ;
      v99 = ;
      v100 = ;
      v101 = ;
      v102 = ;
      v103 = ;
      v104 = ;
      v105 = ;
      v106 = ;
      v107 = ;
      v108 = ;
      v109 = ;
      v110 = ;
      v111 = ;
      v112 = ;
      v113 = ;
      v114 = ;
      v115 = ;
      v2 = ;
      v3 = ;
      v4 = ;
      v5 = ;
      v6 = ;
      v7 = ;
      v8 = ;
      v9 = ;
      v10 = ;
      v11 = ;
      v12 = ;
      v13 = ;
      v14 = ;
      v15 = ;
      v16 = ;
      v17 = ;
      v18 = ;
      v19 = ;
      v20 = ;
      v21 = ;
      v22 = ;
      v23 = ;
      v24 = ;
      v25 = ;
      v26 = ;
      v27 = ;
      v28 = ;
      v29 = ;
      v30 = ;
      v31 = ;
      v32 = ;
      v33 = ;
      v34 = ;
      v35 = ;
      v36 = ;
      v37 = ;
      v38 = ;
      v39 = ;
      v40 = ;
      v41 = ;
      v42 = ;
      v43 = ;
      v44 = ;
      v45 = ;
      v46 = ;
      v47 = ;
      v48 = ;
      v49 = ;
      v50 = ;
      v51 = ;
      v52 = ;
      v53 = ;
      v54 = ;
      v55 = ;
      v56 = ;
      v57 = ;
      v58 = ;
      ; i < ; ++i )
      {
        *(&v2 + i) ^= *(&v59 + i);
        *(&v2 + i) ^= 0x13u;
      }
      return sub_13FA7BE("%s\n");
    }

这应该就是打印flag的函数了  这个两个57字节的变量进行循环打印异或 写个脚本 有点麻烦静态分析出来的

    a=[,,,,,,,,,,,,,,,,,,,,,,
       ,,,,,,,,,,,,,,,,,,,,,,,
       ,,,,,,,,,,,]
    b=[,,,,,,,,,,,,,,,,
       ,,,,,,,,,,,,,,,,,
       ,,,,,,,,,,,,,,,,,,
       ,,,,,]
    i=
    c=''
    ):
        a[i]^=b[i]
        a[i]^=
        c=c+chr(a[i])
        i=i+
    print (c)

Hello, CTF

打开 发现是输入然后比对

看看main函数

strcpy把那串字符串复制给v13地址

第36~39行代码是判断输入字符串和right serial是否匹配

将初始化v13的十六进制转换为字符串即可。

open-source

直接给的源码

第29行计算flag,第32行代码输出十六进制形式

    printf("Brr wrrr grr\n");

    unsigned  + (second % ) *  + strlen(argv[]) - ;

    printf("Get your key: ");
    printf("%x\n", hash);
    ;

然后看看我们需要满足的条件

) {
        printf("what?\n");
        exit();
    }

    unsigned ]);
    if (first != 0xcafe) {
        printf("you are wrong, sorry.\n");
        exit();
    }

    unsigned ]);
     ==  || second %  != ) {
        printf("ha, you won't get it!\n");
        exit();
    }

    ])) {
        printf("so close, dude!\n");
        exit();
    }

first=0xcafe

second = 25

argv[3]=“h4cky0u”

ok  写个c++打印下flag

#include <stdio.h>
#include <string.h>

int main(int argc, char* argv[]) {

    int first = 0xcafe;
    ;
    argv[] = "h4cky0u";

    printf("Brr wrrr grr\n");

    unsigned  + (second % ) *  + strlen(argv[]) - ;

    printf("Get your key: ");
    printf("%x\n", hash);

    system("PAUSE");
    ;
}

simple-unpack

查壳

elf格式文件  upx壳

首先ida查看字符串直接可以找到

当然也可以

直接kali upx脱壳

打开脱壳后的 main函数

攻防世界(XCTF)逆向部分write up(一)的更多相关文章

  1. 攻防世界(XCTF)WEB(进阶区)write up(三)

    挑着做一些好玩的ctf题 FlatScience web2 unserialize3upload1wtf.sh-150ics-04web i-got-id-200 FlatScience 扫出来的lo ...

  2. 攻防世界(XCTF)WEB(进阶区)write up(四)

    ics-07  Web_php_include  Zhuanxv Web_python_template_injection ics-07 题前半部分是php弱类型 这段说当传入的id值浮点值不能为1 ...

  3. 攻防世界(XCTF)WEB(进阶区)write up(一)

      cat ics-05 ics-06 lottery Cat XCTF 4th-WHCTF-2017 输入域名  输入普通域名无果  输入127.0.0.1返回了ping码的结果 有可能是命令执行 ...

  4. 攻防世界(XCTF)WEB(进阶区)write up(二)

    国庆就要莫得了   起床刷几道 NewsCenter mfw Training-WWW-Robots NaNNaNNaNNaN-Batman bug NewsCenter search传参那里发现有注 ...

  5. 攻防世界逆向——game

    攻防世界逆向:game wp 攻防世界逆向新手区的一道题目. 是一道windows的creak,动态调试打开是这样的: 题目说明是让屏幕上所有的图像都亮之后,会出现flag,看来应该是可以玩出来的. ...

  6. XCTF攻防世界Web之WriteUp

    XCTF攻防世界Web之WriteUp 0x00 准备 [内容] 在xctf官网注册账号,即可食用. [目录] 目录 0x01 view-source2 0x02 get post3 0x03 rob ...

  7. XCTF攻防世界web进阶练习—mfw

    XCTF攻防世界web进阶练习-mfw题目为mfw,没有任何提示.直接打开题目,是一个网站 大概浏览一下其中的内容,看到其中url变化其实只是get的参数的变化查看它的源码,看到有一个?page=fl ...

  8. 攻防世界 WEB 高手进阶区 XCTF Web_python_template_injection Writeup

    攻防世界 WEB 高手进阶区 XCTF Web_python_template_injection Writeup 题目介绍 题目考点 SSTI模板注入漏洞 Writeup 知识补充 模板注入:模板引 ...

  9. 攻防世界 WEB 高手进阶区 XCTF Web_php_unserialize Writeup

    攻防世界 WEB 高手进阶区 XCTF Web_php_unserialize Writeup 题目介绍 题名考点 PHP反序列化漏洞 正则匹配 Writeup <?php class Demo ...

随机推荐

  1. idea取消大小写自动提示

    file-settings 取消勾选Match case

  2. AirFlow常用命令

    airflow常用命令如下所示: airflow test dag_id task_id execution_date 测试task 示例: airflow test example_hello_wo ...

  3. Sqoop介绍、安装与操作

    搭建环境 部署节点操作系统为CentOS,防火墙和SElinux禁用,创建了一个shiyanlou用户并在系统根目录下创建/app目录,用于存放 Hadoop等组件运行包.因为该目录用于安装hadoo ...

  4. Python连载38-协程、可迭代、迭代器、生产者消费者模型

    一.生产者消费者模型 import multiprocessing from time import ctime def consumer(input_q): print("Into con ...

  5. 即时聊天APP(二) - MainActivity

    主活动包含三个Fragment,分别是会话.联系人和设置,初始布局隐藏所有碎片,然后把应该显示的显示出来: //隐藏所有Fragment private void hideAll(){ Fragmen ...

  6. centos php7 安装mysqli扩展心得

    在新配服务器时发现,php无法连接到mysql.通过phpinfo发现.根本没有显示mysqli的相关配置.经过一系列研究.总结了下.: 第一步: 在phpinfo里没有mysqli配置,原因是安装p ...

  7. Python数据分析入门案例

    转载自 https://blog.csdn.net/lijinlon/article/details/81517699 Data analysis by Python 入门 1. 重复数据处理 在Da ...

  8. Postman工具使用-接口测试(实战一)

    写在前面,本文首发[简书]https://www.jianshu.com/p/c188624c3580 作为一名测试人员,要去思考一下,如何能按需完成任务,又能轻松解决问题,这就很重要了!!! 凡事皆 ...

  9. 【linux】【Fabric】Centos7搭建Fabric运行环境

    1.安装jdk1.8配置环境变量 参考:https://www.cnblogs.com/jxd283465/p/11541506.html 2.安装git yum -y install git 3.安 ...

  10. MIT-Adobe FiveK Dataset 图片自动下载

    MIT-Adobe FiveK Dataset 图片自动下载 MIT-Adobe FiveK是现在很多做图像增强(image enhancement)与图像修饰(image retouching)方面 ...