From 8f38e530168fc3da2ed7fc79d63178f770f496f8 Mon Sep 17 00:00:00 2001 From: creeper Date: Sun, 25 Aug 2024 22:56:49 +0800 Subject: [PATCH] Site updated: 2024-08-25 22:56:49 --- .../index.html" | 25 +++++++++++-------- index.html | 14 +++++++---- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git "a/2024/08/25/\344\275\277\347\224\250libGDX\347\247\273\346\244\21520\345\271\264\345\211\215\347\232\204J2ME\346\270\270\346\210\217\343\200\212\344\270\255\345\233\275\350\267\263\346\243\213\343\200\213/index.html" "b/2024/08/25/\344\275\277\347\224\250libGDX\347\247\273\346\244\21520\345\271\264\345\211\215\347\232\204J2ME\346\270\270\346\210\217\343\200\212\344\270\255\345\233\275\350\267\263\346\243\213\343\200\213/index.html" index c92891b..298ab25 100644 --- "a/2024/08/25/\344\275\277\347\224\250libGDX\347\247\273\346\244\21520\345\271\264\345\211\215\347\232\204J2ME\346\270\270\346\210\217\343\200\212\344\270\255\345\233\275\350\267\263\346\243\213\343\200\213/index.html" +++ "b/2024/08/25/\344\275\277\347\224\250libGDX\347\247\273\346\244\21520\345\271\264\345\211\215\347\232\204J2ME\346\270\270\346\210\217\343\200\212\344\270\255\345\233\275\350\267\263\346\243\213\343\200\213/index.html" @@ -13,14 +13,15 @@ - - - + + + + - + - + @@ -107,10 +108,15 @@

查找游戏资源

我只记得这个游戏叫做《中国跳棋》,并且是十年前的Samsung手机内置的,于是在bilibili和抖音都搜索了一下,果然搜出了几个视频,都是展示在十几年前的手机上玩这个游戏的。从视频中我回忆起了一些关于这个游戏的具体信息,在互联网上进行了查找。不久我就在一个论坛(DOSPY论坛)上找到了这个游戏的相关资源:【稀有资源】中 国 跳 棋,游戏的形式是一个jar包。

使用模拟器运行J2ME游戏

十几年前按键手机和部分触屏手机上的很多游戏都是使用J2ME开发的,维基百科对于J2ME的介绍为:

1
Java ME以往称作J2ME(Java Platform, Micro Edition)是为机顶盒、移动电话和PDA之类嵌入式消费电子设备提供的Java语言平台,包括虚拟机和一系列标准化的Java API。它和Java SE、Java EE一起构成Java技术的三大版本,并且同样是通过JCP(Java Community Process)制订的。
-

J2ME是一个过时的框架,使用其开发的游戏自然无法在现代的操作系统上运行。因此,需要使用模拟器运行游戏的jar包。手机端可以选择J2ME Loader,电脑端可以选择microemulator
我使用microemulator运行原版游戏,部分界面如下:
alt text

+

J2ME是一个过时的框架,使用其开发的游戏自然无法在现代的操作系统上运行。因此,需要使用模拟器运行游戏的jar包。手机端可以选择J2ME Loader,电脑端可以选择microemulator
我使用microemulator运行原版游戏,部分界面如下:

+
+ alt text + alt text +
+

解包游戏并反编译

从DOSPY论坛上下载的jar包其实就是一个zip压缩文件,在Linux中,可通过unzip命令解压缩到指定目录extracted:

1
unzip your-file.jar -d extracted/
-

进入extracted目录,可看到包含Java的.class文件和资源文件(图片、音频)
alt text
与C/C++程序不同的是,Java编译出的.class字节码非常容易被反编译为Java代码,所以通常开发者会对代码进行混淆,使得其可读性下降,难以被破解。
我使用CFR工具反编译字节码,当然也有很多其他的工具。
CFR工具本身也是一个jar文件,反编译单个字节码文件:

+

进入extracted目录,可看到包含Java的.class文件和资源文件(图片、音频)
alt text
与C/C++程序不同的是,Java编译出的.class字节码非常容易被反编译为Java代码,所以通常开发者会对代码进行混淆,使得其可读性下降,难以被破解。
我使用CFR工具反编译字节码,当然也有很多其他的工具。
CFR工具本身也是一个jar文件,反编译单个字节码文件:

1
java -jar cfr.jar target.jar > target.java

在Linux中,使用find命令,将extracted目录下所有的.class文件都反编译为.java文件:

1
find extracted/ -name "*.class" -exec java -jar cfr.jar {} --outputdir extracted \;
@@ -143,11 +149,10 @@

移植代码仓库

现阶段已经完成了故事模式6关的核心部分,已经可以和20年前的AI完跳棋了,与原版游戏对比如图:

-

alt text

+

alt text

其中左侧为原版,右侧为移植版(可以看到较为简陋)

视频演示在Bilibili:

- - +

https://www.bilibili.com/video/BV1KDWZetEg4/?share_source=copy_web&vd_source=70024a5eb82a8b6b82eac10977ce41b8

我将代码开源在了Github和Gitee,持续更新中:

https://github.com/creeper12356/ChineseCheckerPorted

https://gitee.com/creeper12356/ChineseCheckerPorted

diff --git a/index.html b/index.html index dc38616..636497d 100644 --- a/index.html +++ b/index.html @@ -101,10 +101,15 @@

查找游戏资源

我只记得这个游戏叫做《中国跳棋》,并且是十年前的Samsung手机内置的,于是在bilibili和抖音都搜索了一下,果然搜出了几个视频,都是展示在十几年前的手机上玩这个游戏的。从视频中我回忆起了一些关于这个游戏的具体信息,在互联网上进行了查找。不久我就在一个论坛(DOSPY论坛)上找到了这个游戏的相关资源:【稀有资源】中 国 跳 棋,游戏的形式是一个jar包。

使用模拟器运行J2ME游戏

十几年前按键手机和部分触屏手机上的很多游戏都是使用J2ME开发的,维基百科对于J2ME的介绍为:

1
Java ME以往称作J2ME(Java Platform, Micro Edition)是为机顶盒、移动电话和PDA之类嵌入式消费电子设备提供的Java语言平台,包括虚拟机和一系列标准化的Java API。它和Java SE、Java EE一起构成Java技术的三大版本,并且同样是通过JCP(Java Community Process)制订的。
-

J2ME是一个过时的框架,使用其开发的游戏自然无法在现代的操作系统上运行。因此,需要使用模拟器运行游戏的jar包。手机端可以选择J2ME Loader,电脑端可以选择microemulator
我使用microemulator运行原版游戏,部分界面如下:
alt text

+

J2ME是一个过时的框架,使用其开发的游戏自然无法在现代的操作系统上运行。因此,需要使用模拟器运行游戏的jar包。手机端可以选择J2ME Loader,电脑端可以选择microemulator
我使用microemulator运行原版游戏,部分界面如下:

+
+ alt text + alt text +
+

解包游戏并反编译

从DOSPY论坛上下载的jar包其实就是一个zip压缩文件,在Linux中,可通过unzip命令解压缩到指定目录extracted:

1
unzip your-file.jar -d extracted/
-

进入extracted目录,可看到包含Java的.class文件和资源文件(图片、音频)
alt text
与C/C++程序不同的是,Java编译出的.class字节码非常容易被反编译为Java代码,所以通常开发者会对代码进行混淆,使得其可读性下降,难以被破解。
我使用CFR工具反编译字节码,当然也有很多其他的工具。
CFR工具本身也是一个jar文件,反编译单个字节码文件:

+

进入extracted目录,可看到包含Java的.class文件和资源文件(图片、音频)
alt text
与C/C++程序不同的是,Java编译出的.class字节码非常容易被反编译为Java代码,所以通常开发者会对代码进行混淆,使得其可读性下降,难以被破解。
我使用CFR工具反编译字节码,当然也有很多其他的工具。
CFR工具本身也是一个jar文件,反编译单个字节码文件:

1
java -jar cfr.jar target.jar > target.java

在Linux中,使用find命令,将extracted目录下所有的.class文件都反编译为.java文件:

1
find extracted/ -name "*.class" -exec java -jar cfr.jar {} --outputdir extracted \;
@@ -137,11 +142,10 @@

移植代码仓库

现阶段已经完成了故事模式6关的核心部分,已经可以和20年前的AI完跳棋了,与原版游戏对比如图:

-

alt text

+

alt text

其中左侧为原版,右侧为移植版(可以看到较为简陋)

视频演示在Bilibili:

- - +

https://www.bilibili.com/video/BV1KDWZetEg4/?share_source=copy_web&vd_source=70024a5eb82a8b6b82eac10977ce41b8

我将代码开源在了Github和Gitee,持续更新中:

https://github.com/creeper12356/ChineseCheckerPorted

https://gitee.com/creeper12356/ChineseCheckerPorted