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
cf9231dc
Commit
cf9231dc
authored
Oct 22, 2019
by
sikang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update script
parent
efe8bd97
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
132 additions
and
116 deletions
+132
-116
python/tools/garbel/package_garble.py
+132
-116
No files found.
python/tools/garbel/package_garble.py
View file @
cf9231dc
# -*-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"
)
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