#include<stdio.h>#include<string.h>intmain(int argc,char*argv[]){unsignedint first =atoi(argv[1]);//0xcafeif(first !=0xcafe){printf("you are wrong, sorry.\n");exit(2);}unsignedint 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");unsignedint hash = first *31337+(second %17)*11+strlen(argv[3])-1615810207;printf("Get your key: ");printf("%x\n", hash);return0;}
是c的源代码
2.代码分析
29行会算出flag
那么我们只要让函数顺利执行到29行即可
1.first
if(first !=0xcafe){printf("you are wrong, sorry.\n");exit(2);}
让first=0xcafe即可
2.second
if(second %5==3|| second %17!=8){printf("ha, you won't get it!\n");exit(3);}
看不出来可以直接去跑一下
执行代码
for(int second =0;;second++){if(!(second %5==3|| second %17!=8)){printf("%d",second);break;}}