标题: DOS版三国志英杰传的研究心得——序, 可能也是最没用的研究心得。
本主题由 阿尔法孝直 于 2025-1-5 22:41 设置高亮
性别:未知-离线 漫漫苦短

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 9
编号 545816
注册 2023-12-25


发表于 2025-1-5 19:19 资料 短消息 只看该作者
DOS版三国志英杰传的研究心得——序

我在新年的发帖提到了许多玩家,那些都是让我敬重的前辈们。他们大部分都是极限练级玩家,龙吟还有阿尔法孝直则是研究汇编代码的高手,并且有相当知名的文章,还有一些,周瑜则算其中兼而有之的玩家,并且还有一篇《英杰传详细流程攻略》。网上也有部分做MOD,有一部分是用曹操传MOD做的,也有用原始游戏做的,不过大部分都是在游戏数据和剧本上的修改,其中很多人所用的工具剧本初步解析剧本编辑器,还得再次感谢一下龙吟前辈。
所以我打算既研究三国志英杰传游戏底层代码,又在研究了这个游戏的各种逻辑后挑战极限练级规划并记录成果,最好还能尝试修改这个游戏(不仅仅是游戏数据和剧本上的),实现一些在原本游戏基础上的一些新功能(完善Bug,拓展原有功能等等)。
这些事情我去年就开始做了,然而实际上收效甚微,所以开始打算以发帖记录的方式来敦促自己,并将这些成果分享在步步为营上,希望有更多的人能了解这个游戏,体验在战棋游戏中刘皇叔的传奇经历。

[ 本帖最后由 漫漫苦短 于 2025-1-17 19:09 编辑 ]


顶部
性别:未知-离线 漫漫苦短

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 9
编号 545816
注册 2023-12-25


发表于 2025-1-5 19:19 资料 短消息 只看该作者
第一节 游戏文件的分析工具介绍

DOS版游戏中有许多文件,其中最重要的当属main.exe,这是个16位程序,现在的64位系统打不开,于是我们只能借助DOSBox来模拟16位系统环境打开游戏,当然要想查看整个程序的16进制内容也可以用UltraEdit等软件来打开。网上的反汇编软件大部分都不支持查看16位程序(也可能是我搜寻工具的能力不足),更别说看到其中的汇编代码了,不过还是有个程序可以看到,就是最强大的交互式反汇编软件IDAPro,likelove曾经也使用过这个软件分析,在设计与修改区可以下载一个idb文件,就是他的分析成果,我使用的是从吾爱破解上的IDA_Pro_v8.3_Portable版本,可以下载一起研究。
(待补充图片)
还是要补充一句,我的研究成果参考了大量龙吟,周瑜,阿尔法孝直,likelove等人的文帖,可以说没有前辈们的研究我将寸步难行,感谢这些前辈们的付出,我作为一个后人能看到研究这些已心满意足了。


顶部
性别:未知-离线 漫漫苦短

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 9
编号 545816
注册 2023-12-25


发表于 2025-1-5 19:19 资料 短消息 只看该作者
第二节 main.exe的初步解析(一)

打开软件后,再在软件中打开游戏的main.exe,就会看到一个提示界面,有几个参数是可以改的,不过我当时研究的时候不熟就没改,不过这没有太大的影响。
(待补充修改方法)
终于进入反汇编的界面了,在IDA-View界面可以看到左边有一行行诸如“seg000:BCE6”(这个是start函数的起始地址),再多翻翻可以看到不同的地址。其中 :左边的是段地址,:右边的是偏移地址,比较重要的seg001, seg002, 还有dseg,dseg就是数据的段地址。其实这部分内容我也不能准确解释清楚,能大致明白就行。
在Hex-View界面可以看到类似UltraEdit打开main.exe的界面,看到几乎满屏的16进制数,其实这些数大部分都能与在UltraEdit看到的main.exe对应起来,当然初次对应起来是要花许多的时间的,希望大家都能记住第一次将二者对应上带来的惊喜。
顶部
性别:未知-离线 漫漫苦短

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 9
编号 545816
注册 2023-12-25


发表于 2025-1-11 19:19 资料 短消息 只看该作者
第三节 main.exe的初步解析(二)

将内存中的main.exe(Hex-View界面)与存储中的main.exe(UltraEdit界面)两者对应上也只是研究的第一步,现在我们来观察两者不能完全对应的地方。
1.首先存储中的main.exe的0-69FF是对应不上内存中的main.exe,当然这也不能表明这段是没有的或者是IDAPro把它忽略了,这段数据其实就是main.exe的可执行文件头,鉴于本人的水平有限,这个文件头的研究分析在这里先按下不表(等我知识到位了再解释吧)。

