Sep 29, 2005

Hack Primer (4) Hack的一般过程


  Hack是一个很复杂的过程。从有人Hack成功后,就有人开始学习如何Hack。我们通常所看到的是对于方法的提问,固然方法是重要的,但是对于过程我们也应该关注一下。
  就像我们为了得到一个结果,可以采用不同的算法或者模式。但是面对同样的算法或者模式的时候,不同的结果也不停的出现。这不能不说是过程在这中间起了非常重要的作用。


  我也是才开始研究Hack,不能说有什么深入的了解。不过是我对Hack的一点认识。(后面一我的一个例子)Hack的一般过程:


1。Hack的工具。


  动态调试器:No$Gba 1。4。这个没有过多的选择,而且这个的功能已经够用了。16进制编辑器:把调试好的程序写入rom。这种工具很多。WinHex,UE,Hex workshop;
  模拟器:用来测试游戏,当然调试器也可以完成,但是会有一些不方便的地方。一般都是用的VBA;
  补丁工具:IPS或者CodeFusion,其他的当然也可以。


  这些我们只要准备好就可以了。


2。确定目标


  Hack不可能是随机的无目标的过程。我们不可能说用调试器来运行游戏,玩着玩着就Hack一个。通常是这样的,我们先是正常的游戏(指大多数的人)。然后有了一个Hack的想法,然后确定Hack后的目标。所以我们可以在这里完成这些事:


2-1。要Hack的rom:这个当然有机种,rom的名字。美日的不要混用,不确定能通用的时候最好弄清楚版本
2-2。Hack后要达到的目标:比如不死,时间无限,不遇敌之类的。没有目标怎么hack呢?


3。地址搜索


  这个方法很多,比如使用EC里面已经提供的。或者用模拟器自带的,或者用什么其他的东西。因为游戏的数据都是保存在内存里面的(99。9%的情况)。所以要找到我们需要的那些内存地址。用VBA找到的地址可以在调试器里面直接用。EC的地址要通过一个简单的转换:
04XXXX的地址变换成0300XXXX
  其他的直接在前面加2就可以了,然后确定不同的值对游戏的影响。


  所以我们在这里要确定的就是这些:
3-1。查找到我们Hack内容相关的内存地址
3-2。确定不同的值所对游戏的影响
  另外,如果没有超强的记忆力,最好把这些都记下来。


4。确定关键代码


  简单的我们可以直接下中断[XXXXXXX]!,让游戏在改变值的时候暂停,很多游戏都可以,然后可以单步返回调用的地方或者直接修改代码。也可以r0=XXXXXXX之类的让寄存器。准备读取的时候来中断。这里的所采用方法要按照不同的情况来灵活运用。


  这个目标比较简单,就是确定代码的位置,实际操作起来比较困难。(Hack难点)


5。确定修改方法


  要达到同样的目的有很多方法,但是我们要按照不同的情况来选择,比如是赋值以后我们来修改,还是直接拦截原来的赋值。这些都是我们要考虑的,原则就是稳定,简单,对程序改动少。要添加自己的程序的时候,建议在开始的地方push r0-r7,lr,返回的时候pop r0-r7,然后是原来的语句,最后用pop pc来返回。


  如果代码都确定了,那么这里比较的简单。不过建议初学者把寄存器表示的意义写下来。


6。初步调试,写入代码


  当我们在调试器里面把代码写好以后,直接在调试器里面进行游戏。这里体现出调试器的一个好处:如果程序有错,模拟器可能还是能够执行,但是调试器会出错。当我们的代码运行没有错误,用16进制工具把代码代码写进rom里面


7。最后调试,制作补丁


  这个是防止代码写入rom的时候出错,所以我们把代码写入以后需要最后调试一下。没有问题就作补丁吧。

  一般的过程就是这样的。这里我贴出我的一个例子:


恶魔城-晓月 +不同名字对应不同能力


(为了对应上面的,故把工具的编号留出。)
2-1。Rom:恶魔城-晓月(中文版)
2-2。目标:不同名字对应不同能力。
DRACULA:拥有全部能力
LUCKYDOG:幸运值最高,其他能力为一半,带有稀有物品,魂出现上升戒指
3。人物标志201325ah:0-Soma;1-Julius
名字存放的地址:02000090h
字母对照表:
恶魔城晓月(中文版)字母对照表
A 02 B 03 C 04 D 05
E 06 F 07 G 08 H 09
I 0A J 0B K 0C L 0D
M 0E N 0F O 10 P 11
Q 12 R 13 S 14 T 15
U 16 V 17 W 18 X 19
Y 1A Z 1B @ 1C 。 1D
- 1E ' 1F ! 20 (Skull) 21
(Cross) 22



名字对应的值
JULIUS 0B160D0A 1614
DRACULA 05130204 160D02
LUCKYDOG 0D16040C 1A051008



魂出现几率上升戒指 201330A
稀有物品出现几率上升戒指 201330B



4。名字判断代码大智位置:80078fc
r0 读入一个输入的字符
r1 读入一个特定名字字符
r2 输入名字的地址(这个地址在程序转入之前已经赋值)
r3 特定名字的地址(初始化为08143EB0)
r4 人物标志(初始化为1)
r5 循环次数(名字最动为8个字母,所以固定为8)
r6 自定义的人物标志位(03000c60)



初始化能力代码这个笔记丢了)



5。插入子程序。替代原来的代码。(具体代码如有兴趣请参看Hack Primer (2))
6,7(略)



  这是我的一点心得,我觉得初学最好有一个步骤来Hack。如果有不对的地方请大家包含


0 comments:

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Powered by Blogger