python代码混淆工具,Python版代码混淆工具

写在前面:

代码混淆,其实很简单。原理就是查找、替换而已。市面上有很多混淆工具,最好是在混淆工具的基础上,自己再写一下,二次混淆。算法也不难。如果需要全局混淆,以及自动混淆,那么就复杂一些了,需要再加上词法分析和语法分析。

如何使用:

1,首先得安装Python。

2,把这个下面这个 confuse.py 文件,复制目标文件夹。

3,更改 raw_name_list 列表里的字符串。改成你想混淆的变量名或者类名方法名。

4,运行python confuse.py 即可混淆该文件夹下的.cs文件。

这段代码其实还是很简单的,只是为大家说明一下混淆思想。如果想更方便的使用,需要再加入一些词法分析、语法分析的算法。

代码如下:

#! /usr/bin/env python

#coding=utf-8

import hashlib

import random

import os

###############################

# Describe : 混淆Unity脚本文件

# D&P Author By: 常成功

# Create Date: 2014-11-25

# Modify Date: 2014-11-25

###############################

#想混淆的变量/方法名

raw_name_list = ["function_1", "function_2", "var_1", "var_2",]

#混淆后的变量/方法名

new_name_list = []

#随机可选的字母表

alphabet = ["a", "b", "c", "d", "e", "f", "g",

"h", "i", "j", "k", "l", "m", "n", "o", "p", "q",

"r", "s", "t", "u", "v", "w", "x", "y", "z",

]

#生成新的变量名

def create_new_name() :

m = hashlib.md5()

#生成随机变量名

for raw_name in raw_name_list:

m.update(raw_name)

#生成一个16位的字串

temp_name = m.hexdigest()[0:16]

#合法名称校验

#强制以字母作为变量/方法名的开头

if temp_name[0].isdigit():

initial = random.choice(alphabet)

temp_name = initial + temp_name

temp_name = temp_name[0:16]

#不能重名

while(1):

if temp_name in new_name_list :

initial = random.choice(alphabet)

temp_name = initial + temp_name

temp_name = temp_name[0:16]

else:

new_name_list.append(temp_name)

break

#混淆文件

def confuse_file(path_filename):

file_content = ""

#读文件内容

f = file(path_filename)

# if no mode is specified, 'r'ead mode is assumed by default

while True:

line = f.readline()

if len(line) == 0: # Zero length indicates EOF

break

#混淆

name_index = 0

for raw_name in raw_name_list:

the_new_name = new_name_list[name_index]

line = line.replace(raw_name, the_new_name)

name_index += 1

file_content += line

f.close()

#重写文件

f = file(path_filename, 'w')

f.write(file_content)

f.close()

#遍历当前目录下的所有.cs文件

def confuse_all():

#获取当前目录

dir = os.getcwd()

for root, dirs, filename in os.walk(dir):

for file in filename:

path_filename = os.path.join(root, file)

if path_filename.endswith('.cs'):

confuse_file(path_filename)

print "Confuse File: ", path_filename

if __name__=="__main__":

create_new_name()

confuse_all()

#打印一下混淆的情况.

#如果用文本保存起来, 那么以后可以反混淆, 还原文件

print "Start Confuse ...."

for j in range(0, len(raw_name_list)) :

print raw_name_list[j] , " --> " , new_name_list[j]

print "Confuse Complete !"

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值