2.然后发现内存中的main.exe 1000:0000开始的数据和存储中的main.exe 6A00开始的数据是一样的,继续浏览能发现它们似乎是按照顺序依次对应上的,我们总算是找到了两者的一点对应关系。


图片附件: IDA.png (2025-1-11 19:19, 36.43 K)



图片附件: UE.png (2025-1-11 19:19, 333.2 K)



3.然后我们接着看到了内存中的main.exe的1000开头的段地址突然变成1CF6,偏移地址变回了0000,而且一直都能发现有少数内容是对应不上的,比如这5个位置,都是由F6 0C变成了F6 1C,这中间似乎存在者某种规律,是什么原因呢?


图片附件: IDA_s1.png (2025-1-11 19:19, 77.67 K)



图片附件: UE_s1.png (2025-1-11 19:19, 379.71 K)


等等,这部分的段地址是1CF6,由于小端字节序的原因,它在内存中的保存的是F6 1C,于是我们可以初步得出一个结论,就是内存中的段地址会修改,这与程序载入内存的位置有关。

4.浏览到最后,内存中的main.exe的段地址经过了几次修改,变成了407D,而存储中的main.exe的数据到头了,就像两条交汇的路终于到了分叉的时候。内存中的main.exe的内容还在继续不过大部分都是??。


图片附件: IDA_ds.png (2025-1-11 19:19, 56.37 K)



图片附件: UE_ds.png (2025-1-11 19:19, 299.6 K)


不过这部分内容并不是IDAPro不知道,而是这部分内容会根据游戏的内容产生变化,从407D:5125开始,可以简单地理解为这部分内容就是程序的堆区,与之对应的程序的栈区也是使用的407D这个段地址,只是栈区使用的是高偏移地址,并且栈是由高偏移地址向低偏移地址拓展。

[ 本帖最后由 漫漫苦短 于 2025-1-11 19:23 编辑 ]
顶部
性别:未知-离线 漫漫苦短

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 9
编号 545816
注册 2023-12-25


发表于 2025-1-12 19:19 资料 短消息 只看该作者
第四节 main.exe的初步解析(三)

当我们大致了解了内存中的main.exe和存储中的main.exe的对应关系后,可以确信内存载入一个程序其实也不算很复杂,这当然还得感谢游戏本身并没有加壳这类的手段来防止破解等等,不过我们终究还是要研究main.exe中的数据,要看IDAPro是如何对main.exe进行反汇编识别的,也就是要看汇编代码,于是我们还得回到原来的IDA-View界面,不过IDA-View界面一开始并没有原来的main.exe中的汇编码(十六进制数),不过我们可以通过设置显示出来。


图片附件: IDA_Settings.png (2025-1-12 19:19, 18.98 K)




图片附件: IDA_Options.png (2025-1-12 19:19, 20.54 K)


如果我们不勾选Include segment addresses, 在原来的显示seg00x:xxxx这些地方就会显示一个8位的16进制数。

在Number of opcode bytes的右边输入框输入一个数字,我们就可以在IDA-View界面左边每个地址旁看到每个语句对应的汇编码,输入的数字对应的就是每行显示的汇编码数,这样大概在分析汇编码的时候就不需要Hex-View界面了。
顶部
性别:未知-离线 勇者哥哥

Rank: 7Rank: 7Rank: 7Rank: 7
组别 校尉
级别 左将军
好贴 1
功绩 18
帖子 1259
编号 15125
注册 2004-8-10


发表于 2025-1-13 10:36 资料 文集 短消息 只看该作者
今夕是何年,技术贴支持!
顶部
性别:未知-离线 漫漫苦短

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 9
编号 545816
注册 2023-12-25


发表于 2025-1-13 19:19 资料 短消息 只看该作者
回复 #6 勇者哥哥 的帖子

感谢支持,不过我感觉这目前来说也不算是技术贴,我想把标题中的“研究报告”换个名字,不知道换什么比较好?

过几天会发第一章的内容,序章也没有结束,还会有内容的。
顶部
性别:未知-离线 likelove

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 37
编号 56074
注册 2005-12-27


发表于 2025-1-13 20:57 资料 短消息 只看该作者
有同好一起研究很棒。有时间我也分享一下研究的心得
顶部
性别:未知-离线 漫漫苦短

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 9
编号 545816
注册 2023-12-25


发表于 2025-1-17 19:19 资料 短消息 只看该作者
回复 #8 likelove 的帖子

很期待你的心得,我也把题目改成研究心得吧。
你的研究比我肯定更深入,我一开始下载了你在设计与修改的那里的idb文件,然后还用了你的dosbox游戏修改器,如果有可能,希望你能加个观察特定位置内存的功能。
顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2025-1-18 19:08
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.011923 second(s), 10 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP