Commit b6b6e2ad by sikang

update

parent cf9231dc
...@@ -3,6 +3,7 @@ from func import Function ...@@ -3,6 +3,7 @@ from func import Function
from shell import Shell from shell import Shell
from tools.garbel.garble import Garble from tools.garbel.garble import Garble
from tools.garbel.activity_garble import ActivityGarble from tools.garbel.activity_garble import ActivityGarble
from tools.garbel.package_garble import PackageGarble
import os import os
import shutil import shutil
...@@ -33,6 +34,7 @@ print("15、刷新本地协议") ...@@ -33,6 +34,7 @@ print("15、刷新本地协议")
print("16、api混淆") print("16、api混淆")
print("17、字符串混淆") print("17、字符串混淆")
print("18、四大组件混淆") print("18、四大组件混淆")
print("19、包路径混淆")
print("21、reset project") print("21、reset project")
command = int(input("请输入指令编号:")) command = int(input("请输入指令编号:"))
...@@ -93,5 +95,8 @@ elif command == 17: ...@@ -93,5 +95,8 @@ elif command == 17:
elif command == 18: elif command == 18:
ActivityGarble().activity_garble(config) ActivityGarble().activity_garble(config)
elif command == 18:
PackageGarble().pkg_garble(config)
elif command == 21: elif command == 21:
Shell().reset_project(config) Shell().reset_project(config)
# -*-coding:utf-8-*- # -*-coding:utf-8-*-
import glob import glob
import os import os
import string import string
import random import random
class PackageGarble:
class PackageGarble: used_names = []
    used_names = [] pkg_mapping = {}
    pkg_mapping = {}
# 随机串(全小写加下划线,避免和activity混淆重复)
    # 随机串(全小写加下划线,避免和activity混淆重复) def __gen_rand_str(self):
    def __gen_rand_str(self): random_str1 = ''.join(random.sample(
        random_str1 = ''.join(random.sample( "abcdefghijklmnopqrstuvwxyz", random.randint(4, 8)))
            "abcdefghijklmnopqrstuvwxyz", random.randint(4, 8))) random_str2 = ''.join(random.sample(
        random_str2 = ''.join(random.sample( "abcdefghijklmnopqrstuvwxyz", random.randint(4, 8)))
            "abcdefghijklmnopqrstuvwxyz", random.randint(4, 8))) return "%s_%s"%(random_str1,random_str2)
        return "%s_%s"%(random_str1,random_str2)
# 替换文件内容
    # 替换文件内容
def __process_file_content(self, path, file_name):
    def __process_file_content(self, path, file_name): # print("processing content: %s..."%path)
        # print("processing content: %s..."%path) with open(path, "rt") as fin:
        with open(path, "rt") as fin: file_content = fin.read()
            file_content = fin.read() # replace the file content based on mangle settings
            # replace the file content based on mangle settings for (src, dst) in self.pkg_mapping.items():
            for (src, dst) in self.pkg_mapping.items(): separator = [
                separator = [ " ", ".", "\"", "{", "}", "(", ")", "[", "]", "<", ">", ":", ";", ","]
                    " ", ".", "\"", "{", "}", "(", ")", "[", "]", "<", ">", ":",  ";", ","] for sep in separator:
                for sep in separator: file_content = file_content.replace(src + sep, dst + sep)
                    file_content = file_content.replace(src + sep, dst + sep)
ext = os.path.splitext(file_name)[1]
            ext = os.path.splitext(file_name)[1] if ext == '.java':
            if ext == '.java': comment = "// machine renamed: %s\n" % file_name
                comment = "// machine renamed: %s\n" % file_name file_content = "%s%s" % (comment, file_content)
                file_content = "%s%s" % (comment, file_content) with open(path, "wt") as fout:
            with open(path, "wt") as fout: fout.write(file_content)
                fout.write(file_content) return
        return
# 搜集混淆字典
    # 搜集混淆字典 def __find_pkgs(self, path):
    def __find_pkgs(self, path): for root, dirs, files in os.walk(path):
        for root, dirs, files in os.walk(path): if len(dirs) == 0:
            if len(dirs) == 0: mp_path = root.split("main/java/")[1].replace("/", ".")
                mp_path = root.split("main/java/")[1].replace("/", ".") if mp_path not in self.pkg_mapping.keys():
                if mp_path not in self.pkg_mapping.keys(): random_str = ""
                    random_str = "" # 按长度排序
                    # 按长度排序 pkg_path = mp_path
                    pkg_path = mp_path
keys = sorted(self.pkg_mapping.keys(),
                    keys = sorted(self.pkg_mapping.keys(), key=lambda i: len(i), reverse=True)
                                  key=lambda i: len(i), reverse=True) for key in keys:
                    for key in keys: if pkg_path.startswith(key):
                        if pkg_path.startswith(key): random_str += self.pkg_mapping[key]
                            random_str += self.pkg_mapping[key] pkg_path = pkg_path.replace(key, "")
                            pkg_path = pkg_path.replace(key, "")
