Compare commits
64 Commits
master
...
branch_1_1
Author | SHA1 | Date |
---|---|---|
hoenicke | 12e82bea53 | 15 years ago |
hoenicke | e10bfec001 | 18 years ago |
hoenicke | 240de78e81 | 18 years ago |
hoenicke | fca129b90a | 19 years ago |
hoenicke | 26933573bb | 19 years ago |
hoenicke | 190eefee2c | 19 years ago |
hoenicke | 90aa079d11 | 19 years ago |
hoenicke | aae07e1491 | 20 years ago |
hoenicke | 6604df3248 | 22 years ago |
hoenicke | 97b5c5bb0f | 22 years ago |
hoenicke | f38c62b1cd | 23 years ago |
hoenicke | d1f22a62b4 | 23 years ago |
hoenicke | c761c52679 | 23 years ago |
hoenicke | a12e86ea8f | 23 years ago |
hoenicke | 111d5046ea | 23 years ago |
hoenicke | a0caad2c2c | 23 years ago |
hoenicke | 910456c0b0 | 23 years ago |
hoenicke | 686154fca2 | 23 years ago |
hoenicke | 068e85a76d | 23 years ago |
hoenicke | ea5e834abe | 24 years ago |
hoenicke | 03497ae1a2 | 24 years ago |
hoenicke | c79f6122f5 | 24 years ago |
hoenicke | 805ab8613d | 24 years ago |
hoenicke | 15e7ec9dc0 | 24 years ago |
hoenicke | a018796a04 | 24 years ago |
hoenicke | aca789beed | 24 years ago |
hoenicke | a65fd35ceb | 24 years ago |
hoenicke | fa005e09ee | 24 years ago |
hoenicke | dd5112302f | 24 years ago |
hoenicke | fbcfb06d90 | 24 years ago |
hoenicke | 5a4dbe0b02 | 24 years ago |
hoenicke | af086625d8 | 24 years ago |
hoenicke | 98bf83e95d | 24 years ago |
hoenicke | 7fca8d09e9 | 24 years ago |
hoenicke | 0246d1e5c3 | 24 years ago |
hoenicke | 23adc4ce78 | 24 years ago |
hoenicke | 736e9595d2 | 24 years ago |
hoenicke | d093988656 | 24 years ago |
hoenicke | 95b75fa705 | 24 years ago |
hoenicke | b355dc3395 | 24 years ago |
hoenicke | 5e972183a9 | 24 years ago |
hoenicke | c5fae0c7ee | 24 years ago |
hoenicke | f1cee9fca4 | 24 years ago |
hoenicke | dbacfa1c7e | 24 years ago |
hoenicke | 1f87c3817c | 24 years ago |
hoenicke | 4aebd22542 | 24 years ago |
hoenicke | 344faa9265 | 24 years ago |
hoenicke | d0a70c3626 | 24 years ago |
hoenicke | cb12d3ead2 | 24 years ago |
hoenicke | 816bca302d | 24 years ago |
hoenicke | 0785a7cd21 | 24 years ago |
hoenicke | 4888c5f98c | 24 years ago |
hoenicke | 3506e82033 | 24 years ago |
hoenicke | fb5d918702 | 24 years ago |
hoenicke | 7eb1d3f8b5 | 24 years ago |
hoenicke | 7548f53a75 | 24 years ago |
hoenicke | ef0a0f214b | 24 years ago |
hoenicke | 0250b87fe1 | 24 years ago |
hoenicke | f26d8a21e6 | 24 years ago |
hoenicke | a56a7f0e98 | 24 years ago |
hoenicke | 075db18fcf | 25 years ago |
hoenicke | 356a8c6a61 | 25 years ago |
hoenicke | f0392e9371 | 25 years ago |
(no author) | 6466af0fea | 25 years ago |
@ -1,13 +0,0 @@ |
||||
# The "checkoutlist" file is used to support additional version controlled |
||||
# administrative files in $CVSROOT/CVSROOT, such as template files. |
||||
# |
||||
# The first entry on a line is a filename which will be checked out from |
||||
# the corresponding RCS file in the $CVSROOT/CVSROOT directory. |
||||
# The remainder of the line is an error message to use if the file cannot |
||||
# be checked out. |
||||
# |
||||
# File format: |
||||
# |
||||
# [<whitespace>]<filename><whitespace><error message><end-of-line> |
||||
# |
||||
# comment lines begin with '#' |
@ -1,15 +0,0 @@ |
||||
# The "commitinfo" file is used to control pre-commit checks. |
||||
# The filter on the right is invoked with the repository and a list |
||||
# of files to check. A non-zero exit of the filter program will |
||||
# cause the commit to be aborted. |
||||
# |
||||
# The first entry on a line is a regular expression which is tested |
||||
# against the directory that the change is being committed to, relative |
||||
# to the $CVSROOT. For the first match that is found, then the remainder |
||||
# of the line is the name of the filter to run. |
||||
# |
||||
# If the repository name does not match any of the regular expressions in this |
||||
# file, the "DEFAULT" line is used, if it is specified. |
||||
# |
||||
# If the name "ALL" appears as a regular expression it is always used |
||||
# in addition to the first matching regex or "DEFAULT". |
@ -1,11 +0,0 @@ |
||||
# Set this to "no" if pserver shouldn't check system users/passwords |
||||
#SystemAuth=no |
||||
|
||||
# Set `PreservePermissions' to `yes' to save file status information |
||||
# in the repository. |
||||
#PreservePermissions=no |
||||
|
||||
# Set `TopLevelAdmin' to `yes' to create a CVS directory at the top |
||||
# level of the new working directory when using the `cvs checkout' |
||||
# command. |
||||
#TopLevelAdmin=no |
@ -1 +0,0 @@ |
||||
*.class |
@ -1,23 +0,0 @@ |
||||
# This file affects handling of files based on their names. |
||||
# |
||||
# The -t/-f options allow one to treat directories of files |
||||
# as a single file, or to transform a file in other ways on |
||||
# its way in and out of CVS. |
||||
# |
||||
# The -m option specifies whether CVS attempts to merge files. |
||||
# |
||||
# The -k option specifies keyword expansion (e.g. -kb for binary). |
||||
# |
||||
# Format of wrapper file ($CVSROOT/CVSROOT/cvswrappers or .cvswrappers) |
||||
# |
||||
# wildcard [option value][option value]... |
||||
# |
||||
# where option is one of |
||||
# -f from cvs filter value: path to filter |
||||
# -t to cvs filter value: path to filter |
||||
# -m update methodology value: MERGE or COPY |
||||
# -k expansion mode value: b, o, kkv, &c |
||||
# |
||||
# and value is a single-quote delimited value. |
||||
# For example: |
||||
#*.gif -k 'b' |
@ -1,21 +0,0 @@ |
||||
# The "editinfo" file is used to allow verification of logging |
||||
# information. It works best when a template (as specified in the |
||||
# rcsinfo file) is provided for the logging procedure. Given a |
||||
# template with locations for, a bug-id number, a list of people who |
||||
# reviewed the code before it can be checked in, and an external |
||||
# process to catalog the differences that were code reviewed, the |
||||
# following test can be applied to the code: |
||||
# |
||||
# Making sure that the entered bug-id number is correct. |
||||
# Validating that the code that was reviewed is indeed the code being |
||||
# checked in (using the bug-id number or a seperate review |
||||
# number to identify this particular code set.). |
||||
# |
||||
# If any of the above test failed, then the commit would be aborted. |
||||
# |
||||
# Actions such as mailing a copy of the report to each reviewer are |
||||
# better handled by an entry in the loginfo file. |
||||
# |
||||
# One thing that should be noted is the the ALL keyword is not |
||||
# supported. There can be only one entry that matches a given |
||||
# repository. |
@ -1,26 +0,0 @@ |
||||
# The "loginfo" file controls where "cvs commit" log information |
||||
# is sent. The first entry on a line is a regular expression which must match |
||||
# the directory that the change is being made to, relative to the |
||||
# $CVSROOT. If a match is found, then the remainder of the line is a filter |
||||
# program that should expect log information on its standard input. |
||||
# |
||||
# If the repository name does not match any of the regular expressions in this |
||||
# file, the "DEFAULT" line is used, if it is specified. |
||||
# |
||||
# If the name ALL appears as a regular expression it is always used |
||||
# in addition to the first matching regex or DEFAULT. |
||||
# |
||||
# You may specify a format string as part of the |
||||
# filter. The string is composed of a `%' followed |
||||
# by a single format character, or followed by a set of format |
||||
# characters surrounded by `{' and `}' as separators. The format |
||||
# characters are: |
||||
# |
||||
# s = file name |
||||
# V = old version number (pre-checkin) |
||||
# v = new version number (post-checkin) |
||||
# |
||||
# For example: |
||||
#DEFAULT (echo ""; id; echo %s; date; cat) >> $CVSROOT/CVSROOT/commitlog |
||||
# or |
||||
#DEFAULT (echo ""; id; echo %{sVv}; date; cat) >> $CVSROOT/CVSROOT/commitlog |
@ -1 +0,0 @@ |
||||
jode jode |
@ -1,12 +0,0 @@ |
||||
# The "notify" file controls where notifications from watches set by |
||||
# "cvs watch add" or "cvs edit" are sent. The first entry on a line is |
||||
# a regular expression which is tested against the directory that the |
||||
# change is being made to, relative to the $CVSROOT. If it matches, |
||||
# then the remainder of the line is a filter program that should contain |
||||
# one occurrence of %s for the user to notify, and information on its |
||||
# standard input. |
||||
# |
||||
# "ALL" or "DEFAULT" can be used in place of the regular expression. |
||||
# |
||||
# For example: |
||||
#ALL mail %s -s "CVS notification" |
@ -1,13 +0,0 @@ |
||||
# The "rcsinfo" file is used to control templates with which the editor |
||||
# is invoked on commit and import. |
||||
# |
||||
# The first entry on a line is a regular expression which is tested |
||||
# against the directory that the change is being made to, relative to the |
||||
# $CVSROOT. For the first match that is found, then the remainder of the |
||||
# line is the name of the file that contains the template. |
||||
# |
||||
# If the repository name does not match any of the regular expressions in this |
||||
# file, the "DEFAULT" line is used, if it is specified. |
||||
# |
||||
# If the name "ALL" appears as a regular expression it is always used |
||||
# in addition to the first matching regex or "DEFAULT". |
@ -1,20 +0,0 @@ |
||||
# The "taginfo" file is used to control pre-tag checks. |
||||
# The filter on the right is invoked with the following arguments: |
||||
# |
||||
# $1 -- tagname |
||||
# $2 -- operation "add" for tag, "mov" for tag -F, and "del" for tag -d |
||||
# $3 -- repository |
||||
# $4-> file revision [file revision ...] |
||||
# |
||||
# A non-zero exit of the filter program will cause the tag to be aborted. |
||||
# |
||||
# The first entry on a line is a regular expression which is tested |
||||
# against the directory that the change is being committed to, relative |
||||
# to the $CVSROOT. For the first match that is found, then the remainder |
||||
# of the line is the name of the filter to run. |
||||
# |
||||
# If the repository name does not match any of the regular expressions in this |
||||
# file, the "DEFAULT" line is used, if it is specified. |
||||
# |
||||
# If the name "ALL" appears as a regular expression it is always used |
||||
# in addition to the first matching regex or "DEFAULT". |
@ -1,21 +0,0 @@ |
||||
# The "verifymsg" file is used to allow verification of logging |
||||
# information. It works best when a template (as specified in the |
||||
# rcsinfo file) is provided for the logging procedure. Given a |
||||
# template with locations for, a bug-id number, a list of people who |
||||
# reviewed the code before it can be checked in, and an external |
||||
# process to catalog the differences that were code reviewed, the |
||||
# following test can be applied to the code: |
||||
# |
||||
# Making sure that the entered bug-id number is correct. |
||||
# Validating that the code that was reviewed is indeed the code being |
||||
# checked in (using the bug-id number or a seperate review |
||||
# number to identify this particular code set.). |
||||
# |
||||
# If any of the above test failed, then the commit would be aborted. |
||||
# |
||||
# Actions such as mailing a copy of the report to each reviewer are |
||||
# better handled by an entry in the loginfo file. |
||||
# |
||||
# One thing that should be noted is the the ALL keyword is not |
||||
# supported. There can be only one entry that matches a given |
||||
# repository. |
@ -0,0 +1,525 @@ |
||||
2007-07-31 Jochen Hoenicke <hoenicke@gmail.com> |
||||
|
||||
* jode/bytecode/ClassInfo.java.in: |
||||
(readAttribute): Never read in known attributes as unknown |
||||
attributes. This could happen before when class was first read with |
||||
known info and then again with all info. |
||||
* jode/bytecode/MethodInfo.java: (readAttribute): Likewise. |
||||
* jode/bytecode/FieldInfo.java: (readAttribute): Likewise. |
||||
* jode/bytecode/BytecodeInfo.java.in: (readAttribute): Likewise. |
||||
|
||||
* jode/obfuscator/ClassIdentifier.java: (doTransformation): Remove |
||||
all unknown attributes. They may contain references to |
||||
nonexisting constant pool entries. |
||||
|
||||
* jode/obfuscator/PackageIdentifier.java: (loadClass): Fix a |
||||
compile time bug in the last patch. |
||||
|
||||
|
||||
2005-09-13 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
Check for NullPointer in SyntheticAnalyzer. Based on |
||||
patch suggessted by Peter Klauser (klp at users.sf.net). |
||||
|
||||
* jode/jvm/SyntheticAnalyzer.java.in: |
||||
(checkStaticAccess): Check refField for null pointer. |
||||
(checkAccess): Likewise. |
||||
|
||||
2005-09-13 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
Added patch from Peter Klauser (klp at users.sf.net), to support |
||||
packages with same name as classes in the obfuscator. |
||||
|
||||
* jode/obfuscator/PackageIdentifier.java.in |
||||
(loadedPackages): New field, to store packages in separate map. |
||||
(getIdentifier): Renamed to... |
||||
(getClassIdentifier): ...this (and return only ClassIdentifier). |
||||
(setLoadOnDemand): Use loadedPackages. |
||||
(loadClass): Likewise. |
||||
(loadMatchingClass): Likewise. |
||||
(readTable): Likewise. |
||||
(getChilds): Likewise. |
||||
(contains): Likewise. |
||||
|
||||
2003-06-11 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
Added patch from Thomas Oldervoll, to continue decompiling |
||||
after errors. |
||||
|
||||
* jode/decompiler/Main.java (decompileClass): Handle all |
||||
exceptions and add names of failed classes to a vector. |
||||
(printSummary): New function. |
||||
(main): call printSummary. |
||||
|
||||
2002-11-24 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/bytecode/ClassInfo.java.in (deprecatedFlag): Added flag |
||||
for deprecated classes. Stuart Ballard noticed that this was |
||||
missing. |
||||
(readAttribute): Read deprecated attribute. |
||||
(prepareWriting): Prepare deprecated attribute. |
||||
(writeKnownAttributes): Write deprecated attribute. |
||||
(isDeprected): New function. |
||||
(setDeprecated): Likewise. |
||||
|
||||
2002-06-11 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* configure.in: Set version number to 1.1.2. |
||||
|
||||
* jode/bytecode/BytecodeInfo.java.in (readAttribute): Fix the |
||||
exception handlers that javac 1.4 produces: I simply shorten |
||||
the start/end interval, so that the catcher is not in the end |
||||
interval. |
||||
|
||||
2002-02-25 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/bytecode/ClassInfo.java.in (read): Don't check for a |
||||
maximum version anymore. Sun changes it with every release without |
||||
changing the bytecode format. |
||||
|
||||
2002-02-08 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/obfuscator/ClassIdentifier.java.in (transformInnerClasses): |
||||
Bug fix: Added missing checks for STRIP_UNREACH. |
||||
|
||||
* jode/obfuscator/MethodIdentifier.java.in (doTransformation): |
||||
Don't run analyzer on unreachable methods. Previously the |
||||
ConstantAnalyzer assumed that the instructions are not reachable |
||||
and removed them all leading to illegal bytecode. |
||||
|
||||
2002-02-01 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/flow/CreateAssignExpression.java (createAssignOp): |
||||
Bug fix: Check whether store is already a op-assign and break out. |
||||
* jode/expr/StoreInstruction.java (isOpAssign): New function to |
||||
check whether this is an op-assign. |
||||
|
||||
2002-01-16 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
Fixes by anonymous for SerializePreserver: |
||||
* jode/obfuscator/ClassIdentifier.java.in (isSerializable): |
||||
The Serializable interface lives in java.io not in java.lang. |
||||
* jode/obfuscator/modules/SerializePreserver.java.in: |
||||
This class needs to implement OptionHandler. |
||||
|
||||
2001-11-29 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/obfuscator/modules/MultiIdentifierMatcher.java.in |
||||
(getNextComponent): Fixed a (noncritical) bug, submitted |
||||
by Sergio (koker at users.sf.net). |
||||
|
||||
2001-08-12 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* configure.in: Set version number to 1.1.1. |
||||
|
||||
2001-08-12 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/obfuscator/Identifier.java.in (writeTable): New boolean |
||||
parameter specifying if reversed or not. |
||||
* jode/obfuscator/ClassBundle.java.in: Renamed the table file |
||||
variables, added outTableFile. |
||||
(setOption): Support outtable, intable and outrevtable. |
||||
Support verbose. |
||||
(writeTable): Writes table unreversed. |
||||
(writeRevTable): New method, Writes table reversed. |
||||
* jode/obfuscator/Main.java.in: (rand): New variable. |
||||
* jode/obfuscator/PackageIdentifier.java.in: Use Main.rand instead |
||||
of definining its own random. |
||||
* jode/obfuscator/ClassIdentifier.java.in: likewise. |
||||
|
||||
* jode/flow/FlowBlock.java.in: |
||||
(checkConsistent): Allow lastModified in a finally block. |
||||
|
||||
* jode/flow/TransformExceptionHandlers.java.in: Reworked exception |
||||
handlers again. This time checked with javac 1.3, javac 1.1 and |
||||
jikes. |
||||
(checkTryCatchOrder): New method that was previously part of |
||||
analyze. |
||||
(analyze): Use checkTryCatchOrder. Don't merge try and catch flow |
||||
blocks anymore, leave it to the analyzeXXX methods. |
||||
(mergeTryCatch): New method. |
||||
(analyzeCatchBlock): Get catchFlow as parameter. Call |
||||
mergeTryCatch. |
||||
(transformSubroutine): Handle POP-only subroutines. |
||||
(removeJSR): Don't do special case for catchBlock any more. This |
||||
is because catchFlow isn't yet merged when this method is called. |
||||
(checkAndRemoveJSR): Likewise. |
||||
(checkAndRemoveMonitorExit): Likewise. Merge subroutine only if |
||||
we are the only predecessor. |
||||
(analyzeSynchronized): Get catchFlow as parameter. Call |
||||
mergeTryCatch. |
||||
(mergeFinallyBlocks): New method, calls mergeTryCatch and does the |
||||
common part of mergeFinally and mergeSpecialFinally. |
||||
(analyzeFinally): Simplified, after checking and removing JSR, it |
||||
does immediately analyze and transform subroutine to get the |
||||
finallyBlock. Then it throws away the catchFlow and calls |
||||
mergeFinallyBlocks. |
||||
(analyzeSpecialFinally): Simplified, after checking it only handles |
||||
the jumps in the try part and then call mergeFinallyBlocks. |
||||
|
||||
2001-08-10 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* configure.in: Changed bash syntax to more compatible (but |
||||
slower) syntax. Fixes bug #448909. |
||||
|
||||
2001-08-09 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/expr/InvokeOperator.java.in (dumpExpression): Fixed the |
||||
check for null outerExpr. |
||||
|
||||
2001-07-27 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/obfuscator/Main.java.in (stripping): Initialize to 0 which |
||||
means strip nothing. This is necessary because there is no way |
||||
to turn off stripping. |
||||
|
||||
2001-07-11 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/flow/CatchBlock.java.in (combineLocal): Added more checks |
||||
if LocalStoreOperator is of the right form. |
||||
|
||||
2001-07-10 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/obfuscator/modules/SimpleAnalyzer.java.in: |
||||
Ported fix from ConstantAnalyzer: |
||||
(canonizeReference): for interfaces call canonizeIfaceReference. |
||||
(canonizeIfaceReference): new method. |
||||
* jode/obfuscator/modules/ConstantAnalyzer.java.in: |
||||
made sub class of SimpleAnalyzer. |
||||
(canonizeReference): Removed, since its inherited. |
||||
(canonizeIfaceReference): dito. |
||||
|
||||
2001-07-08 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/bytecode/BytecodeInfo.java.in (calculateMaxStack): Handle special case for empty method. Previous code would just crash. |
||||
|
||||
2001-06-15 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/jvm/SyntheticAnalyzer.java.in: |
||||
(checkGetClass): Ignore nop opcodes. |
||||
(checkStaticAccess): Likewise. |
||||
(checkAccess): Likewise. |
||||
(checkConstructorAccess): Likewise. |
||||
|
||||
* jode/flow/TransformConstructors.java (Constructor): Ignore |
||||
OuterValues for static constructor. |
||||
|
||||
* jode/expr/NewArrayOperator.java (dumpExpression): Added |
||||
a missing breakOp. |
||||
* jode/expr/CompareToIntOperator.java (dumpExpression): Likewise. |
||||
|
||||
2001-06-01 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/obfuscator/modules/ConstantAnalyzer.java.in: |
||||
(analyzeCode): set field listener of RuntimeEnvironment. |
||||
(replaceWith): Fixed the invoke_xxx case. |
||||
|
||||
* jode/obfuscator/ConstantRuntimeEnvironment.java.in: |
||||
(getField): add current field listener to field if constant value |
||||
was used. |
||||
(currentFieldAnalyzer): New field. |
||||
(setFieldAnalyzer): New method. |
||||
|
||||
2001-05-27 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* configure.in: Set version to 1.1. |
||||
|
||||
* jode/decompiler/Main.java (main): Also use bootclasspath if no |
||||
classpath given. |
||||
* jode/swingui/Main.java (main): Likewise. |
||||
|
||||
* jode/decompiler/MethodAnalyzer.java.in (skipWriting): Don't skip |
||||
empty constructor that have a throws clause. |
||||
|
||||
* configure.in: Determine whether jdk1.1 resp. jdk1.2. Call jcpp |
||||
in config.status. |
||||
|
||||
* jode/expr/Expression.java.in (makeInitializer): Now takes the |
||||
type of the initialization. Changed all callers. |
||||
* jode/expr/ConstantArrayOperator.java (makeInitializer): Check |
||||
that type is our array type, otherwise we can't omit new Array[]. |
||||
|
||||
* jode/decompiler/LocalInfo.java (markFinal): Don't check that |
||||
only one write is present. If two writes are in an then and an |
||||
else branch of an if, the local can still be final. |
||||
|
||||
* jode/type/ArrayType.java (getSubType): Handle array of integer |
||||
types correctly: byte[] is something completely different than |
||||
int[]. |
||||
(getSuperType): Likewise. |
||||
|
||||
* jode/expr/FieldOperator.java.in (getFieldInfo): New function. |
||||
(needsCast): A cast is also needed if the field is private or |
||||
package scope and the current type can't access the field. |
||||
|
||||
* jode/expr/InvokeOperator.java.in (getMethodInfo): New function. |
||||
(needsCast): A cast is also needed if the method is private or |
||||
package scope and the current type can't access the method. |
||||
|
||||
* jode/expr/ArrayStoreOperator.java (dumpExpression): Check if a |
||||
cast of the array expression is needed. |
||||
|
||||
* jode/expr/TransformConstructors.java |
||||
(transformFieldInitializers): Don't allow moving method invocations |
||||
that throw a checked exception. |
||||
|
||||
* jode/bytecode/MethodInfo.java (readAttribute): Read Exceptions |
||||
attribute even when not all attributes should be read. They are |
||||
needed by TransformConstructors, see above. |
||||
|
||||
2001-05-26 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/decompiler/TabbedPrintWriter.java (saveOps): Don't allow |
||||
line breaks in not completed expressions since implicit parentheses |
||||
would destroy the syntax. No need to put line break option on stack. |
||||
(restoreOps): Adapted Stack format. |
||||
|
||||
* jode/decompiler/ClassAnalyzer.java.in (dumpDeclaration): Moved |
||||
Code from dumpSource here. Don't put a line break after closing |
||||
brace. |
||||
(dumpSource): call dumpDeclaration and add a line break. |
||||
(dumpBlock): Moved dropInfo(ATTRIBS) here. |
||||
|
||||
* jode/decompiler/ClassAnalyzer.java.in (STRICTFP): New Constant. |
||||
(isStrictFP): New function. |
||||
(initialize): Set strictfp modifier if a constructor has it set. |
||||
(dumpSource): Handle strictfp modifier. |
||||
|
||||
* jode/decompiler/MethodAnalyzer.java.in (STRICTFP): New Constant. |
||||
(isStrictFP): New function. |
||||
(dumpSource): Handle strictfp modifier. |
||||
|
||||
* jode/jvm/SyntheticAnalyzer.java.in (checkAccess): Check for a |
||||
special putfield access, where the set value is returned. Allow |
||||
the modifier of field/method to be protected and the class to be |
||||
a superclass. |
||||
(checkStaticAccess): Likewise. |
||||
(ACCESSDUPPUTFIELD): New Constant. |
||||
(ACCESSDUPPUTSTATIC): New Constant. |
||||
|
||||
* jode/expr/InvokeOperator.java.in (simplifyAccess): Handle new |
||||
synthetics. |
||||
|
||||
* jode/flow/SpecialBlock.java (removePop): Remove pop also for |
||||
non void store instructions. |
||||
|
||||
* jode/decompiler/MethodAnalyzer.java.in (skipWriting): Also skip |
||||
the new synthetics. |
||||
|
||||
* jode/decompiler/Main.java (main): Call System.exit() after |
||||
everything was compiled. |
||||
|
||||
* jode/flow/TransformExceptionHandlers.java.in (removeJSR): |
||||
Renamed back from removeBadJSR (see patch from 2001-02-04). The |
||||
checkAndRemove* functions mustn't change the successors while they |
||||
iterate over them. Instead of removing good jsr they mark them as |
||||
good and removeJSR will finally remove them. |
||||
(checkAndRemoveJSR): See above. |
||||
(checkAndRemoveMonitorExit): See above. |
||||
|
||||
* jode/flow/JsrBlock.java (good): New variable, see above. |
||||
(setGood): New method. |
||||
(isGood): New method. |
||||
|
||||
2001-05-08 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/jvm/CodeVerifier.java.in (doVerify): Don't check for |
||||
uninitialized objects in local or stack slots on backwards jump or |
||||
exception blocks. Sun's jdk also doesn't check it, and I never |
||||
understood why it is necessary. But see JVM Spec 4.9.4. |
||||
|
||||
2001-05-02 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/obfuscator/modules/ConstantAnalyzer.java.in (handleOpcode): |
||||
Added divide by zero checks for opc_irem and opc_lrem. |
||||
|
||||
2001-04-11 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/type/ClassInterfacesType.java (keywords): Reworked keyword |
||||
list. |
||||
|
||||
* jode/decompiler/OuterValues.java (implicitOuterClass): New field. |
||||
(isImplicitOuterClass): new Method. |
||||
(setImplicitOuterClass): new Method. |
||||
|
||||
* jode/flow/TransformConstructors.java (checkAnonymousConstructor): |
||||
Check for implicitOuterClass, a new javac 1.3 construct. |
||||
|
||||
* jode/expr/FieldOperator.java.in (dumpSource): Removed this |
||||
simplification nonesense. Now Outer.this is never printed as |
||||
this. |
||||
|
||||
* jode/expr/InvokeOperator.java.in (dumpSource): Removed this |
||||
simplification nonesense. Now Outer.this is never printed as |
||||
this. |
||||
Handle implicitOuterClass. |
||||
|
||||
2001-04-10 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/decompiler/Main.java (usage): Reworked usage message. |
||||
|
||||
2001-04-09 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/bytecode/SearchPath.java: Bug fixes from Joe Bronkema: |
||||
(exists): Don't replace '/' with fileSeparator in original |
||||
filename; make a copy instead. |
||||
(getFile): likewise. |
||||
(isDirectory): likewise. |
||||
(listFiles): Reset fileNr when a new directory is read. |
||||
|
||||
2001-02-28 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* acinclude.m4 (JODE_CHECK_CLASS): Changed "test -e" to "-f" since |
||||
-e is not supported on all architectures (Solaris) and -f is more |
||||
correct anyway. |
||||
Reported by Erik Modén. |
||||
|
||||
2001-02-27 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/swingui/Main.java.in (AreaWriter): Convert all kinds of |
||||
line breaks (CR+LF, CR, LF) to a LF character, which a JTextArea |
||||
understands. |
||||
|
||||
2001-02-08 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/expr/StoreInstruction.java (dumpExpression): Java doesn't |
||||
allow parenthesis around left hand side, so use NO_PAREN and don't |
||||
call lhs.dumpExpression() with priority. |
||||
* jode/expr/PrePostFixOperator.java (dumpExpression): likewise. |
||||
* jode/expr/IIncOperator.java (dumpExpression): likewise. |
||||
* jode/flow/TransformConstructors.java (jikesAnonInner): Removed, |
||||
since it wasn't used: This information is stored in OuterValues |
||||
now. |
||||
* jode/decompiler/LocalInfo.java (isConstant): Always return true |
||||
so that inner classes that access final locals work, even if we |
||||
can't decide that the local can be final. |
||||
|
||||
2001-02-05 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/expr/InvokeOperator.java.in (Environment.invokeMethod): |
||||
Fixed the call to ClassInfo.forName: it expects a class name, while |
||||
ref.getClazz() gives a type signature. |
||||
* jode/flow/TransformExceptionHandlers.java.in: |
||||
(checkAndRemoveJSR): Only invoke removeBadJSR, if there are |
||||
successors left. |
||||
(checkAndRemoveMonitorExit): likewise. |
||||
|
||||
2001-02-04 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/expr/IfThenElseOperator.java (simplify): Allow in the class$ |
||||
simplification the then and else part to be swapped. |
||||
* jode/bytecode/ClassInfo.java.in (read): Accept class version |
||||
1.3. |
||||
* jode/type/ClassInterfacesType.java (keywords): Added the package |
||||
and import keywords. |
||||
* jode/flow/TransformExceptionHandlers.java.in: |
||||
(getPredecessor): New function. |
||||
(getMonitorExitSlot): New function. |
||||
(skipFinExitChain): New function. |
||||
(removeJSR): Replaced by ... |
||||
(removeBadJSR): ... this. |
||||
(checkAndRemoveJSR): Use the new functions. Much simpler and |
||||
handles nested synchronized blocks. It now traces the whole JSR |
||||
and monitorexit chain before a jump to the first entry via |
||||
skipFinExitChain, then checks and remove the first JSR |
||||
resp. monitorexit. JSR jumps are simply ignored now. |
||||
(checkAndRemoveMonitorExit): likewise. |
||||
* jode/flow/StructuredBlock.java.in (prependBlock): New function. |
||||
* jode/flow/CatchBlock.java.in (makeDeclaration): Generate name |
||||
of dummyLocal, since nobody else will generate it. |
||||
|
||||
2001-02-03 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/bytecode/BytecodeInfo.java.in (read): Remove bogus |
||||
exceptionHandlers, whose catchers just throw the exception again. |
||||
This kind of entries are inserted by an obfuscator and would break |
||||
JODE. |
||||
* jode/util/UnifyHash.java.in (iterateHashCode): Call cleanUp, |
||||
to clean unneeded references. |
||||
* jode/flow/TransformConstructors.java (transformOneField): |
||||
Changed to private. Take field number as parameter. Check that |
||||
expression doesn't contain a FieldOperator for a later field of |
||||
the same class or a PutFieldOperator. Changed all callers. |
||||
|
||||
2001-02-01 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/jvm/CodeVerifier.java.in (Type.mergeType): If array elem |
||||
types can't be merged, return tObject as common super type. |
||||
* jode/type/ArrayType.java (getGeneralizedType): If array elem |
||||
type can't be intersected, return tObject as common super type. |
||||
* jode/flow/TransformExceptionHandlers.java.in: Merged patch from |
||||
the 1.2 tree to support javac 1.3 synchronized blocks. Doesn't |
||||
handle nested synchronized blocks yet. |
||||
* jode/expr/Expression.java.in (dumpExpression): Show runtime |
||||
exception when it occurs. |
||||
|
||||
2001-01-31 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/expr/Expression.java.in (updateParentTypes): Call setType, |
||||
instead of merging the types. Other childs want to know about the |
||||
type change as well. |
||||
* jode/decompiler/LocalInfo.java (combineWith): Reorganized a bit, |
||||
but no changes. |
||||
* jode/expr/InvokeOperator.java.in (dumpExpression): Always print |
||||
the ThisOperator if a field is from a parent class of an outer |
||||
class is used. And always qualify the this operator if not |
||||
innermost. |
||||
|
||||
2001-01-30 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/jvm/SyntheticAnalyzer.java.in (checkConstructorAccess): |
||||
Allow the special unifyParam to be the last parameter. |
||||
|
||||
2001-01-30 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/decompiler/TabbedPrintWriter.java: Better gnu style handling: |
||||
(openBraceClass) (closeBraceClass) |
||||
(openBraceNoIndent) (closeBraceNoIndent): new functions. |
||||
(closeBraceNoSpace): Removed. |
||||
* jode/decompiler/Options.java (GNU_SPACING): new constant. |
||||
(GNU_STYLE): changed to include GNU_SPACING. |
||||
* jode/decompiler/ClassAnalyzer.java.in (dumpSource): Use |
||||
open/closeBraceClass. |
||||
* jode/decompiler/MethodAnalyzer.java.in (dumpSource): Use |
||||
open/closeBraceNoIndent. Insert a space for GNU_SPACING. |
||||
* jode/decompiler/InvokeOperator.java.in (dumpExpression): Insert |
||||
a space for GNU_SPACING, use open/closeBraceClass for inner |
||||
classes. |
||||
* jode/decompiler/UnaryOperator.java (dumpExpression): Insert |
||||
a space for GNU_SPACING. |
||||
|
||||
2001-01-30 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
Added pascal style from Rolf Howarth <rolf@squarebox.co.uk> |
||||
* jode/decompiler/Options.java (PASCAL_STYLE): new constant. |
||||
(BRACE_FLUSH_LEFT): dito. |
||||
* jode/decompiler/Decompiler.java (setOption): detect pascal option. |
||||
* jode/decompiler/Main.java (main): dito. |
||||
* jode/decompiler/TabbedPrintWriter.java (openBrace, |
||||
openBraceContinue, closeBrace, closeBraceNoSpace, |
||||
closeBraceContinue): handle flush left. |
||||
|
||||
2001-01-30 Jochen Hoenicke <jochen@gnu.org> |
||||
|
||||
* jode/type/NullType.java (intersection): Removed, since the |
||||
version in ReferenceType is more correct. Before |
||||
tNull.isOfType(tRange(X,tNull)) returned false, which lead to |
||||
incorrect behaviour in InvokeOperator.needsCast. |
||||
* jode/decompiler/FieldAnalyzer.java.in (dumpSource): Removed the |
||||
"= null" hack for final fields; it was not correct, since the |
||||
field could be initialized in a constructor. |
||||
* jode/decompiler/TabbedPrintWriter.java (BreakPoint.endOp): |
||||
Simplified the code, copy options always from child. |
||||
* jode/jvm/SyntheticAnalyzer.java.in (unifyParam): new field. |
||||
(checkConstructorAccess): Allow the special Parameter, whose |
||||
purpose is to distinguish the wrapper from the real constructor |
||||
and give him a "$" in the type signature, to appear at every |
||||
position. It doesn't appear at position 1 for inner classes. |
||||
Store the position in unifyParam. |
||||
* jode/expr/InvokeOperator.java (isGetClass): Allow the method to |
||||
be declared inside an outer class: We simply check if we can get |
||||
the method analyzer. |
||||
(simplify): handle unifyParam. |
||||
* jode/expr/PopOperator.java (getBreakPenalty): return penalty of |
||||
inner expression. (dumpExpression): Call dumpExpression of |
||||
subexpression immediately without priority. |
@ -1,5 +1,5 @@ |
||||
## Input file for automake to generate the Makefile.in used by configure
|
||||
|
||||
SUBDIRS = jode bin doc test
|
||||
SUBDIRS = bin doc jode test
|
||||
|
||||
EXTRA_DIST = TODO
|
||||
EXTRA_DIST = jcpp
|
||||
|
@ -0,0 +1,5 @@ |
||||
Joe Bronkema <joseph.d.bronkema at lmco.com> |
||||
Rolf Howarth <rolf at squarebox.co.uk> for pascal indentaton style. |
||||
Erik Modén <Erik.Moden at emw.ericsson.se> |
||||
Martin Schmitz <m.schmitz at e-sign.com> for finding many bugs in the obfuscator. |
||||
zzzeek <classic at io.com> |
@ -1,2 +1,3 @@ |
||||
Makefile |
||||
Makefile.in |
||||
*.html |
||||
|
@ -1,14 +1,46 @@ |
||||
## Input file for automake to generate the Makefile.in used by configure
|
||||
|
||||
EXTRA_DIST = \
|
||||
applet.html \ |
||||
download.html.in \ |
||||
history.html \ |
||||
jode.html \ |
||||
license.html \ |
||||
links.html \ |
||||
usage.html \ |
||||
PHP_FILES = \
|
||||
applet.php \ |
||||
bluesky.php \ |
||||
download.php \ |
||||
faq.php \ |
||||
feedback.php \ |
||||
history.php \ |
||||
index.php \ |
||||
license.php \ |
||||
links.php \ |
||||
usage.php |
||||
|
||||
HTML_FILES = $(PHP_FILES:%.php=$(srcdir)/%.html)
|
||||
# noinst_DATA = $(HTML_FILES)
|
||||
|
||||
EXTRA_DIST = $(PHP_FILES) $(notdir $(HTML_FILES)) \
|
||||
header.inc \ |
||||
menu.inc \ |
||||
footer.inc \ |
||||
a-logo.gif \ |
||||
myproject.jos \ |
||||
dasm_to_java.perl \ |
||||
gimp/jode-logo.xcf \ |
||||
jode-logo.gif |
||||
|
||||
.PHONY: public_html_symlink |
||||
|
||||
# The following rules require that you have an apache with php on
|
||||
# localhost with standard user public_html directories and
|
||||
# FollowSymLink enabled.
|
||||
|
||||
PUBLIC_HTML=$(HOME)/public_html
|
||||
JODE_PHP_DIR=jode_php
|
||||
|
||||
public_html_symlink: |
||||
rm -f $(PUBLIC_HTML)/$(JODE_PHP_DIR)
|
||||
@RELDIR=`pwd | sed s!^$(HOME)!..!`; \
|
||||
ln -sf $$RELDIR/$(srcdir) $(PUBLIC_HTML)/$(JODE_PHP_DIR); \
|
||||
echo Created symlink to $$RELDIR/$(srcdir).
|
||||
|
||||
footer.inc: public_html_symlink |
||||
|
||||
$(srcdir)/%.html: %.php footer.inc header.inc menu.inc |
||||
lynx -source http://localhost/~$(LOGNAME)/$(JODE_PHP_DIR)/$(notdir $<)?extension=html > $@
|
||||
|
After Width: | Height: | Size: 894 B |
@ -1,97 +0,0 @@ |
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN"> |
||||
<html> |
||||
<head> |
||||
<title>Java Optimize and Decompile Environment (JODE)</title> |
||||
<meta name="date" content="2000-06-30"> |
||||
<meta name="description" content="JODE - Java Optimize and Decompile Environment."> |
||||
<meta name="author" content="Jochen Hoenicke"> |
||||
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL"> |
||||
</head> |
||||
|
||||
<BODY bgcolor=#FFFFFF topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0"> |
||||
<table cellpadding=4 cellspacing=1 width=100%> |
||||
<tr><td> |
||||
</td> |
||||
<td> <img src="jode-logo.gif" alt="JODE" width=286 height=110></td> |
||||
</tr> |
||||
<tr> |
||||
<td valign="top"> |
||||
<table cellspacing=0 cellpadding=3 width=100% border=0 bgcolor=eeeef8> |
||||
<tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Jode</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="./"><B>Home</B></a><br> |
||||
<a href="http://sourceforge.net/project/?group_id=3790">Project page</a><br> |
||||
<br> |
||||
<a href="./applet.html">Applet</a><br> |
||||
<a href="./download.html">Download</a><br> |
||||
<a href="./usage.html">Documentation</a><br> |
||||
<a href="./license.html">License</a><br> |
||||
<a href="./history.html">History</a><br> |
||||
<a href="./links.html">Links</a><br> |
||||
<a href="./bluesky.html">Blue Sky</a><tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Feedback</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="http://sourceforge.net/bugs/?group_id=3790">Bug Tracking</a><br> |
||||
<a href="http://sourceforge.net/forum/?group_id=3790">Public Forums</a><br> |
||||
<a href="http://lists.sourceforge.net/mailman/listinfo/jode-users">Mailing List</a><br> |
||||
<a href="http://sourceforge.net/sendmessage.html?touser=18252">Private Mail</a><tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Download</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="ftp://jode.sourceforge.net/pub/jode/">FTP server</a><br> |
||||
<a href="http://sourceforge.net/project/filelist.html?group_id=3790">Source releases</a></td></tr> |
||||
<tr bgcolor="ffffff"><td align="center"><br>Powered by <br> |
||||
<a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.html?group_id=3790&type=1" border=0 width=88 height=31 alt="SourceForge"></a><br> |
||||
<br>Best viewed with <br> |
||||
<a href="http://www.anybrowser.org/campaign/"><img src="a-logo.gif" border=0 width=88 height=31 alt="Any Browser"></a><br> |
||||
</td></tr></table> |
||||
</td> |
||||
<td valign="top"> |
||||
<h1>The <i>JODE</i> Applet</h1> |
||||
|
||||
Please be patience, loading the applet may take some time.<br><br> |
||||
|
||||
<center> |
||||
<applet code="jode/Applet.class" archive="jode-applet.jar" width=540 height=400> |
||||
<param name=pagecolor value="ffffff"> |
||||
<param name=classpath value="http://jode.sourceforge.net/load.html/http%3a//www.informatik.uni-oldenburg.de/~mw/plasma.jar"> |
||||
<param name=class value="PlasmaApplet"> |
||||
<p>Sorry you need a java enabled browser to test a java applet ;-)</p> |
||||
<p>Don't read the rest, it only contains information about the applet.</p> |
||||
</applet> |
||||
</center><br> |
||||
|
||||
Press the start button to decompile <a |
||||
href="http://www.informatik.uni-oldenburg.de/~mw/plasma.html">Michael's |
||||
Plasma applet</a> (and give the decompiler some time to download the |
||||
jar file). <br><br> |
||||
|
||||
You may change the classpath to point to a zip or jar file of your |
||||
choice, using a similar syntax. Use <code>%3a</code> instead of a |
||||
colon `:' in the url. You can also point it to a directory containing |
||||
the class-files (include a slash `/' at the end in this case), but |
||||
this is not recommended, since it is <i>very</i> slow. You may give |
||||
multiple entries in the class path field separated by a comma.<br><br> |
||||
|
||||
You can't use this applet for local files; the class files must be on |
||||
a server that is accessible from sourceforge. You can try to give |
||||
local filenames directly without the load.html wrapper, but that is |
||||
probably forbidden by your browser. Most browser only allow loading |
||||
files from the same server as the applet, and this is the reason why |
||||
you have to use such a cryptic URL.<br><br> |
||||
|
||||
Save probably doesn't work, because it is forbidden by your browser.<br><br> |
||||
</td></tr> |
||||
</table> |
||||
<TABLE width="100%" border="0" cellspacing="0" cellpadding="2" bgcolor="737b9c"> |
||||
<TR> |
||||
<TD align="center"><FONT color="#ffffff"><SPAN class="titlebar"> |
||||
All trademarks and copyrights on this page are properties of their respective owners. <br> |
||||
Last updated on 8-May-2000, |
||||
Copyright © 1998-2000 by Jochen Hoenicke.</SPAN></FONT> |
||||
</TD> |
||||
</TR> |
||||
</TABLE> |
||||
|
||||
</BODY> |
||||
</HTML> |
@ -1,36 +1,38 @@ |
||||
<?php require("header.inc"); ?> |
||||
<h1>The <i>JODE</i> Applet</h1> |
||||
|
||||
Please be patience, loading the applet may take some time.<br><br> |
||||
<p>Please be patience, loading the applet may take some time.</p> |
||||
|
||||
<center> |
||||
<applet code="jode/Applet.class" archive="jode-applet.jar" width=540 height=400> |
||||
<param name=pagecolor value="ffffff"> |
||||
<param name=classpath value="http://jode.sourceforge.net/load.php/http%3a//www.informatik.uni-oldenburg.de/~mw/plasma.jar"> |
||||
<param name=classpath value="http://jode.sourceforge.net/http/www.informatik.uni-oldenburg.de/~mw/plasma.jar"> |
||||
<param name=class value="PlasmaApplet"> |
||||
<p>Sorry you need a java enabled browser to test a java applet ;-)</p> |
||||
<p>Don't read the rest, it only contains information about the applet.</p> |
||||
</applet> |
||||
</center><br> |
||||
|
||||
Press the start button to decompile <a |
||||
<p> Press the start button to decompile <a |
||||
href="http://www.informatik.uni-oldenburg.de/~mw/plasma.html">Michael's |
||||
Plasma applet</a> (and give the decompiler some time to download the |
||||
jar file). <br><br> |
||||
jar file). </p> |
||||
|
||||
You may change the classpath to point to a zip or jar file of your |
||||
choice, using a similar syntax. Use <code>%3a</code> instead of a |
||||
colon `:' in the url. You can also point it to a directory containing |
||||
choice, using a similar syntax. Only http and ftp addresses are supported. |
||||
The file must be available from the world wide web. In fact you download it |
||||
from Sourceforge and Sourceforge gets it from the given address. This hack |
||||
is necessary, because Java's security policy doesn't allow applets to contact |
||||
a different server. You can also point the classpath to a directory containing |
||||
the class-files (include a slash `/' at the end in this case), but |
||||
this is not recommended, since it is <i>very</i> slow. You may give |
||||
multiple entries in the class path field separated by a comma.<br><br> |
||||
|
||||
You can't use this applet for local files; the class files must be on |
||||
a server that is accessible from sourceforge. You can try to give |
||||
local filenames directly without the load.php wrapper, but that is |
||||
You can't use this applet for local files. You can try to give |
||||
local filenames directly without going through Sourceforge, but that is |
||||
probably forbidden by your browser. Most browser only allow loading |
||||
files from the same server as the applet, and this is the reason why |
||||
you have to use such a cryptic URL.<br><br> |
||||
you have to use such a weird URL.<br><br> |
||||
|
||||
Save probably doesn't work, because it is forbidden by your browser.<br><br> |
||||
<?php require("footer.inc"); ?> |
||||
|
@ -1,133 +0,0 @@ |
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN"> |
||||
<html> |
||||
<head> |
||||
<title>Java Optimize and Decompile Environment (JODE)</title> |
||||
<meta name="date" content="2000-06-30"> |
||||
<meta name="description" content="JODE - Java Optimize and Decompile Environment."> |
||||
<meta name="author" content="Jochen Hoenicke"> |
||||
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL"> |
||||
</head> |
||||
|
||||
<BODY bgcolor=#FFFFFF topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0"> |
||||
<table cellpadding=4 cellspacing=1 width=100%> |
||||
<tr><td> |
||||
</td> |
||||
<td> <img src="jode-logo.gif" alt="JODE" width=286 height=110></td> |
||||
</tr> |
||||
<tr> |
||||
<td valign="top"> |
||||
<table cellspacing=0 cellpadding=3 width=100% border=0 bgcolor=eeeef8> |
||||
<tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Jode</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="./"><B>Home</B></a><br> |
||||
<a href="http://sourceforge.net/project/?group_id=3790">Project page</a><br> |
||||
<br> |
||||
<a href="./applet.html">Applet</a><br> |
||||
<a href="./download.html">Download</a><br> |
||||
<a href="./usage.html">Documentation</a><br> |
||||
<a href="./license.html">License</a><br> |
||||
<a href="./history.html">History</a><br> |
||||
<a href="./links.html">Links</a><br> |
||||
<a href="./bluesky.html">Blue Sky</a><tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Feedback</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="http://sourceforge.net/bugs/?group_id=3790">Bug Tracking</a><br> |
||||
<a href="http://sourceforge.net/forum/?group_id=3790">Public Forums</a><br> |
||||
<a href="http://lists.sourceforge.net/mailman/listinfo/jode-users">Mailing List</a><br> |
||||
<a href="http://sourceforge.net/sendmessage.html?touser=18252">Private Mail</a><tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Download</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="ftp://jode.sourceforge.net/pub/jode/">FTP server</a><br> |
||||
<a href="http://sourceforge.net/project/filelist.html?group_id=3790">Source releases</a></td></tr> |
||||
<tr bgcolor="ffffff"><td align="center"><br>Powered by <br> |
||||
<a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.html?group_id=3790&type=1" border=0 width=88 height=31 alt="SourceForge"></a><br> |
||||
<br>Best viewed with <br> |
||||
<a href="http://www.anybrowser.org/campaign/"><img src="a-logo.gif" border=0 width=88 height=31 alt="Any Browser"></a><br> |
||||
</td></tr></table> |
||||
</td> |
||||
<td valign="top"> |
||||
<h1>Blue Sky</h1> |
||||
|
||||
<p>This section contains features that I think would be great to have, |
||||
but are also very hard to implement. The name of the section is |
||||
inspired, by <a |
||||
href="http://www.mozilla.org/blue-sky/">Mozilla</a>.</p> |
||||
|
||||
<p>Currently this are all my own ideas. But if you send me an idea |
||||
for an interesting feature, I will add it to this list.</p> |
||||
|
||||
<h2><i>Out</i>line inlined methods</h2> |
||||
|
||||
<p>If java gets called with `<code>-O</code>' switch, it inlines methods, |
||||
that are private, final, or static and contain no loops. When |
||||
decompiling this it sometimes produces really ugly code. The right |
||||
way to solve this would be to <i>out</i>line the code again. This is |
||||
possible but requires to find the inlined method. </p> |
||||
|
||||
<p>The name `outline' was suggested by <a |
||||
href="http://www.informatik.uni-oldenburg.de/~mw">Michael</a>. |
||||
</p> |
||||
|
||||
<h2>Better names of local variables</h2> |
||||
|
||||
<p>The local variable naming is very stupid. Even with pretty it just |
||||
names the variable after the type with a unifying number appended. A |
||||
method containing very much objects of the same type looks very |
||||
ugly. </p> |
||||
|
||||
<p>My plan is looking at the assignments. If we have locals in |
||||
assignments |
||||
<pre> |
||||
int l_1 = array.length |
||||
String l_2 = object.getName() |
||||
</pre> |
||||
we could name them "length" and "name". If we |
||||
have assignments: |
||||
<pre> |
||||
MenuItem local_1 = new MenuItem("Open"); |
||||
MenuItem local_2 = new MenuItem("Save"); |
||||
</pre> |
||||
good names would be <code>miOpen</code> and <code>miSave</code>. </p> |
||||
|
||||
<p>It is currently possible to assign a <i>(hint name,type)</i> pair |
||||
to a local. If the type matches, the local will be named after |
||||
<i>hint name</i>. This could be extended by giving them several |
||||
weighted hints and constructing the name in an intelligent way. </p> |
||||
|
||||
<h2>Better deobfuscation features</h2> |
||||
<p>First there should be a good Renamer: Methods that simply |
||||
return a field value should be renamed to get<i>FieldName</i>. |
||||
Fields should be named after their type, maybe also by assignments |
||||
(see section about local variable names).</p> |
||||
|
||||
<p>The deobfuscator should detect inner and anonymous variables, |
||||
synthetic methods and so on, and rename them accordingly.</p> |
||||
|
||||
<h2>Handling of Class.forName in obfuscator</h2> |
||||
<p>The obfuscator should detect Class.forName constructs (and |
||||
similarly for methods and fields) and if their parameters are constant |
||||
it should change the parameter according to the rename function. </p> |
||||
|
||||
<h2>Merging javadoc comments</h2> |
||||
<p>It would be nice if the decompiler could merge the javadoc comments |
||||
into the class file. More and more people use javadoc to comment the |
||||
public api of their java classes. It shouldn't be too difficult to |
||||
copy them back into the java code. </p> |
||||
|
||||
<p>This doesn't need to be built into the decompiler. A script that takes |
||||
the javadoc pages and the decompiled code can easily merge them.</p> |
||||
</td></tr> |
||||
</table> |
||||
<TABLE width="100%" border="0" cellspacing="0" cellpadding="2" bgcolor="737b9c"> |
||||
<TR> |
||||
<TD align="center"><FONT color="#ffffff"><SPAN class="titlebar"> |
||||
All trademarks and copyrights on this page are properties of their respective owners. <br> |
||||
Last updated on 8-May-2000, |
||||
Copyright © 1998-2000 by Jochen Hoenicke.</SPAN></FONT> |
||||
</TD> |
||||
</TR> |
||||
</TABLE> |
||||
|
||||
</BODY> |
||||
</HTML> |
@ -1,92 +0,0 @@ |
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN"> |
||||
<html> |
||||
<head> |
||||
<title>Java Optimize and Decompile Environment (JODE)</title> |
||||
<meta name="date" content="2000-06-30"> |
||||
<meta name="description" content="JODE - Java Optimize and Decompile Environment."> |
||||
<meta name="author" content="Jochen Hoenicke"> |
||||
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL"> |
||||
</head> |
||||
|
||||
<BODY bgcolor=#FFFFFF topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0"> |
||||
<table cellpadding=4 cellspacing=1 width=100%> |
||||
<tr><td> |
||||
</td> |
||||
<td> <img src="jode-logo.gif" alt="JODE" width=286 height=110></td> |
||||
</tr> |
||||
<tr> |
||||
<td valign="top"> |
||||
<table cellspacing=0 cellpadding=3 width=100% border=0 bgcolor=eeeef8> |
||||
<tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Jode</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="./"><B>Home</B></a><br> |
||||
<a href="http://sourceforge.net/project/?group_id=3790">Project page</a><br> |
||||
<br> |
||||
<a href="./applet.html">Applet</a><br> |
||||
<a href="./download.html">Download</a><br> |
||||
<a href="./usage.html">Documentation</a><br> |
||||
<a href="./license.html">License</a><br> |
||||
<a href="./history.html">History</a><br> |
||||
<a href="./links.html">Links</a><br> |
||||
<a href="./bluesky.html">Blue Sky</a><tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Feedback</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="http://sourceforge.net/bugs/?group_id=3790">Bug Tracking</a><br> |
||||
<a href="http://sourceforge.net/forum/?group_id=3790">Public Forums</a><br> |
||||
<a href="http://lists.sourceforge.net/mailman/listinfo/jode-users">Mailing List</a><br> |
||||
<a href="http://sourceforge.net/sendmessage.html?touser=18252">Private Mail</a><tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Download</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="ftp://jode.sourceforge.net/pub/jode/">FTP server</a><br> |
||||
<a href="http://sourceforge.net/project/filelist.html?group_id=3790">Source releases</a></td></tr> |
||||
<tr bgcolor="ffffff"><td align="center"><br>Powered by <br> |
||||
<a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.html?group_id=3790&type=1" border=0 width=88 height=31 alt="SourceForge"></a><br> |
||||
<br>Best viewed with <br> |
||||
<a href="http://www.anybrowser.org/campaign/"><img src="a-logo.gif" border=0 width=88 height=31 alt="Any Browser"></a><br> |
||||
</td></tr></table> |
||||
</td> |
||||
<td valign="top"> |
||||
<h2>Download</h2> |
||||
|
||||
The latest source code of <i>JODE</i> is available at the <a href="http://sourceforge.net/project/?group_id=3790">project page</a>. |
||||
You need several other packages to build <i>JODE</i>, check the <a href="./links.html">links page</a>. <br><br> |
||||
|
||||
The simplest way to get it, especially for non unix users, is in |
||||
precompiled form, though. I have two jar archives at the <a |
||||
href="ftp://jode.sourceforge.net/pub/jode">ftp server</a>. You may |
||||
need to press shift while clicking on the link, depending on your |
||||
browser. |
||||
|
||||
|
||||
<ul> <li><a href="ftp://jode.sourceforge.net/pub/jode/jode-1.0.93-1.1.jar">jode-1.0.93-1.1.jar</a> is for JDK 1.1. It already |
||||
contains Getopt and the collection classes from the GNU Classpath |
||||
project. If you want to use the swing interface, you have to download |
||||
swing separately. </li> |
||||
|
||||
<li> <a href="ftp://jode.sourceforge.net/pub/jode/jode-1.0.93-1.2.jar">jode-1.0.93-1.2.jar</a> is for JDK 1.2. It already |
||||
contains Getopt, so you don't need any other package.</li> </ul> |
||||
|
||||
<h2>CVS Repository</h2> |
||||
|
||||
You can get the latest sources from the <a href="http://sourceforge.net/cvs/?group_id=3790">CVS repository</a>. |
||||
Follow the instruction on that page; use <code>jode</code> as |
||||
<i>modulename</i>. Then change to the directory jode and run |
||||
|
||||
<pre>aclocal && automake -a && autoconf</pre> |
||||
|
||||
Afterwards follow the instruction in the INSTALL file. |
||||
</td></tr> |
||||
</table> |
||||
<TABLE width="100%" border="0" cellspacing="0" cellpadding="2" bgcolor="737b9c"> |
||||
<TR> |
||||
<TD align="center"><FONT color="#ffffff"><SPAN class="titlebar"> |
||||
All trademarks and copyrights on this page are properties of their respective owners. <br> |
||||
Last updated on 8-May-2000, |
||||
Copyright © 1998-2000 by Jochen Hoenicke.</SPAN></FONT> |
||||
</TD> |
||||
</TR> |
||||
</TABLE> |
||||
|
||||
</BODY> |
||||
</HTML> |
@ -1,40 +1,40 @@ |
||||
<?php require("header.inc"); ?> |
||||
<h2>Download</h2> |
||||
<h1>Download</h1> |
||||
|
||||
The latest source code of <i>JODE</i> is available at the <?php |
||||
sflink("project/") ?>project page</a>. |
||||
You need several other packages to build <i>JODE</i>, check the <?php |
||||
selflink("links") ?>links page</a>. <br><br> |
||||
<p>Jode is available in the <? |
||||
sflink("project/showfiles.php")?>download area</a> in source or |
||||
binary form. For compiling the source code, you need several other |
||||
packages, check the <?php selflink("links") ?>links page</a>. You
|
||||
need a unix like environment for compilation.</p> |
||||
|
||||
The simplest way to get it, especially for non unix users, is in |
||||
precompiled form, though. I have two jar archives at the <a |
||||
href="ftp://jode.sourceforge.net/pub/jode">ftp server</a>. You may |
||||
need to press shift while clicking on the link, depending on your |
||||
browser. |
||||
<p>The simplest way to get it, especially for non unix users, is in |
||||
precompiled form, though. There are two jar archives in the download |
||||
area:</P> |
||||
|
||||
<?php |
||||
function jarlink($what) { |
||||
global $version; |
||||
echo "<a href=\"ftp://jode.sourceforge.net/pub/jode/jode-".$version.$what; |
||||
echo ".jar\">jode-".$version.$what.".jar</a>"; |
||||
} ?> |
||||
<ul> <li>jode-1.1-JDK1.1.jar is for JDK 1.1. If you want to use |
||||
the swing interface, you have to download swing separately, all other |
||||
packages are already included in the archive. </li> |
||||
|
||||
<ul> <li><?php jarlink("-1.1") ?> is for JDK 1.1. It already
|
||||
contains Getopt and the collection classes from the GNU Classpath |
||||
project. If you want to use the swing interface, you have to download |
||||
swing separately. </li> |
||||
<li>jode-1.1.jar is for JDK 1.2 or better. It should run |
||||
without any other package.</li> </ul> </p> |
||||
|
||||
<li> <?php jarlink("-1.2") ?> is for JDK 1.2. It already
|
||||
contains Getopt, so you don't need any other package.</li> </ul> |
||||
<h1>CVS Repository</h1> |
||||
|
||||
<h2>CVS Repository</h2> |
||||
<p>You can get the latest sources from the <?php sflink("cvs/") ?> CVS
|
||||
repository</a>. Follow the instruction on that page; use |
||||
<code>jode</code> as <i>modulename</i>. If you want to checkout a |
||||
specific version you can use the <code>-r</code> option:</p> |
||||
|
||||
You can get the latest sources from the <?php sflink("cvs/") ?> |
||||
CVS repository</a>. |
||||
Follow the instruction on that page; use <code>jode</code> as |
||||
<i>modulename</i>. Then change to the directory jode and run |
||||
<ul> |
||||
<li><code>-r jode_1_0_93</code>: checks out the version 1.0.93</li> |
||||
<li><code>-r branch_1_1</code>: checks out the latest version in the |
||||
1.1 series.</li> </ul> |
||||
|
||||
<p>To build the sources from CVS change to the main directory where |
||||
the <code>configure.in</code> file resides and run |
||||
|
||||
<pre>aclocal && automake -a && autoconf</pre> |
||||
|
||||
Afterwards follow the instruction in the INSTALL file. |
||||
Afterwards follow the instruction in the INSTALL file. </p> |
||||
<?php require("footer.inc"); ?> |
||||
|
||||
|
@ -0,0 +1,72 @@ |
||||
<?php require("header.inc"); ?>
|
||||
|
||||
<h1>FAQ - Frequently Asked Questions</h1> |
||||
|
||||
This is a list of some questions that pop up from time to time. |
||||
|
||||
<h2>Decompiler issues</h2> |
||||
|
||||
<h3>The decompiler crashes with a VerifyException, what can I do?</h3> |
||||
|
||||
<p>The class isn't verifiable, probably because there is not enough |
||||
information about used classes. See the question about the |
||||
classpath.</p> |
||||
|
||||
<p>This could also be caused by malicious bytecode, or because there |
||||
is a bug in Jode's verifier.</p> |
||||
|
||||
<h3>What should be included in the classpath?</h3> |
||||
|
||||
<p>Jode needs to know the full class hierarchie to guess the types. |
||||
This includes not only the classes in the program, but also the |
||||
libraries used by the java program, even the Java runtime library. |
||||
You should set the classpath to include all these classes.</p> |
||||
|
||||
<p>If you don't specify the classpath on the command line, Jode uses |
||||
the same as your Java Virtual Machine.</p> |
||||
|
||||
<p>As last resort, if Jode can't find a class in the classpath it uses |
||||
reflection to ask the Virtual Machine. This works quite well, but |
||||
loading classes can have side effects, e.g. when AWT classes are |
||||
loaded, an AWT thread is created, even though Jode doesn't need |
||||
it.</p> |
||||
|
||||
<h3>Why doesn't Jode decompile my inner class |
||||
<code>MyClass$Inner.class</code>?</h3> |
||||
|
||||
<p>You should decompile the outermost class (<code>MyClass</code> in |
||||
this case). The produced code contains the inner class. </p> |
||||
|
||||
<h2>Obfuscator issues</h2> |
||||
|
||||
<h3>What should be included in the classpath?</h3> |
||||
|
||||
<p>The program, all libraries, the Java runtime library. Don't omit a |
||||
library even when you don't want to obfuscate it.</p> |
||||
|
||||
<h3>What should I preserve</h3> |
||||
|
||||
<p>The most common mistake is to preserve a class. In most cases this |
||||
is not what you want. This only makes sure the class won't be |
||||
renamed, it doesn't prevent it from being stripped. Instead you |
||||
should preserve methods and constructors. The constructor is just a |
||||
method with the special name <tt><init&rt;</tt>. </p> |
||||
|
||||
<p> Another common mistake is to omit the type |
||||
signature, e.g. to preserve <tt>Class.main</tt> instead of |
||||
<tt>Class.main.([Ljava/lang/String;)V</tt>. That doesn't work. If |
||||
you don't want to care about the format of the type signature use a |
||||
wildcard as in <tt>Class.main.*</tt>. </p> |
||||
|
||||
<h3>What is a type signature</h3> |
||||
|
||||
<p>The type signature is a machine readable representation of a java |
||||
type that is used all over in java bytecode. The JDK ships a command |
||||
named <tt>javap</tt>. With <tt>java -s</tt> you can lists the fields |
||||
and methods of a class with their type signatures.</p> |
||||
|
||||
<p> If you are interested in the format of type signatures read the |
||||
Java Virtual Machine Specification, Chapter 4.3 Descriptors</p> |
||||
|
||||
<?php require("footer.inc"); ?> |
||||
|
@ -0,0 +1,14 @@ |
||||
<?php require("header.inc"); ?>
|
||||
|
||||
<h1>Feedback</h1> |
||||
|
||||
<p>You can report bugs to the <?php sflink("bugs/")?>bug forum</a>. </p>
|
||||
|
||||
<p>You can contact me by email via <a |
||||
href="http://sourceforge.net/sendmessage.php?touser=18252">hoenicke at |
||||
users.sourceforge.net</a>. Please mention <i>jode</i> in the |
||||
subject.</p> |
||||
|
||||
<p>There is a mailing list. Check <a href="http://lists.sourceforge.net/mailman/listinfo/jode-users">this page</a> for subscription informations.</p> |
||||
|
||||
<?php require("footer.inc"); ?>
|
@ -1,84 +0,0 @@ |
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN"> |
||||
<html> |
||||
<head> |
||||
<title>Java Optimize and Decompile Environment (JODE)</title> |
||||
<meta name="date" content="2000-06-30"> |
||||
<meta name="description" content="JODE - Java Optimize and Decompile Environment."> |
||||
<meta name="author" content="Jochen Hoenicke"> |
||||
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL"> |
||||
</head> |
||||
|
||||
<BODY bgcolor=#FFFFFF topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0"> |
||||
<table cellpadding=4 cellspacing=1 width=100%> |
||||
<tr><td> |
||||
</td> |
||||
<td> <img src="jode-logo.gif" alt="JODE" width=286 height=110></td> |
||||
</tr> |
||||
<tr> |
||||
<td valign="top"> |
||||
<table cellspacing=0 cellpadding=3 width=100% border=0 bgcolor=eeeef8> |
||||
<tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Jode</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="./"><B>Home</B></a><br> |
||||
<a href="http://sourceforge.net/project/?group_id=3790">Project page</a><br> |
||||
<br> |
||||
<a href="./applet.html">Applet</a><br> |
||||
<a href="./download.html">Download</a><br> |
||||
<a href="./usage.html">Documentation</a><br> |
||||
<a href="./license.html">License</a><br> |
||||
<a href="./history.html">History</a><br> |
||||
<a href="./links.html">Links</a><br> |
||||
<a href="./bluesky.html">Blue Sky</a><tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Feedback</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="http://sourceforge.net/bugs/?group_id=3790">Bug Tracking</a><br> |
||||
<a href="http://sourceforge.net/forum/?group_id=3790">Public Forums</a><br> |
||||
<a href="http://lists.sourceforge.net/mailman/listinfo/jode-users">Mailing List</a><br> |
||||
<a href="http://sourceforge.net/sendmessage.html?touser=18252">Private Mail</a><tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Download</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="ftp://jode.sourceforge.net/pub/jode/">FTP server</a><br> |
||||
<a href="http://sourceforge.net/project/filelist.html?group_id=3790">Source releases</a></td></tr> |
||||
<tr bgcolor="ffffff"><td align="center"><br>Powered by <br> |
||||
<a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.html?group_id=3790&type=1" border=0 width=88 height=31 alt="SourceForge"></a><br> |
||||
<br>Best viewed with <br> |
||||
<a href="http://www.anybrowser.org/campaign/"><img src="a-logo.gif" border=0 width=88 height=31 alt="Any Browser"></a><br> |
||||
</td></tr></table> |
||||
</td> |
||||
<td valign="top"> |
||||
<h2>History</h2> |
||||
|
||||
<p>Someday I found <code>guavad</code>, a disassembler for java byte |
||||
code (it does similar things like <code>javap -c</code>). I used |
||||
it on a class file, and found that it was possible to reconstruct the |
||||
original java code. First I did it by hand on some small routines, |
||||
but I soon realized that it was a rather stupid task. So I wrote a |
||||
small <a href="dasm_to_java.perl"><code>perl</code> script</a> that |
||||
did this process automatically. At the end of the next day I had my |
||||
first working decompiler.</p> |
||||
|
||||
<p>Now while the <code>perl</code> script is working, it is not easy |
||||
to use. You have to decompile the code first with a disassembler, cut |
||||
out the code of a single method, and run the perl script on it. I |
||||
decided to get the bytecode directly out of the class files and do |
||||
this all automatically. I decided to write it in <code>java</code> |
||||
now, because it suited best.</p> |
||||
|
||||
<p>Just for the records: the java code is now more than 50 times |
||||
bigger than the original perl script and is still growing.</p> |
||||
</td></tr> |
||||
</table> |
||||
<TABLE width="100%" border="0" cellspacing="0" cellpadding="2" bgcolor="737b9c"> |
||||
<TR> |
||||
<TD align="center"><FONT color="#ffffff"><SPAN class="titlebar"> |
||||
All trademarks and copyrights on this page are properties of their respective owners. <br> |
||||
Last updated on 8-May-2000, |
||||
Copyright © 1998-2000 by Jochen Hoenicke.</SPAN></FONT> |
||||
</TD> |
||||
</TR> |
||||
</TABLE> |
||||
|
||||
</BODY> |
||||
</HTML> |
||||
|
@ -1,131 +0,0 @@ |
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN"> |
||||
<html> |
||||
<head> |
||||
<title>Java Optimize and Decompile Environment (JODE)</title> |
||||
<meta name="date" content="2000-06-30"> |
||||
<meta name="description" content="JODE - Java Optimize and Decompile Environment."> |
||||
<meta name="author" content="Jochen Hoenicke"> |
||||
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL"> |
||||
</head> |
||||
|
||||
<BODY bgcolor=#FFFFFF topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0"> |
||||
<table cellpadding=4 cellspacing=1 width=100%> |
||||
<tr><td> |
||||
</td> |
||||
<td> <img src="jode-logo.gif" alt="JODE" width=286 height=110></td> |
||||
</tr> |
||||
<tr> |
||||
<td valign="top"> |
||||
<table cellspacing=0 cellpadding=3 width=100% border=0 bgcolor=eeeef8> |
||||
<tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Jode</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="./"><B>Home</B></a><br> |
||||
<a href="http://sourceforge.net/project/?group_id=3790">Project page</a><br> |
||||
<br> |
||||
<a href="./applet.html">Applet</a><br> |
||||
<a href="./download.html">Download</a><br> |
||||
<a href="./usage.html">Documentation</a><br> |
||||
<a href="./license.html">License</a><br> |
||||
<a href="./history.html">History</a><br> |
||||
<a href="./links.html">Links</a><br> |
||||
<a href="./bluesky.html">Blue Sky</a><tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Feedback</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="http://sourceforge.net/bugs/?group_id=3790">Bug Tracking</a><br> |
||||
<a href="http://sourceforge.net/forum/?group_id=3790">Public Forums</a><br> |
||||
<a href="http://lists.sourceforge.net/mailman/listinfo/jode-users">Mailing List</a><br> |
||||
<a href="http://sourceforge.net/sendmessage.html?touser=18252">Private Mail</a><tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Download</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="ftp://jode.sourceforge.net/pub/jode/">FTP server</a><br> |
||||
<a href="http://sourceforge.net/project/filelist.html?group_id=3790">Source releases</a></td></tr> |
||||
<tr bgcolor="ffffff"><td align="center"><br>Powered by <br> |
||||
<a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.html?group_id=3790&type=1" border=0 width=88 height=31 alt="SourceForge"></a><br> |
||||
<br>Best viewed with <br> |
||||
<a href="http://www.anybrowser.org/campaign/"><img src="a-logo.gif" border=0 width=88 height=31 alt="Any Browser"></a><br> |
||||
</td></tr></table> |
||||
</td> |
||||
<td valign="top"> |
||||
|
||||
|
||||
<P><i>JODE</i> is a java package containing a decompiler and an |
||||
optimizer for java. This package is freely available under the GPL |
||||
(see <a href="./license.html">license</a>).<p> |
||||
|
||||
<P>The decompiler takes <tt>class</tt> files as input and produces |
||||
something similar to the original <tt>java</tt> file. Of course this |
||||
can't be perfect: There is no way to produce the comments or the names |
||||
of local variables (except when compiled with debuging) and there are |
||||
often more ways to write the same thing. But <i>JODE</i> does its job |
||||
quite well, so you should give it a try: <a href="./applet.html">start |
||||
the applet</a>.</P> |
||||
|
||||
<P>The optimizer transforms <tt>class</tt> files in various ways with |
||||
can be controlled by a script file. It supports the following |
||||
operations:</p> |
||||
<ul> |
||||
<li>Renaming class, method, field and local names to shorter, |
||||
obfuscated, or unique names or according to a given translation |
||||
table</li> |
||||
<li>Removing debugging information</li> |
||||
<li>Removing dead code (classes, fields, methods) and constant |
||||
fields</li> |
||||
<li>Optimizing local variable allocation</li> |
||||
</ul> |
||||
|
||||
<h2>News</h2> |
||||
|
||||
<ul> |
||||
<li><i>JODE</i> is now hosted by <a href="http://sourceforge.net/">SourceForge</a>.</li> |
||||
<li>The latest <a href="http://sourceforge.net/cvs/?group_id=3790">CVS</a> version breaks long lines</li> |
||||
<li>I can now decompile <b>inner and anonymous</b> classes.</li> |
||||
<li>The optimizer (aka obfuscator) can be customized via a small |
||||
config file</li> |
||||
<li>Jode is <tt>autoconf</tt>igured.</li> |
||||
</ul> |
||||
|
||||
<h2>Limitations</h2> |
||||
|
||||
<p>If not all dependent classes can be found, the verifier (which is |
||||
run before decompilation starts) may exit with a type error. You |
||||
can decompile it with <tt>--verify=off</tt>, but take the warning |
||||
serious, that types may be incorrect. There's sometimes no way to |
||||
guess the right type, if you don't have access the full class |
||||
hierarchie.<br> |
||||
|
||||
This is not a bug in the verifier: java will complain the same way, |
||||
if it is run with bytecode verification turned on. And if you don't |
||||
have the dependent classes, you can't compile the code again.</p> |
||||
|
||||
<p>There may be situations, where the code doesn't understand complex |
||||
expressions. In this case many ugly temporary variables are used, but |
||||
the code should still be compileable. This does especially happen |
||||
when you compile with <tt>`-O'</tt> flag and javac has inlined some |
||||
methods. </p> |
||||
|
||||
<p>Sometimes this program may exit with an <code>Exception</code> or |
||||
produce incorrect code. Most time the code can't be compiled, so that |
||||
it can be easily spotted. If you have one of these problems (except |
||||
those that occur on some of the <code>jode.test</code> files, I would |
||||
be very interested in a bug report (including the <code>class</code> |
||||
file, if possible). </p> |
||||
|
||||
<p>Sometimes <i>JODE</i> generates some GOTO expression and labels. |
||||
This shouldn't happen any more with code produced by javac or jikes. |
||||
But some flow obfuscator may provoke this. In that case you can run |
||||
the Obfuscator first (to optimize away the flow obfuscation ;-).</p> |
||||
</td></tr> |
||||
</table> |
||||
<TABLE width="100%" border="0" cellspacing="0" cellpadding="2" bgcolor="737b9c"> |
||||
<TR> |
||||
<TD align="center"><FONT color="#ffffff"><SPAN class="titlebar"> |
||||
All trademarks and copyrights on this page are properties of their respective owners. <br> |
||||
Last updated on 8-May-2000, |
||||
Copyright © 1998-2000 by Jochen Hoenicke.</SPAN></FONT> |
||||
</TD> |
||||
</TR> |
||||
</TABLE> |
||||
|
||||
</BODY> |
||||
</HTML> |
@ -1,76 +0,0 @@ |
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN"> |
||||
<html> |
||||
<head> |
||||
<title>Java Optimize and Decompile Environment (JODE)</title> |
||||
<meta name="date" content="2000-06-30"> |
||||
<meta name="description" content="JODE - Java Optimize and Decompile Environment."> |
||||
<meta name="author" content="Jochen Hoenicke"> |
||||
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL"> |
||||
</head> |
||||
|
||||
<BODY bgcolor=#FFFFFF topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0"> |
||||
<table cellpadding=4 cellspacing=1 width=100%> |
||||
<tr><td> |
||||
</td> |
||||
<td> <img src="jode-logo.gif" alt="JODE" width=286 height=110></td> |
||||
</tr> |
||||
<tr> |
||||
<td valign="top"> |
||||
<table cellspacing=0 cellpadding=3 width=100% border=0 bgcolor=eeeef8> |
||||
<tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Jode</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="./"><B>Home</B></a><br> |
||||
<a href="http://sourceforge.net/project/?group_id=3790">Project page</a><br> |
||||
<br> |
||||
<a href="./applet.html">Applet</a><br> |
||||
<a href="./download.html">Download</a><br> |
||||
<a href="./usage.html">Documentation</a><br> |
||||
<a href="./license.html">License</a><br> |
||||
<a href="./history.html">History</a><br> |
||||
<a href="./links.html">Links</a><br> |
||||
<a href="./bluesky.html">Blue Sky</a><tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Feedback</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="http://sourceforge.net/bugs/?group_id=3790">Bug Tracking</a><br> |
||||
<a href="http://sourceforge.net/forum/?group_id=3790">Public Forums</a><br> |
||||
<a href="http://lists.sourceforge.net/mailman/listinfo/jode-users">Mailing List</a><br> |
||||
<a href="http://sourceforge.net/sendmessage.html?touser=18252">Private Mail</a><tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Download</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="ftp://jode.sourceforge.net/pub/jode/">FTP server</a><br> |
||||
<a href="http://sourceforge.net/project/filelist.html?group_id=3790">Source releases</a></td></tr> |
||||
<tr bgcolor="ffffff"><td align="center"><br>Powered by <br> |
||||
<a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.html?group_id=3790&type=1" border=0 width=88 height=31 alt="SourceForge"></a><br> |
||||
<br>Best viewed with <br> |
||||
<a href="http://www.anybrowser.org/campaign/"><img src="a-logo.gif" border=0 width=88 height=31 alt="Any Browser"></a><br> |
||||
</td></tr></table> |
||||
</td> |
||||
<td valign="top"> |
||||
<p><i>JODE</i> is Copyright © 1998-2000 by Jochen Hoenicke. <br><br> |
||||
|
||||
This program is free software; you can redistribute it and/or modify |
||||
it under the terms of the <a |
||||
href="http://www.gnu.org/copyleft/gpl.html">GNU General Public |
||||
License</a> as published by the Free Software Foundation; either |
||||
version 2 of the License, or (at your option) any later version.<br><br> |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but <b>without any warranty</b>; without even the implied warranty of |
||||
<b>merchantability</b> or <b>fitness for a particular purpose</b>. See the |
||||
GNU General Public License for more details. |
||||
|
||||
</td></tr> |
||||
</table> |
||||
<TABLE width="100%" border="0" cellspacing="0" cellpadding="2" bgcolor="737b9c"> |
||||
<TR> |
||||
<TD align="center"><FONT color="#ffffff"><SPAN class="titlebar"> |
||||
All trademarks and copyrights on this page are properties of their respective owners. <br> |
||||
Last updated on 8-May-2000, |
||||
Copyright © 1998-2000 by Jochen Hoenicke.</SPAN></FONT> |
||||
</TD> |
||||
</TR> |
||||
</TABLE> |
||||
|
||||
</BODY> |
||||
</HTML> |
@ -1,15 +1,16 @@ |
||||
<?php require("header.inc"); ?> |
||||
<h1>License</h1> |
||||
<p><i>JODE</i> is Copyright © 1998-2000 by Jochen Hoenicke. <br><br> |
||||
|
||||
This program is free software; you can redistribute it and/or modify |
||||
<p>This program is free software; you can redistribute it and/or modify |
||||
it under the terms of the <a |
||||
href="http://www.gnu.org/copyleft/gpl.html">GNU General Public |
||||
License</a> as published by the Free Software Foundation; either |
||||
version 2 of the License, or (at your option) any later version.<br><br> |
||||
version 2 of the License, or (at your option) any later version.</p> |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
<p>This program is distributed in the hope that it will be useful, |
||||
but <b>without any warranty</b>; without even the implied warranty of |
||||
<b>merchantability</b> or <b>fitness for a particular purpose</b>. See the |
||||
GNU General Public License for more details. |
||||
GNU General Public License for more details.</p> |
||||
|
||||
<?php require("footer.inc"); ?> |
||||
|
@ -1,123 +0,0 @@ |
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN"> |
||||
<html> |
||||
<head> |
||||
<title>Java Optimize and Decompile Environment (JODE)</title> |
||||
<meta name="date" content="2000-06-30"> |
||||
<meta name="description" content="JODE - Java Optimize and Decompile Environment."> |
||||
<meta name="author" content="Jochen Hoenicke"> |
||||
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL"> |
||||
</head> |
||||
|
||||
<BODY bgcolor=#FFFFFF topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0"> |
||||
<table cellpadding=4 cellspacing=1 width=100%> |
||||
<tr><td> |
||||
</td> |
||||
<td> <img src="jode-logo.gif" alt="JODE" width=286 height=110></td> |
||||
</tr> |
||||
<tr> |
||||
<td valign="top"> |
||||
<table cellspacing=0 cellpadding=3 width=100% border=0 bgcolor=eeeef8> |
||||
<tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Jode</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="./"><B>Home</B></a><br> |
||||
<a href="http://sourceforge.net/project/?group_id=3790">Project page</a><br> |
||||
<br> |
||||
<a href="./applet.html">Applet</a><br> |
||||
<a href="./download.html">Download</a><br> |
||||
<a href="./usage.html">Documentation</a><br> |
||||
<a href="./license.html">License</a><br> |
||||
<a href="./history.html">History</a><br> |
||||
<a href="./links.html">Links</a><br> |
||||
<a href="./bluesky.html">Blue Sky</a><tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Feedback</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="http://sourceforge.net/bugs/?group_id=3790">Bug Tracking</a><br> |
||||
<a href="http://sourceforge.net/forum/?group_id=3790">Public Forums</a><br> |
||||
<a href="http://lists.sourceforge.net/mailman/listinfo/jode-users">Mailing List</a><br> |
||||
<a href="http://sourceforge.net/sendmessage.html?touser=18252">Private Mail</a><tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Download</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="ftp://jode.sourceforge.net/pub/jode/">FTP server</a><br> |
||||
<a href="http://sourceforge.net/project/filelist.html?group_id=3790">Source releases</a></td></tr> |
||||
<tr bgcolor="ffffff"><td align="center"><br>Powered by <br> |
||||
<a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.html?group_id=3790&type=1" border=0 width=88 height=31 alt="SourceForge"></a><br> |
||||
<br>Best viewed with <br> |
||||
<a href="http://www.anybrowser.org/campaign/"><img src="a-logo.gif" border=0 width=88 height=31 alt="Any Browser"></a><br> |
||||
</td></tr></table> |
||||
</td> |
||||
<td valign="top"> |
||||
<h1><i>JODE</i> Links</h1> |
||||
<h3>Other decompilers</h3> |
||||
<ul> |
||||
<li><a href="http://dmoz.org/Computers/Programming/Languages/Java/Decompilers_and_Disassemblers/">The Open Directory list</a></li> |
||||
<li>A list of decompilers can be found at <a href="http://www.meurrens.org/ip-Links/Java/CodeEngineering/#tocDecompilersToJava">Marc Meurren's list</a> |
||||
</li> |
||||
<li>A very fast decompiler is <a |
||||
href="http://www.geocities.com/SiliconValley/Bridge/8617/jad.html">jad</a> |
||||
written in C++. It doesn't come with source code though, and misses |
||||
some features <i>JODE</i> has ;-)</li> <li><a |
||||
href="http://www.javaworld.com/javaworld/jw-07-1997/jw-07-decompilers.html">A |
||||
comparison of three decompilers</a> (but not <i>JODE</i>) was done by Dave |
||||
Dyer. |
||||
</ul> |
||||
<h3>Other obfuscators</h3> |
||||
<ul> |
||||
<li><a href="http://dmoz.org/Computers/Programming/Languages/Java/Obfuscators/">The Open Directory list</a></li> |
||||
<li><a href="http://www.sbktech.org/hashjava_old.html">Hashjava</a> is another free obfuscator. It is no longer maintained, though, since its successor was commercialized.</li> |
||||
<li><a href="http://www.zelix.com/klassmaster/index.html">Zelix |
||||
Klassmaster</a> does a very good flow optimization and also decrypts |
||||
strings. But <i>JODE</i>'s deobfuscator can undo both.</li> |
||||
<li><a href="http://www.cs.arizona.edu/~collberg/Research/">Christian S. Collberg</a> has some really interesting papers about non reversible obfuscations.</li> |
||||
</ul> |
||||
<h3>Graphical User Interface</h3> |
||||
<ul> |
||||
<li><i>JODE</i> is used by the <a |
||||
href="http://jedit.standmed.com/plugins/JavaInsight">JavaInsight plugin</a> for |
||||
<a href="http://jedit.sourceforge.net/">jEdit</a>.</li> |
||||
</ul> |
||||
<h3>Miscellanous packages needed to run JODE</h3> |
||||
<dl> |
||||
<dt>CYGWIN (unix tools for win95/NT)</dt> |
||||
<dd> |
||||
<a href="http://sourceware.cygnus.com/cygwin/">http://sourceware.cygnus.com/cygwin/</a> |
||||
</dd> |
||||
<dt>JDK 1.1:</dt> |
||||
<dd> |
||||
<a href="http://java.sun.com/products/jdk/1.1/">http://java.sun.com/products/jdk/1.1/</a> |
||||
</dd> |
||||
<dt><a name="swing">Swing for JDK 1.1:</a><dt> |
||||
<dd> |
||||
<a href="http://java.sun.com/products/jfc/index.html#download-swing">http://java.sun.com/products/jfc/index.html#download-swing</a> |
||||
</dd> |
||||
<dt>JDK 1.2:</dt> |
||||
<dd> |
||||
<a href="http://java.sun.com/products/jdk/1.2/">http://java.sun.com/products/jdk/1.2/</a> |
||||
</dd> |
||||
<dt><a name="getopt">Getopt</a>:</dt> |
||||
<dd> |
||||
<a href="http://www.urbanophile.com/arenn/hacking/download.html#getopt">http://www.urbanophile.com/arenn/hacking/download.html#getopt</a> |
||||
</dd> |
||||
<dt><a name="collections">Collection Classes</a>:</dt> |
||||
<dd>I have written a small script that puts the collection classes |
||||
from the <a href="http://www.classpath.org">GNU Classpath Project</a> into |
||||
its own package (<code>org.gnu.java.util.collections</code>). You can |
||||
download the <a href="http://www.informatik.uni-oldenburg.de/~delwi/jode/collections.tar.gz">source code</a> (including |
||||
the script), or <a href="collections.jar">a precompiled jar file</a>. |
||||
</dd> |
||||
</dl> |
||||
</td></tr> |
||||
</table> |
||||
<TABLE width="100%" border="0" cellspacing="0" cellpadding="2" bgcolor="737b9c"> |
||||
<TR> |
||||
<TD align="center"><FONT color="#ffffff"><SPAN class="titlebar"> |
||||
All trademarks and copyrights on this page are properties of their respective owners. <br> |
||||
Last updated on 8-May-2000, |
||||
Copyright © 1998-2000 by Jochen Hoenicke.</SPAN></FONT> |
||||
</TD> |
||||
</TR> |
||||
</TABLE> |
||||
|
||||
</BODY> |
||||
</HTML> |
||||
|
@ -1,115 +1,47 @@ |
||||
<?php |
||||
$menu = array( |
||||
"Jode", |
||||
array("<B>Home</B>" , "selflink", "jode", |
||||
$menu = |
||||
array("<B>Home</B>" , "selflink", "index", |
||||
"Project page" , "sflink", "project/", |
||||
"-", "-", "-", |
||||
"Applet" , "selflink", "applet", |
||||
"Download" , "selflink", "download", |
||||
"FAQ" , "selflink", "faq", |
||||
"Feedback" , "selflink", "feedback", |
||||
"Documentation", "selflink", "usage", |
||||
"License" , "selflink", "license", |
||||
"History" , "selflink", "history", |
||||
"Links" , "selflink", "links", |
||||
"Blue Sky" , "selflink", "bluesky"), |
||||
"Feedback", |
||||
array("Bug Tracking" , "sflink", "bugs/", |
||||
"Public Forums" , "sflink", "forum/", |
||||
"Mailing List" , "link", |
||||
"http://lists.sourceforge.net/mailman/listinfo/jode-users", |
||||
"Private Mail" , "link", |
||||
"http://sourceforge.net/sendmessage.php?touser=18252"), |
||||
"Download", |
||||
array("FTP server", "link", "ftp://jode.sourceforge.net/pub/jode/", |
||||
"Source releases", "sflink", "project/filelist.php")); |
||||
|
||||
$images = array( |
||||
"Powered by ", "http://sourceforge.net/sflogo.php?group_id=3790&type=1", |
||||
"SourceForge", "http://sourceforge.net", |
||||
"Best viewed with ", "a-logo.gif", |
||||
"Any Browser", "http://www.anybrowser.org/campaign/"); |
||||
|
||||
if (eregi("^Lynx", $HTTP_USER_AGENT)) { |
||||
|
||||
reset($menu); |
||||
while (list($dummy, $header) = each($menu)) { |
||||
list($dummy, $subitems) = each($menu); |
||||
"Blue Sky" , "selflink", "bluesky"); |
||||
?> |
||||
|
||||
echo "<b>$header:</b>\n"; |
||||
reset($subitems); |
||||
while (list($dummy, $name) = each($subitems)) { |
||||
list($dummy, $type) = each($subitems); |
||||
list($dummy, $link) = each($subitems); |
||||
<table cellspacing=0 cellpadding=3 border=0 bgcolor=#EEEEF8 class="nav"> |
||||
<tr><td class="nav"> |
||||
<?php |
||||
reset($menu); |
||||
$self = ereg_replace("^.*/", "", $PHP_SELF); |
||||
while (list($dummy, $name) = each($menu)) { |
||||
list($dummy, $type) = each($menu); |
||||
list($dummy, $link) = each($menu); |
||||
$name = ereg_replace(" ", " ", $name); |
||||
if ($type == "selflink") { |
||||
if ($self == "$link.$extension") { |
||||
echo "$name"; |
||||
} else { |
||||
selflink($link); |
||||
} else if ($type == "sflink") { |
||||
sflink($link); |
||||
} else if ($type == "-") { |
||||
echo "<br>\n"; |
||||
continue; |
||||
} else if ($type == "link") { |
||||
echo "<a href=\"$link\">"; |
||||
} |
||||
$name = ereg_replace(" ", " ", $name); |
||||
echo "$name</a>"; |
||||
if (current($subitems)) { |
||||
echo " |\n"; |
||||
} |
||||
} |
||||
echo "<br>\n\n"; |
||||
} |
||||
echo "<right>\n"; |
||||
reset($images); |
||||
while (list($dummy, $label) = each($images)) { |
||||
list($dummy, $src) = each($images); |
||||
list($dummy, $alt) = each($images); |
||||
list($dummy, $link) = each($images); |
||||
echo "$label<a href=\"$link\"><img src=\"$src\" border=0"; |
||||
echo " width=88 height=31 alt=\"$alt\"></a>\n"; |
||||
} |
||||
echo "</right>\n"; |
||||
} else { |
||||
echo "<table cellspacing=0 cellpadding=3 width=100%"; |
||||
echo " border=0 bgcolor=eeeef8>\n"; |
||||
|
||||
reset($menu); |
||||
while (list($dummy, $header) = each($menu)) { |
||||
list($dummy, $subitems) = each($menu); |
||||
echo "<tr bgcolor=\"7272cc\">\n<td align=\"center\">"; |
||||
echo "<font color=\"ffffff\"><b>$header</b></font></td></tr>\n"; |
||||
echo "<tr><td align=\"right\">\n"; |
||||
reset($subitems); |
||||
while (list($dummy, $name) = each($subitems)) { |
||||
list($dummy, $type) = each($subitems); |
||||
list($dummy, $link) = each($subitems); |
||||
if ($type == "selflink") { |
||||
selflink($link); |
||||
} else if ($type == "sflink") { |
||||
sflink($link); |
||||
echo "$name</a>"; |
||||
} else if ($type == "-") { |
||||
echo "<br>\n"; |
||||
continue; |
||||
} else if ($type == "link") { |
||||
echo "<a href=\"$link\">"; |
||||
echo "<a href=\"$link\">$name</a>"; |
||||
} |
||||
$name = ereg_replace(" ", " ", $name); |
||||
echo "$name</a>"; |
||||
if (current($subitems)) { |
||||
echo "<br>\n"; |
||||
} |
||||
} |
||||
} |
||||
echo "</td></tr>\n"; |
||||
echo "<tr bgcolor=\"ffffff\"><td align=\"center\">"; |
||||
|
||||
reset($images); |
||||
while (list($dummy, $label) = each($images)) { |
||||
list($dummy, $src) = each($images); |
||||
list($dummy, $alt) = each($images); |
||||
list($dummy, $link) = each($images); |
||||
echo "<br>$label<br>\n"; |
||||
echo "<a href=\"$link\"><img src=\"$src\" border=0"; |
||||
echo " width=88 height=31 alt=\"$alt\"></a><br>\n"; |
||||
if (current($menu)) { |
||||
echo " |\n"; |
||||
} |
||||
echo "</td></tr></table>\n"; |
||||
} |
||||
?> |
||||
</td></tr> |
||||
</table><br> |
||||
|
@ -1,281 +0,0 @@ |
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN"> |
||||
<html> |
||||
<head> |
||||
<title>Java Optimize and Decompile Environment (JODE)</title> |
||||
<meta name="date" content="2000-06-30"> |
||||
<meta name="description" content="JODE - Java Optimize and Decompile Environment."> |
||||
<meta name="author" content="Jochen Hoenicke"> |
||||
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL"> |
||||
</head> |
||||
|
||||
<BODY bgcolor=#FFFFFF topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0"> |
||||
<table cellpadding=4 cellspacing=1 width=100%> |
||||
<tr><td> |
||||
</td> |
||||
<td> <img src="jode-logo.gif" alt="JODE" width=286 height=110></td> |
||||
</tr> |
||||
<tr> |
||||
<td valign="top"> |
||||
<table cellspacing=0 cellpadding=3 width=100% border=0 bgcolor=eeeef8> |
||||
<tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Jode</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="./"><B>Home</B></a><br> |
||||
<a href="http://sourceforge.net/project/?group_id=3790">Project page</a><br> |
||||
<br> |
||||
<a href="./applet.html">Applet</a><br> |
||||
<a href="./download.html">Download</a><br> |
||||
<a href="./usage.html">Documentation</a><br> |
||||
<a href="./license.html">License</a><br> |
||||
<a href="./history.html">History</a><br> |
||||
<a href="./links.html">Links</a><br> |
||||
<a href="./bluesky.html">Blue Sky</a><tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Feedback</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="http://sourceforge.net/bugs/?group_id=3790">Bug Tracking</a><br> |
||||
<a href="http://sourceforge.net/forum/?group_id=3790">Public Forums</a><br> |
||||
<a href="http://lists.sourceforge.net/mailman/listinfo/jode-users">Mailing List</a><br> |
||||
<a href="http://sourceforge.net/sendmessage.html?touser=18252">Private Mail</a><tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Download</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="ftp://jode.sourceforge.net/pub/jode/">FTP server</a><br> |
||||
<a href="http://sourceforge.net/project/filelist.html?group_id=3790">Source releases</a></td></tr> |
||||
<tr bgcolor="ffffff"><td align="center"><br>Powered by <br> |
||||
<a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.html?group_id=3790&type=1" border=0 width=88 height=31 alt="SourceForge"></a><br> |
||||
<br>Best viewed with <br> |
||||
<a href="http://www.anybrowser.org/campaign/"><img src="a-logo.gif" border=0 width=88 height=31 alt="Any Browser"></a><br> |
||||
</td></tr></table> |
||||
</td> |
||||
<td valign="top"> |
||||
<a name="decompiler"> |
||||
<h1>Using the Decompiler</h1></a> |
||||
After you have <a href="./download.html">downloaded</a> the necessary |
||||
packages, put them into your <tt>CLASSPATH</tt>: |
||||
|
||||
<ul><li>Under Windows you have to start a MSDOS session and type |
||||
something like: |
||||
<pre> |
||||
set CLASSPATH=C:\download\jode-xxx.jar;C:\swing\swingall.jar |
||||
</pre> |
||||
</li><li>Under Unix you start a shell and type (for bourne shell): |
||||
<pre>export CLASSPATH=/tmp/jode-xxx.jar:/usr/local/swing/swingall.jar</pre> |
||||
or for csh: |
||||
<pre>setenv CLASSPATH /tmp/jode-xxx.jar:/usr/local/swing/swingall.jar</pre> |
||||
</ul> |
||||
<br> |
||||
There is also a batch file for windows and a script file for unix, |
||||
that you can use. Adapt the CLASSPATH in the file and put it to a |
||||
convenient location. |
||||
<pre> |
||||
jar -xvf jode-xxx.jar bin/jode.bat <i>resp.</i> bin/jode |
||||
</pre> |
||||
|
||||
<a name="cmdline"><h3>Command Line Interface</h3></a> |
||||
|
||||
The most powerful way to start <I>JODE</I>'s decompiler is the command |
||||
line interface. Some people don't like long command lines; they |
||||
should go to the next section. <br> |
||||
|
||||
Start the class <tt>jode.decompiler.Main</tt> with the options. The |
||||
following command will give a complete list of the available commands: |
||||
|
||||
<pre>java jode.decompiler.Main --help</pre> |
||||
|
||||
<a name="awt"><h3>AWT Interface</h3></a> |
||||
|
||||
The AWT Interface looks exactly like the <a href="./applet.html">applet</a>. In fact the applet uses the AWT Interface. You start it |
||||
after setting the <tt>CLASSPATH</tt> (see <a href="./usage.html#decompiler">above</a>), with |
||||
|
||||
<pre>java jode.decompiler.Window</pre> |
||||
|
||||
In the classpath line you can enter a number of jar files, zip files |
||||
and directories separated by comma(<tt>,</tt>). Then enter the |
||||
dot(<tt>.</tt>) separated name of the class you want to decompile. |
||||
Press the <code>start</code> button and the decompiled class should |
||||
appear. You can save it via the <code>save</code> button. |
||||
|
||||
<a name="swing"><h3>Swing Interface</h3></a> |
||||
|
||||
For the swing interface you need java version 1.2 or the separately |
||||
available swing package (see <a href="./links.html#swing">link |
||||
page</a>. You can invoke it like this: |
||||
<pre> |
||||
java jode.swingui.Main --classpath classes.jar |
||||
</pre> |
||||
|
||||
The swing interface will show the package hierarchie of all classes |
||||
in the classpath on the left side. You can now select a class and the |
||||
decompiled code will appear on the right side. Via the menu, you may |
||||
change the classpath or switch between package hierarchie tree and |
||||
class inheritence tree.<br> |
||||
|
||||
The swing interface is very useful to browse through class files if |
||||
you don't have the source code. You can also use it to trace bugs in |
||||
library code. It is not meant to generate <tt>java</tt> files and so |
||||
you won't find a save option there.<br> |
||||
|
||||
<a name="java"><h3>Java Interface</h3></a> |
||||
|
||||
If you want to integrate <i>JODE</i> into your own java program, you |
||||
can use the <a |
||||
href="Decompiler.java"><code>jode.decompiler.Decompiler</code></a> |
||||
class. Note that the GPL only allows you to integrate <i>JODE</i> |
||||
into GPL programs. Please contact me if you use <i>JODE</i> in this |
||||
way.<br> |
||||
|
||||
You may use this <a |
||||
href="ftp://jode.sourceforge.net/pub/jode/jode-embedded.jar">stripped |
||||
down jar archive</a> containing all necessary classes. |
||||
|
||||
<a name="optimizer"><h1>Using the Obfuscator</h1> |
||||
|
||||
To use the obfuscator you should first create a script file, say <a |
||||
href="myproject.jos"><tt>myproject.jos</tt></a>. Then you can invoke the |
||||
obfuscator with: |
||||
<pre> |
||||
java jode.obfuscator.Main myproject.jos |
||||
</pre> |
||||
|
||||
<p>The script file should contain the following options: </p> |
||||
|
||||
<p>First select the classpath. You should include everything in the |
||||
classpath that you need to run your application. This also includes |
||||
the system class files (Sun puts them into <code>classes.zip</code> or |
||||
<code>rt.jar</code>))</p> |
||||
<pre> |
||||
classpath = "c:\\jdk1.2\\jre\\lib\\rt.jar","d:\\project\\java", |
||||
"ftp://www.myorg.org/pub/classlib.jar" |
||||
</pre> |
||||
|
||||
<p>Specify where you want the obfuscated classes to go. I recommend |
||||
to write them directly into a zip file, but you can also give a |
||||
directory.</p> |
||||
<pre> |
||||
dest = "obfuscated.zip" |
||||
</pre> |
||||
|
||||
<p>You can make <i>JODE</i> write its translation table. This table |
||||
can be used later to undo the name obfuscation, or you can look there |
||||
to decrypt exceptions you may get.</p> |
||||
<pre> |
||||
revtable = "translat.tbl" |
||||
</pre> |
||||
|
||||
<p>Select what you want to strip. There are several |
||||
possibilities, which can be separated by comma(<tt>,</tt>):</p> |
||||
<dl> |
||||
<dt>unreach</dt> |
||||
<dd>strip unreachable methods and classes.</dd> |
||||
<dt>source</dt> |
||||
<dd>remove the name of the java file (exceptions will get unreadable).</dd> |
||||
<dt>lnt</dt> |
||||
<dd>remove the line number table (exceptions will get unreadable).</dd> |
||||
<dt>lvt</dt> |
||||
<dd>remove the local variable table (debugging doesn't work).</dd> |
||||
<dt>inner</dt> |
||||
<dd>strip inner class info (reflection doesn't work correctly).</dd> |
||||
</dl> |
||||
<pre> |
||||
strip = "unreach","lvt","inner" |
||||
</pre> |
||||
|
||||
<p>Select the packages and classes you want to obfuscate. You should |
||||
only include libraries, that you don't ship separately. If you give a |
||||
package, all classes and subpackages are loaded. You can also use |
||||
<code>*</code> as wild card, that matches everything (including dots). |
||||
</p> |
||||
<pre> |
||||
load = new WildCard { value = "org.myorg.myproject" }, |
||||
new WildCard { value = "org.myorg.mylib*" }, |
||||
new WildCard { value = "org.otherorg.shortlib" } |
||||
</pre> |
||||
|
||||
<p>Select the methods and classes you want to preserve. This is |
||||
the <tt>main</tt> method for applications and the default constructor |
||||
<tt><init>.()V</tt> for applets, resource bundles and other classes |
||||
that you load manually at runtime.<br> You have to give the method |
||||
name and the type signature to identify your method. <tt>javap |
||||
-s</tt> will show you the type signatures for your classes, but you |
||||
may also use <tt>*</tt>, to select all methods with that name.</p> |
||||
<pre> |
||||
preserve = new WildCard { value = "org.myorg.ApplicationClass.main.*" }, |
||||
new WildCard { value = "org.myorg.AppletClass.<init>.()V" }, |
||||
new WildCard { value = "org.resources.Bundle*.<init>.()V" }, |
||||
</pre> |
||||
|
||||
<p>If you want to obfuscate (or just shorten) the identifier you can |
||||
specify a renamer. There are currently following renamer |
||||
available</p> |
||||
<dl><dt>StrongRenamer</dt> |
||||
<dd>Renames to the shortest possible name. You can give a charset |
||||
that should be used. It uses the same name as much as possible.</dd> |
||||
<dt>UniqueRenamer</dt> |
||||
<dd>Renames to unique identifier of the form <tt>xxx123</tt>. Useful |
||||
to reduce name conflicts, before you decompile an obfuscated package.</dd> |
||||
<dt>NameSwapper</dt> |
||||
<dd>This renamer just swaps the names. This is a funny obfuscation |
||||
option that is not very strong, but very confusing.</dd> |
||||
<dt>KeywordRenamer</dt> |
||||
<dd>Renames identifiers to keyword. You can give your own list of |
||||
keywords as parameters. Resulting code is not decompilable directly, |
||||
<b>but it is <i>not</i> legal bytecode either</b>. Some paranoid |
||||
web browsers refuse to run applets containing keywords as identifiers |
||||
(and they are completely within the Java VM spec).</dd> |
||||
</dl> |
||||
<pre> |
||||
renamer = new StrongRenamer |
||||
</pre> |
||||
|
||||
<p>You can also create a renaming table with the same format as the |
||||
table written by revtable. The entries in the table get precedence |
||||
over renamer. Entries not in the table will get renamed by the |
||||
renamer.<p> |
||||
<pre> |
||||
table = "translat.tbl" |
||||
</pre> |
||||
|
||||
<p>Now you can select the analyzer. The purpose of the |
||||
analyzer is to mark all reachable methods, find out which methods |
||||
needs to get the same name (overloading), and which method names |
||||
mustn't change (overload of library methods, e.g. <tt>nextElement</tt> |
||||
for <tt>Enumeration</tt>s). There are currently two analyzers. |
||||
<dl><dt>SimpleAnalyzer</dt> |
||||
<dd>Straight forward analyzer. It is fast and will remove dead code |
||||
on method basis.</dd> |
||||
|
||||
<dd><dt>ConstantAnalyzer</dt> |
||||
<dd>Strong analyzer that will determine, which fields and instructions |
||||
have constant values. It will remove dead code on instruction basis |
||||
and replace constant instruction with a load of the constant, or |
||||
remove them completely.<br> This analyzer is especially useful to |
||||
revert the flow obfuscation of some other obfuscators.</dd> |
||||
</dl> |
||||
</p> |
||||
<pre> |
||||
analyzer = new ConstantAnalyzer |
||||
</pre> |
||||
|
||||
<p>Pre- and Post transformers transform the bytecode before |
||||
resp. after the Analyzer runs. Using this default should be okay. |
||||
You may remove the LocalOptimizer, though, if you have problems.</p> |
||||
<p>In the future I may add some new post transformers, that do string |
||||
encryption, flow obfuscation and similar things. If you want to write |
||||
your own Transformers please contact me, since the next version will |
||||
change the bytecode interface.</p> |
||||
<pre> |
||||
post = new LocalOptimizer, new RemovePopAnalyzer |
||||
</pre> |
||||
</td></tr> |
||||
</table> |
||||
<TABLE width="100%" border="0" cellspacing="0" cellpadding="2" bgcolor="737b9c"> |
||||
<TR> |
||||
<TD align="center"><FONT color="#ffffff"><SPAN class="titlebar"> |
||||
All trademarks and copyrights on this page are properties of their respective owners. <br> |
||||
Last updated on 8-May-2000, |
||||
Copyright © 1998-2000 by Jochen Hoenicke.</SPAN></FONT> |
||||
</TD> |
||||
</TR> |
||||
</TABLE> |
||||
|
||||
</BODY> |
||||
</HTML> |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue