A9VG电玩部落论坛

 找回密码
 注册
搜索
查看: 2970|回复: 10

希望ly63兄能写一篇关于hack rom的新手入门文章

[复制链接]

精华
0
帖子
33
威望
0 点
积分
35 点
种子
0 点
注册时间
2012-8-5
最后登录
2015-1-13
 楼主| 发表于 2012-9-30 08:11  ·  山东 | 显示全部楼层 |阅读模式
比如需要用到什么工具软件,什么编程知识,最好用一个简单的hack rom详细过程来举例讲解,毕竟授人以渔更好,希望你能考虑一下
该用户已被禁言

精华
0
帖子
246
威望
0 点
积分
255 点
种子
0 点
注册时间
2006-1-13
最后登录
2016-6-13
发表于 2012-9-30 19:14  ·  湖北 | 显示全部楼层
这个可以学习,必须顶!!!呵呵

精华
0
帖子
478
威望
0 点
积分
629 点
种子
12 点
注册时间
2008-3-13
最后登录
2024-8-5
发表于 2012-10-1 15:38  ·  吉林 | 显示全部楼层
呃,这个......如果说一本书能让一个对编程一无所知的人达到能够HACK游戏的程度,那么这本书将会超过2米厚,学习时间可能超过2年。
我个人也没有能力写这样的一部书,这涉及到的内容实在是太多了......

各位要明白一个概念,修改ROM是编程,改变的是程序运行流程,而且是汇编级别的的编程,你将与CPU寄存器打交道,得知道CPU各种寻址方式的适用场合,
还得搞清楚卡带游戏机系统的复杂的Memory Map(SFC的一般了,FC的才真正复杂,因为有多种不同Memory Mapper),搞汉化的(涉及到图形编程)
还要注意主机GPU的时序问题,掌握这些内容并不是能够看一两篇所谓教程就能实现的,而且面对的还是异构计算机系统,
不是相对熟悉的Intel PC架构,真正需要的是计算机编程基础知识。

基础知识足够的话,只需了解目标平台硬件资料就可以调试、修改各种不同硬件上的程序,像MD、GB、GBA、NGC、WII、PS、SS、PS2等等等,有合适的工具,
而且有充足的时间的话,这些主机上的程序都可HACK,而且很容易。

精华
0
帖子
5497
威望
0 点
积分
5668 点
种子
43 点
注册时间
2006-8-16
最后登录
2025-1-12
发表于 2012-10-1 15:55  ·  法国 | 显示全部楼层
ly63 发表于 2012-10-1 15:38
呃,这个......如果说一本书能让一个对编程一无所知的人达到能够HACK游戏的程度,那么这本书将会超过2米厚, ...

多谢ly63兄赐教。

我有个问题。

我自己猜,游戏rom里已经没有完整的源代码了。

部分媒体文件是shelled的,所以类似N64模拟器rom换贴图的方式,是可以理解的。

但主程序都已汇编,怎么可能hack时序呢?

精华
0
帖子
478
威望
0 点
积分
629 点
种子
12 点
注册时间
2008-3-13
最后登录
2024-8-5
发表于 2012-10-1 16:26  ·  吉林 | 显示全部楼层
本帖最后由 ly63 于 2012-10-1 16:27 编辑

ROM里当然不会有源代码了,都是编译完成的机器码,我们的修改都是直接修 改 机 器 码的啊。

可能表述的不清楚,注意时序是指注意向VRAM写入数据的时间,SFC的VRAM并非任何时间都可访问(只能在VBALNK或Forced BLANK期间访问),
开发商制作游戏时已经调整好向VRAM写入数据的精确时间,HACK的话由于写入的内容改变,就不得不重新调整延时,
否则在不合适的时间向VRAM写入数据会失败,可能会造成无法预料的问题。

精华
0
帖子
86
威望
0 点
积分
207 点
种子
0 点
注册时间
2010-10-15
最后登录
2015-1-20
发表于 2012-10-1 16:46  ·  上海 | 显示全部楼层
4L好像对计算机系统原理的概念理解还是有些不清。rom里面存放的本质上就是编译好的目标机器指令序列,和高级语言源代码唯一区别就是直接面向机器,可以被机器理解而已。设想一下,如果人也能理解这些机器语言呢(其实这些机器语言本来就是人设计的)?那么当人不通过高级语言编译器,直接以机器语言改写程序,这不就是Hack了么?所谓汇编也只不过是为了避免真的直接和那些只有0和1的机器语言打交道而设计出来的指令有对应关系的一门低级语言。机器在debug和trace时,显示出来的都是已经经过反汇编好(因为有一一对应关系)的机器语言,也就是汇编,方便人的readability。理解了这层关系,就能明白“主程序都已汇编”这种说法本身就是错误的。

