Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
L
lib_base
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
sikang
lib_base
Commits
b6b6e2ad
Commit
b6b6e2ad
authored
Oct 22, 2019
by
sikang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
cf9231dc
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
135 additions
and
131 deletions
+135
-131
python/main.py
+5
-0
python/tools/garbel/package_garble.py
+130
-131
No files found.
python/main.py
View file @
b6b6e2ad
...
@@ -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
)
python/tools/garbel/package_garble.py
View file @
b6b6e2ad
# -*-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"
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment