Proguard 类、成员和参数混淆的自定义命名

有没有一个简单的描述,Proguard中的字典文件应该如何构建?

我已经阅读了 有关 ,但我找不到有关文件本身的任何信息。-?obfuscationdictionary

此外,我想将命名方案更改为更复杂的名称,而不仅仅是,等等。如果可能的话,我想要一系列随机的字符。abparamXparamY

是的,我知道这只是一个视觉差异,可以重塑(重构?)到更易于阅读的东西。不过,只是问...

谢谢


答案 1

字典文件格式非常简单:

  1. 每行一个单词
  2. 忽略空行
  3. 以忽略开头的行#

如果你想创建一个随机字符串的字典,你可以编写一个简单的程序来生成它们并将它们转储到一个文本文件中,或者使用 http://www.random.org/strings 它有一个很好的简单Web界面来创建随机字符串。它每行吐出一个,因此您可以将其输出直接用作字典文件。

下面是一些示例输出(您可以生成任何大小的字符串):

HISPj7KHQ7
Wja3o2vx62
eyd3OXAZgV
DxDJysLV5r
BsUTWEAMAI
R7N8DF4OVS
4q7UsoAgP4
cWbN6pumKk
SJowARcXwM
OyIbF7L6XB

以下是我发现的一个示例:

https://trac.openxdata.org/browser/trunk/j2me/openxdata-mobile/epihandy-lite/proguard/examples/dictionaries/keywords.txt?rev=1156

#
# This obfuscation dictionary contains reserved Java keywords. They can't
# be used in Java source files, but they can be used in compiled class files.
# Note that this hardly improves the obfuscation. Decent decompilers can
# automatically replace reserved keywords, and the effect can fairly simply be
# undone by obfuscating again with simpler names.
# Usage:
#     java -jar proguard.jar ..... -obfuscationdictionary keywords.txt
#

do
if
for
int
new
try
byte
case
char
else
goto
long
this
void
break
catch
class
const
final
float
short
super
throw
while
double
import
native
public
return
static
switch
throws
boolean
default
extends
finally
package
private
abstract
continue
strictfp
volatile
interface
protected
transient
implements
instanceof
synchronized

答案 2

任何文本文件都可以使用。ProGuard 使用文件中的所有有效标识符。它忽略以“#”开头的行。ProGuard 发行版中的目录示例/字典包含一些示例(包括 ulmangt 粘贴的示例)。


推荐