精华
0
帖子
5497
威望
0 点
积分
5668 点
种子
43 点
注册时间
2006-8-16
最后登录
2025-1-12
发表于 2012-10-1 19:55  ·  法国 | 显示全部楼层
ly63 发表于 2012-10-1 16:26
ROM里当然不会有源代码了,都是编译完成的机器码,我们的修改都是直接修 改 机 器 码的啊。

可能表述的不 ...

作为Hacker,怎么才能明白机器码的逻辑的?是否借助专门工具反编译?

精华
0
帖子
5497
威望
0 点
积分
5668 点
种子
43 点
注册时间
2006-8-16
最后登录
2025-1-12
发表于 2012-10-1 20:07  ·  法国 | 显示全部楼层
gerda 发表于 2012-10-1 16:46
4L好像对计算机系统原理的概念理解还是有些不清。rom里面存放的本质上就是编译好的目标机器指令序列,和高级 ...

我不但概念不清,而且表述也不清。尽管我也编过几段简单程序。

好吧,是这样的。汇编是把高级语言编译成机器语言。这个在一定程度上是可以反编译的。至少逻辑是可以摸清的。

但是,如果把程序编译成exe等可执行文件,很有可能就无法反编译了。硬打开只能看到一堆乱码。

我想说的是,rom里的游戏主程序,会不会像exe那样,不能反编译了。如果那样,Hacker怎么进行rom修改呢?

精华
0
帖子
86
威望
0 点
积分
207 点
种子
0 点
注册时间
2010-10-15
最后登录
2015-1-20
发表于 2012-10-1 21:16  ·  上海 | 显示全部楼层
本帖最后由 gerda 于 2012-10-1 22:31 编辑

不是,汇编(assembling)的过程绝对不是把高级语言编译(compile)成机器语言,汇编不是处理高级语言的,它只能处理汇编指令编写出来的程序,将之翻译成机器指令。我猜你的“汇编是把高级语言编译成机器语言”想说的是“编译是把高级语言编译成机器语言”,这个才是正确的说法。…………汇编语言写出的源代码通过汇编编译程序编译成机器指令。反汇编和反编译都是将机器指令试图反向翻译回原汇编语言写的程序和原高级语言写的程序。由于汇编语言和目标机器指令有对应关系,所以反汇编比较容易;反编译则不一定,因为使用现代高级语言的开发过程中使用了太多的framework和library,大量的逻辑无关代码混杂在一起。就算你强行反编译,最终出来的也是东转西跳乱成一团的源代码,不一定能够很容易地理清其中关系(和真正的原来的源代码不会一致的)。在ROM hacking的时候,Hacker们很少会去做反编译,因为那根本就没有意义……但是由于汇编指令和机器语言的一一对应,反汇编还是简单易行的。不过,无论如何,反汇编出来的汇编代码中想要表达的业务处理逻辑还是得靠hacker们自行领悟了,如果没有更进一步的资料的话。可以说,根本上要琢磨的还是处理逻辑,这才是最难的。一旦处理逻辑可以被理解的话,想改什么还不简单(理论上而已,实际情况可能会更加复杂)……只是你能看到的反汇编出来的代码,也都无非是这里某个变量被加了1,那里执行了一个JMP,至于为什么要发生这些加1啊、跳转啊,就是看你如何读懂这些零散的代码了,也就是想方设法去理解处理逻辑了。理解的方式主要是两种:静态查看代码和动态debug、trace。

PS:exe文件本质上也是编译好的机器指令集 合,可能是汇编语言这种低级语言写的,也可能是某些其他高级语言写的,同样可以被反汇编或者反编译,之后也同样是代码的理解过程了。

精华
0
帖子
5497
威望
0 点
积分
5668 点
种子
43 点
注册时间
2006-8-16
最后登录
2025-1-12
发表于 2012-10-2 02:55  ·  法国 | 显示全部楼层
gerda 发表于 2012-10-1 21:16
不是,汇编(assembling)的过程绝对不是把高级语言编译(compile)成机器语言,汇编不是处理高级语言的,它只能 ...

OK。清楚多了。汇编是汇编语言到机器语言。编译是高级语言到机器语言。

多谢。

汇编语言的指令集,本身就随着CPU不同而不同。而游戏机有常常采用定制的RISC。这是不是要求不同主机必须有不同的反汇编工具?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|A9VG电玩部落 川公网安备 51019002005286号

GMT+8, 2025-1-12 06:51 , Processed in 0.199579 second(s), 14 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

返回顶部