mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-09-25 09:50:51 +00:00
Allow assing AS2 classes with obfuscated identifiiers
This commit is contained in:
+15
-2
@@ -12,13 +12,16 @@
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library.␍ */
|
||||
* License along with this library.
|
||||
*/
|
||||
package com.jpexs.decompiler.flash.action.model;
|
||||
|
||||
import com.jpexs.decompiler.flash.IdentifiersDeobfuscation;
|
||||
import com.jpexs.decompiler.flash.SourceGeneratorLocalData;
|
||||
import com.jpexs.decompiler.flash.action.swf5.ActionGetMember;
|
||||
import com.jpexs.decompiler.flash.helpers.CodeFormatting;
|
||||
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
|
||||
import com.jpexs.decompiler.flash.helpers.StringBuilderTextWriter;
|
||||
import com.jpexs.decompiler.graph.CompilationException;
|
||||
import com.jpexs.decompiler.graph.GraphSourceItem;
|
||||
import com.jpexs.decompiler.graph.GraphSourceItemPos;
|
||||
@@ -39,6 +42,8 @@ public class GetMemberActionItem extends ActionItem {
|
||||
|
||||
public final GraphTargetItem memberName;
|
||||
|
||||
public boolean printObfuscatedMemberName = false;
|
||||
|
||||
@Override
|
||||
public void visit(GraphTargetVisitorInterface visitor) {
|
||||
visitor.visit(object);
|
||||
@@ -54,7 +59,15 @@ public class GetMemberActionItem extends ActionItem {
|
||||
@Override
|
||||
public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException {
|
||||
object.toString(writer, localData);
|
||||
if ((!(memberName instanceof DirectValueActionItem)) || (!((DirectValueActionItem) memberName).isString()) || (!IdentifiersDeobfuscation.isValidName(false, ((DirectValueActionItem) memberName).toStringNoQuotes(localData)))) {
|
||||
if ((memberName instanceof DirectValueActionItem) && printObfuscatedMemberName) {
|
||||
writer.append(".");
|
||||
StringBuilder sb = new StringBuilder();
|
||||
StringBuilderTextWriter sbw = new StringBuilderTextWriter(new CodeFormatting(), sb);
|
||||
stripQuotes(memberName, localData, sbw);
|
||||
writer.append(IdentifiersDeobfuscation.printIdentifier(false, sb.toString()));
|
||||
return writer;
|
||||
}
|
||||
if (((!(memberName instanceof DirectValueActionItem)) || (!((DirectValueActionItem) memberName).isString()) || (!printObfuscatedMemberName && !IdentifiersDeobfuscation.isValidName(false, ((DirectValueActionItem) memberName).toStringNoQuotes(localData))))) {
|
||||
writer.append("[");
|
||||
memberName.toString(writer, localData);
|
||||
return writer.append("]");
|
||||
|
||||
+17
-2
@@ -12,13 +12,16 @@
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library.␍ */
|
||||
* License along with this library.
|
||||
*/
|
||||
package com.jpexs.decompiler.flash.action.model;
|
||||
|
||||
import com.jpexs.decompiler.flash.IdentifiersDeobfuscation;
|
||||
import com.jpexs.decompiler.flash.SourceGeneratorLocalData;
|
||||
import com.jpexs.decompiler.flash.action.swf4.ActionGetVariable;
|
||||
import com.jpexs.decompiler.flash.helpers.CodeFormatting;
|
||||
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
|
||||
import com.jpexs.decompiler.flash.helpers.StringBuilderTextWriter;
|
||||
import com.jpexs.decompiler.flash.helpers.hilight.HighlightData;
|
||||
import com.jpexs.decompiler.graph.CompilationException;
|
||||
import com.jpexs.decompiler.graph.GraphSourceItem;
|
||||
@@ -47,6 +50,8 @@ public class GetVariableActionItem extends ActionItem {
|
||||
|
||||
private boolean computedVariableComputed = false;
|
||||
|
||||
public boolean printObfuscatedName = false;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name.toString();
|
||||
@@ -64,7 +69,17 @@ public class GetVariableActionItem extends ActionItem {
|
||||
|
||||
@Override
|
||||
public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException {
|
||||
if ((name instanceof DirectValueActionItem) && (((DirectValueActionItem) name).isString()) && (IdentifiersDeobfuscation.isValidNameWithDot(false, ((DirectValueActionItem) name).toStringNoQuotes(localData), "this", "super")
|
||||
if (name instanceof DirectValueActionItem && printObfuscatedName) {
|
||||
HighlightData srcData = getSrcData();
|
||||
srcData.localName = name.toStringNoQuotes(localData);
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
StringBuilderTextWriter sbw = new StringBuilderTextWriter(new CodeFormatting(), sb);
|
||||
stripQuotes(name, localData, sbw);
|
||||
writer.append(IdentifiersDeobfuscation.printIdentifier(false, sb.toString()));
|
||||
return writer;
|
||||
}
|
||||
if ((name instanceof DirectValueActionItem) && (((DirectValueActionItem) name).isString()) && (printObfuscatedName || IdentifiersDeobfuscation.isValidNameWithDot(false, ((DirectValueActionItem) name).toStringNoQuotes(localData), "this", "super")
|
||||
|| IdentifiersDeobfuscation.isValidNameWithSlash(((DirectValueActionItem) name).toStringNoQuotes(localData), "this", "super"))) {
|
||||
HighlightData srcData = getSrcData();
|
||||
srcData.localName = name.toStringNoQuotes(localData);
|
||||
|
||||
+9
@@ -21,6 +21,7 @@ import com.jpexs.decompiler.flash.action.Action;
|
||||
import com.jpexs.decompiler.flash.action.model.ActionItem;
|
||||
import com.jpexs.decompiler.flash.action.model.FunctionActionItem;
|
||||
import com.jpexs.decompiler.flash.action.model.GetMemberActionItem;
|
||||
import com.jpexs.decompiler.flash.action.model.GetVariableActionItem;
|
||||
import com.jpexs.decompiler.flash.action.model.SetMemberActionItem;
|
||||
import com.jpexs.decompiler.flash.action.parser.script.ActionSourceGenerator;
|
||||
import com.jpexs.decompiler.flash.action.parser.script.VariableActionItem;
|
||||
@@ -147,6 +148,14 @@ public class ClassActionItem extends ActionItem implements Block {
|
||||
|
||||
@Override
|
||||
public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException {
|
||||
GraphTargetItem clsName = className;
|
||||
while (clsName instanceof GetMemberActionItem) {
|
||||
((GetMemberActionItem) clsName).printObfuscatedMemberName = true;
|
||||
clsName = ((GetMemberActionItem) clsName).object;
|
||||
}
|
||||
if (clsName instanceof GetVariableActionItem) {
|
||||
((GetVariableActionItem) clsName).printObfuscatedName = true;
|
||||
}
|
||||
writer.startClass(className.toStringNoQuotes(localData));
|
||||
writer.append("class ");
|
||||
className.toStringNoQuotes(writer, localData);
|
||||
|
||||
Reference in New Issue
Block a user