zoukankan      html  css  js  c++  java
  • BUUOJ 第一弹

    1.reverse_1

    准备软件:IDA64

    先运行,发现报错。

    拖入IDA64,找到start函数,一直点击返回函数(start_0,sub_140012170,sub_140012190)。进入到 sub_140012190,发现函数最终返回Code。

    跟进Code值,进入sub_1400123E0函数

    继续跟进sub_140011159函数里的sub_1400118C0函数。发现关键信息。

    读伪代码可知,程序先将Str2里的‘o’替换为‘0’,并储存。用户输入Str1后,程序与修改后Str2比较是否一致。

    跟进Str2。

    由之前的分析可得修改后的Str2为{hell0_w0rld}。验证flag{hell0_w0rld}

    2.新年快乐

    准备软件:IDA,Exeinfo pe

    拖进IDA64,报错。

    根据提示,怀疑加壳。拖进Exeinfo pe,发现是upx压缩且程序为32位。

    拖进ub中脱壳。

    将脱壳后的程序拖进IDA32,反编译正常。找到主函数_main,查看伪代码

    发现仅仅是将V5和V4对比,无加密。结合题目提示信息,flag为一串字符。

    则猜测flag为HappyNewYear!。验证flag。

    3.XOR

    准备工具:IDA,010 editor

    拖进IDA64,进入主函数。查看伪代码。由伪代码可知程序先判断用户输入字串长度是否为33。接着对输入字串进行自身异或,且第一位没有改变,处理后与V3进行比较。

    跟进V3,看起来不到33位。

    转入16进制查看

    仔细数,的确是33位,验证了先前对flag长度的猜测。

    转入010 editor,提取出16进制数据。

    写脚本。

    得到flag:flag{QianQiuWanDai_YiTongJiangHu}。

    验证。

    4.不一样的flag

    准备软件:IDA,Exeinfo pe

    拖进Exeinfo pe,程序为32位。

    拖进IDA32,进入主函数查看伪代码。由下图代码可知:

    V6 == 1 -> V4--;
    V6 == 2 -> V4++;
    V6 == 3 -> V5--;
    V6 == 4 -> V5++;
    且0<=V4[i]<=4(感觉没用)
    其余全部退出程序
    

    继续分析,看到

    发现V8没有初始化,怀疑V8只是工具人,既然是地址运算,且注意到

    一算发现40H-41D=17H。也就是说

    *((_BYTE *)&v8 + 5 * v4 + v5 - 41) = *(&v3 + 5 * v4 + v5)
    

    那么他比较的其实是V3。由于V3是字符串,所以值比较可以化为字串比较。且字符地址取值后不能为1。

    跟进V3。

    继续跟进 data_start_。

    和上面的字串比较符合。也就是说他是一个迷宫题。注意到V4被扩大5倍,且有关于V4的操作题目给的提示是UP和DOWN。

    那么我们可以把字符串处理成5X5的格式。

    *1111
    01000
    01010
    00010
    1111#
    

    也就是说,从*开始只能走0,不能走1,并且最终走到#所使用的order为flag。就是下下下右右上上右右下下下,即222441144222。

    验证:flag{222441144222}

  • 相关阅读:
    .c 文件取为.o文件
    wildcard 处理全部文件
    专家解读Linux操作系统内核中的GCC特性
    Yeoman:适合现代Web应用的现代工作流
    【转】nodejs
    node.js
    2019暑假集训 种树
    2019.6.5 NOIP2014 day2 t2 寻找道路
    2019.6.1 最优贸易
    2019.5.11 海淀区赛之杯子
  • 原文地址:https://www.cnblogs.com/b1ank/p/13458489.html
Copyright © 2011-2022 走看看