原文地址:破解YourKit Java Profiler 2013的方法
作者:狂狐V
1.快速浏览一下YJP的安装目录(在我电脑上路径为c:Program Filesyjp 2013 build 13056lib),jar包不多,yjp.jar基本上就是要破解的jar包。用java反编译工具jd-gui打开yjp.jar,可以看到jar包中大部分的class和资源文件都以“_”结尾。
![[转载]破解YourKit <wbr>Java <wbr>Profiler <wbr>2013的方法 [转载]破解YourKit <wbr>Java <wbr>Profiler <wbr>2013的方法](https://i-blog.csdnimg.cn/blog_migrate/14ebbdf1cce768a7e20c4dd0168e3e21.jpeg)
2. 用jd-gui无法查看这些文件,仔细查看发现这些文件经过加密处理的。大家都知道,jvm只能执行byte code代码,所以一眼看到这些加密的class文件,就能会想到,不论是如何加密以及在什么地方加密,一定在某个地方会进行解密处理,而且,加载解密后Class的ClassLoader一定没有加密。经过仔细调查,果不其然,在YJP自定义的ClassLoader类com.yourkit.h.l.class中找到了这部分代码:
![[转载]破解YourKit <wbr>Java <wbr>Profiler <wbr>2013的方法 [转载]破解YourKit <wbr>Java <wbr>Profiler <wbr>2013的方法](https://i-blog.csdnimg.cn/blog_migrate/906dabb79652c64b840697825badb52e.jpeg)
顺便说一下,Natives类是本地方法调用的类,并且未进行加密:
![[转载]破解YourKit <wbr>Java <wbr>Profiler <wbr>2013的方法 [转载]破解YourKit <wbr>Java <wbr>Profiler <wbr>2013的方法](https://i-blog.csdnimg.cn/blog_migrate/6142d80cba9f7eba5f5310493bf1f1c4.jpeg)
3. 接下来要根据上面的代码:Natives.decipher1(arrayOfByte),可以把所有加密的class和资源文件可以解密出来。(这点很容易!)
![[转载]破解YourKit <wbr>Java <wbr>Profiler <wbr>2013的方法 [转载]破解YourKit <wbr>Java <wbr>Profiler <wbr>2013的方法](https://i-blog.csdnimg.cn/blog_migrate/7916a5adbd74f706f7626596e0309c08.jpeg)
4.接下来就在解密后class文件中查找license处理相关的代码,很快就在com.yourkit.h.n.class中找到:
![[转载]破解YourKit <wbr>Java <wbr>Profiler <wbr>2013的方法 [转载]破解YourKit <wbr>Java <wbr>Profiler <wbr>2013的方法](https://i-blog.csdnimg.cn/blog_migrate/43db192afa93f0e0b5075cee97f112d0.jpeg)
6. 注入License到Natives类的decipher2方法后, 启动YJP,在License输入窗口,随便输入偶数个16进制数或者空格
![[转载]破解YourKit <wbr>Java <wbr>Profiler <wbr>2013的方法 [转载]破解YourKit <wbr>Java <wbr>Profiler <wbr>2013的方法](https://i-blog.csdnimg.cn/blog_migrate/1692f233fcf54a5a5efc1c7d8c3229d9.jpeg)
注册完成后,看到注入的License信息:
![[转载]破解YourKit <wbr>Java <wbr>Profiler <wbr>2013的方法 [转载]破解YourKit <wbr>Java <wbr>Profiler <wbr>2013的方法](https://i-blog.csdnimg.cn/blog_migrate/1bad7f0ebaffbf8872eb08248a31c834.jpeg)
但是,在启动YJP自带的Profile demo application时出现错误,而且错误还是来自对createDatabaseImpl的native调用:
![[转载]破解YourKit <wbr>Java <wbr>Profiler <wbr>2013的方法 [转载]破解YourKit <wbr>Java <wbr>Profiler <wbr>2013的方法](https://i-blog.csdnimg.cn/blog_migrate/153b62f432910852627c691ae876db39.jpeg)
7. 既然是createDatabaseImpl的native调用出错,那就用反汇编工具IDA Pro打开看看,并按F5之后看到如下伪代码。 (下面以32位的yjpagent.dll为例):
![[转载]破解YourKit <wbr>Java <wbr>Profiler <wbr>2013的方法 [转载]破解YourKit <wbr>Java <wbr>Profiler <wbr>2013的方法](https://i-blog.csdnimg.cn/blog_migrate/e2e990570de61c2e3976912e70140661.jpeg)
![[转载]破解YourKit <wbr>Java <wbr>Profiler <wbr>2013的方法 [转载]破解YourKit <wbr>Java <wbr>Profiler <wbr>2013的方法](https://i-blog.csdnimg.cn/blog_migrate/c25559f71031809ed3f7626e0e2aa5f5.jpeg)
也就是在上图中,要由地址7001CA66无条件跳转到地址7001CAAB,即:jmp short loc_7001CABB(对应的HEX代码为EB 43,EB->JMP, 43表示目的地址跟当前地址的偏移量)。换句话说,就是要把把地址7001CA66开始的汇编指令0F 84改为EB 43,并把B1 00 00 00改为90 90 90 90 (90指令代表nop)。
使用任何一种Hex Editor,比如:UltraEdit,010 Editor,HEX Workshop,WinHex等进行修改:
![[转载]破解YourKit <wbr>Java <wbr>Profiler <wbr>2013的方法 [转载]破解YourKit <wbr>Java <wbr>Profiler <wbr>2013的方法](https://i-blog.csdnimg.cn/blog_migrate/ee779b11d568fe39186578af86016ea3.jpeg)
对于64位的yjpagent.dll,处理方法基本一样,在此不再阐述。
8. 再启动YJP,并执行Profile demo application,运行良好,算是成功破解!
![[转载]破解YourKit <wbr>Java <wbr>Profiler <wbr>2013的方法 [转载]破解YourKit <wbr>Java <wbr>Profiler <wbr>2013的方法](https://i-blog.csdnimg.cn/blog_migrate/744d9fe4278574c9753558d0b4c0e061.jpeg)
总结起来,三个关键步骤:
1. 解密已经加密的"Class_"文件。
2. 在Natives中注入License。
3. 绕过yjpagent.dll中的License完整性校验。
PS:大牛的方法看不懂,不过忘了在哪里看到另一个适用的方法,下载破解版的Yourkit java pro 里面含有keygen bat文件,运行该文件,点击patch按钮,选择yjp.jar文件,然后“name=”
Gengerate,生成key,输入key,即可用!