Commit cf9231dc by sikang

update script

parent efe8bd97
# -*-coding:utf-8-*-
import glob, os
import string
import random
class ActivityGarble:
target = [
"Activity.java",
"Bean.java",
"Fragment.java",
"Receiver.java",
"CertifyActiviy.java",
"BaseApplication.java",
"ContactEntity.java",
"SmsEntity.java",
"ActivityCenter.java",
"Service.java",
"Collector.java",
"BannerMessageDto.java",
"BasicAck.java",
"InviteResult.java",
"LoanAppBeanFatherStatusLogs.java",
"LoanRange.java",
"PhotoInfo.java",
"IncomeMessageProto.java",
"ResponseErrorBody.java",
"RecordFilesResponse.java",
"TotalAmount.java",
"UserBankInfo.java",
"YWUser.java",
"TDChannel.java"
]
used_names = []
activity_mapping = {}
#随机串
def __gen_rand_str(self):
rand_str = ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase, k=8))
while rand_str in self.used_names:
rand_str = ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase, k=8))
self.used_names.append(rand_str)
return rand_str
#替换文件内容
def __process_file_content(self, path, file_name):
# print("processing content: %s..."%path)
with open(path, "rt") as fin:
file_content = fin.read()
# replace the file content based on mangle settings
for (src, dst) in self.activity_mapping.items():
separator = [" ", ".", "\"", "{", "}", "(", ")", "[", "]","<",">", ":", ";", ","]
for sep in separator:
file_content = file_content.replace(src + sep, dst + sep)
ext = os.path.splitext(file_name)[1]
if ext == '.java':
comment = "// machine renamed: %s\n" % file_name
file_content = "%s%s" % (comment, file_content)
with open(path, "wt") as fout:
fout.write(file_content)
return
#查找所有待混淆类 并重命名
def __find_pkgs(self,path):
for root, dirs, files in os.walk(path):
for dir in dirs:
directory = os.path.join(os.getcwd(), root)
for file in files:
is_activity = False
for file_name in self.target:
if file.endswith(file_name):
is_activity = True
if is_activity:
name = os.path.splitext(file)[0]
if name not in self.activity_mapping.keys():
self.activity_mapping[name] = self.__gen_rand_str()
src = os.path.join(directory, file)
dst = os.path.join(directory, "%s.java" % self.activity_mapping[name])
os.rename(src, dst)
#遍历混淆文件
def __process_files(self,path):
for root, dirs, files in os.walk(path):
directory = os.path.join(os.getcwd(), root)
for file in files:
if file.endswith(".java"):
self.__process_file_content(os.path.join(directory, file),file)
#四大组件混淆
def activity_garble(self,config):
#遍历包
print("find activity...")
self.__find_pkgs("%s/app/src/main/java"% config['root'])
self.__find_pkgs("%s/lib_base/src/main/java"% config['root'])
#开始混淆
print("start garble .java...")
self.__process_files("%s/app/src/main"% config['root'])
self.__process_files("%s/lib_base/src/main"% config['root'])
#混淆AndroidManifest.xml
print("start garble 混淆AndroidManifest.xml ...")
manifest_path = os.path.join("%s/app/src/main/"% config['root'], "AndroidManifest.xml")
self.__process_file_content(manifest_path,"AndroidManifest.xml")
lib_manifest_path = os.path.join("%s/lib_base/src/main/"% config['root'], "AndroidManifest.xml")
self.__process_file_content(lib_manifest_path,"AndroidManifest.xml")
print("done")
\ No newline at end of file
# -*-coding:utf-8-*-
import glob
import os
import string
import random
class PackageGarble:
    used_names = []
    pkg_mapping = {}
    # 随机串(全小写加下划线,避免和activity混淆重复)
    def __gen_rand_str(self):
        random_str1 = ''.join(random.sample(
            "abcdefghijklmnopqrstuvwxyz", random.randint(4, 8)))
        random_str2 = ''.join(random.sample(
            "abcdefghijklmnopqrstuvwxyz", random.randint(4, 8)))
        return "%s_%s"%(random_str1,random_str2)
    # 替换文件内容
    def __process_file_content(self, path, file_name):
        # print("processing content: %s..."%path)
        with open(path, "rt") as fin:
            file_content = fin.read()
            # replace the file content based on mangle settings
            for (src, dst) in self.pkg_mapping.items():
                separator = [
                    " ", ".", "\"", "{", "}", "(", ")", "[", "]", "<", ">", ":",  ";", ","]
                for sep in separator:
                    file_content = file_content.replace(src + sep, dst + sep)
            ext = os.path.splitext(file_name)[1]
            if ext == '.java':
                comment = "// machine renamed: %s\n" % file_name
                file_content = "%s%s" % (comment, file_content)
            with open(path, "wt") as fout:
                fout.write(file_content)
        return
    # 搜集混淆字典
    def __find_pkgs(self, path):
        for root, dirs, files in os.walk(path):
            if len(dirs) == 0:
                mp_path = root.split("main/java/")[1].replace("/", ".")
                if mp_path not in self.pkg_mapping.keys():
                    random_str = ""
                    # 按长度排序
                    pkg_path = mp_path
                    keys = sorted(self.pkg_mapping.keys(),
                                  key=lambda i: len(i), reverse=True)
                    for key in keys:
                        if pkg_path.startswith(key):
                            random_str += self.pkg_mapping[key]
                            pkg_path = pkg_path.replace(key, "")
                    # 没混淆过的包名补全混淆
                    for pkgname in pkg_path.split("."):
                        if len(pkgname) > 0:
                            if len(random_str) > 0:
                                random_str += "."
                            random_str += self.__gen_rand_str()
                    size = len(mp_path.split("."))
                    while size > 0:
                        if mp_path not in self.pkg_mapping.keys():
                            self.pkg_mapping[mp_path] = random_str
                        mp_path = mp_path.replace(
                            ".%s" % mp_path.split(".")[size-1], "")
                        random_str = random_str.replace(
                            ".%s" % random_str.split(".")[size-1], "")
                        size -= 1
    #重命名所有包路径
    def __rename_pkg(self,path):
        for root, dirs, files in os.walk(path):
            if "main/java" in root:
                root += "/"
                mp_path = root.split("main/java/")[1].replace("/", ".")
                for dir in dirs:
                    pkg_path = "%s%s"%(mp_path,dir)
                    for (key,value) in self.pkg_mapping.items():
                        if key.startswith(pkg_path):
                            index = len(pkg_path.split(".")) - 1
                            dir_name = value.split(".")[index]
                            old_name = os.path.join(os.path.join(os.getcwd(), root), dir)
                            new_name = os.path.join(os.path.join(os.getcwd(), root),dir_name )
                            os.rename(old_name, new_name)
                            print ("rename %s -> %s"%(dir,dir_name))
                            break
    def __process_files(self, path):
        for root, dirs, files in os.walk(path):
            directory = os.path.join(os.getcwd(), root)
            for file in files:
                if file.endswith(".java"):
                    self.__process_file_content(
                        os.path.join(directory, file), file)
    # 四大组件混淆
    def pkg_garble(self, config):
        # 遍历包
        print("find activity...")
        self.__find_pkgs("%s/app/src/main/java" % config['root'])
        self.__find_pkgs("%s/lib_base/src/main/java" % config['root'])
        
        keys = sorted(self.pkg_mapping.keys(),
                      key=lambda i: len(i.split(".")), reverse=True)
        for key in keys:
            print(key+" -> " + self.pkg_mapping[key])
        self.__rename_pkg("%s/app/src/main/java" % config['root'])
        self.__rename_pkg("%s/lib_base/src/main/java" % config['root'])
        # self.__find_pkgs("%s/lib_base/src/main/java"% config['root'])
        # #开始混淆
        # print("start garble .java...")
        # self.__process_files("%s/app/src/main"% config['root'])
        # self.__process_files("%s/lib_base/src/main"% config['root'])
        # #混淆AndroidManifest.xml
        # print("start garble 混淆AndroidManifest.xml ...")
        # manifest_path = os.path.join("%s/app/src/main/"% config['root'], "AndroidManifest.xml")
        # self.__process_file_content(manifest_path,"AndroidManifest.xml")
        # lib_manifest_path = os.path.join("%s/lib_base/src/main/"% config['root'], "AndroidManifest.xml")
        # self.__process_file_content(lib_manifest_path,"AndroidManifest.xml")
        print("done")
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment