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. |
|
@ -1 +1 @@ |
|||||||
Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.DE> |
Jochen Hoenicke <Jochen.Hoenicke@Informatik.Uni-Oldenburg.DE> |
||||||
|
@ -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
|
## 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 |
||||||
Makefile.in |
Makefile.in |
||||||
|
*.html |
||||||
|
@ -1,14 +1,46 @@ |
|||||||
## Input file for automake to generate the Makefile.in used by configure
|
## Input file for automake to generate the Makefile.in used by configure
|
||||||
|
|
||||||
EXTRA_DIST = \
|
PHP_FILES = \
|
||||||
applet.html \ |
applet.php \ |
||||||
download.html.in \ |
bluesky.php \ |
||||||
history.html \ |
download.php \ |
||||||
jode.html \ |
faq.php \ |
||||||
license.html \ |
feedback.php \ |
||||||
links.html \ |
history.php \ |
||||||
usage.html \ |
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 \ |
myproject.jos \ |
||||||
dasm_to_java.perl \ |
dasm_to_java.perl \ |
||||||
gimp/jode-logo.xcf \ |
gimp/jode-logo.xcf \ |
||||||
jode-logo.gif |
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"); ?> |
<?php require("header.inc"); ?> |
||||||
<h1>The <i>JODE</i> Applet</h1> |
<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> |
<center> |
||||||
<applet code="jode/Applet.class" archive="jode-applet.jar" width=540 height=400> |
<applet code="jode/Applet.class" archive="jode-applet.jar" width=540 height=400> |
||||||
<param name=pagecolor value="ffffff"> |
<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"> |
<param name=class value="PlasmaApplet"> |
||||||
<p>Sorry you need a java enabled browser to test a java applet ;-)</p> |
<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> |
<p>Don't read the rest, it only contains information about the applet.</p> |
||||||
</applet> |
</applet> |
||||||
</center><br> |
</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 |
href="http://www.informatik.uni-oldenburg.de/~mw/plasma.html">Michael's |
||||||
Plasma applet</a> (and give the decompiler some time to download the |
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 |
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 |
choice, using a similar syntax. Only http and ftp addresses are supported. |
||||||
colon `:' in the url. You can also point it to a directory containing |
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 |
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 |
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> |
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 |
You can't use this applet for local files. You can try to give |
||||||
a server that is accessible from sourceforge. You can try to give |
local filenames directly without going through Sourceforge, but that is |
||||||
local filenames directly without the load.php wrapper, but that is |
|
||||||
probably forbidden by your browser. Most browser only allow loading |
probably forbidden by your browser. Most browser only allow loading |
||||||
files from the same server as the applet, and this is the reason why |
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> |
Save probably doesn't work, because it is forbidden by your browser.<br><br> |
||||||
<?php require("footer.inc"); ?> |
<?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"); ?> |
<?php require("header.inc"); ?> |
||||||
<h2>Download</h2> |
<h1>Download</h1> |
||||||
|
|
||||||
The latest source code of <i>JODE</i> is available at the <?php |
<p>Jode is available in the <? |
||||||
sflink("project/") ?>project page</a>. |
sflink("project/showfiles.php")?>download area</a> in source or |
||||||
You need several other packages to build <i>JODE</i>, check the <?php |
binary form. For compiling the source code, you need several other |
||||||
selflink("links") ?>links page</a>. <br><br> |
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 |
<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 |
precompiled form, though. There are two jar archives in the download |
||||||
href="ftp://jode.sourceforge.net/pub/jode">ftp server</a>. You may |
area:</P> |
||||||
need to press shift while clicking on the link, depending on your |
|
||||||
browser. |
|
||||||
|
|
||||||
<?php |
<ul> <li>jode-1.1-JDK1.1.jar is for JDK 1.1. If you want to use |
||||||
function jarlink($what) { |
the swing interface, you have to download swing separately, all other |
||||||
global $version; |
packages are already included in the archive. </li> |
||||||
echo "<a href=\"ftp://jode.sourceforge.net/pub/jode/jode-".$version.$what; |
|
||||||
echo ".jar\">jode-".$version.$what.".jar</a>"; |
|
||||||
} ?> |
|
||||||
|
|
||||||
<ul> <li><?php jarlink("-1.1") ?> is for JDK 1.1. It already
|
<li>jode-1.1.jar is for JDK 1.2 or better. It should run |
||||||
contains Getopt and the collection classes from the GNU Classpath |
without any other package.</li> </ul> </p> |
||||||
project. If you want to use the swing interface, you have to download |
|
||||||
swing separately. </li> |
|
||||||
|
|
||||||
<li> <?php jarlink("-1.2") ?> is for JDK 1.2. It already
|
<h1>CVS Repository</h1> |
||||||
contains Getopt, so you don't need any other package.</li> </ul> |
|
||||||
|
|
||||||
<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/") ?> |
<ul> |
||||||
CVS repository</a>. |
<li><code>-r jode_1_0_93</code>: checks out the version 1.0.93</li> |
||||||
Follow the instruction on that page; use <code>jode</code> as |
<li><code>-r branch_1_1</code>: checks out the latest version in the |
||||||
<i>modulename</i>. Then change to the directory jode and run |
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> |
<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"); ?> |
<?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"); ?> |
<?php require("header.inc"); ?> |
||||||
|
<h1>License</h1> |
||||||
<p><i>JODE</i> is Copyright © 1998-2000 by Jochen Hoenicke. <br><br> |
<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 |
it under the terms of the <a |
||||||
href="http://www.gnu.org/copyleft/gpl.html">GNU General Public |
href="http://www.gnu.org/copyleft/gpl.html">GNU General Public |
||||||
License</a> as published by the Free Software Foundation; either |
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 |
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 |
<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"); ?> |
<?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 |
<?php |
||||||
$menu = array( |
$menu = |
||||||
"Jode", |
array("<B>Home</B>" , "selflink", "index", |
||||||
array("<B>Home</B>" , "selflink", "jode", |
|
||||||
"Project page" , "sflink", "project/", |
"Project page" , "sflink", "project/", |
||||||
"-", "-", "-", |
|
||||||
"Applet" , "selflink", "applet", |
"Applet" , "selflink", "applet", |
||||||
"Download" , "selflink", "download", |
"Download" , "selflink", "download", |
||||||
|
"FAQ" , "selflink", "faq", |
||||||
|
"Feedback" , "selflink", "feedback", |
||||||
"Documentation", "selflink", "usage", |
"Documentation", "selflink", "usage", |
||||||
"License" , "selflink", "license", |
"License" , "selflink", "license", |
||||||
"History" , "selflink", "history", |
"History" , "selflink", "history", |
||||||
"Links" , "selflink", "links", |
"Links" , "selflink", "links", |
||||||
"Blue Sky" , "selflink", "bluesky"), |
"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); |
|
||||||
|
|
||||||
echo "<b>$header:</b>\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); |
|
||||||
} 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); |
<table cellspacing=0 cellpadding=3 border=0 bgcolor=#EEEEF8 class="nav"> |
||||||
while (list($dummy, $header) = each($menu)) { |
<tr><td class="nav"> |
||||||
list($dummy, $subitems) = each($menu); |
<?php |
||||||
echo "<tr bgcolor=\"7272cc\">\n<td align=\"center\">"; |
reset($menu); |
||||||
echo "<font color=\"ffffff\"><b>$header</b></font></td></tr>\n"; |
$self = ereg_replace("^.*/", "", $PHP_SELF); |
||||||
echo "<tr><td align=\"right\">\n"; |
while (list($dummy, $name) = each($menu)) { |
||||||
reset($subitems); |
list($dummy, $type) = each($menu); |
||||||
while (list($dummy, $name) = each($subitems)) { |
list($dummy, $link) = each($menu); |
||||||
list($dummy, $type) = each($subitems); |
$name = ereg_replace(" ", " ", $name); |
||||||
list($dummy, $link) = each($subitems); |
if ($type == "selflink") { |
||||||
if ($type == "selflink") { |
if ($self == "$link.$extension") { |
||||||
selflink($link); |
echo "$name"; |
||||||
} else if ($type == "sflink") { |
} else { |
||||||
sflink($link); |
selflink($link); |
||||||
} else if ($type == "-") { |
|
||||||
echo "<br>\n"; |
|
||||||
continue; |
|
||||||
} else if ($type == "link") { |
|
||||||
echo "<a href=\"$link\">"; |
|
||||||
} |
|
||||||
$name = ereg_replace(" ", " ", $name); |
|
||||||
echo "$name</a>"; |
echo "$name</a>"; |
||||||
if (current($subitems)) { |
|
||||||
echo "<br>\n"; |
|
||||||
} |
|
||||||
} |
} |
||||||
|
} else if ($type == "sflink") { |
||||||
|
sflink($link); |
||||||
|
echo "$name</a>"; |
||||||
|
} else if ($type == "-") { |
||||||
|
echo "<br>\n"; |
||||||
|
continue; |
||||||
|
} else if ($type == "link") { |
||||||
|
echo "<a href=\"$link\">$name</a>"; |
||||||
} |
} |
||||||
echo "</td></tr>\n"; |
if (current($menu)) { |
||||||
echo "<tr bgcolor=\"ffffff\"><td align=\"center\">"; |
echo " |\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 "<br>$label<br>\n"; |
|
||||||
echo "<a href=\"$link\"><img src=\"$src\" border=0"; |
|
||||||
echo " width=88 height=31 alt=\"$alt\"></a><br>\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