Sep 29, 2005

Hack Primer 编外篇—简单Hack集

Hack Primer (5) 0832 The King Of Fighters EX2 Howling Blood +隐藏要素  把2010228h和229h置为FFh打开隐藏模式,拦截到这里的写入操作,然后我选择在809c1a4h跳转(因为这时r4刚好有需要的值)。这是添加的代码:080A8122>B5FF push r0-r7,lr080A8124 20FF mov r0,0FFh080A8126 7020 strb r0,[r4]080A8128 7060 strb r0,[r4,1h]080A812A BCFF pop r0-r7080A812C 46C0 nop080A812E BD00 pop pc----------------------------------Hack Primer (5) 1959 - Killer 3D Pool (E) +所有人物  从内存的3001030h到300103Fh都设置为1可以打开隐藏人物。由于没有拦截到程序写这一段内存,所以我们找一段代码来跳转。08006A64 4684 mov r12,r008006A66 2784 mov r7,84h08006A68 063F lsl r7,r7,18h08006A6A 1AF1 sub r1,r6,r308006A6C 4561 cmp r1,r1208006A6E D901 bls 8006A74h08006A70 2180 mov r1,80h08006A72 0109 lsl r1,r1,4h08006A74 4A0A ldr r2,=40000D4h08006A76 6015 str r5,[r2]08006A78 6054 str r4,[r2,4h]08006A7A F041FF81 bl 8048980h <<<<<这里的语句我们替换了.08006A7E...

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...

Hack Primer (3) 恶魔城—晓月 +SOMA使用JULIUS能力

  首先我们要找到魂使用的代码位置,我们很容易知道201325d存放的是魂(上+B)的地址,所以我们下中断r0=201325d。这时我们上+B的时候游戏中断.用F7执行到pop返回调用的地方,然后我们看到这样的代码(再返回位置的上面一点点)。0801B3F8 483B ldr r0,=84BCA78h0801B3FA 6802 ldr r2,[r0]0801B3FC 8B91 ldrh r1,[r2,1Ch] 读取按钮,组合的按钮值0801B3FE 2040 mov r0,40h0801B400>4008 and r0,r10801B402 2800 cmp r0,0h 如果不是"上+其他键",那么就r0等于00801B404 D010 beq 801B428h0801B406 493F ldr r1,=1338Ch0801B408 1850 add r0,r2,r10801B40A 8BD1 ldrh r1,[r2,1Eh] 读取按键的值>>>0801B40C 8800 ldrh r0,[r0]>>>0801B40E 4008 and r0,r1 201338c里面保存的是和上组合的另外一个键的值0801B410 2800 cmp r0,0h0801B412 D009 beq 801B428h0801B414 6930 ldr r0,[r6,10h]0801B416 21A8 mov r1,0A8h0801B418 00C9 lsl r1,r1,3h0801B41A 4008 and r0,r10801B41C 2800 cmp r0,0h0801B41E D103 bne 801B428h0801B420 1C30 mov r0,r60801B422 2100 mov r1,0h0801B424 F7FDF8DA bl 80185DCh...

Hack Primer (2) 恶魔城—晓月 +不同名字对应不同能力

1。  当然我们可以这么搜索,这个是一个很传统的做法,因为我们最后肯定是要通过一个按键来结束名字的输入。  而我们又知道这个地址。所以我们可以追这个地址。不过传统的东西虽然通常有不错的通用型(因为新事物往往有很大的局限性或者是传统方法的延伸),但是往往很麻烦。所以我们在这里要用其他的方法得到人物初始化的代码和名字判断的代码。  其实我们可以发现SOMA和JULIUS的HP是不同的,而且又很容易从EC找到HP的地址是多少(我的前一篇教程和前辈的文章里面有如何从EC的地址得到实际的内存地址),我们在这个地址上中断,所以呢~,很容易吧。  然后我们仔细看能力初始化代码的开始部分,会发现人物的标志位,所以我们同样的可以很容易找到人物名字的判断代码。2。r0 读入一个输入的字符r1 读入一个特定名字字符r2 输入名字的地址(这个地址在程序转入之前已经赋值)r3 特定名字的地址(初始化为08143EB0)r4 人物标志(初始化为1)r5 循环次数(名字最动为8个字母,所以固定为8)r6 自定义的人物标志位(03000c60)  在这里跳转,刚好r2放有我们需要的地址。80078fc:ldrb r0,[r4]cmp r1,r0  改为 bl 8143f40 。  这里的代码很简单,没有什么可以说的。要是有问题就给我Message 。08143F40>B4FF push r0-r708143F42 4E07 ldr r6,=30007FFh08143F44 4B07 ldr r3,=8143EB0h08143F46 2500 mov r5,0h08143F48 2401 mov r4,1h08143F4A E019 b 8143F80h08143F4C 2C03 cmp r4,3h08143F4E D027 beq 8143FA0h08143F50 2500 mov r5,0h08143F52...

Hack Primer (1) 恶魔城-晓月圆舞曲 +Special +全能力

  首先我们需要得工具是:调试器:no$gba 1。4c模拟器+rom:vba1。2+晓月中文版16进制编辑器:UE5。4  上面得只是我用得,当然可以用其他同样功能得工具。  我改游戏有个习惯,不喜欢改得很变态。所以改得地方都是一些不影响游戏性得东西(我认为)。游戏里面有个special模式。不过要打穿一次才出现。那我们首先把这个弄出来。我们首先找到关键得地址是2000060h,为3h得时候就有special模式。至于这个地址怎么得到得。建议在修改之前看看ec得作弊码,类似000060h这些就直接在前面加一个2就可以了。  打开调试器。下断点[2000060h]!。中文版会在08000820h停下(其他版本我没有弄,不知道),当然这里不是。继续080006e4h又停了,当然还是不是。最后在030021d6h停下。这里就是真正得初始化得程序了。至于为什么我知道那里是,自己多看看就明白了。  不过千万不要在这里(030021d6)改动。因为gba游戏得rom代码得起始地址为08000000h,所以只要小于这个的都不能修改。用单步调试发现这里初始化了不只一个数据(快捷键F7是单步,这个是个很常用的键)。为了不改动到其他的数据,我们干脆在初始化了以后再给02000060h赋值为3h,这样就达到我们的目的了。  一直F7(这里有个循环,可以用run to cursor,来直接跳出循环)到这段代码返回。返回的地方代码是这样的:080129CC 6803 ldr r3,[r0]080129CE 4806 ldr r0,=0E001AF8h080129D0 2204 mov r2,4h080129D2 F0C6F9D7 bl 80D8D84h----------------------080129D6>1C20 mov r0,r4080129D8 BC30 pop r4,r5080129DA...

Pages 251234 »
Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Powered by Blogger