If you are looking for the decompiler itself, visit https://github.com/jindrapetrik/jpexs-decompiler
NEW : We have got a new blog where we post some interesting SWF internals info.

#590 Deobfuscation error : get what it was able to read
Author:
moonlightangel

Date created:
Type: question
Visibility: Everybody
Assigned to:
Labels: Deobfuscation
State: closed 

Hello,
I've got a little question. I know you don't work on deobfuscation anymore.
I got a AS3 file that has an obfuscated method, and therefore throws a deobfuscation
error.
I was wondering if it was possible to print out what it was able to read.
Let me explain that. If the deobfuscation fails, it means that somewhere, it wasn't able
to read the bytecode and generate AS code result.
If an error occurs, it prints a deobfuscation error for the whole method.
Is there a way to make it print the "readable" part of the bytecode before the error
occurs ?
The bytecode is just too hard to read and understand.
Hope I was clear enough and thank you in advance.
It is not possible. The source code is not step by step generated from the bytecodes.
First a graph should be created from the bytecodes. (And most of the problems are in this
step, the text rendering from the graph is much more reliable)
Suppose that the bytecodes are:
push xx
setlocal xx
<other>
jump or if xx
Without the jump the result would be:
var xx = yy;
With the jump it can be a loop:
while (zz) {
var xx = yy;
}
So the first character of the generatad aAS code is diffrent, it is not possible to "get
what it was to read" in the AS view. It is possible only in P-Code view.
Am I right, JPEXS?
+the obfuscators usually (if not ever) starts the obfuscation with the first instrucion.
State: new→upgraded
I think it would be very complicated. The algorithm I use for graph
generation/deobfuscation resolves jumps based on stack. And the deobfuscation problems are
usually caused by empty stack for some reasons.
Also the deobfuscation algorithm is buggy and always will be, and I don't have any plans
to improve it, because it takes much time withot any usefull result. Sorry.
I am closing this, hope you understand.
State: upgraded→closed