gpt4 book ai didi

python - 反混淆:简化 Python3 表达式

转载 作者:太空宇宙 更新时间:2023-11-03 16:02:16 25 4
gpt4 key购买 nike

我正在尝试学习如何对一些不必要的复杂代码进行反混淆。例如,我希望能够重写这行代码:

return ('d' + chr(101) + chr(97) + chr(200 - 100)) # returns 'dead'

至:

return 'dead'

所以基本上,我需要计算 py 文件中的所有文字,包括计算为简单整数的复杂表达式。我该如何写这个读者/是否有可以做到这一点的东西?谢谢!

最佳答案

您需要的是程序转换系统(PTS)。

这是一个将源代码解析为 AST、转换树,然后从树重新生成有效源代码的工具。请参阅我对 rewriting Python text 的回答一些背景。

使用像(我公司的)DMS Software Reengineering Toolkiit 这样的 PTS,您可以编写规则来执行常量折叠,这意味着本质上是在进行编译时算术。

对于您展示的示例,以下规则可以完成OP的示例:

     rule fold_subtract_naturals(n:NATURAL,m:NATURAL): sum->sum =
" \n + \m " -> " \subtract_naturals\(\n\,\m\) ";

rule convert_chr_to_string(c:NATURAL): term->term =
" chr(\c) " -> make_string_from_natural(c) ;

rule convert_character_literal_to_string(c:CHARACTER): term->term =
" \c " -> make_string_from_character(c) ;

rule fold_concatenate_strings(s1:STRING, s2:STRING): sum->sum =
" \s1 + \s2 " -> " \concatenate_strings\(\s1\,\s2\) ";

ruleset fold_strings = {
fold_subtract_naturals,
convert_chr_to_string,
convert_characater_to_string,
fold_concatenate_strings };

每个单独的规则都匹配相应的语法/树。它们的编写方式仅适用于文字常量。

fold_add_naturals 查找通过加法运算连接的自然常量对,并使用内置函数将其替换为总和,该函数对两个值求和并生成包含总和的文字值节点。

convert_chr_to_string 将 chr(c) 转换为相应的字符串文字。

convert_character_to_string 将“C”转换为相应的字符串“C”。

fold_concatenate_strings 组合由添加运算符分隔的两个文字字符串。它的工作方式类似于fold_add_naturals 的工作方式。

subtract_naturalsconcatenate_strings 内置于 DMS 中。 convert_chr_to_stringconvert_character_to_string 需要使用 DMS 的元编程语言 PARLANSE 进行自定义编码,但这些例程非常简单(可能 10 行)。

规则集将规则集打包,以便可以应用它们。未显示的是打开文件、调用解析器、调用规则集转换器(应用规则直到没有规则适用)的基本代码。最后一步是调用 PrettyPrinter 重新打印修改后的 AST。

许多其他 PTS 也提供类似的设施。

关于python - 反混淆:简化 Python3 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40229632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com