Skip to content

Commit a86b26d

Browse files
author
Nikita
authored
Fixed interacting with SourceFile whilst it's null
1 parent e41c4b0 commit a86b26d

File tree

1 file changed

+55
-31
lines changed

1 file changed

+55
-31
lines changed

com/neonObf/transformers/BasicTypesEncryption.java

+55-31
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ public void run() {
244244

245245
public static String decrypt(String str, long rnd) {
246246
StackTraceElement ste = Thread.currentThread().getStackTrace()[2];
247-
rnd ^= ste.getLineNumber() + ste.getFileName().hashCode();
247+
rnd ^= ste.getLineNumber() + (ste.getFileName() != null ? ste.getFileName() : "").hashCode();
248248
char[] newC = new char[str.length()];
249249
int i = -1;
250250

@@ -255,7 +255,7 @@ public static String decrypt(String str, long rnd) {
255255
}
256256

257257
public static String encrypt(String str, long rnd, String fileName, int line) {
258-
rnd ^= line + fileName.hashCode();
258+
rnd ^= line + (fileName != null ? fileName : "").hashCode();
259259
char[] newC = new char[str.length()];
260260
int i = -1;
261261

@@ -319,39 +319,63 @@ public void makeDecryptorMethod(ClassNode cn, String name) { // please implenent
319319

320320
MethodNode mn = new MethodNode(ACC_PRIVATE + ACC_STATIC + ACC_SYNTHETIC,
321321
name, "(Ljava/lang/String;J)Ljava/lang/String;", null, null);
322-
322+
323+
Label
324+
l0 = new Label(),
325+
l1 = new Label(),
326+
l2 = new Label(),
327+
l3 = new Label(),
328+
l4 = new Label(),
329+
l5 = new Label(),
330+
l6 = new Label(),
331+
l7 = new Label(),
332+
l8 = new Label(),
333+
l9 = new Label(),
334+
l10 = new Label(),
335+
l11 = new Label(),
336+
l12 = new Label();
337+
323338
mn.visitCode();
324-
Label l0 = new Label();
339+
325340
mn.visitLabel(l0);
326341
mn.visitMethodInsn(INVOKESTATIC, "java/lang/Thread", "currentThread", "()Ljava/lang/Thread;", false);
327342
mn.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Thread", "getStackTrace", "()[Ljava/lang/StackTraceElement;", false);
328343
mn.visitInsn(ICONST_2);
329344
mn.visitInsn(AALOAD);
330345
mn.visitVarInsn(ASTORE, 3);
331-
Label l1 = new Label();
346+
332347
mn.visitLabel(l1);
333348
mn.visitVarInsn(LLOAD, 1);
334349
mn.visitVarInsn(ALOAD, 3);
335350
mn.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StackTraceElement", "getLineNumber", "()I", false);
336351
mn.visitVarInsn(ALOAD, 3);
337352
mn.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StackTraceElement", "getFileName", "()Ljava/lang/String;", false);
353+
mn.visitJumpInsn(IFNULL, l2);
354+
mn.visitVarInsn(ALOAD, 3);
355+
mn.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StackTraceElement", "getFileName", "()Ljava/lang/String;", false);
356+
mn.visitJumpInsn(GOTO, l3);
357+
358+
mn.visitLabel(l2);
359+
mn.visitLdcInsn("");
360+
361+
mn.visitLabel(l3);
338362
mn.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "hashCode", "()I", false);
339363
mn.visitInsn(IADD);
340364
mn.visitInsn(I2L);
341365
mn.visitInsn(LXOR);
342366
mn.visitVarInsn(LSTORE, 1);
343-
Label l2 = new Label();
344-
mn.visitLabel(l2);
367+
368+
mn.visitLabel(l4);
345369
mn.visitVarInsn(ALOAD, 0);
346370
mn.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "length", "()I", false);
347371
mn.visitIntInsn(NEWARRAY, T_CHAR);
348372
mn.visitVarInsn(ASTORE, 4);
349-
Label l3 = new Label();
350-
mn.visitLabel(l3);
373+
374+
mn.visitLabel(l5);
351375
mn.visitInsn(ICONST_M1);
352376
mn.visitVarInsn(ISTORE, 5);
353-
Label l4 = new Label();
354-
mn.visitLabel(l4);
377+
378+
mn.visitLabel(l6);
355379
mn.visitVarInsn(ALOAD, 0);
356380
mn.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "toCharArray", "()[C", false);
357381
mn.visitInsn(DUP);
@@ -360,17 +384,17 @@ public void makeDecryptorMethod(ClassNode cn, String name) { // please implenent
360384
mn.visitVarInsn(ISTORE, 8);
361385
mn.visitInsn(ICONST_0);
362386
mn.visitVarInsn(ISTORE, 7);
363-
Label l5 = new Label();
364-
mn.visitJumpInsn(GOTO, l5);
365-
Label l6 = new Label();
366-
mn.visitLabel(l6);
387+
388+
mn.visitJumpInsn(GOTO, l7);
389+
390+
mn.visitLabel(l8);
367391
mn.visitFrame(Opcodes.F_FULL, 9, new Object[] {"java/lang/String", Opcodes.LONG, "java/lang/StackTraceElement", "[C", Opcodes.INTEGER, Opcodes.TOP, Opcodes.INTEGER, Opcodes.INTEGER, "[C"}, 0, new Object[] {});
368392
mn.visitVarInsn(ALOAD, 9);
369393
mn.visitVarInsn(ILOAD, 7);
370394
mn.visitInsn(CALOAD);
371395
mn.visitVarInsn(ISTORE, 6);
372-
Label l7 = new Label();
373-
mn.visitLabel(l7);
396+
397+
mn.visitLabel(l9);
374398
mn.visitVarInsn(ALOAD, 4);
375399
mn.visitIincInsn(5, 1);
376400
mn.visitVarInsn(ILOAD, 5);
@@ -383,29 +407,29 @@ public void makeDecryptorMethod(ClassNode cn, String name) { // please implenent
383407
mn.visitInsn(L2I);
384408
mn.visitInsn(I2C);
385409
mn.visitInsn(CASTORE);
386-
Label l8 = new Label();
387-
mn.visitLabel(l8);
410+
411+
mn.visitLabel(l10);
388412
mn.visitIincInsn(7, 1);
389-
mn.visitLabel(l5);
413+
mn.visitLabel(l7);
390414
mn.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
391415
mn.visitVarInsn(ILOAD, 7);
392416
mn.visitVarInsn(ILOAD, 8);
393-
mn.visitJumpInsn(IF_ICMPLT, l6);
394-
Label l9 = new Label();
395-
mn.visitLabel(l9);
417+
mn.visitJumpInsn(IF_ICMPLT, l8);
418+
419+
mn.visitLabel(l11);
396420
mn.visitTypeInsn(NEW, "java/lang/String");
397421
mn.visitInsn(DUP);
398422
mn.visitVarInsn(ALOAD, 4);
399423
mn.visitMethodInsn(INVOKESPECIAL, "java/lang/String", "<init>", "([C)V", false);
400424
mn.visitInsn(ARETURN);
401-
Label l10 = new Label();
402-
mn.visitLabel(l10);
403-
mn.visitLocalVariable(nameGen.get(3), "Ljava/lang/String;", null, l0, l10, 0);
404-
mn.visitLocalVariable(nameGen.get(4), "J", null, l0, l10, 1);
405-
mn.visitLocalVariable(nameGen.get(5), "Ljava/lang/StackTraceElement;", null, l1, l10, 3);
406-
mn.visitLocalVariable(nameGen.get(6), "[C", null, l3, l10, 4);
407-
mn.visitLocalVariable(nameGen.get(7), "I", null, l4, l10, 5);
408-
mn.visitLocalVariable(nameGen.get(8), "C", null, l7, l8, 6);
425+
426+
mn.visitLabel(l12);
427+
mn.visitLocalVariable(nameGen.get(3), "Ljava/lang/String;", null, l0, l12, 0);
428+
mn.visitLocalVariable(nameGen.get(4), "J", null, l0, l12, 1);
429+
mn.visitLocalVariable(nameGen.get(5), "Ljava/lang/StackTraceElement;", null, l1, l12, 3);
430+
mn.visitLocalVariable(nameGen.get(6), "[C", null, l5, l12, 4);
431+
mn.visitLocalVariable(nameGen.get(7), "I", null, l6, l12, 5);
432+
mn.visitLocalVariable(nameGen.get(8), "C", null, l9, l10, 6);
409433
mn.visitMaxs(6, 10);
410434
mn.visitEnd();
411435

0 commit comments

Comments
 (0)