Fork me on GitHub

CTF简单Reverse题目解法和pyc文件逆向

因为单个内容写起来篇幅太短,加之这两个解题方法都很简单,所以放到一起写。

处理简单的逆向题目

对于简单CTF题目,我们可以直接对程序进行静态分析而不需要使用动态分析的工具逐步调试。常见方法如下:

  • 直接分析程序
  • 使用工具进行关键数据的分析

举例:对这个附件包中的easy文件进行逆向。

Method 1: 将easy文件拖入IDA中,IDA跳转到主函数中。

easy_re

可以看到“Correct!”这个线索,逆推前一个函数,发现一个疑似flag的字符串并且这个字符串还被用于做比较,可以推断这个字符串”zLl1ks_d4m_T0g_I”和flag相关,但直接填入发现不是flag,所以字符串反转再试,发现“I_g0T_m4d_sk1lLz”就是flag。

Method 2: 在命令行用strings查看elf文件的字符串

当然,如果是Mac之类没安装IDA的用户,也可以命令通过strings命令来获取elf文件中的字符串。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-> strings easy
...
/===========================================================================\
| Gatekeeper - Access your PC from everywhere! |
+===========================================================================+
ACCESS DENIED
[ERROR] Login information missing
Usage: %s <username> <password>
~> Verifying.
0n3_W4rM
~> Incorrect username
zLl1ks_d4m_T0g_I
Correct!
Welcome back!
CTF{%s}
~> Incorrect password
...

原题参考:Google Capture The Flag 2018 (Quals) - Reverse - Beginner’s Quest - Gatekeeper

虽然这种程度的题目在高质量比赛中基本不会出现,但是在普通线上赛中还是有可能遇到的,这个时候拼的就是速度。

pyc文件的逆向

什么是pyc文件?

  • .pyc文件是.py文件运行时预编译生成的文件
  • .pyc提高了.py文件的运行效率,如果同文件夹下有同名的.pyc文件,则python程序会直接加载.pyc文件而不会重新对.py文件进行解释。
  • .pyc文件有一定的源码保护能力,.py文件生成的.pyc文件可在各种平台上运行,但是.pyc文件可以轻易被逆向

Python程序运行过程简述

如果还是不能理解“.pyc提高了.py文件的运行效率”的话,这里补充一个概念PyCodeObject,PyCodeObject是Python编译器真正编译成的结果。

当Python程序运行时,编译的结果是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。

当Python程序再次运行时,首先程序会在硬盘中寻找.pyc文件,如果找到,则直接载入,否则就重复上面的过程。

所以可以这样理解PyCodeObject和pyc文件的关系:pyc文件是PyCodeObject的一种持久化保存方式。

pyc文件逆向实例

pyc逆向常用工具:https://tool.lu/pyc

pyc_re

访问工具页面,打开附件包中的Py.pyc文件,在线工具即可逆向出python源码。

看源码可知程序是逐字符异或和相加再编码,那么decode代码参考encode的实现可以写出。

(提示:一个数字和另一个数字异或2次还是它本身)

1
2
3
4
5
6
7
8
9
import base64

correct ='XlNkVmtUI1MgXWBZXCFeKY+AaXNt'
s = base64.b64decode(correct)
flag =''
for i in s:
i = chr((i-16)^32)
flag += i
print(flag)

运行后可获得flag,即nctf{d3c0mpil1n9_PyC}

CTF资源补充

最后补充下逆向常用练习资源。

-------------  Fin    Thanks for reading!  -------------

本文标题:CTF简单Reverse题目解法和pyc文件逆向

文章作者:TesterCC

发布时间:2019年12月15日 - 13:12

最后更新:2020年07月07日 - 21:07

原始链接:http://blog.fullstackpentest.com/a-pyc-reverse-writeup.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。