反编译和反混淆python文件

时间:2016-01-17 14:24:47

标签: python base64 obfuscation deobfuscation

我们的一名员工已经创建了一个python应用程序,他已经obfescated然后base64编码。 目前,员工在执行其他操作后处于暂停状态,并且不会反编译或提供代码库。 HR正在排序。

我需要对文件进行去模糊处理,这样我就可以阅读他创建并呈现给HR的内容。有人可以帮忙吗?

使用https://github.com/lhr0909/PythonObfuscator(我找到了他的命令历史记录)进行了混淆,然后使用base64编码。

1 个答案:

答案 0 :(得分:9)

非混淆特定的混淆器很容易,因为它实际上并没有改变任何标识符。
拿一段简单的代码:

from random import randrange
print([[randrange(n) for _ in range(n)] for _ in range(n)])

生成:

exec("import re;import base64");exec((lambda p,y:(lambda o,b,f:re.sub(o,b,f))(r"([0-9a-f]+)",lambda m:p(m,y),base64.b64decode("NyA0IDMgMAo1KFtbMCg4KSAyIDkgNiAxKDgpXSAyIDkgNiAxKDgpXSk=")))(lambda a,b:b[int("0x"+a.group(1),16)],"randrange|range|for|import|random|print|in|from|n|_".split("|")))

exec替换第二个print

exec("import re;import base64");print((lambda p,y:(lambda o,b,f:re.sub(o,b,f))(r"([0-9a-f]+)",lambda m:p(m,y),base64.b64decode("NyA0IDMgMAo1KFtbMCg4KSAyIDkgNiAxKDgpXSAyIDkgNiAxKDgpXSk=")))(lambda a,b:b[int("0x"+a.group(1),16)],"randrange|range|for|import|random|print|in|from|n|_".split("|")))
                                ^^^^^

现在运行它会显示:

from random import randrange
print([[randrange(n) for _ in range(n)] for _ in range(n)])