题目连接 链接:https://pan.baidu.com/s/1s9J89ppouArOR8XdCoG_ug
提取码:7szc
准备
还是基本操作先查一下基本面
64位 无壳
静态分析(py文件特征)
首先看到反编译之后的主函数
拖入ida后查看字符串但是发现有好多python函数
通过主函数和字符串
那么我们就可以推测出这是用python编写的文件
那么需要将exe文件还原为py文件
看到这里让我想到之前做过一道 ‘新年快乐’ 的例题看起来两道题目的思路应该是相同的
所以多做例题还是很有好处的
当然其实图标也是很重要的如果图标如下图所示的话
那就很明显为py文件了
解包exe文件(exe > pyc)
下载python解包exe项目
链接: https://github.com/pyinstxtractor/pyinstxtractor-ng
主要使用其中的pyinstxtractor-ng.py
文件
解包exe
将pyinstxtractor-ng.py
文件移动到想要解包的文件目录下 并在当前目录下输入cmd打开终端
在终端输入以下命令进行解包
python pyinstxtractor-ng.py white_give.exe
解包后会发现在当前目录下生成了名为
white_give.exe_extracted
文件夹 即解包完成
进入该文件夹会发现和解包文件相同名称的pyc文件 white_give.pyc
接下来就是要将pyc文件转为可以正常阅读的py文件
pyc文件 > py文件
安装uncompyle6
在终端输入
pip install uncompyle6
如果新版本出现问题可以更换老版本试试
pip install uncompyle6==3.7.4
pyc > py
进入刚才解包完成的目录
并在此目录下运行cmd输入
uncompyle6 white_give.pyc
运行成功后可以看到源代码
只能在终端看到源代码的话还是不太方面
让我们继续将文件转为py文件
当前目录再次运行cmd输入
uncompyle6 white_give.pyc > white_give.py
运行成功后即可看到生成了white_give.py
打开white_give.py后即可看到源代码
算法逆向
接下来只要对代码进行分析即可分析出flag
# uncompyle6 version 3.7.4
# Python bytecode 3.8 (3413)
# Decompiled from: Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)]
# Embedded file name: white_give.py
# Compiled at: 1995-09-28 00:18:56
# Size of source mod 2**32: 272 bytes
import base64
def main():
flag = input('请输入flag:')
out = checkflag(flag)
print(out)
def checkflag(flag):
if len(flag) != 22: //flag长度为23
return 'error!!!'
else:
if flag[0:5] != 'flag{': //flag前五位为 flag{
if flag[(-1)] != '}': //flag最后一位为 }
return 'error!!!'
if 'welcome' != flag[5:12]: //flag6到11位为welcome
return 'error!!!' //flag{welcome_****_***}
if ord(flag[12]) != ord(flag[17]) != 95: //ord()函数=char()函数
return 'error!!!' //ASCⅡ95表示的字符为'_'
temp = flag[13:17] + flag[18:21] //13 18位为'_'
temp = temp.encode(encoding='utf-8') //temp为flag的14位到18位
print('base64:', base64.b64encode(temp)) // 19位到22位 且为
if base64.b64encode(temp) != b'UUxOVUNURg==': //'UUxOVUNURg=='的
return 'error!!!' //base64解密
return 'good!!!you got it!!!!' //'UUxOVUNURg=='的解密为QLNUCTF
// flag{welcome_QLNU_CTF}
main()
flag{welcome_QLNU_CTF}