summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/Deobfuscator.java
diff options
context:
space:
mode:
authorGravatar jeff2014-08-20 01:21:52 -0400
committerGravatar jeff2014-08-20 01:21:52 -0400
commita85529d1ce6ec533809575ec84572de855464b36 (patch)
tree8f1894c272edf0e7eb22aec2f3af41f6bd19c092 /src/cuchaz/enigma/Deobfuscator.java
parentstarted new reference navigation system (diff)
downloadenigma-fork-a85529d1ce6ec533809575ec84572de855464b36.tar.gz
enigma-fork-a85529d1ce6ec533809575ec84572de855464b36.tar.xz
enigma-fork-a85529d1ce6ec533809575ec84572de855464b36.zip
finished reference navigation system. Still need to debug and polish it, but the basic idea seems to work. =)
Diffstat (limited to 'src/cuchaz/enigma/Deobfuscator.java')
-rw-r--r--src/cuchaz/enigma/Deobfuscator.java105
1 files changed, 50 insertions, 55 deletions
diff --git a/src/cuchaz/enigma/Deobfuscator.java b/src/cuchaz/enigma/Deobfuscator.java
index 293e1c2..34e6033 100644
--- a/src/cuchaz/enigma/Deobfuscator.java
+++ b/src/cuchaz/enigma/Deobfuscator.java
@@ -26,6 +26,7 @@ import com.strobel.decompiler.languages.java.ast.AstBuilder;
26import com.strobel.decompiler.languages.java.ast.CompilationUnit; 26import com.strobel.decompiler.languages.java.ast.CompilationUnit;
27import com.strobel.decompiler.languages.java.ast.InsertParenthesesVisitor; 27import com.strobel.decompiler.languages.java.ast.InsertParenthesesVisitor;
28 28
29import cuchaz.enigma.analysis.EntryReference;
29import cuchaz.enigma.analysis.JarIndex; 30import cuchaz.enigma.analysis.JarIndex;
30import cuchaz.enigma.analysis.SourceIndex; 31import cuchaz.enigma.analysis.SourceIndex;
31import cuchaz.enigma.analysis.SourceIndexVisitor; 32import cuchaz.enigma.analysis.SourceIndexVisitor;
@@ -169,98 +170,92 @@ public class Deobfuscator
169 SourceIndex index = new SourceIndex( buf.toString() ); 170 SourceIndex index = new SourceIndex( buf.toString() );
170 root.acceptVisitor( new SourceIndexVisitor(), index ); 171 root.acceptVisitor( new SourceIndexVisitor(), index );
171 172
172 return index; 173 /* DEBUG
173 } 174 for( Token token : index.referenceTokens() )
174
175 // NOTE: these methods are a bit messy... oh well
176
177 public void rename( Entry obfEntry, String newName )
178 {
179 if( obfEntry instanceof ClassEntry )
180 { 175 {
181 m_renamer.setClassName( (ClassEntry)obfEntry, newName ); 176 EntryReference<Entry,Entry> reference = index.getDeobfReference( token );
182 } 177 System.out.println( token + " -> " + reference + " -> " + index.getReferenceToken( reference ) );
183 else if( obfEntry instanceof FieldEntry )
184 {
185 m_renamer.setFieldName( (FieldEntry)obfEntry, newName );
186 }
187 else if( obfEntry instanceof MethodEntry )
188 {
189 m_renamer.setMethodTreeName( (MethodEntry)obfEntry, newName );
190 }
191 else if( obfEntry instanceof ConstructorEntry )
192 {
193 m_renamer.setClassName( obfEntry.getClassEntry(), newName );
194 }
195 else if( obfEntry instanceof ArgumentEntry )
196 {
197 m_renamer.setArgumentName( (ArgumentEntry)obfEntry, newName );
198 }
199 else
200 {
201 throw new Error( "Unknown entry type: " + obfEntry.getClass().getName() );
202 } 178 }
179 */
203 180
204 // clear the type loader cache 181 return index;
205 m_typeLoader.clearCache();
206 } 182 }
207 183
208 public Entry obfuscateEntry( Entry deobfEntry ) 184 public Entry obfuscateEntry( Entry deobfEntry )
209 { 185 {
210 Translator translator = getTranslator( TranslationDirection.Obfuscating ); 186 if( deobfEntry == null )
211 if( deobfEntry instanceof ClassEntry )
212 {
213 return translator.translateEntry( (ClassEntry)deobfEntry );
214 }
215 else if( deobfEntry instanceof FieldEntry )
216 {
217 return translator.translateEntry( (FieldEntry)deobfEntry );
218 }
219 else if( deobfEntry instanceof MethodEntry )
220 { 187 {
221 return translator.translateEntry( (MethodEntry)deobfEntry ); 188 return null;
222 } 189 }
223 else if( deobfEntry instanceof ConstructorEntry ) 190 return getTranslator( TranslationDirection.Obfuscating ).translateEntry( deobfEntry );
191 }
192
193 public Entry deobfuscateEntry( Entry obfEntry )
194 {
195 if( obfEntry == null )
224 { 196 {
225 return translator.translateEntry( (ConstructorEntry)deobfEntry ); 197 return null;
226 } 198 }
227 else if( deobfEntry instanceof ArgumentEntry ) 199 return getTranslator( TranslationDirection.Deobfuscating ).translateEntry( obfEntry );
200 }
201
202 public EntryReference<Entry,Entry> obfuscateReference( EntryReference<Entry,Entry> deobfReference )
203 {
204 if( deobfReference == null )
228 { 205 {
229 return translator.translateEntry( (ArgumentEntry)deobfEntry ); 206 return null;
230 } 207 }
231 else 208 return new EntryReference<Entry,Entry>(
209 obfuscateEntry( deobfReference.entry ),
210 obfuscateEntry( deobfReference.context ),
211 deobfReference.pos
212 );
213 }
214
215 public EntryReference<Entry,Entry> deobfuscateReference( EntryReference<Entry,Entry> obfReference )
216 {
217 if( obfReference == null )
232 { 218 {
233 throw new Error( "Unknown entry type: " + deobfEntry.getClass().getName() ); 219 return null;
234 } 220 }
221 return new EntryReference<Entry,Entry>(
222 deobfuscateEntry( obfReference.entry ),
223 deobfuscateEntry( obfReference.context ),
224 obfReference.pos
225 );
235 } 226 }
236 227
237 public Entry deobfuscateEntry( Entry obfEntry ) 228 // NOTE: these methods are a bit messy... oh well
229
230 public void rename( Entry obfEntry, String newName )
238 { 231 {
239 Translator translator = getTranslator( TranslationDirection.Deobfuscating );
240 if( obfEntry instanceof ClassEntry ) 232 if( obfEntry instanceof ClassEntry )
241 { 233 {
242 return translator.translateEntry( (ClassEntry)obfEntry ); 234 m_renamer.setClassName( (ClassEntry)obfEntry, newName );
243 } 235 }
244 else if( obfEntry instanceof FieldEntry ) 236 else if( obfEntry instanceof FieldEntry )
245 { 237 {
246 return translator.translateEntry( (FieldEntry)obfEntry ); 238 m_renamer.setFieldName( (FieldEntry)obfEntry, newName );
247 } 239 }
248 else if( obfEntry instanceof MethodEntry ) 240 else if( obfEntry instanceof MethodEntry )
249 { 241 {
250 return translator.translateEntry( (MethodEntry)obfEntry ); 242 m_renamer.setMethodTreeName( (MethodEntry)obfEntry, newName );
251 } 243 }
252 else if( obfEntry instanceof ConstructorEntry ) 244 else if( obfEntry instanceof ConstructorEntry )
253 { 245 {
254 return translator.translateEntry( (ConstructorEntry)obfEntry ); 246 m_renamer.setClassName( obfEntry.getClassEntry(), newName );
255 } 247 }
256 else if( obfEntry instanceof ArgumentEntry ) 248 else if( obfEntry instanceof ArgumentEntry )
257 { 249 {
258 return translator.translateEntry( (ArgumentEntry)obfEntry ); 250 m_renamer.setArgumentName( (ArgumentEntry)obfEntry, newName );
259 } 251 }
260 else 252 else
261 { 253 {
262 throw new Error( "Unknown entry type: " + obfEntry.getClass().getName() ); 254 throw new Error( "Unknown entry type: " + obfEntry.getClass().getName() );
263 } 255 }
256
257 // clear the type loader cache
258 m_typeLoader.clearCache();
264 } 259 }
265 260
266 public boolean hasMapping( Entry obfEntry ) 261 public boolean hasMapping( Entry obfEntry )