Reverse(一)
前段时间在B站上看了三叶草的逆向方面的二进制入门培训视频,就感兴趣跟着学习下
知识小结:
使用ida软件
exe文件拖入后等待完全分析完后,在左边部分CTRL+F查找相关函数,入门应该都是查找main函数,双击进入后按下tab可以查看文件的伪代码
可以点下变量或函数名字按下N键修改成C语言中常用的名字,更易于读懂代码
1. Hello, CTF
直接把exe文件拖入ida后,查找main函数
看到这个strcpy比较字符串函数可以猜想这个使需要你输入并比较的内容
16进制转化下ASCII即可得到:CrackMeJustForFun
2. insanity
进ida后查看伪代码感觉随机出数组中的字符串,直接双击查看strs数组
看到flag
3. python-trade
下载文件得到一个pyc文件,可以知道这个是python文件编译后产生的
python反编译 - 在线工具 (tool.lu)反编译一下
得到代码
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'
是python2的格式,代码功能就是你输入的字符串ascii化,每一位上先与32异或后,加16后再转为字符
最后返回所有字符base64编码后的字符串
反过来写
import base64
def decode(message):
s = ''
for i in message:
s += chr((i - 16) ^ 32)
return s
correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt'
flag = base64.b64decode(correct)
print(decode(flag))
这里一直报错老过不去:ord() expected string of length 1, but int found
查了下是因为python2和python3不同的原因: ord()这个函数接受的类型是一个长度为1的字符串,而在python3当中传入的i已经是一个整型数了,直接用i-16就可以了,不用再加ord
得到flag:nctf{d3c0mpil1n9_PyC}