|
|
|
|
|
FAQ List |
|
|
What are the requirements for installing and using
Smokescreen?
Installing and running Smokescreen requires that the Java platform
(including the Swing package) be installed on your computer.
|
|
|
What does bytecode obfuscation mean?
The code within a method is made up of bytecode instructions which are
executed within the JVM. Bytecode obfuscation is used to rearrange or
change the bytecode in ways that make it more difficult to decompile.
This means that the control flow is obscured making it more difficult
for the decompiler output valid java source code. |
|
|
What's a good way to see the effects of control
flow obfuscation
Use Smokescreen to obfuscate the class files for your application (for
a realistic test it is best to use a real application or applet,
instead of a small test program). Now decompile several of the
obfuscated classes using your favourite decompiler. Compare the source
generated by the decompiler to your original source, or source that has
been recreated by the decompiler from unobfuscated classes.
|
|
|
Can I exclude specific symbolic names from the
renaming process?
Yes, any class, method or field name can be preserved during renaming.
This is done when using a directives file, the exclusions are specified
using name exclusion directives for classes, methods or fields.
|
|
|
Does Smokescreen work with jar and zip files?
Yes the source classes may be in jar or zip files or in directories.
The obfuscated classes will be created in corresponding jars, zips or
directories. |
|
|
Can I install Smokescreen from the command line
without using the GUI?
Smokescreen can only be installed using the GUI installer. This means
that the "Swing" classes have to be available for running the
installer. |
|
|
Can I run Smokescreen from the command line
without the GUI?
Yes, once installed Smokescreen can be launched without the GUI. In
this case the directives file is used to specify obfuscation options.
|
|
|
When I run the obfuscated code, I get a
"java.lang.NoSuchMethodError".
This is most likely because some code is referring to the original name
of a method that has now been renamed due to the obfuscation. Any class
that refers to other classes which are being obfuscated must themselves
be obfuscated, otherwise they will still be referring to the the
original unobfuscated names. For example, if class A has references to
class B, you will have to obfuscate both classes. If you were to only
obfuscate class B without including class A in the obfuscation, then
obviously the code in class A would not be able to match up the
references for class B. The alternative is to determine which names in
class B are being referenced by class A, and then exclude them from the
renaming process. |
|
|
Smokescreen reports that it cannot find a
superclass, how do I fix this?
All of the classes in your application that need to be obfuscated will
have inherited from some superclass (such as the "Object" class).
Smokescreen needs to scan these classes in order to obtain method and
field information so that renaming can be done correctly. There are two
ways in which Smokescreen can look for these classes.
The first and simpler way is to use the classloader. If
you are using a directives file or otherwise specifying directives for
obfuscation, then the "use_class_loader_for_superclasses" directives
should be included. If obfuscation is being done using the GUI and
without a directives file then the "Use Class Loader" checkbox in the
"Superclass path selection" should be checked. This panel is accessed
through the "Superclass path" selection of the "File" menu.
The second way is to actually specify exact locations for
finding the classes. If your classes extend from standard JDK classes
then you will need to specify a path to the jar file that contains
these classes. In the j2sdk1.4.0 these classes are located in the
"rt.jar" file, so you would specify a path to this file. If you have
any other "non-standard" superclasses then a path to those must also be
specified. If you are using a directives file or otherwise specifying
directives for obfuscation, then the path to each file should be
specified through a "superclass_path" directive. If obfuscation is
being done using the GUI and without a directives file, then the
superclass paths can be specified in the GUI by selecting the
"Superclass path" option in the "File". This will bring up the
"Superclass path selection" panel into which the paths can be entered.
Note that if the "Use Class Loader" checkbox is checked then the
manually entered paths will be ignored. |
|
|