标题: 用Javassist分析jeb.jar 创建: 2014-07-30 17:45 链接: https://scz.617.cn/misc/201407301745.txt 关于jeb.jar,不知上下文而又对本文感兴趣的兄弟,参看: http://bbs.pediy.com/showthread.php?t=189980 有人说没有看雪帐号,无法下载我破解的JEB 1.5,之前没有想到存在这个问题,以 为是开放式下载。放一份在这里: jeb-1.5.201404100_modified_by_scz(20140711).7z http://pan.baidu.com/s/1o6E6xLo 把32-bits、64-bits的swt.jar一并打包进去了,与看雪论坛附件相比,没有实质变 化,无需重复下载。 jeb.jar的逆向工作其实已经阶段性中止了。有人提出能不能补上"Save As"功能,我 是业余时间看看,如果它的功能代码本来就存在的话,等我有时间就来补上,如果不 存在,以我的功力就不要指望太多了。 我最初是Eclipse、BTrace、JD-GUI、Source Insight相结合着把jeb.jar剁了,向诸 君推荐BTrace时抱怨过一句: BTrace还是不够狠,不能修改参数和返回值,只能查看,可以调用public method,可 以直接修改public member,但仍受private的限制。如果这些都能解决该多好。 针对我这个抱怨,有人向我推荐了Javassist。怀着将信将疑的态度研究了一下 Javassist。 Javassist和BTrace的侧重不同,仔细测试前者之后感觉前者与后者可以互补。前者在 修改class方面足够强大,但在动态注入方面颇为鸡肋,它的HotSwapper实现远不如 BTrace实用,几乎是个演示性玩具。假设目标进程已经以jdwp方式启动,而Javassist 进程事后通过HotSwapper类Attach上去,reload()时会在reload2()中抛出 "failed to reload"异常。如果二者是合兵一处的,就可以reload()。 如果不考虑动态注入,Javassist确实是个NB工具,不是一般NB,是相当NB。不过要 想用爽它,建议还是把它自带教程完整读一遍,然后挨个实测。碰上各个类、方法时, 更应该看在线帮助: http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/html/javassist/ 阅读其源码倒不是特别必要。不知为何大量介绍文章在演示最无聊的writeFile,个 人经验是,只要同时搜到Javassist和writeFile,这篇文章就不值得看,跳过。 扯远了,回到正题,用Javassist分析jeb.jar。我这次演示用Javassist如何修改 jebglobal.rP.dN(byte[] paramArrayOfByte,int paramInt1,int paramInt2)。这个 函数在解码被编码过的敏感字符串,比如"License key error.",你直接在反编译结 果中找不到这个明文字符串,它被编码后存放了。显然那些被编码过的敏感字符串就 是最好的路标,拦截rP.dN(),将它们找出来,再结合行号信息,就比较容易理清整个 流程。推荐作法是写BTrace脚本,自动跟踪rP.dN(),将执行路径上的敏感字符串都解 码还原出来,事实上我就是这样破解jeb.jar的。但我这不是被人忽悠到Javassist上 去了么,于是我就用Javassist重现了BTrace脚本的工作。 用Javassist重新实现了rP.dN(),根据需要,先输出调用栈回溯,再输出解码结果: -------------------------------------------------------------------------- /* * javac -g -cp "javassist.jar;jeb.xxx.jar" crack_jeb_o.java * java -cp "javassist.jar;jeb.xxx.jar;." crack_jeb_o > crack_jeb_o.txt * * jeb.xxx.jar就是将jeb.jar中META-INF/下的JEBKEY.*删掉,再编辑一下 * MANIFEST.MF得到。否则java.lang.ClassLoader会在安全检查时抛出异常。 * javassist.Loader的安全检查要弱很多,可是它有别的缺陷导致不能用于此处。 * 最后用jeb.xxx.jar而不是jeb.orig.jar,纯属无奈之举。 * * 仅为Java逆向之Javassist演示代码,非最终Loader。 */ import javassist.*; import jeb.Launcher; class crack_jeb_o { public static void main ( String[] argv ) throws Throwable { /* * 调试过程中可以在该目录下获取被修改过的class。这条代码本身也是调 * 试目的,可以注释掉。 */ CtClass.debugDump = "./debugDump/"; ClassPool pool = ClassPool.getDefault(); pool.importPackage( "jebglobal.rP" ); CtClass old_class = pool.get( "jebglobal.rP" ); old_class.detach(); /* * 由于jeb.jar混淆得厉害,只能用这种精确方式获取method,否则只需要 * 用名字即可定位method。 */ CtMethod old_method = old_class.getDeclaredMethod ( "dN", new CtClass[] { pool.get( byte[].class.getName() ), pool.get( int.class.getName() ), pool.get( int.class.getName() ) } ); old_class.removeMethod( old_method ); /* * 跟BTrace比,Javassist在干这类事时简直就是渣。被迫实现Helper.class, * Javasssist内置编译器不支持String.format()这种变长形参函数。 * * 没有用Thread.currentThread().dumpStack(),因为它向stderr输出,不 * 利于分离输出,此外它的显示破坏了我的洁癖。最后用的是 * Helper.GetStackTrace()。 */ CtMethod new_method = CtNewMethod.make ( "public static String dN ( byte[] paramArrayOfByte, int paramInt1, int paramInt2 )" + "{" + " String result;" + "" + " System.out.println( Helper.GetStackTrace() );" + " result = new rP(paramArrayOfByte, paramInt1, paramInt2).dN();" + " System.out.println( Helper.hexdump( result.getBytes(), 0, result.getBytes().length, 16 ) );" + " return( result );" + "}", old_class ); old_class.addMethod( new_method ); old_class.toClass(); /* * ( new Loader( pool ) ).run( "jeb.Launcher", argv ); * * 这里不能用javassist.Loader,它的实现有缺陷,会导致在 * jebglobal.eI.(SourceFile:158) * 抛出异常 * throw new RuntimeException("Could not determine the program directory") * * 被迫使用java.lang.ClassLoader */ Launcher.main( argv ); } } -------------------------------------------------------------------------- /* * javac -g Helper.java */ public class Helper { public static String hexdump ( byte[] buf, int off, int len, int count ) { String ret = ""; int offset, k, j, i, m; if ( len <= 0 || count <= 0 || null == buf ) { return( ret ); } ret += String.format( "[%d bytes] -> %d bytes per line\n", len, count ); i = 0; offset = 0; m = ( count + 1 ) / 2; for ( k = len / count; k > 0; k--, offset += count ) { ret += String.format( "%08X ", offset ); for ( j = 0; j < count; j++, i++ ) { if ( m == j ) { ret += String.format( "-%02X", buf[off+i] ); } else { ret += String.format( " %02X", buf[off+i] ); } } ret += String.format( " " ); i -= count; for ( j = 0; j < count; j++, i++ ) { if ( ( buf[off+i] >= ' ' ) && ( buf[off+i] < 0x7F ) ) { ret += String.format( "%c", buf[off+i] ); } else { ret += String.format( "." ); } } ret += String.format( "\n" ); } k = len - i; if ( k <= 0 ) { return( ret ); } ret += String.format( "%08X ", offset ); for ( j = 0 ; j < k; j++, i++ ) { if ( m == j ) { ret += String.format( "-%02X", buf[off+i] ); } else { ret += String.format( " %02X", buf[off+i] ); } } i -= k; for ( j = count - k; j > 0; j-- ) { ret += String.format( " " ); } ret += String.format( " " ); for ( j = 0; j < k; j++, i++ ) { if ( ( buf[off+i] >= ' ' ) && ( buf[off+i] < 0x7F ) ) { ret += String.format( "%c", buf[off+i] ); } else { ret += String.format( "." ); } } return( ret ); } /* end of hexdump */ public static String GetStackTrace () { int i, j; String ret = "["; StackTraceElement[] frame = new Throwable().getStackTrace(); if ( null != frame ) { j = frame.length - 1; for( i = 1; i < j; i++ ) { ret += String.format( "\n%s", frame[i] ); } } return( ret + "\n]" ); } /* end of GetStackTrace */ } -------------------------------------------------------------------------- 不考虑CtClass.debugDump,crack_jeb_o.java实际就是个Loader,不会静态修改 jeb.xxx.jar。 $ java -cp "javassist.jar;jeb.xxx.jar;." crack_jeb_o > crack_jeb_o.txt 弹出对话框提示输入key时随便输个123456啥的,我们的目的是找出执行过程中会有哪 些敏感字符串出现。展示一下crack_jeb_o.txt: -------------------------------------------------------------------------- [ jebglobal.rP.dN(SourceFile) jebglobal.eI.(SourceFile:125) jeb.Launcher.main(SourceFile:159) ] [8 bytes] -> 16 bytes per line 00000000 75 73 65 72 2E 64 69 72 user.dir [ jebglobal.rP.dN(SourceFile) jebglobal.lS.dN(SourceFile:58) jebglobal.eI.(SourceFile:148) jeb.Launcher.main(SourceFile:159) ] [15 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 6C 61 6E-67 2E 43 6C 61 73 73 java.lang.Class [ jebglobal.rP.dN(SourceFile) jebglobal.lS.dN(SourceFile:58) jebglobal.eI.(SourceFile:148) jeb.Launcher.main(SourceFile:159) ] [19 bytes] -> 16 bytes per line 00000000 67 65 74 50 72 6F 74 65-63 74 69 6F 6E 44 6F 6D getProtectionDom 00000010 61 69 6E ain [ jebglobal.rP.dN(SourceFile) jebglobal.lS.dN(SourceFile:59) jebglobal.eI.(SourceFile:148) jeb.Launcher.main(SourceFile:159) ] [30 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 73 65 63-75 72 69 74 79 2E 50 72 java.security.Pr 00000010 6F 74 65 63 74 69 6F 6E-44 6F 6D 61 69 6E otectionDomain [ jebglobal.rP.dN(SourceFile) jebglobal.lS.dN(SourceFile:59) jebglobal.eI.(SourceFile:148) jeb.Launcher.main(SourceFile:159) ] [13 bytes] -> 16 bytes per line 00000000 67 65 74 43 6F 64 65 53-6F 75 72 63 65 getCodeSource [ jebglobal.rP.dN(SourceFile) jebglobal.lS.dN(SourceFile:60) jebglobal.eI.(SourceFile:148) jeb.Launcher.main(SourceFile:159) ] [24 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 73 65 63-75 72 69 74 79 2E 43 6F java.security.Co 00000010 64 65 53 6F 75 72 63 65 deSource [ jebglobal.rP.dN(SourceFile) jebglobal.lS.dN(SourceFile:60) jebglobal.eI.(SourceFile:148) jeb.Launcher.main(SourceFile:159) ] [11 bytes] -> 16 bytes per line 00000000 67 65 74 4C 6F 63 61 74-69 6F 6E getLocation [ jebglobal.rP.dN(SourceFile) jebglobal.lS.dN(SourceFile:61) jebglobal.eI.(SourceFile:148) jeb.Launcher.main(SourceFile:159) ] [12 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 6E 65 74-2E 55 52 4C java.net.URL [ jebglobal.rP.dN(SourceFile) jebglobal.lS.dN(SourceFile:61) jebglobal.eI.(SourceFile:148) jeb.Launcher.main(SourceFile:159) ] [5 bytes] -> 16 bytes per line 00000000 74 6F 55 52 49 toURI [ jebglobal.rP.dN(SourceFile) jebglobal.lS.dN(SourceFile:62) jebglobal.eI.(SourceFile:148) jeb.Launcher.main(SourceFile:159) ] [12 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 69 6F 2E-46 69 6C 65 java.io.File [ jebglobal.rP.dN(SourceFile) jebglobal.lS.dN(SourceFile:62) jebglobal.eI.(SourceFile:148) jeb.Launcher.main(SourceFile:159) ] [12 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 6E 65 74-2E 55 52 49 java.net.URI [ jebglobal.rP.dN(SourceFile) jebglobal.lS.dN(SourceFile:74) jebglobal.lS.dN(SourceFile:63) jebglobal.eI.(SourceFile:148) jeb.Launcher.main(SourceFile:159) ] [21 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 75 74 69-6C 2E 6A 61 72 2E 4A 61 java.util.jar.Ja 00000010 72 46 69 6C 65 rFile [ jebglobal.rP.dN(SourceFile) jebglobal.lS.dN(SourceFile:74) jebglobal.lS.dN(SourceFile:63) jebglobal.eI.(SourceFile:148) jeb.Launcher.main(SourceFile:159) ] [12 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 69 6F 2E-46 69 6C 65 java.io.File [ jebglobal.rP.dN(SourceFile) jebglobal.lS.dN(SourceFile:79) jebglobal.lS.dN(SourceFile:63) jebglobal.eI.(SourceFile:148) jeb.Launcher.main(SourceFile:159) ] [21 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 75 74 69-6C 2E 6A 61 72 2E 4A 61 java.util.jar.Ja 00000010 72 46 69 6C 65 rFile [ jebglobal.rP.dN(SourceFile) jebglobal.lS.dN(SourceFile:79) jebglobal.lS.dN(SourceFile:63) jebglobal.eI.(SourceFile:148) jeb.Launcher.main(SourceFile:159) ] [8 bytes] -> 16 bytes per line 00000000 67 65 74 45 6E 74 72 79 getEntry [ jebglobal.rP.dN(SourceFile) jebglobal.lS.dN(SourceFile:81) jebglobal.lS.dN(SourceFile:63) jebglobal.eI.(SourceFile:148) jeb.Launcher.main(SourceFile:159) ] [21 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 75 74 69-6C 2E 6A 61 72 2E 4A 61 java.util.jar.Ja 00000010 72 46 69 6C 65 rFile [ jebglobal.rP.dN(SourceFile) jebglobal.lS.dN(SourceFile:81) jebglobal.lS.dN(SourceFile:63) jebglobal.eI.(SourceFile:148) jeb.Launcher.main(SourceFile:159) ] [14 bytes] -> 16 bytes per line 00000000 67 65 74 49 6E 70 75 74-53 74 72 65 61 6D getInputStream [ jebglobal.rP.dN(SourceFile) jebglobal.lS.dN(SourceFile:81) jebglobal.lS.dN(SourceFile:63) jebglobal.eI.(SourceFile:148) jeb.Launcher.main(SourceFile:159) ] [22 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 75 74 69-6C 2E 7A 69 70 2E 5A 69 java.util.zip.Zi 00000010 70 45 6E 74 72 79 pEntry [ jebglobal.rP.dN(SourceFile) jebglobal.lS.dN(SourceFile:83) jebglobal.lS.dN(SourceFile:63) jebglobal.eI.(SourceFile:148) jeb.Launcher.main(SourceFile:159) ] [19 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 69 6F 2E-49 6E 70 75 74 53 74 72 java.io.InputStr 00000010 65 61 6D eam [ jebglobal.rP.dN(SourceFile) jebglobal.lS.dN(SourceFile:83) jebglobal.lS.dN(SourceFile:63) jebglobal.eI.(SourceFile:148) jeb.Launcher.main(SourceFile:159) ] [4 bytes] -> 16 bytes per line 00000000 72 65 61 64 read [ jebglobal.rP.dN(SourceFile) jebglobal.lS.dN(SourceFile:86) jebglobal.lS.dN(SourceFile:63) jebglobal.eI.(SourceFile:148) jeb.Launcher.main(SourceFile:159) ] [22 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 75 74 69-6C 2E 6A 61 72 2E 4A 61 java.util.jar.Ja 00000010 72 45 6E 74 72 79 rEntry [ jebglobal.rP.dN(SourceFile) jebglobal.lS.dN(SourceFile:86) jebglobal.lS.dN(SourceFile:63) jebglobal.eI.(SourceFile:148) jeb.Launcher.main(SourceFile:159) ] [15 bytes] -> 16 bytes per line 00000000 67 65 74 43 65 72 74 69-66 69 63 61 74 65 73 getCertificates [ jebglobal.rP.dN(SourceFile) jebglobal.lS.dN(SourceFile:87) jebglobal.lS.dN(SourceFile:63) jebglobal.eI.(SourceFile:148) jeb.Launcher.main(SourceFile:159) ] [30 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 73 65 63-75 72 69 74 79 2E 63 65 java.security.ce 00000010 72 74 2E 43 65 72 74 69-66 69 63 61 74 65 rt.Certificate [ jebglobal.rP.dN(SourceFile) jebglobal.lS.dN(SourceFile:87) jebglobal.lS.dN(SourceFile:63) jebglobal.eI.(SourceFile:148) jeb.Launcher.main(SourceFile:159) ] [12 bytes] -> 16 bytes per line 00000000 67 65 74 50 75 62 6C 69-63 4B 65 79 getPublicKey [ jebglobal.rP.dN(SourceFile) jebglobal.Vr.ld(SourceFile:55) jebglobal.Vr.(SourceFile:35) jebglobal.eI.(SourceFile:167) jeb.Launcher.main(SourceFile:159) ] [7 bytes] -> 16 bytes per line 00000000 6F 73 2E 6E 61 6D 65 os.name [ jebglobal.rP.dN(SourceFile) jebglobal.Vr.ld(SourceFile:57) jebglobal.Vr.(SourceFile:35) jebglobal.eI.(SourceFile:167) jeb.Launcher.main(SourceFile:159) ] [7 bytes] -> 16 bytes per line 00000000 57 69 6E 64 6F 77 73 Windows [ jebglobal.rP.dN(SourceFile) jebglobal.Vr.QE(SourceFile:104) jebglobal.Vr.ld(SourceFile:58) jebglobal.Vr.(SourceFile:35) jebglobal.eI.(SourceFile:167) jeb.Launcher.main(SourceFile:159) ] [26 bytes] -> 16 bytes per line 00000000 77 6D 69 63 20 62 69 6F-73 20 67 65 74 20 73 65 wmic bios get se 00000010 72 69 61 6C 6E 75 6D 62-65 72 rialnumber [ jebglobal.rP.dN(SourceFile) jebglobal.Vr.QE(SourceFile:125) jebglobal.Vr.ld(SourceFile:58) jebglobal.Vr.(SourceFile:35) jebglobal.eI.(SourceFile:167) jeb.Launcher.main(SourceFile:159) ] [12 bytes] -> 16 bytes per line 00000000 53 65 72 69 61 6C 4E 75-6D 62 65 72 SerialNumber [ jebglobal.rP.dN(SourceFile) jebglobal.Vr.ld(SourceFile:81) jebglobal.Vr.(SourceFile:35) jebglobal.eI.(SourceFile:167) jeb.Launcher.main(SourceFile:159) ] [3 bytes] -> 16 bytes per line 00000000 4D 44 35 MD5 [ jebglobal.rP.dN(SourceFile) jebglobal.eI.(SourceFile:170) jeb.Launcher.main(SourceFile:159) ] [11 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 76 65 6E-64 6F 72 java.vendor [ jebglobal.rP.dN(SourceFile) jebglobal.eI.(SourceFile:171) jeb.Launcher.main(SourceFile:159) ] [12 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 76 65 72-73 69 6F 6E java.version [ jebglobal.rP.dN(SourceFile) jebglobal.eI.(SourceFile:172) jeb.Launcher.main(SourceFile:159) ] [7 bytes] -> 16 bytes per line 00000000 6F 73 2E 6E 61 6D 65 os.name [ jebglobal.rP.dN(SourceFile) jebglobal.eI.(SourceFile:173) jeb.Launcher.main(SourceFile:159) ] [7 bytes] -> 16 bytes per line 00000000 6F 73 2E 61 72 63 68 os.arch [ jebglobal.rP.dN(SourceFile) jebglobal.eI.(SourceFile:174) jeb.Launcher.main(SourceFile:159) ] [10 bytes] -> 16 bytes per line 00000000 6F 73 2E 76 65 72 73 69-6F 6E os.version [ jebglobal.rP.dN(SourceFile) jebglobal.eI.(SourceFile:175) jeb.Launcher.main(SourceFile:159) ] [9 bytes] -> 16 bytes per line 00000000 75 73 65 72 2E 6E 61 6D-65 user.name [ jebglobal.rP.dN(SourceFile) jebglobal.eI.(SourceFile:547) jeb.Launcher.main(SourceFile:159) ] [10 bytes] -> 16 bytes per line 00000000 75 70 64 61 74 65 2E 7A-69 70 update.zip [ jebglobal.rP.dN(SourceFile) jebglobal.eI.(SourceFile:548) jeb.Launcher.main(SourceFile:159) ] [10 bytes] -> 16 bytes per line 00000000 75 70 64 61 74 65 2E 70-77 64 update.pwd [ jebglobal.rP.dN(SourceFile) jebglobal.BT.(SourceFile:7) jebglobal.WV.(SourceFile:9) jebglobal.TM.ld(SourceFile:116) jebglobal.eI.(SourceFile:193) jebglobal.yW.(SourceFile:128) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [309 bytes] -> 16 bytes per line 00000000 31 31 35 30 37 39 37 30-37 39 31 39 31 35 37 36 1150797079191576 00000010 35 35 37 39 34 30 30 34-32 37 31 33 33 37 37 38 5579400427133778 00000020 35 30 31 34 30 38 35 34-31 36 35 32 34 38 39 33 5014085416524893 00000030 35 31 30 35 33 36 38 39-36 31 39 38 38 38 30 37 5105368961988807 00000040 34 39 31 30 34 36 37 36-31 37 30 34 30 31 31 35 4910467617040115 00000050 31 35 36 39 32 38 34 31-31 39 32 37 32 36 38 30 1569284119272680 00000060 35 35 35 33 32 38 34 34-32 30 37 37 35 35 32 36 5553284420775526 00000070 37 36 36 31 37 39 35 39-32 38 30 33 39 30 32 37 7661795928039027 00000080 38 32 39 34 37 32 31 37-37 39 32 37 35 33 31 34 8294721779275314 00000090 32 35 39 32 38 35 34 36-30 38 37 30 37 35 39 30 2592854608707590 000000A0 39 32 36 34 30 31 38 31-34 39 38 37 37 36 36 37 9264018149877667 000000B0 31 31 33 31 34 31 30 39-31 35 33 39 33 33 39 32 1131410915393392 000000C0 31 33 38 35 35 34 37 36-34 38 33 30 33 31 38 35 1385547648303185 000000D0 32 32 37 32 38 34 30 35-38 34 32 38 34 36 39 34 2272840584284694 000000E0 30 33 33 36 39 31 38 39-32 39 35 31 30 30 37 39 0336918929510079 000000F0 31 35 35 35 33 31 38 37-37 30 36 30 35 33 31 34 1555318770605314 00000100 36 39 36 39 39 35 39 31-37 30 30 34 35 37 38 32 6969959170045782 00000110 30 32 39 37 36 34 35 33-35 35 32 34 31 33 37 32 0297645355241372 00000120 39 35 34 33 34 34 36 39-34 38 38 39 35 31 33 38 9543446948895138 00000130 36 34 37 38 33 64783 [ jebglobal.rP.dN(SourceFile) jebglobal.BT.(SourceFile:8) jebglobal.WV.(SourceFile:9) jebglobal.TM.ld(SourceFile:116) jebglobal.eI.(SourceFile:193) jebglobal.yW.(SourceFile:128) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [5 bytes] -> 16 bytes per line 00000000 36 35 35 33 37 65537 [ jebglobal.rP.dN(SourceFile) jebglobal.Vm.(SourceFile:23) jebglobal.eI.(SourceFile:194) jebglobal.yW.(SourceFile:128) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [6 bytes] -> 16 bytes per line 00000000 4A 45 42 20 25 73 JEB %s [ jebglobal.rP.dN(SourceFile) jebglobal.DU.(SourceFile:27) jebglobal.eI.(SourceFile:197) jebglobal.yW.(SourceFile:128) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [309 bytes] -> 16 bytes per line 00000000 31 31 35 30 37 39 37 30-37 39 31 39 31 35 37 36 1150797079191576 00000010 35 35 37 39 34 30 30 34-32 37 31 33 33 37 37 38 5579400427133778 00000020 35 30 31 34 30 38 35 34-31 36 35 32 34 38 39 33 5014085416524893 00000030 35 31 30 35 33 36 38 39-36 31 39 38 38 38 30 37 5105368961988807 00000040 34 39 31 30 34 36 37 36-31 37 30 34 30 31 31 35 4910467617040115 00000050 31 35 36 39 32 38 34 31-31 39 32 37 32 36 38 30 1569284119272680 00000060 35 35 35 33 32 38 34 34-32 30 37 37 35 35 32 36 5553284420775526 00000070 37 36 36 31 37 39 35 39-32 38 30 33 39 30 32 37 7661795928039027 00000080 38 32 39 34 37 32 31 37-37 39 32 37 35 33 31 34 8294721779275314 00000090 32 35 39 32 38 35 34 36-30 38 37 30 37 35 39 30 2592854608707590 000000A0 39 32 36 34 30 31 38 31-34 39 38 37 37 36 36 37 9264018149877667 000000B0 31 31 33 31 34 31 30 39-31 35 33 39 33 33 39 32 1131410915393392 000000C0 31 33 38 35 35 34 37 36-34 38 33 30 33 31 38 35 1385547648303185 000000D0 32 32 37 32 38 34 30 35-38 34 32 38 34 36 39 34 2272840584284694 000000E0 30 33 33 36 39 31 38 39-32 39 35 31 30 30 37 39 0336918929510079 000000F0 31 35 35 35 33 31 38 37-37 30 36 30 35 33 31 34 1555318770605314 00000100 36 39 36 39 39 35 39 31-37 30 30 34 35 37 38 32 6969959170045782 00000110 30 32 39 37 36 34 35 33-35 35 32 34 31 33 37 32 0297645355241372 00000120 39 35 34 33 34 34 36 39-34 38 38 39 35 31 33 38 9543446948895138 00000130 36 34 37 38 33 64783 [ jebglobal.rP.dN(SourceFile) jebglobal.DU.(SourceFile:28) jebglobal.eI.(SourceFile:197) jebglobal.yW.(SourceFile:128) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [5 bytes] -> 16 bytes per line 00000000 36 35 35 33 37 65537 [ jebglobal.rP.dN(SourceFile) jebglobal.uK.QE(SourceFile:92) jebglobal.eI.PF(SourceFile:282) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [4 bytes] -> 16 bytes per line 00000000 64 65 6D 6F demo [ jebglobal.rP.dN(SourceFile) jebglobal.PX.dN(SourceFile:197) jebglobal.PX.fa(SourceFile:186) jebglobal.PX.dN(SourceFile:96) jebglobal.oQ.dN(SourceFile:28) jebglobal.eI.rn(SourceFile:447) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [15 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 6C 61 6E-67 2E 43 6C 61 73 73 java.lang.Class [ jebglobal.rP.dN(SourceFile) jebglobal.PX.dN(SourceFile:197) jebglobal.PX.fa(SourceFile:186) jebglobal.PX.dN(SourceFile:96) jebglobal.oQ.dN(SourceFile:28) jebglobal.eI.rn(SourceFile:447) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [19 bytes] -> 16 bytes per line 00000000 67 65 74 50 72 6F 74 65-63 74 69 6F 6E 44 6F 6D getProtectionDom 00000010 61 69 6E ain [ jebglobal.rP.dN(SourceFile) jebglobal.PX.dN(SourceFile:198) jebglobal.PX.fa(SourceFile:186) jebglobal.PX.dN(SourceFile:96) jebglobal.oQ.dN(SourceFile:28) jebglobal.eI.rn(SourceFile:447) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [30 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 73 65 63-75 72 69 74 79 2E 50 72 java.security.Pr 00000010 6F 74 65 63 74 69 6F 6E-44 6F 6D 61 69 6E otectionDomain [ jebglobal.rP.dN(SourceFile) jebglobal.PX.dN(SourceFile:198) jebglobal.PX.fa(SourceFile:186) jebglobal.PX.dN(SourceFile:96) jebglobal.oQ.dN(SourceFile:28) jebglobal.eI.rn(SourceFile:447) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [13 bytes] -> 16 bytes per line 00000000 67 65 74 43 6F 64 65 53-6F 75 72 63 65 getCodeSource [ jebglobal.rP.dN(SourceFile) jebglobal.PX.dN(SourceFile:199) jebglobal.PX.fa(SourceFile:186) jebglobal.PX.dN(SourceFile:96) jebglobal.oQ.dN(SourceFile:28) jebglobal.eI.rn(SourceFile:447) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [24 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 73 65 63-75 72 69 74 79 2E 43 6F java.security.Co 00000010 64 65 53 6F 75 72 63 65 deSource [ jebglobal.rP.dN(SourceFile) jebglobal.PX.dN(SourceFile:199) jebglobal.PX.fa(SourceFile:186) jebglobal.PX.dN(SourceFile:96) jebglobal.oQ.dN(SourceFile:28) jebglobal.eI.rn(SourceFile:447) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [11 bytes] -> 16 bytes per line 00000000 67 65 74 4C 6F 63 61 74-69 6F 6E getLocation [ jebglobal.rP.dN(SourceFile) jebglobal.PX.dN(SourceFile:200) jebglobal.PX.fa(SourceFile:186) jebglobal.PX.dN(SourceFile:96) jebglobal.oQ.dN(SourceFile:28) jebglobal.eI.rn(SourceFile:447) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [12 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 6E 65 74-2E 55 52 4C java.net.URL [ jebglobal.rP.dN(SourceFile) jebglobal.PX.dN(SourceFile:200) jebglobal.PX.fa(SourceFile:186) jebglobal.PX.dN(SourceFile:96) jebglobal.oQ.dN(SourceFile:28) jebglobal.eI.rn(SourceFile:447) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [5 bytes] -> 16 bytes per line 00000000 74 6F 55 52 49 toURI [ jebglobal.rP.dN(SourceFile) jebglobal.PX.dN(SourceFile:201) jebglobal.PX.fa(SourceFile:186) jebglobal.PX.dN(SourceFile:96) jebglobal.oQ.dN(SourceFile:28) jebglobal.eI.rn(SourceFile:447) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [12 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 69 6F 2E-46 69 6C 65 java.io.File [ jebglobal.rP.dN(SourceFile) jebglobal.PX.dN(SourceFile:201) jebglobal.PX.fa(SourceFile:186) jebglobal.PX.dN(SourceFile:96) jebglobal.oQ.dN(SourceFile:28) jebglobal.eI.rn(SourceFile:447) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [12 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 6E 65 74-2E 55 52 49 java.net.URI [ jebglobal.rP.dN(SourceFile) jebglobal.PX.dN(SourceFile:213) jebglobal.PX.dN(SourceFile:202) jebglobal.PX.fa(SourceFile:186) jebglobal.PX.dN(SourceFile:96) jebglobal.oQ.dN(SourceFile:28) jebglobal.eI.rn(SourceFile:447) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [21 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 75 74 69-6C 2E 6A 61 72 2E 4A 61 java.util.jar.Ja 00000010 72 46 69 6C 65 rFile [ jebglobal.rP.dN(SourceFile) jebglobal.PX.dN(SourceFile:213) jebglobal.PX.dN(SourceFile:202) jebglobal.PX.fa(SourceFile:186) jebglobal.PX.dN(SourceFile:96) jebglobal.oQ.dN(SourceFile:28) jebglobal.eI.rn(SourceFile:447) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [12 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 69 6F 2E-46 69 6C 65 java.io.File [ jebglobal.rP.dN(SourceFile) jebglobal.PX.dN(SourceFile:219) jebglobal.PX.dN(SourceFile:202) jebglobal.PX.fa(SourceFile:186) jebglobal.PX.dN(SourceFile:96) jebglobal.oQ.dN(SourceFile:28) jebglobal.eI.rn(SourceFile:447) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [21 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 75 74 69-6C 2E 6A 61 72 2E 4A 61 java.util.jar.Ja 00000010 72 46 69 6C 65 rFile [ jebglobal.rP.dN(SourceFile) jebglobal.PX.dN(SourceFile:219) jebglobal.PX.dN(SourceFile:202) jebglobal.PX.fa(SourceFile:186) jebglobal.PX.dN(SourceFile:96) jebglobal.oQ.dN(SourceFile:28) jebglobal.eI.rn(SourceFile:447) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [8 bytes] -> 16 bytes per line 00000000 67 65 74 45 6E 74 72 79 getEntry [ jebglobal.rP.dN(SourceFile) jebglobal.PX.dN(SourceFile:221) jebglobal.PX.dN(SourceFile:202) jebglobal.PX.fa(SourceFile:186) jebglobal.PX.dN(SourceFile:96) jebglobal.oQ.dN(SourceFile:28) jebglobal.eI.rn(SourceFile:447) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [21 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 75 74 69-6C 2E 6A 61 72 2E 4A 61 java.util.jar.Ja 00000010 72 46 69 6C 65 rFile [ jebglobal.rP.dN(SourceFile) jebglobal.PX.dN(SourceFile:221) jebglobal.PX.dN(SourceFile:202) jebglobal.PX.fa(SourceFile:186) jebglobal.PX.dN(SourceFile:96) jebglobal.oQ.dN(SourceFile:28) jebglobal.eI.rn(SourceFile:447) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [14 bytes] -> 16 bytes per line 00000000 67 65 74 49 6E 70 75 74-53 74 72 65 61 6D getInputStream [ jebglobal.rP.dN(SourceFile) jebglobal.PX.dN(SourceFile:221) jebglobal.PX.dN(SourceFile:202) jebglobal.PX.fa(SourceFile:186) jebglobal.PX.dN(SourceFile:96) jebglobal.oQ.dN(SourceFile:28) jebglobal.eI.rn(SourceFile:447) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [22 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 75 74 69-6C 2E 7A 69 70 2E 5A 69 java.util.zip.Zi 00000010 70 45 6E 74 72 79 pEntry [ jebglobal.rP.dN(SourceFile) jebglobal.PX.dN(SourceFile:223) jebglobal.PX.dN(SourceFile:202) jebglobal.PX.fa(SourceFile:186) jebglobal.PX.dN(SourceFile:96) jebglobal.oQ.dN(SourceFile:28) jebglobal.eI.rn(SourceFile:447) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [19 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 69 6F 2E-49 6E 70 75 74 53 74 72 java.io.InputStr 00000010 65 61 6D eam [ jebglobal.rP.dN(SourceFile) jebglobal.PX.dN(SourceFile:223) jebglobal.PX.dN(SourceFile:202) jebglobal.PX.fa(SourceFile:186) jebglobal.PX.dN(SourceFile:96) jebglobal.oQ.dN(SourceFile:28) jebglobal.eI.rn(SourceFile:447) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [4 bytes] -> 16 bytes per line 00000000 72 65 61 64 read [ jebglobal.rP.dN(SourceFile) jebglobal.PX.dN(SourceFile:226) jebglobal.PX.dN(SourceFile:202) jebglobal.PX.fa(SourceFile:186) jebglobal.PX.dN(SourceFile:96) jebglobal.oQ.dN(SourceFile:28) jebglobal.eI.rn(SourceFile:447) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [22 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 75 74 69-6C 2E 6A 61 72 2E 4A 61 java.util.jar.Ja 00000010 72 45 6E 74 72 79 rEntry [ jebglobal.rP.dN(SourceFile) jebglobal.PX.dN(SourceFile:226) jebglobal.PX.dN(SourceFile:202) jebglobal.PX.fa(SourceFile:186) jebglobal.PX.dN(SourceFile:96) jebglobal.oQ.dN(SourceFile:28) jebglobal.eI.rn(SourceFile:447) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [15 bytes] -> 16 bytes per line 00000000 67 65 74 43 65 72 74 69-66 69 63 61 74 65 73 getCertificates [ jebglobal.rP.dN(SourceFile) jebglobal.PX.dN(SourceFile:227) jebglobal.PX.dN(SourceFile:202) jebglobal.PX.fa(SourceFile:186) jebglobal.PX.dN(SourceFile:96) jebglobal.oQ.dN(SourceFile:28) jebglobal.eI.rn(SourceFile:447) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [30 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 73 65 63-75 72 69 74 79 2E 63 65 java.security.ce 00000010 72 74 2E 43 65 72 74 69-66 69 63 61 74 65 rt.Certificate [ jebglobal.rP.dN(SourceFile) jebglobal.PX.dN(SourceFile:227) jebglobal.PX.dN(SourceFile:202) jebglobal.PX.fa(SourceFile:186) jebglobal.PX.dN(SourceFile:96) jebglobal.oQ.dN(SourceFile:28) jebglobal.eI.rn(SourceFile:447) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [12 bytes] -> 16 bytes per line 00000000 67 65 74 50 75 62 6C 69-63 4B 65 79 getPublicKey [ jebglobal.rP.dN(SourceFile) jebglobal.Qq.dN(SourceFile:51) jebglobal.fL.ld(SourceFile:55) jebglobal.Qq.dN(SourceFile:38) jebglobal.yW.QE(SourceFile:433) jebglobal.eI.rn(SourceFile:448) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [179 bytes] -> 16 bytes per line 00000000 0A 48 65 6C 6C 6F 20 25-73 2E 20 59 6F 75 20 6E .Hello %s. You n 00000010 65 65 64 20 61 20 6C 69-63 65 6E 73 65 20 6B 65 eed a license ke 00000020 79 20 74 6F 20 75 73 65-20 4A 45 42 2E 20 54 68 y to use JEB. Th 00000030 69 73 20 6F 6E 65 2D 74-69 6D 65 20 6F 70 65 72 is one-time oper 00000040 61 74 69 6F 6E 20 77 69-6C 6C 20 6F 6E 6C 79 20 ation will only 00000050 74 61 6B 65 20 61 20 66-65 77 20 73 65 63 6F 6E take a few secon 00000060 64 73 2E 0A 0A 50 6C 65-61 73 65 20 76 69 73 69 ds...Please visi 00000070 74 20 25 73 2C 20 61 6E-64 20 75 73 65 20 74 68 t %s, and use th 00000080 65 20 66 6F 6C 6C 6F 77-69 6E 67 20 22 6C 69 63 e following "lic 00000090 65 6E 73 65 20 64 61 74-61 22 20 62 6C 6F 62 20 ense data" blob 000000A0 74 6F 20 67 65 6E 65 72-61 74 65 20 61 20 6B 65 to generate a ke 000000B0 79 2E 0A y.. [ jebglobal.rP.dN(SourceFile) jebglobal.Qq.dN(SourceFile:63) jebglobal.fL.ld(SourceFile:55) jebglobal.Qq.dN(SourceFile:38) jebglobal.yW.QE(SourceFile:433) jebglobal.eI.rn(SourceFile:448) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [15 bytes] -> 16 bytes per line 00000000 4F 70 65 6E 20 69 6E 20-62 72 6F 77 73 65 72 Open in browser [ jebglobal.rP.dN(SourceFile) jebglobal.Qq.dN(SourceFile:72) jebglobal.fL.ld(SourceFile:55) jebglobal.Qq.dN(SourceFile:38) jebglobal.yW.QE(SourceFile:433) jebglobal.eI.rn(SourceFile:448) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [15 bytes] -> 16 bytes per line 00000000 0A 4C 69 63 65 6E 73 65-20 64 61 74 61 3A 20 .License data: [ jebglobal.rP.dN(SourceFile) jebglobal.Qq.dN(SourceFile:95) jebglobal.fL.ld(SourceFile:55) jebglobal.Qq.dN(SourceFile:38) jebglobal.yW.QE(SourceFile:433) jebglobal.eI.rn(SourceFile:448) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [13 bytes] -> 16 bytes per line 00000000 4C 69 63 65 6E 73 65 20-6B 65 79 3A 20 License key: [ jebglobal.rP.dN(SourceFile) jebglobal.eI.rn(SourceFile:451) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [18 bytes] -> 16 bytes per line 00000000 4C 69 63 65 6E 73 65 20-6B 65 79 20 65 72 72 6F License key erro 00000010 72 2E r. [ jebglobal.rP.dN(SourceFile) jebglobal.eI.Ee(SourceFile:540) jebglobal.eI.rn(SourceFile:452) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [16 bytes] -> 16 bytes per line 00000000 6A 61 76 61 2E 6C 61 6E-67 2E 53 79 73 74 65 6D java.lang.System [ jebglobal.rP.dN(SourceFile) jebglobal.eI.Ee(SourceFile:540) jebglobal.eI.rn(SourceFile:452) jebglobal.eI.PF(SourceFile:359) jebglobal.yW.rn(SourceFile:296) jebglobal.yW.dN(SourceFile:86) jeb.Launcher.main(SourceFile:159) ] [4 bytes] -> 16 bytes per line 00000000 65 78 69 74 exit -------------------------------------------------------------------------- 看到啥了,"wmic bios get serialnumber"都出来了,还有啥看不到。RSA公钥(n和e) 也被编码,是怕别人替换公钥吗?最后的exit也被编码了,越是编码越是需要剁。怎 么剁?调用栈回溯都给你了,行号信息是jeb.jar自带的,爽不爽?说!快说爽死了。