# 没混淆过的包名补全混淆
                    # 没混淆过的包名补全混淆 for pkgname in pkg_path.split("."):
                    for pkgname in pkg_path.split("."): if len(pkgname) > 0:
                        if len(pkgname) > 0: if len(random_str) > 0:
                            if len(random_str) > 0: random_str += "."
                                random_str += "." random_str += self.__gen_rand_str()
                            random_str += self.__gen_rand_str()
size = len(mp_path.split("."))
                    size = len(mp_path.split(".")) while size > 0:
                    while size > 0: if mp_path not in self.pkg_mapping.keys():
                        if mp_path not in self.pkg_mapping.keys(): self.pkg_mapping[mp_path] = random_str
                            self.pkg_mapping[mp_path] = random_str mp_path = mp_path.replace(
                        mp_path = mp_path.replace( ".%s" % mp_path.split(".")[size-1], "")
                            ".%s" % mp_path.split(".")[size-1], "") random_str = random_str.replace(
                        random_str = random_str.replace( ".%s" % random_str.split(".")[size-1], "")
                            ".%s" % random_str.split(".")[size-1], "") size -= 1
                        size -= 1
#重命名所有包路径
    #重命名所有包路径 def __rename_pkg(self,path):
    def __rename_pkg(self,path): for root, dirs, files in os.walk(path):
        for root, dirs, files in os.walk(path): if "main/java" in root:
            if "main/java" in root: root += "/"
                root += "/" mp_path = root.split("main/java/")[1].replace("/", ".")
                mp_path = root.split("main/java/")[1].replace("/", ".") for dir in dirs:
                for dir in dirs: pkg_path = "%s%s"%(mp_path,dir)
                    pkg_path = "%s%s"%(mp_path,dir) for (key,value) in self.pkg_mapping.items():
                    for (key,value) in self.pkg_mapping.items(): if key.startswith(pkg_path):
                        if key.startswith(pkg_path): index = len(pkg_path.split(".")) - 1
                            index = len(pkg_path.split(".")) - 1 dir_name = value.split(".")[index]
                            dir_name = value.split(".")[index] old_name = os.path.join(os.path.join(os.getcwd(), root), dir)
                            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 )
                            new_name = os.path.join(os.path.join(os.getcwd(), root),dir_name ) os.rename(old_name, new_name)
                            os.rename(old_name, new_name) print ("rename %s -> %s"%(dir,dir_name))
                            print ("rename %s -> %s"%(dir,dir_name)) break
                            break
def __process_files(self, path):
    def __process_files(self, path): for root, dirs, files in os.walk(path):
        for root, dirs, files in os.walk(path): directory = os.path.join(os.getcwd(), root)
            directory = os.path.join(os.getcwd(), root) for file in files:
            for file in files: if file.endswith(".java"):
                if file.endswith(".java"): self.__process_file_content(
                    self.__process_file_content( os.path.join(directory, file), file)
                        os.path.join(directory, file), file)
# 四大组件混淆
    # 四大组件混淆 def pkg_garble(self, config):
    def pkg_garble(self, config): # 遍历包
        # 遍历包 print("find activity...")
        print("find activity...") self.__find_pkgs("%s/app/src/main/java" % config['root'])
        self.__find_pkgs("%s/app/src/main/java" % config['root']) self.__find_pkgs("%s/lib_base/src/main/java" % config['root'])
        self.__find_pkgs("%s/lib_base/src/main/java" % config['root'])
         keys = sorted(self.pkg_mapping.keys(),
        keys = sorted(self.pkg_mapping.keys(), key=lambda i: len(i.split(".")), reverse=True)
                      key=lambda i: len(i.split(".")), reverse=True) for key in keys:
        for key in keys: print(key+" -> " + self.pkg_mapping[key])
            print(key+" -> " + self.pkg_mapping[key])
self.__rename_pkg("%s/app/src/main/java" % config['root'])
        self.__rename_pkg("%s/app/src/main/java" % config['root']) self.__rename_pkg("%s/lib_base/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'])
        # self.__find_pkgs("%s/lib_base/src/main/java"% config['root'])
# #开始混淆
        # #开始混淆 # print("start garble .java...")
        # print("start garble .java...") # self.__process_files("%s/app/src/main"% config['root'])
        # self.__process_files("%s/app/src/main"% config['root']) # self.__process_files("%s/lib_base/src/main"% config['root'])
        # self.__process_files("%s/lib_base/src/main"% config['root'])
# #混淆AndroidManifest.xml
        # #混淆AndroidManifest.xml # print("start garble 混淆AndroidManifest.xml ...")
        # print("start garble 混淆AndroidManifest.xml ...") # manifest_path = os.path.join("%s/app/src/main/"% config['root'], "AndroidManifest.xml")
        # manifest_path = os.path.join("%s/app/src/main/"% config['root'], "AndroidManifest.xml") # self.__process_file_content(manifest_path,"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")
        # lib_manifest_path = os.path.join("%s/lib_base/src/main/"% config['root'], "AndroidManifest.xml") # self.__process_file_content(lib_manifest_path,"AndroidManifest.xml")
        # self.__process_file_content(lib_manifest_path,"AndroidManifest.xml")
print("done")
        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