吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 177|回复: 2
上一主题 下一主题
收起左侧

[UnPackMe] rust写的java class文件加解密工具,欢迎分析

[复制链接]
跳转到指定楼层
楼主
ljkgpxs 发表于 2026-7-1 18:42 回帖奖励
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。


附件里的压缩包包含了运行程序所需动态库以及密钥文件,目的是防止外部人员反编译获取源码,class文件在运行时解密加载进jvm,dll使用rust编写。
本打算发ReserveMe板块,但是思来想去,觉得加密过程设计的太复杂了,可能分析难度较大,还是发到了UnPackMe板块,要求dump出class文件的实际字节码,大神帮忙分析程序的可靠性,提提建议增强哪部分

class文件经过加密之后,所有方法的内容都被替换成throw new RuntimeExcepiton("Empty method");

提供的示例要求java8以及以上,正常运行会有以下提示“You cracked me!”


如果没有nclassloader.dll,或者对应密钥(抑或是密钥过期),Crackme会抛出异常“Empty method”


请dump出Crackme的实际class文件字节码,并附明dump过程和方式
如果可以,请分析出class文件是如何伪装,如何加解密的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
Sound 发表于 2026-7-2 18:53
public Crackme();
  Code bytes:
    2A B7 00 01 B1

  javap:
    0: aload_0
    1: invokespecial #1  
    4: return

public void hello();
  Code bytes:
    B2 00 02 12 03 B6 00 04 B1

public void hello();
  Code bytes:
    B2 00 02 12 03 B6 00 04 B1

  javap:
    0: getstatic     
    3: ldc           
    5: invokevirtual
    8: return
3#
Sound 发表于 2026-7-2 18:59
nclassloader.dll

void Java_nclassloader_NClassLoader_init(void) {
    FUN_1800222f3(0);

FUN_1800222f3` 中有直接解析 HotSpot 内部结构的行为

```text
Load jvm.dll
GetProcAddress("gHotSpotVMStructs")   通过 jvm.dll的 VMStructs 定位 HotSpot 内部结构,运行时改了方法执行

原始方法的真实 Code加密后存放在常量
- 运行时 DLL 识别带有该标记和伪装方法体的 class,解密出真实方法内容,再通过 HotSpot 内部结构恢复执行体

构造函数实际字节码:

```text
2A B7 00 01 B1
```

对应 javap:

```text
public Crackme();
  0: aload_0
  1: invokespecial #1  // java/lang/Object.<init>:()V
  4: return
```

`hello()` 实际字节码:

```text
B2 00 02 12 03 B6 00 04 B1
```

对应 javap:

```text
public void hello();
  0: getstatic     #2  // java/lang/System.out:Ljava/io/PrintStream;
  3: ldc           #3  // String You cracked me!
  5: invokevirtual #4  // java/io/PrintStream.println:(Ljava/lang/String;)V
  8: return
```
根据方法名替换为实际执行字节码
```text
<init>  -> 2A B7 00 01 B1
hello   -> B2 00 02 12 03 B6 00 04 B1

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-7-3 07:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表