攻防世界-reverse-4.5.6
第四题logmein13
ida识别的伪代码
逆向解题py代码
v8= ":\"AL_RT^L*.?+6/46"
v7 = 'harambe'//X86结构是小端模式,故需要倒过来
v6 = 7
flag =''
for i in range(0,len(v8)):
flag += chr(ord(v8[i])^ord(v7[i%v6]))
print flag
注: (*((_BYTE *)&v7 + i % v6)此处。们常用的X86结构是小端模式!!!!也是为何v7直接转换为字符是ebmarah,而在上面的py代码中v7 = 'harambe'。
C语言代码
#include <stdio.h>
int main(int argc, char* argv[]) {
unsigned int i;
char v8[18] = ":\"AL_RT^L*.?+6/46";
__int64_t v7 = 28537194573619560;
int v6 = 7;
char s[18] = "";
for (i = 0; i < strlen(v8); ++i) {
s[i] = (char)(*((char*)&v7 + i % v6)^v8[i]);
}
printf("%s\n", s);
system("PAUSE");
return 0;
}
第五题 insanity
太简单了,直接shift+F12
第六题
一道python题
使用该网站https://tool.lu/pyc/对pyc文件解密
import base64
def encode(message):
s = ''
for i in message:
x = ord(i) ^ 32 //ord以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,
x = x + 16
s += chr(x)//chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。
return base64.b64encode(s)
correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt'
flag = ''
print 'Input flag:'
flag = raw_input()
if encode(flag) == correct:
print 'correct'
else:
print 'wrong'
解题方法
import base64
message = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt'
last_flag = base64.b64decode(message)
print(last_flag)
s=''
for i in last_flag:
s += chr((ord(i) - 16)^32)
print(s)