题目描述:菜鸡学逆向学得头皮发麻,终于它拿到了一段源代码
C源代码
编译完后,开始分析代码
第一个判断条件
1 | int main(int argc, char *argv[]) { |
判读输入的参数是否满足4个,文件名本身也算一个所以输入文件名加三个参数即可,程序就会继续执行
CMD:文件名 1 2 3
第二个判断条件
1 | unsigned int first = atoi(argv[1]); |
判断第一个参数是否等于0xcafe转化为十进制等于51966,等于程序就继续执行
atoi函数是将字符串转化为数字
CMD:文件名 51966 2 3
第三个判断条件
1 | unsigned int second = atoi(argv[2]); |
当参数对5取余等于3,并且对17取余不等于8时就会退出程序
编写代码,25,42,59,76都能满足条件
1 | i = 0 |
CMD:文件名 51966 25 3
第三个参数
strcmp函数比较两个字符串如果相等,返回值就是0,为0就不会进入if条件中的代码
CMD:文件名 51966 25 h4cky0u
1 | if (strcmp("h4cky0u", argv[3])) { |
最终结果
方法二:
直接把三个参数的值固定,带入到hash函数中直接运算出结果
1 |
|
输出结果:
Get your key: c0ffe