Commit 930a4cb0 by sikang

update script

parent 5599bc9b
......@@ -4,6 +4,7 @@ from shell import Shell
from tools.garbel.garble import Garble
from tools.garbel.activity_garble import ActivityGarble
from tools.garbel.package_garble import PackageGarble
from tools.garbel.manifest_grable import ManifestGarble
import os
import shutil
......@@ -35,6 +36,7 @@ print("16、api混淆")
print("17、字符串混淆")
print("18、四大组件混淆")
print("19、包路径混淆")
print("20、插入Activity")
print("21、reset project")
command = int(input("请输入指令编号:"))
......@@ -98,5 +100,8 @@ elif command == 18:
elif command == 19:
PackageGarble().pkg_garble(config)
elif command == 20:
ManifestGarble().manifest_garbel(config)
elif command == 21:
Shell().reset_project(config)
......@@ -110,4 +110,10 @@ class ActivityGarble:
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
print("done")
if __name__ == "__main__":
#project 根目录
config = {"root" : "../../../../"}
ActivityGarble().activity_garble(config)
\ No newline at end of file
import random
class ClassBuilder:
__used_names = []
__variables = []
__functions = []
def __gen_rand_str(self):
result = ""
while len(result) == 0 or result in self.__used_names:
random_str = ''.join(random.sample(
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", random.randint(6, 10)))
result = "%s%d" % (random_str, random.randint(1, 100))
self.__used_names.append(result)
return result
# 生成变量
def __generate_variable(self):
var_scope = ["public", "private", "protected"]
var_types = ["String", "int", "double", "float"]
var_count = random.randint(3, 15)
for i in range(0, var_count):
code = "%s %s %s = " % (
var_scope[random.randint(0, 2)],
var_types[random.randint(0, 3)],
self.__gen_rand_str()
)
if " String " in code:
code += "\"%s\"" % self.__gen_rand_str()
else:
code += "%d" % random.randint(1, 1000)
code += ";"
self.__variables.append(code)
# 生成方法
def __generate_function(self, model_path):
func_scope = ["public", "private", "protected"]
return_type = ["String", "int", "double", "float"]
fun_content = ""
with open(model_path, "r", encoding="utf-8") as fin:
fun_content = fin.read()
re_type = return_type[random.randint(0, 3)]
fun_content = fun_content\
.replace("${func_scope}", func_scope[random.randint(0, 2)])\
.replace("${return_type}", re_type)\
.replace("${func_name}", self.__gen_rand_str())
# 方法参数
param_names = []
params_code = ""
for i in range(0, random.randint(1, 5)):
parans_name = self.__gen_rand_str()
code = "%s %s" % (
return_type[random.randint(0, 3)],
parans_name
)
params_code += code + ", "
param_names.append(parans_name)
params_code = ("%s*" % params_code).replace(", *", "")
fun_content = fun_content.replace("${params}", params_code)
# 随机引用全局变量
for var_code in self.__variables:
if random.randint(0, 2) % 2 == 0:
param_names.append(var_code.split(" ")[2])
return_value = ""
for name in param_names:
return_value += name + "+"
# 转string
return_value += "\"\""
if re_type in "int":
return_value = "(%s).length()" % return_value
elif re_type in "float":
return_value = "Float.valueOf((%s).length())" % return_value
elif re_type in "double":
return_value = "Double.valueOf((%s).length())" % return_value
return_value = "return %s;" % return_value
log_code = ""
for i in range(0, random.randint(0, 5)):
log_code += "Log.%s(\"%s\");\n" % (
''.join(random.sample("idew", random.randint(1, 1))),
''.join(random.sample(
"ABCDEFGHIJKLMNOPQRSTUVWXYZ", random.randint(5, 15)))
)
fun_content = fun_content.replace(
"${func_content}", log_code + return_value)
self.__functions.append(fun_content)
if len(self.__functions) < random.randint(3, 15):
self.__generate_function(model_path)
# 生成类
def __generate_class(self, model_path):
class_content = ""
with open(model_path, "r", encoding="utf-8") as fin:
class_content = fin.read()
variables = ""
for var_code in self.__variables:
variables += "%s\n" % var_code
functions = ""
for func_code in self.__functions:
functions += "%s\n\n" % func_code
return class_content.replace("${variable}", variables)\
.replace("${function}", functions)
def new_class(self,class_name,pkg_name):
self.__generate_variable()
self.__generate_function("tools/garbel/model/function_model.java")
class_content = self.__generate_class("tools/garbel/model/activity_model.java")
class_content = class_content.replace("${class_name}",class_name)\
.replace("${pkg_name}",pkg_name)
return class_content
# for var_code in self.__variables:
# print(var_code)
# for func_code in self.__functions:
# print(func_code)
if __name__ == "__main__":
ClassBuilder().new_class("test","test")
import random
import os
from tools.garbel.class_builder import ClassBuilder
class ManifestGarble:
__used_names = []
def __gen_rand_str(self):
result = ""
while len(result) == 0 or result in self.__used_names:
random_str = ''.join(random.sample(
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", random.randint(6, 10)))
result = "%s%d" % (random_str, random.randint(101, 200))
self.__used_names.append(result)
return result
#在包中随机创建Activity
def __create_activities(self,path):
activities = []
for root, dirs, files in os.walk(path):
if len(files) > 0:
for i in range(0,random.randint(3,10)):
act_path = "%s/%s.java"%(root,self.__gen_rand_str())
act_name = self.__gen_rand_str()
pkg_name = root.split("main/java/")[1].replace("/",".")
act_content = ClassBuilder().new_class(act_name,pkg_name)
with open(act_path, "w+", encoding="utf-8") as fout:
fout.write(act_content)
activities.append("%s.%s"%(pkg_name,act_name))
return activities
def manifest_garbel(self, config):
self.__create_activities("%s/app/src/main/java"%config["root"])
# self.__create_activities("%s/app/src/main/java"%config["root"])
\ No newline at end of file
import ${pkg_name};
public class ${class_name}{
import android.app.Activity;
import android.util.Log;
public class ${class_name} extends Activity {
${variable}
${function}
......
${func_scope} ${return_type} ${func_name}(${params}){
${func_content}
}
\ No newline at end of file
......@@ -10,11 +10,15 @@ class PackageGarble:
# 随机串(全小写加下划线,避免和activity混淆重复)
def __gen_rand_str(self):
random_str1 = ''.join(random.sample(
"abcdefghijklmnopqrstuvwxyz", random.randint(3, 6)))
random_str2 = ''.join(random.sample(
"abcdefghijklmnopqrstuvwxyz", random.randint(3, 6)))
return "%s_%s"%(random_str1,random_str2)
result = ""
while len(result) == 0 or result in self.used_names:
random_str1 = ''.join(random.sample(
"abcdefghijklmnopqrstuvwxyz", random.randint(3, 6)))
random_str2 = ''.join(random.sample(
"abcdefghijklmnopqrstuvwxyz", random.randint(3, 6)))
result = "%s_%s"%(random_str1,random_str2)
self.used_names.append(result)
return result
# 替换文件内容
def __process_file_content(self, path, file_name):
......@@ -134,5 +138,4 @@ class PackageGarble:
if __name__ == "__main__":
#project 根目录
config = {"root" : "../../../../"}
PackageGarble().pkg_garble(config)
print("done")
\ No newline at end of file
PackageGarble().pkg_garble(config)
\ No newline at end of file
public ${return_type} ${func_name}(${params}){
}
\ No newline at end of file
# # -*-coding:utf-8-*-
# import shutil
# import os
# class Release:
# #初始化脚本
# def init():
# if os.path.exists("%s/script/api_mapping"):
# ./rename_api.py || { echo "rename_api error!"; exit 1; }
# #编译
# def build(self,config):
# print("1、GP包(无权限)")
# print("2、渠道包(有权限)")
# command = int(input("选择打包方式:"))
# os.system("rm -rf %s/resGuardApks"% config['root'])
# os.system("gradlew clean")
# init(){
# cd lib_base/script/garble
# #字符串混淆
# python string_decrypt.py || { echo "string_decrypt error!"; exit 1; }
# #四大组件混淆
# ./rename_project.sh || { echo "rename_project error!"; exit 1; }
# #代码结构混淆
# ./insert.py || { echo "insert_code error!"; exit 1; }
# cd ../../../
# }
# if((${action}=='1'))
# then
# cd lib_base/script
# ./sdk_manager.py 'close' 'NOLOG' || { echo "sdk_manager error!!!!!!!!!!!!!!!"; exit 1; }
# if [ "${contact}" = "true" ];then
# ./sdk_manager.py 'open' 'CONTACT' || { echo "sdk_manager error!!!!!!!!!!!!"; exit 1; }
# elif [ "${contact}" = "false" ];then
# ./sdk_manager.py 'close' 'CONTACT' || { echo "sdk_manager error!!!!!!!!!!!!"; exit 1; }
# fi
# cd ../..
# init
# gradlew resguardAppProductGoogleplayRelease
# elif((${action}=='2'))
# then
# init
# gradlew resguardAppProductWebsiteRelease
# #elif((${action}=='3'))
# #then
# # mv app/src/main/res/drawable-xxhdpi/logo_majia1.png app/src/main/res/drawable-xxhdpi/logo.png
# # mv script/api_mapping_majia1 script/api_mapping
# # LC_CTYPE=C && LANG=C && sed -i "" "s#^app_name=.*#app_name=${majia_name1}#g" gradle.properties
# # init
# # gradlew resguardAppProductGoogleplayRelease
# #
# #elif((${action}=='4'))
# #then
# # mv app/src/main/res/drawable-xxhdpi/logo_majia2.png app/src/main/res/drawable-xxhdpi/logo.png
# # LC_CTYPE=C && LANG=C && sed -i "" "s#^app_name=.*#app_name=${majia_name2}#g" gradle.properties
# # mv script/api_mapping_majia2 script/api_mapping
# # init
# # gradlew resguardAppProductGoogleplayRelease
# #
# #elif((${action}=='5'))
# #then
# # mv app/src/main/res/drawable-xxhdpi/logo_majia3.png app/src/main/res/drawable-xxhdpi/logo.png
# # LC_CTYPE=C && LANG=C && sed -i "" "s#^app_name=.*#app_name=${majia_name3}#g" gradle.properties
# # mv script/api_mapping_majia3 script/api_mapping
# # init
# # gradlew resguardAppProductGoogleplayRelease
# else
# echo "未知的打包方式"
# fi
# gradlew clean
# cd lib_base/script/garble/
# ./reset_name.sh
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