目录
open-source
题目描述:菜鸡学逆向学得头皮发麻,终于它拿到了一段源代码
直接给了一段源代码,读懂源码即可
思路
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) { //代码中有四个if语句,每个if语句中的条件都必须不成立才能得到key
if (argc != 4) { //argc==4
printf("what?\n");
exit(1);
}
unsigned int first = atoi(argv[1]); //atoi()函数可以将字符串(有数字组成)转换为int型数字,其他的return 0;
//例如:字符串"123456"转化为整型数字123456
if (first != 0xcafe) { //0x为16进制数 所以first==51966
printf("you are wrong, sorry.\n");
exit(2);
}
unsigned int second = atoi(argv[2]);
if (second % 5 == 3 || second % 17 != 8) { //a[2]%5!=3&&a[2]%17==8
printf("ha, you won't get it!\n");
exit(3);
}
if (strcmp("h4cky0u", argv[3])) { //strcmp比较函数相等返回0,大于返回正数,小于返回负数,len=7
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); //x代表16进制,hash的十六进制数即为key
return 0;
}
first==51966,(second % 17)==8,strlen(argv[3])==7,
计算得hash=c0ffee(一开始用大写提交结果提交不对。。。)