攻防世界 reverse 新手题wp
程序员文章站
2022-07-09 12:39:58
...
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(一开始用大写提交用大写提交不对。。。)
insanity
题目描述:菜鸡觉得前面的题目太难了,来个简单的缓一下
思路
打开附件,拖入ida64,不能生成伪代码,拖入ida32,得到
int __cdecl main(int argc, const char **argv, const char **envp)
{
unsigned int v3; // eax
unsigned int v4; // eax
puts("Reticulating splines, please wait..");
sleep(5u);
v3 = time(0);
srand(v3);
v4 = rand();
puts((&strs)[v4 % 0xA]);
return 0;
}
进入strs
找到 “9447{This_is_a_flag}”(格式无语。。)得到flag
python-trade
题目描述:菜鸡和菜猫进行了一场Py交易
思路
有一个pyc文件,一开始我还是拖入ida,得到一串密码,好像要用base解码但得不到flag
搜pyc的时候找到一个pyc反编译网站,进行反编译得到
#!/usr/bin/env python
# visit http://tool.lu/pyc/ for more information
import base64
def encode(message):
s = ''
for i in message:
x = ord(i) ^ 32
x = x + 16
s += chr(x)
return base64.b64encode(s)
correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt'
flag = ''
print 'Input flag:'
flag = raw_input()
if encode(flag) == correct:
print 'correct'
else:
print 'wrong'