![](https://img-blog.csdnimg.cn/direct/551dfecf2eaa4b25b750737612e97dcf.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
街机模拟游戏逆向工程(HACKROM)教程
文章平均质量分 79
街机模拟游戏逆向工程(HACKROM)教程
字节狂徒
这个作者很懒,什么都没留下…
展开
-
街机模拟游戏逆向工程(HACKROM)教程:[19]思路的多样性
我们回到游戏开始,向前走一点,走到敌人马上就要出现的临界点,为什么要走到临界点,是因为在敌人出现前,会出现两个飞龙,因为敌人的内存很多是共享的,这两个飞龙很可能会占用掉这个地方的内存。我们已经知道,敌人出现需要一个条件,当这个条件满足时,敌人的出现,程序会需要初始化这个敌人出现的位置,也就是说,我们可以利用敌人的坐标位置来一步步找到敌人出现的条件检测位置。我们回到游戏观察敌的走动,我们猜测敌人向左走时敌人的坐标会减少,向右时会增加,我们发现敌人移动了,就进入调试器,如果敌人向左移动了,使用。原创 2024-01-23 19:30:48 · 885 阅读 · 0 评论 -
街机模拟游戏逆向工程(HACKROM)教程:[18]分析的思路
首先,敌人的出现是需要一个条件的,我们在游戏中可以发现,游戏开始后,我们如果不向前移动,或者向后移动,敌人是不会出现的,只有我们向前移动了一定的距离后,敌人才会出现,那么,我们可以猜测,敌人出现的条件就是场景的位置,只有玩家移动到场景一定的位置时,敌人才会出现。那么,我们如果需要找到其它的一些数据,我们应该如何理清其中的思路呢,我们下面用一个实例来实现改变出现的敌人。但是,我们同时看到,这些地址有多个地址的数值和FF8744的值是一样的,也就是说,这些地方所存的,也有可能是场景的坐标值。原创 2024-01-23 19:30:34 · 1291 阅读 · 0 评论 -
街机模拟游戏逆向工程(HACKROM)教程:[17]实战分析程序运行逻辑
在之前我们已经测试过,在"恐龙新世纪"这个游戏中,我们在使用扣血技能时,之所以可以实现减少血量,是利用sub指令来减少血量所对应的内存的值。那么,经过这个测试,我们又可以猜测,当我们拾取回血道具时,用来增加血量的指令是否为和sub相反的add指令呢,我们同样可以测试这个情况,我们硬重启一下游戏,默认硬重启为shift+F3。我们可以看到,这句sub指令和之前的一样,占用了4个字节空间,所以,因为每个nop指令是占用2个字节空间,要让这句sub指令完全失去做用,我们需要用两个nop指令来替换这句指令。原创 2024-01-22 10:19:35 · 1252 阅读 · 0 评论 -
街机模拟游戏逆向工程(HACKROM)教程:[16]68K汇编-条件分支指令
第二个逻辑,N(负结果)标志为1,V(溢出)标志为0,所以第二个逻辑成立。第二个罗辑,虽然V(溢 出)标志为0,但是N(负结果)标志为1,所以第二个逻辑也不成立。第一个逻辑,虽然N(负结果)标志为1,但是V(溢 出)标志为0,所以第一个逻辑不成立。但是只要有一个逻辑成立,就会发生跳转,这里,因为第二个逻辑已经成立,所以,这里会发生跳转。第三个逻辑,N(负结果)标志为1,V(溢出)标志为0,所以第三个逻辑不成立。第一个逻辑,Z(零结果)标志为0,所以第一个逻辑不成立。二、[为负] 与 [非溢出]原创 2024-01-22 10:19:19 · 695 阅读 · 0 评论 -
街机模拟游戏逆向工程(HACKROM)教程:[15]68K汇编-测试对比指令
测试或对比指令会检查源操作数 和 目标操作数的某些特定条件的状态,然后设置相对应的CCR的某些状态标志,这些指令通常不会对源操作数和目标操作数产生改变。原创 2024-01-21 11:59:42 · 1240 阅读 · 0 评论 -
街机模拟游戏逆向工程(HACKROM)教程:[14]68K汇编-标志寄存器
在M68K中,有许多条件分支指令,和jmp指令一样也会修改PC达到程序跳转或分支的目的,不过这些会根据一些情况或状态来选择是否跳转。而在M68K中,有一个特别的寄存器来标记这些情况。原创 2024-01-21 11:59:28 · 1135 阅读 · 0 评论 -
街机模拟游戏逆向工程(HACKROM)教程:[13]68K汇编-jmp指令
如:move.w d0,-(sp),执行时,sp寄存器的值会先减少.w长度,也就是2个字节,这时,sp的值为$10000 - $2 = $FFFE,然后才会把数据传递到sp所指向的地址。我们要理解该指令的作用,先要理解堆栈(stack),堆栈是一块可以用来临时存储重要信息的内存空间,你可以指定 m68k 的堆栈的地址在哪,也可以随时地修改堆栈的地址。bsr与jsr指令的关系,和jmp和bra的关系是一样的,bsr与jsr指令的作用基本相同,不同之处和bra指令一样,bsr指令的寻址范围是有限制的。原创 2024-01-20 02:05:12 · 664 阅读 · 0 评论 -
街机模拟游戏逆向工程(HACKROM)教程:[12]68K汇编-程序流控制
PC寄存器也是M68K的一个寄存器,他的作用是存储当前运行程序的位置,我们在之前的所有测试程序,都是存在“只读存储器”中的,也就是常常说到的ROM。这里需要注意,我们PC值的选择必须为指令的开始,如果设置了比如$1002,那么机器会执行:0000 0325这段指令,这种情况下,计算机不会正常运行完整的指令,这会造成两种情况,运行错误或者不能实现指令的功能。那么,也就是说,这句我们输入的指令,经过编译器的翻译,生成了一段长度为6个字节的16进制的数值。比如该段代码的第二句,是生成了长度为4个字节的数值。原创 2024-01-20 02:04:53 · 1512 阅读 · 0 评论 -
街机模拟游戏逆向工程(HACKROM)教程:[11]68K汇编sub指令
该指令的作用是[源操作数]减[目的操作数],结果传递至[目的操作数],[源操作数]保持不变。如果d0里原本是00000010,那么指令执行后d0里的内容会变成00000000。如果d0里原本是0000002E,那么指令执行后d0里的内容会变成0000001E。如果d0里原本是000000E4,那么指令执行后d0里的内容会变成000000D4。如果d0里原本是00000008,那么指令执行后d0里的内容会变成000000F8。sub -减法指令。原创 2024-01-19 13:52:17 · 647 阅读 · 0 评论 -
街机模拟游戏逆向工程(HACKROM)教程:[10]68K汇编add指令
add :加法指令该指令的作用是[源操作数]加[目的操作数],结果传递至[目的操作数],[源操作数]保持不变。原创 2024-01-19 13:52:00 · 661 阅读 · 0 评论 -
街机模拟游戏逆向工程(HACKROM)教程:[8]68K汇编指令简介
N&&V Less or Equal 小于等于(不大于)置1。原创 2024-01-18 10:35:44 · 1225 阅读 · 0 评论 -
街机模拟游戏逆向工程(HACKROM)教程:[7]68K汇编寄存器
在之前的章节中,我们测试了一些程序代码,代码中很常见的一些比如D0,D1,D2....A0,A1,A2......之类的代码。这些代码中的字符是告诉汇编程序,这里是指向一个寄存器。寄存器是处理器的内部也有一些存储的空间,不同类型处理器根据其设计结构和设计目的的不同,各自有着不同类型的寄存器。在寄存器中,因为与CPU联系密切,数据的移动,加减操作,读取写入要比任何其他的存储设备(比如高速缓存,内存,硬盘等) 效率更高,速度更快(但是由于是集成在处理器内部,造价更高,存储空间也更小)。原创 2024-01-17 15:05:18 · 1341 阅读 · 0 评论 -
街机模拟游戏逆向工程(HACKROM)教程:[6]68K汇编简介
对于ADD,还有ADDA(加地址,不会影响标志位)、ADDI(加立即数)、ADDQ(快速加,加数不大于8以便于直接放在操作码中,比x86的INC指令书写麻烦但功能更强)、ADDX(影响进位符,用于大数运算)等。自增间址,如(A0)+。目的操作数的内容会随着执行指令而改变的操作数,也就是说,在该指令运行后,该操作数的值会产生不同的改变。可以观察到,和之前的结果不同,这次运行的结果为:FFFF0016,是因为这次的指令操作长度比之前的指令由单字节增加到了双字节,所以,这次的指令的影响范围也增加到了两个字节。原创 2024-01-17 15:05:04 · 1467 阅读 · 0 评论 -
街机模拟游戏逆向工程(HACKROM)教程:[5]中断
在上一章中,我们搜索到了"恐龙新世纪"模拟游戏中1号机台玩家血量的地址,那么,这个地址在对该游戏的逆向工程中可以起到什么作用呢?我们可以考虑,玩家血量的变动有多少种情况:1、被敌人攻击- 得到敌人某个技能的攻击力,自身的防御力。2、被队友攻击- 得到队友的攻击力。3、被道具击中- 得到道具的攻击力。4、使用扣血技能- 得到使用技能扣除的血量值。5、拾取回血道具- 得到某个回血道具回复的血量值。也许有更多的情况,这里只列出常见的几种情况。原创 2024-01-16 16:04:03 · 1513 阅读 · 0 评论 -
街机模拟游戏逆向工程(HACKROM)教程:[4]MAME的作弊功能
回到游戏,我们会发现,血条并未发生变化,因为血量发生变化后,游戏的显示并未发生变化,这其中的逻辑为,当血量发生变化后,会调用血条显示的程序。2、我们再次进入游戏,利用敌人或其它方式让玩家的血量发生变化,再次搜索之前保存下来的数据,因为血量已经发生了变化,相对于之前的数据,血量的内存数据也必定发生了变化,我们把之前的数据与已变化的数据进行对比,筛选出已经发生变化的数据。在一个游戏的运行过程中,游戏中所有的变动,比如玩家的血量,敌人的血量,玩家所在位置,场景的位置,剩余时间,等等一切,都在内存中有所体现。原创 2024-01-16 16:03:40 · 1941 阅读 · 0 评论 -
街机模拟游戏逆向工程(HACKROM)教程:[3]街机的ROM与RAM
在街机模拟器中运行一个街机游戏,我们除了需要一个模拟器工具 ,也需要有一个街机的ROM文件。街机的ROM文件,称之为Read-Only Memory,可以理解为只读存储器。在 ROM文件中,包括了游戏运行所需要的指令代码,声音,图像,等内容。而RAM全称为Random Access Memory,也叫主存,是与CPU直接交换数据的内部存储器,速度较快,通常作为操作系统或其他正在运行中的程序的临时数据存储介质。与ROM的最大区别是数据的易失性,断电或重启时,RAM所存储的数据将随之丢失。原创 2024-01-15 15:13:01 · 2185 阅读 · 0 评论 -
街机模拟游戏逆向工程(HACKROM)教程:[2]68K汇编的一些规则
在指令中,我们最常见到的符号有#和$。这其中的"#"符号是告诉汇编程序,这个符号后面的数值为一个立即数,而不是一个偏移值或一个地址。立即数可以理解为"单纯的一个数值"。我们会在后面通过一些实例来更详细说明什么叫立即数。而$符号是告诉汇编程序,这个符号后的数值为一个16进制数值;如果符号为%,那它后面的数值为一个2进制的数值;如果没有任何符号,它后面的数为一个10进制数值。上面这几条指令的意思是一样的,第一行是2进制数值(%),第二行是10进制数值,最后一行是16进制数值($)原创 2024-01-15 15:12:45 · 1622 阅读 · 0 评论 -
街机模拟游戏逆向工程(HACKROM)教程:[1]数据的存储与读取
在计算机中,数据存储的介质一直在变化,从最早的穿孔纸带,到现在的固态硬盘。但存储的原理是一直没有变化的,在计算机中,我们所存储的数据,一直都是以二进制的形式被存储存在不同的介质中。计算机用位 (bits) 来存储数据,每一位可以是两种状态之一:0或1,这就是二进制数字。而这种形式十分不方便记忆,所以,为了方便记忆,每个二进制数字,都可以转换为十六进制数字或十进制数字。二进制十六进制十进制0001$0110010$0220011$0330100$0440101$055。原创 2024-01-14 22:45:13 · 1758 阅读 · 0 评论 -
街机模拟游戏逆向工程(HACKROM)教程:[0]工具
此时,我们只能看到游戏的运行,并不能观察到游戏的程序代码,我们如果需要查看游戏的程序代码,需要加入一些参数来启运MAME。该游戏下载到的ROM文件文件名为dino.zip的压缩包,和之前的游戏一样,我们同样把该文件放到roms文件夹下。要运行需要的游戏,我们还需要要下载对应的ROM文件,我们去MAME官网下载一些网友原创非商业用途的游戏来进行测试。我们想要对游戏进行逆向分析,首先我们需要的是一个可以查看游戏中的汇编代码的工具,这里选择也只能选择的是一款比较流行的多机种模拟器工具,MAME。原创 2024-01-14 22:44:59 · 2695 阅读 · 1 评论