一、前
最近在折腾python逆向,高度(商用级)加密混淆后的代码,经过打包编译成可执行程序后,如何分析它,还原它,以及给它打补丁,这是我想要研究的。
这个过程非常有趣和富有挑战性,总结出针对市面大部分混淆方案的读,改,还原代码,热补丁的相关技术。
本期模拟 基于py打包而来的勒索病毒,它混淆了自身代码,尝试通过多种方式破解它!
二、挑战
1. 源码
有main.py, 代码如下:
from secret import secret_key
# 这儿有一段隐藏代码
XXX
# 这儿有一段隐藏代码
userinput = input("secret:n")
if userinput == secret_key:
print("flag is flag{XXXXXXXXX}。恭喜, 你的文件即将被解密")
else:
print("wrong, 请支付100BTC获取解密密钥!")
有secret.py, 代码如下:
secret_key = "XXXXXXXXX"
2. 混淆打包
python: 3.7.9
cx_Freeze:6.10
3. 挑战列表
[1] 利用codeobject法, 拿到flag
难度: ※※※※※ 5/5
Tips:
-
1. 你需要到cpython仓库下载源码,在特定的c文件下修改处理codeobject的函数,再在本地编译出python运行环境
-
2. 你需要将编译出来的python环境替换掉exe下的python运行环境
[2] 利用动态加载法,拿到flag
难度: ※※ 2/5
Tips:
-
1. 你需要深入理解pyc和py
[3] 利用热补丁,拿到flag
难度: ※※※※ 4/5
Tips:
-
1. 你需要转变思路,除了读,是的,你还可以写,篡改不也是很好的的攻击方案嘛?
[4] 还原出隐藏代码
难度: ※※※※※ 5/5
Tips:
-
1. 需要借助第[2]的思路
-
2. 你需要通读uncompyle6的源码
三、后
挑战代码是纯白逻辑,只有print打印的IO操作,没有任何文件,网络等操作,放心食用。
挑战已上传到:
-
• https://github.com/djerryz/Art-Of-Hunting/tree/main/files/AOH013
上面每个挑战均是可以完成的,解决思路不需要用到x64dbg等动态调试工具, 冲??.
原文始发于微信公众号(Art Of Hunting):[AOH 013]破解商用级py加密混淆