欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

攻防世界 reverse新手题目 open-source

程序员文章站 2022-03-22 08:13:29
...
#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);//不等于0xcafe就退出,那first=0xcafe
    }

    unsigned int second = atoi(argv[2]);
    if (second % 5 == 3 || second % 17 != 8) {
    	printf("ha, you won't get it!\n");
    	exit(3);//满足条件就退出,那就不满足条件好了,second=25就可以
    }

    if (strcmp("h4cky0u", argv[3])) {
    	printf("so close, dude!\n");
    	exit(4);//不相等就退出,那就使它相等那就argv[3]="h4cky0u"
    }

    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;
}
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) 
{
int hash =  0xcafe * 31337 + (25 % 17) * 11 + strlen("h4cky0u") - 1615810207;
    printf("Get your key: ");
    printf("%x\n", hash);//以16进制形式输出
    return 0;
}

0xcafe变不变10进制都行,16进制与10进制相乘,输出视为10进制的

int('0xcafe',16)//python16进制转换为10进制

strcmp(a,b)//ab相等返回0;
攻防世界 reverse新手题目 open-source ps:
printf("%x\n", j); //输出结果为: 2f
printf("%X\n", j); //输出结果为: 2F
printf("%#x\n", j); //输出结果为: 0x2f
printf("%#X\n", j); //输出结果为: 0X2F %#X推荐使用
用在printf函数中,"%X,%O"中的%O控制符是错误的,因为有的编译器只认%o不认%O,就是说在printf中是分大小写的。%X对应输出大写字母的十六进制数,%x对应输出小写字母十六进制数;中间逗号照搬输出,%o对应输出八进制数。

相关标签: reverse