FAQs/Known Issues

Smokescreen Home
Revision history
User Guide
Installation Guide
Obfuscation notes
Directives file
Incremental obfuscation
Build tool integration
License and Download
Purchase
Faqs/Known issues
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. 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. The superclass paths can be specified in the GUI by selecting the "Superclass path" option. This will bring up a text window into which the paths can be entered. You can also specify that Smokescreen look for superclasses on the classpath by checking the "Use Class Loader" checkbox which shows up with the text window. Checking this box will cause the manually entered paths to be ignored.