XCTF社区re新手区题open-source

open-source

题目给了源码,所以只需要看源码就行了:

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

int main(int argc, char *argv[]) {
    if (argc != 4) {
    	printf("what?\n");
    	exit(1);
    }

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

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

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

    printf("Brr wrrr grr\n");

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

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

依据题目,里面有几个部分,第一个就是first,里面有一个函数atoi就是对于ascii码转化为int类型,而最后一个if里面的strcmp则是比较函数,当str1=str2时,返回值为0,str1>str2时,返回值为1,str1<str2时,返回值为-1;
然后就根据最后一个: unsigned int hash = first * 31337 + (second % 17) * 11 + strlen(argv[3]) - 1615810207;
写一个py去运算就行了,运算的结果化为16进制,关于py进制转化:看:

a=int('0xcafe',16)
print(a)
flag=0xcafe*31337+8*11+7-1615810207
print(hex(flag))

得出flag:0xc0ffee

发布了29 篇原创文章 · 获赞 13 · 访问量 2737

猜你喜欢

转载自blog.csdn.net/zmx2473162621/article/details/103933290
今日推荐