popodynasty

有趣的c++代码混淆【python源码】

import random
import string

keyword_list = [\'cout\', \'+=\', \'-=\', \'int \', \'goto\', \'asm\', \'do\', \'if\', \'[\', \']\',
                \'return\', \'typedef\', \'auto\', \'double\', \'inline\', \'{\', \'}\',
                \'short\', \'typeid\', \'bool\', \'int \', \'(\', \')\',
                \'signed\', \'typename\', \'break\', \'else\', \'>=\', \'<=\',
                \'sizeof\', \'union\', \'case\', \'enum\', \'mutable\', \';\',
                \'static\', \'unsigned\', \'catch\', \'explicit\', \'try\',
                \'namespace\', \'using\', \'char\', \'main\', \'const\',
                \'export\', \'new\', \'struct\', \'class\', \'switch\',
                \'false\', \'private\', \'long\', \'::\', \'void\', \'endl\',
                \'float\', \'protected\', \'this\', \'continue\', \'++\', \'--\',
                \'for\', \'public\', \'throw\', \'while\', \'default\', \'friend\',
                \'true\', \'<<\', \'cin\', \'printf\', \'==\', \'>>\', \'!=\', ]


def random_char():
    r = chr(random.randint(97, 122))
    char, char_r, list_chr = [], [], []
    for i in range(len(keyword_list)):
        char.append(r + str(i))
        char_r.append(keyword_list[i])
    random.shuffle(char)
    random.shuffle(char_r)
    for i in range(len(char)):
        list_chr.append([char[i], char_r[i]])
    return list_chr


def generate_define(list_chr):
    define = []
    for i in range(len(list_chr)):
        define.append(\'#define \' + list_chr[i][0] + \' \' + list_chr[i][1])
    return define


def replace(list_char, str, confusion):
    if confusion == \' /**/ \':
        confusion = \' /*\' + \'\'.join(random.sample(string.hexdigits, 6)) + \'*/ \'
    for i in list_char:
        if i[1] in str:
            str = str.replace(i[1], confusion + i[0] + confusion)
    return str


def open_file(list_char):
    cpp = input(\'请输入一个C++代码的文件名:\')
    confusion = input(\'请输入混淆注释(可选,不填则随机混淆):\')
    confusion = \' /*\' + confusion + \'*/ \'
    filenmae = cpp.split(\'.\')[0] + \'混淆.cpp\'
    with open(cpp, \'r\') as f:
        with open(filenmae, \'w\') as m:
            define = generate_define(list_char)
            for i in define:
                m.write(i + \'\n\')
            for i in f.readlines():
                if \'#\' in i[0]:
                    m.write(i)
                    continue
                i = i.strip()
                i_replace = replace(list_char, i, confusion)
                m.write(i_replace + \'\n\')
            print(\'混淆代码完成了哦^_^!\n混淆后的文件名为: \' + filenmae + \'\n\')


if __name__ == \'__main__\':
    print(\'-\' * 60)
    print(\'          C++ 代码混淆工具beta版        Author By: Zgao\n\')
    print(\'                  tips: cpp代码和该软件需在同一目录下\n\')
    print(\'-\' * 60)
    while True:
        open_file(random_char())

分类:

技术点:

相关文章: