• 攻防世界RE1 writeup


    解题过程

    将题目给出的exe文件拖入ida中,查看main函数。

    main函数

    分析函数的逻辑,发现用户需要输出一个字符串,存储到变量v9中。如果v9的值与v5的值相等则会打印unk_413e90中的值,否则打印aFlag_0的值。

    查看两个输出的值:

    可以看到如果输入正确的话会打印flag get,这说明flag存储在v5中。

    查看v5的值,发现没有值:

    v5

    仔细查看main函数发现第10行有一个存储操作,将一个变量的值存储到了v5中。v5的值是在main函数执行过程中才被传入的,因此之前找不到值就可以理解了。

    查找xmmword变量中存储的值:

    可以将变量的值转为ascii码,同时发现qword变量也可以转为ascii。

    字符串值逆序即为flag:

    DUTCTF{We1c0met0DUTCTF}

    简单解法

    因为大概知道flag是以字符串形式存储在某个变量中的,不是程序运行过程中生成的,因此可以直接用Linux或Mac下的strings命令直接求得所有字符串并查找ctf、flag等关键词。

    总结

    这是一道简单的逆向题,直接用strings时没啥可说的。用ida时只要知道题目中涉及到的存储函数,这个题目很好解决。当然了,除了前面说的方法,用ollydbg也可以解这道题。

    有一个需要注意的点是,用ida解题时,最后给出的flag值是逆序的,这是受到了存储方式的影响。具体可以了解下大端存储和小端存储的区别。

  • 相关阅读:
    Centos7 安装配置Elasticsearch
    单例模式
    Eclipse上部署maven项目
    单点登录
    各eclipse插件的作用
    eclipse中安装Subclipse插件
    往idea中导入已有的web项目
    maven 项目部署
    【转帖】算法刷题网站
    混淆矩阵-MATLAB代码详解
  • 原文地址:https://www.cnblogs.com/kevinbruce656/p/11993709.html
Copyright © 2020-2023  润新知