zoukankan      html  css  js  c++  java
  • open-source

    open-source
    难度系数: ⭐⭐⭐
    题目来源: HackYou CTF
    题目描述:菜鸡学逆向学得头皮发麻,终于它拿到了一段源代码
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, char *argv[]) {
        if (argc != 4) {
            printf("what?
    ");
            exit(1);
        }
    
        unsigned int first = atoi(argv[1]);
        if (first != 0xcafe) {
            printf("you are wrong, sorry.
    ");
            exit(2);
        }
    
        unsigned int second = atoi(argv[2]);
        if (second % 5 == 3 || second % 17 != 8) {
            printf("ha, you won't get it!
    ");
            exit(3);
        }
    
        if (strcmp("h4cky0u", argv[3])) {
            printf("so close, dude!
    ");
            exit(4);
        }
    
        printf("Brr wrrr grr
    ");
    
        unsigned int hash = first * 31337 + (second % 17) * 11 + strlen(argv[3]) - 1615810207;
    
        printf("Get your key: ");
        printf("%x
    ", hash);
        return 0;
    }

    开始分析:

    从头到尾看一遍,可知hash就是flag,而且由三部分组成

    unsigned int hash = first * 31337 + (second % 17) * 11 + strlen(argv[3]) - 1615810207;

    从代码中找这三个变量

    atoi()函数是把字符串转为数字,first在数组argv的第二位上,first要等于0xcafe,0xcafe是16进制转为10进制就是51966

    unsigned int first = atoi(argv[1]);
        if (first != 0xcafe) {
            printf("you are wrong, sorry.
    ");
            exit(2);
        }

    atoi()函数是把字符串转为数字,first在数组argv的第三位上,second要对5取余不等于3,对17取余等于8,计算发现数字25可以

    unsigned int second = atoi(argv[2]);
        if (second % 5 == 3 || second % 17 != 8) {
            printf("ha, you won't get it!
    ");
            exit(3);
        }

    argv的第四位是"h4ck0u"

    if (strcmp("h4cky0u", argv[3])) {
            printf("so close, dude!
    ");
            exit(4);
        }

    所以我们直接编写代码输出flag

    #include <stdio.h>
    #include <string.h>
    
    int main () {
        int hash = 0xcafe * 31337 + (25 % 17) * 11 + strlen("h4cky0u") - 1615810207;
        printf("%x
    ", hash);
    }

    还有第一个判断,是要求输入四个参数,本身的.exe文件名就算一个

  • 相关阅读:
    许家骏
    平均得分 【杭州电-HDOJ-2023】 附加题+详细说明
    百度之星的第二个问题
    kendo ui 单击取消编辑数据grid减少的原因和治疗方法的数据
    2013年第36周准备考下半年的项目管理师
    2013年第36周三杂记
    2013第36周二小结
    2013第36周星期一
    2013年9月1日下午
    2013年8月最后一天晚上
  • 原文地址:https://www.cnblogs.com/rebirther/p/12880721.html
Copyright © 2011-2022 走看看