@@ -244,7 +244,7 @@ public void run() {
244
244
245
245
public static String decrypt (String str , long rnd ) {
246
246
StackTraceElement ste = Thread .currentThread ().getStackTrace ()[2 ];
247
- rnd ^= ste .getLineNumber () + ste .getFileName ().hashCode ();
247
+ rnd ^= ste .getLineNumber () + ( ste .getFileName () != null ? ste . getFileName () : "" ).hashCode ();
248
248
char [] newC = new char [str .length ()];
249
249
int i = -1 ;
250
250
@@ -255,7 +255,7 @@ public static String decrypt(String str, long rnd) {
255
255
}
256
256
257
257
public static String encrypt (String str , long rnd , String fileName , int line ) {
258
- rnd ^= line + fileName .hashCode ();
258
+ rnd ^= line + ( fileName != null ? fileName : "" ) .hashCode ();
259
259
char [] newC = new char [str .length ()];
260
260
int i = -1 ;
261
261
@@ -319,39 +319,63 @@ public void makeDecryptorMethod(ClassNode cn, String name) { // please implenent
319
319
320
320
MethodNode mn = new MethodNode (ACC_PRIVATE + ACC_STATIC + ACC_SYNTHETIC ,
321
321
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
+
323
338
mn .visitCode ();
324
- Label l0 = new Label ();
339
+
325
340
mn .visitLabel (l0 );
326
341
mn .visitMethodInsn (INVOKESTATIC , "java/lang/Thread" , "currentThread" , "()Ljava/lang/Thread;" , false );
327
342
mn .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Thread" , "getStackTrace" , "()[Ljava/lang/StackTraceElement;" , false );
328
343
mn .visitInsn (ICONST_2 );
329
344
mn .visitInsn (AALOAD );
330
345
mn .visitVarInsn (ASTORE , 3 );
331
- Label l1 = new Label ();
346
+
332
347
mn .visitLabel (l1 );
333
348
mn .visitVarInsn (LLOAD , 1 );
334
349
mn .visitVarInsn (ALOAD , 3 );
335
350
mn .visitMethodInsn (INVOKEVIRTUAL , "java/lang/StackTraceElement" , "getLineNumber" , "()I" , false );
336
351
mn .visitVarInsn (ALOAD , 3 );
337
352
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 );
338
362
mn .visitMethodInsn (INVOKEVIRTUAL , "java/lang/String" , "hashCode" , "()I" , false );
339
363
mn .visitInsn (IADD );
340
364
mn .visitInsn (I2L );
341
365
mn .visitInsn (LXOR );
342
366
mn .visitVarInsn (LSTORE , 1 );
343
- Label l2 = new Label ();
344
- mn .visitLabel (l2 );
367
+
368
+ mn .visitLabel (l4 );
345
369
mn .visitVarInsn (ALOAD , 0 );
346
370
mn .visitMethodInsn (INVOKEVIRTUAL , "java/lang/String" , "length" , "()I" , false );
347
371
mn .visitIntInsn (NEWARRAY , T_CHAR );
348
372
mn .visitVarInsn (ASTORE , 4 );
349
- Label l3 = new Label ();
350
- mn .visitLabel (l3 );
373
+
374
+ mn .visitLabel (l5 );
351
375
mn .visitInsn (ICONST_M1 );
352
376
mn .visitVarInsn (ISTORE , 5 );
353
- Label l4 = new Label ();
354
- mn .visitLabel (l4 );
377
+
378
+ mn .visitLabel (l6 );
355
379
mn .visitVarInsn (ALOAD , 0 );
356
380
mn .visitMethodInsn (INVOKEVIRTUAL , "java/lang/String" , "toCharArray" , "()[C" , false );
357
381
mn .visitInsn (DUP );
@@ -360,17 +384,17 @@ public void makeDecryptorMethod(ClassNode cn, String name) { // please implenent
360
384
mn .visitVarInsn (ISTORE , 8 );
361
385
mn .visitInsn (ICONST_0 );
362
386
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 );
367
391
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 [] {});
368
392
mn .visitVarInsn (ALOAD , 9 );
369
393
mn .visitVarInsn (ILOAD , 7 );
370
394
mn .visitInsn (CALOAD );
371
395
mn .visitVarInsn (ISTORE , 6 );
372
- Label l7 = new Label ();
373
- mn .visitLabel (l7 );
396
+
397
+ mn .visitLabel (l9 );
374
398
mn .visitVarInsn (ALOAD , 4 );
375
399
mn .visitIincInsn (5 , 1 );
376
400
mn .visitVarInsn (ILOAD , 5 );
@@ -383,29 +407,29 @@ public void makeDecryptorMethod(ClassNode cn, String name) { // please implenent
383
407
mn .visitInsn (L2I );
384
408
mn .visitInsn (I2C );
385
409
mn .visitInsn (CASTORE );
386
- Label l8 = new Label ();
387
- mn .visitLabel (l8 );
410
+
411
+ mn .visitLabel (l10 );
388
412
mn .visitIincInsn (7 , 1 );
389
- mn .visitLabel (l5 );
413
+ mn .visitLabel (l7 );
390
414
mn .visitFrame (Opcodes .F_SAME , 0 , null , 0 , null );
391
415
mn .visitVarInsn (ILOAD , 7 );
392
416
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 );
396
420
mn .visitTypeInsn (NEW , "java/lang/String" );
397
421
mn .visitInsn (DUP );
398
422
mn .visitVarInsn (ALOAD , 4 );
399
423
mn .visitMethodInsn (INVOKESPECIAL , "java/lang/String" , "<init>" , "([C)V" , false );
400
424
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 );
409
433
mn .visitMaxs (6 , 10 );
410
434
mn .visitEnd ();
411
435
0 commit comments