Reverse(一)

前段时间在B站上看了三叶草的逆向方面的二进制入门培训视频,就感兴趣跟着学习下

知识小结:

使用ida软件

exe文件拖入后等待完全分析完后,在左边部分CTRL+F查找相关函数,入门应该都是查找main函数,双击进入后按下tab可以查看文件的伪代码

可以点下变量或函数名字按下N键修改成C语言中常用的名字,更易于读懂代码

image-20211022215818208.png

image-20211022215852333.png

1. Hello, CTF

直接把exe文件拖入ida后,查找main函数

image-20211022215905364.png

看到这个strcpy比较字符串函数可以猜想这个使需要你输入并比较的内容

16进制转化下ASCII即可得到:CrackMeJustForFun

2. insanity

image-20211022220628223.png

进ida后查看伪代码感觉随机出数组中的字符串,直接双击查看strs数组

image-20211022220744010.png

看到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}

最后修改:2021 年 10 月 25 日
如果觉得我的文章对你有用,请随意赞赏