Loading... # Reverse(一) 前段时间在B站上看了三叶草的逆向方面的二进制入门培训视频,就感兴趣跟着学习下 知识小结: 使用ida软件 exe文件拖入后等待完全分析完后,在左边部分CTRL+F查找相关函数,入门应该都是查找main函数,双击进入后按下tab可以查看文件的伪代码 可以点下变量或函数名字按下N键修改成C语言中常用的名字,更易于读懂代码 ![image-20211022215818208.png](http://120.78.215.15/usr/uploads/2021/10/2069392377.png) ![image-20211022215852333.png](http://120.78.215.15/usr/uploads/2021/10/1437688514.png) ## 1. Hello, CTF 直接把exe文件拖入ida后,查找main函数 ![image-20211022215905364.png](http://120.78.215.15/usr/uploads/2021/10/312578963.png) 看到这个strcpy比较字符串函数可以猜想这个使需要你输入并比较的内容 16进制转化下ASCII即可得到:CrackMeJustForFun ## 2. insanity ![image-20211022220628223.png](http://120.78.215.15/usr/uploads/2021/10/4213592135.png) 进ida后查看伪代码感觉随机出数组中的字符串,直接双击查看strs数组 ![image-20211022220744010.png](http://120.78.215.15/usr/uploads/2021/10/2601215804.png) 看到flag ## 3. python-trade 下载文件得到一个pyc文件,可以知道这个是python文件编译后产生的 [python反编译 - 在线工具 (tool.lu)](https://tool.lu/pyc/)反编译一下 得到代码 ~~~python 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编码后的字符串 反过来写 ~~~python 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} 最后修改:2023 年 12 月 14 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