主题 : 【分享】【原创】DC金手指探秘
gxb
级别: 见习斑竹
UID: 12457
精华: 9
发帖: 803
威望: 38 星
金钱: 137756 浮游币
贡献值: 2129 点
好评度: 5140 点
人气: 14 点
在线时间: 899(时)
注册时间: 2004-10-02
最后登录: 2024-12-25
楼主  发表于: 2007-07-08 22:37

【分享】【原创】DC金手指探秘

管理提醒: 本帖被 YZB 执行提前操作(2009-06-17)
DC金手指探秘
作者:GXB
===================================
1.前言
最近WII上面的《生化危机~安布雷拉历代记》即将发售了,虽然我没有WII,却也看得眼馋,只好拿自己手头有的生化危机系列解馋。最近正好在玩DC,就想把DC上的《生化危机~维罗尼卡》打穿,但是我又比较懒,想用金手指改个子弹无限,在网上找了一圈,并没有发现日版的金手指。我有些泄气,但想到DC已经可以用电脑来模拟,就想为什么不用电脑模拟器配合最新版的EMUCHEAT来找金手指呢?于是我在网上搜索了半天,找了点资料,最后,终于让我找到了解决的办法,啦啦啦~~~

====================================

2.DC金手指种类
DC上的金手指一共有4个,分别是GameShark、XPlode、ActionReplay和CodeBreaker。其中,XPlode和CodeBreaker只能修改正版的GD游戏,盗版游戏当然就用不了了。而GameShark和ActionReplay其实同一家的,区别是GameShark是欧版,而ActionReplay是日版(如果我没记错的话),这二者都可以用来修改D版游戏,不过,我在这里推荐使用GameShark,因为这个金手指被破解了某些功能!
====================================
3.DC金手指码类型
以下我所叙述的都是RAW码。Xploder 和 Codebreaker使用RAW码,但是要命的是它们不支持D版游戏! Gameshark使用的金手指码的第一行(地址码)是加密的,而第二行密码则是明码(未加密)。DC的金手指码是两行一组,32位的,也就说,一组金手指码需要8位来确定修改地址,8位来确定修改属性。2^32= FFFFFFFF ( hex). 举个列子来说,例如 XXYYYYYY ZZZZZZZZ,如果这个是RAW码的话,那么XXYYYYYY是地址码,而ZZZZZZZZ是用来修改地址的属性的。
小知识补充:金手指厂商加密金手指码的行为并不奇怪,这样可以防止自己辛苦找出的密码被其它厂商轻松“搬运”,例如我们常见的PS2上的AR码就是一种加密码。当然,既然可以加密,就自然可以解密。网上有很多PS2的各种金手指码互转软件。DC上的Codebreaker 和Xploder 虽然都使用RAW码,但是都内建解码程序,可以使用gameshark的加密码。有兴趣的读者可以进一步去研究研究gameshark密码加密的算法。
====================
金手指码类型和说明
00xxxxxx
000000vv   
将8bit (1个字节)的值“vv”写入内存地址8cxxxxxx。 注意这个值是锁定的。
----------------------------------
01xxxxxx
0000vvvv    将16bit (2个字节) 的值“vvvv”写入内存地址8cxxxxxx。 注意这个值是锁定的。

----------------------------------
02xxxxxx
vvvvvvvv    将32bit(4个字节) 的值"vvvvvvvv" 写入内存地址8cxxxxxx。 注意这个值是锁定的。
----------------------------------
0300nnnn
aaaaaaaa    批量写入码。 nn 表示接下来写入几组32 bit。 aaaaaaaa 是写入的地址。Aaaaaaaa下面的几行数据表明写入地址的值。例如:
03000004
8c012000
11111111
22222222
33333333
44444444
这几行的密码的效果相当给4行地址写入值:从地址8c012000开始的值分别如下:
8c012000 = 11111111
8c012004 = 22222222
8c012008 = 33333333
8c01200c = 44444444
----------------------------
030100vv
aaaaaaaa    增加码。 把8bit的值“vv”加到地址aaaaaaaa上。
---------------------------
030200vv
aaaaaaaa    减少码。从地址aaaaaaaa减去8bit的值“vv”。
---------------------------
0303vvvv
aaaaaaaa    增加码。 把16bit的值“vvvv”加到地址aaaaaaaa上。
---------------------------
0304vvvv
aaaaaaaa    减少码。从地址aaaaaaaa减去16bit的值“vvvv”。
---------------------------
03050000
aaaaaaaa
vvvvvvvv    增加码。 把32bit的值“vvvvvvvv”加到地址aaaaaaaa上。
注意这种密码需要3行,如果你是在条件码中使用的话需要增加1个条件地址0exxxxxx (不是0dxxxxxx) 。
-----------------------------
03060000
aaaaaaaa
vvvvvvvv    减少码。从地址aaaaaaaa减去32bit的值“vvvvvvvv”。
注意这种密码需要3行,如果你是在条件码中使用的话需要增加1个条件地址0exxxxxx (不是0dxxxxxx) 。
-----------------------------
04xxxxxx
rrrrssss
vvvvvvvv    重复/填充码。 把32bit的值“vvvvvvvv”写入到地址8Cxxxxxx。重复写入rrrr 次,每次写入的地址跳跃ssss (事实上是ssss x 4,因为是32位码)。 这个相当于PS上以前的那种中文批量写入码。举例:
04007a30
00030001
12345678
效果是:
8c007a30 = 12345678
8c007a34 = 12345678
8c007a38 = 12345678
-------------------------------------
05xxxxxx
dddddddd
nnnnnnnn    复制字节码。把字节nnnnnnnn 从地址8cxxxxxx复制到地址。这个操作是锁定的。(这个码我也不是很清楚,原文是“Copy nnnnnnnn bytes from the address 8cxxxxxx to the address dddddddd”)
---------------------------------------
071000XX    改变解码方式
--------------------------------------
0b0xxxxx    延迟xxxxx个循环后写入码。默认是1000(0x3e7)个循环。
--------------------------------------
0cxxxxxx
vvvvvvvv    如果地址8Cxxxxxx 的值等于“vvvvvvvv”,则执行所有的金手指码,否则不执行。在某些需要游戏载入后再修改的游戏中很实用。
--------------------------------------
0dxxxxxx
0000vvvv    如果地址8Cxxxxxx 的值等于“vvvvvvvv”,则执行下一行金手指码。只能和00、01和02型密码配合使用。要想和其它码配合使用的话必须使用0e码.
--------------------------------------
0dxxxxxx
0001vvvv    如果地址8Cxxxxxx 的值不等于“vvvvvvvv”, 则执行下一行金手指码。只能和00、01和02型密码配合使用。要想和其它码配合使用的话必须使用0e码.
-----------------------------------------
0dxxxxxx
0002vvvv    如果地址8Cxxxxxx 的值小于“vvvv” (unsigned),则执行下一行金手指码。只能和00、01和02型密码配合使用。要想和其它码配合使用的话必须使用0e码.
-----------------------------------------
0dxxxxxx
0003vvvv    如果地址8Cxxxxxx 的值大于“vvvv” (unsigned),则执行下一行金手指码。只能和00、01和02型密码配合使用。要想和其它码配合使用的话必须使用0e码.
-----------------------------------------
ennvvvv
00aaaaaa    如果8caaaaaa的值等于“vvvv”,则执行下面nnnn行密码。举例:
0e04abcd
00012000
02300040
ffffffff
02300050
eeeeeeee
如果地址8c012000==abcd, 执行接下来的4行密码。 效果相当于两行"02xxxxxx" 码: "02300040=ffffffff" 和 "02300050=eeeeeeee"。
------------------------------
0ennvvvv
01aaaaaa    如果8caaaaaa的值不等于“vvvv”,则执行下面nnnn行密码。
-------------------------------
0ennvvvv
02aaaaaa    如果8caaaaaa的值小于“vvvv” (unsigned),则执行下面nnnn行密码。
------------------------------- 
0ennvvvv
03aaaaaa    如果8caaaaaa的值大于“vvvv” (unsigned),则执行下面nnnn行密码。
-------------------------------
0F-XXXXXX
0000YYYY    16-Bit立即写入一次。(激活码)
====================================
4.DC金手指码的来源
前面已经说过,我们D版玩家能够使用的金手指只能是GameShark和ActionReplay,但是网上说这2个金手指使用加密的金手指,只能来源金手指生产厂商,而RAW码虽然可以通过模拟器来获得,但是无法用于GameShark和ActionReplay。事实是这样码?NO!其实我们大家使用的GameShark是被破解的,可以直接支持RAW码,只是大家一直不知道。这样,我们就可以使用电脑上的模拟器来找寻DC游戏的金手指码了。当然,前提是模拟器可以运行你要修改的游戏。大家可以使用nullDC配合最新版(老版本不支持DC模拟器)的EMUCHEAT来寻找金手指,然后再转换成RAW码即可在DC主机上使用了。据说CHANKAST有个非官方版本也可以支持修改,大家可以去试试。至于用EMUCHEAT寻找金手指的方法,大家就自己到网上找找吧,很简单。这里我就举个把CHT格式金手指改成DC用RAW的简单的例子。《生化危机~维罗尼卡~完全版》日版的CHT文件中有:
[克莱尔第一格道具类型]
霰弹枪=219BD6,4
[克莱尔第一格道具数量无限]
ON=219BD7,FF
把这两行改成RAW码就是:00219BD6 00000004;00219BD7 000000FF。
当然,你也可以使用01码,也就是01219BD6 0000FF04。
以上密码本人在DC上已经测试成功,大家也来试试吧。
=====================================
5.感谢
本文参考了国外的“The Secrets of Professional GameShark(tm) Hacking”一文,在此表示感谢。

最后上传一个已经有大量DC游戏CHT格式的压缩包给大家。
[ 此贴被gxb在2007-07-08 22:59重新编辑 ]
描述:里面有很多游戏的金手指
附件: Dc.rar (74 K) 下载次数:646
本帖最近评分记录:
  • 金钱:    +500   (操作人:eva-)   优秀文章
  • YZB
    级别: 超级版主

    UID: 12451
    精华: 6
    发帖: 19107
    威望: 173 星
    金钱: 2062 浮游币
    贡献值: 10284 点
    好评度: 54897 点
    人气: 4322 点
    在线时间: 19822(时)
    注册时间: 2004-10-02
    最后登录: 2024-12-27
    沙发  发表于: 2007-07-09 00:03

    このドキュメントはDreamHackerに含まれる
    「GameShark(海外版プロアクションリプレイ)?DC Xターミネーター互換機能」
    の解説のテキストファイルです。
    GameSharkのコード書式や情報については下記
     http://www.gscentral.com/ GSCentral
     [THE SECRETS Of Professional Gameshark(tm) Hacking]
    を参考にしました。
    また、DreamHacker掲示板で互換機能の実装を提案して頂いたねこかぶさんに感謝(^^

    ----------

    ?DreamHackerのGameShark互換機能とは?
    本来、DreamHackerはプロアクションリプレイに似たコードを用いてはいますが、
    基本的なコード動作は独自の書式で動いています。
    しかし、コード名を宣言する「/」命令の行に「DCGS」という文字列を含むことで、
    GameSharkと同じ書式を使って動作するようになります。
    例えばDreamHackerの本来の書式でアドレス15000に01を書き込む場合は…

    /アドレス15000に01を書き込むサンプル
    00015000 01

    このような書式になりますが、互換モードを有効にすると…

    /DCGS アドレス15000に01を書き込むサンプルのGameShark版
    00015000 00000001

    こうなります(DCGSの文字列の場所は自由)。
    DreamHackerの標準動作では右の値に 00000001 を指定すると4バイト書き込みですが、
    GameSharkは必ず「8桁+8桁」という書式なので右の書き込むバイトサイズそのものも、
    アドレス部分のコードの拡張で実現しています。
    また、GameSharkではアドレス部に 8Cxxxxxx と指定することがありますが、
    自動的に、頭の8Cを削ったアドレス 00xxxxxx にアクセスするように処理を行います。

    なお日本語版プロアクションリプレイにあった
    「暗号化コード」はサポートしていません。
    もしも既に暗号化が施されている改造コードを入力したいのであれば、
    冒頭のGSCentralに暗号化?復号化を相互で行うためのツール DCcrypt が公開されて
    おりますので、そちらを用いて暗号化の施されていないコードを生成して、
    そちらで入力してください。

    ----------

    ?DreamHackerでサポートしているGameSharkのコード効果一覧
    GameSharkのコードが使えるといっても「完全互換」ではないので注意してください。
    現在サポートしている命令は以下の通りです。
    00aaaaaa 8BitWrite
    01aaaaaa 16BitWrite
    02aaaaaa 32BitWrite
    0300nnnn GroupWrite
    030100vv Increment(8bit)
    030200vv Decrement(8bit)
    0303vvvv Increment(16bit)
    0304vvvv Decrement(16bit)
    03050000 Increment(32bit)
    03060000 Decrement(32bit)
    04aaaaaa Repeat/Filler
    05aaaaaa Copy bytes
    0Caaaaaa execute or ALL-skip
    0Daaaaaa 16bit conditional[equal]
    0Daaaaaa 16bit conditional[different]
    0Daaaaaa 16bit conditional[less than]
    0Daaaaaa 16bit conditional[greater than]
    0Ennwwww 16bit conditional[equal] -multi line-
    0Ennwwww 16bit conditional[different] -multi line-
    0Ennwwww 16bit conditional[less than] -multi line-
    0Ennwwww 16bit conditional[greater than] -multi line-

    上記コードの詳細は以下の通りです。

    ~任意のアドレスaaaaaaに1バイトのデータbbを書き込む (8BitWrite)
    00aaaaaa 000000bb
    (例)アドレス00015000に63を書き込む
    00015000 00000063
    →主に、キャラのレベルやアイテム個数などの小さい値の書き込みに用いる。

    ~任意のアドレスaaaaaaに2バイトのデータwwwwを書き込む (16BitWrite)
    01aaaaaa 0000wwww
    (例)アドレス00015010に03E7を書き込む
    01015010 000003E7
    →キャラのHPのように999や9999といった比較的大きめの値の書き込みに用いる。

    ~任意のアドレスaaaaaaに4バイトのデータddddddddを書き込む (32BitWrite)
    02aaaaaa dddddddd
    (例)アドレス00015020に05F5E0FFを書き込む
    02015020 05F5E0FF
    →最大経験値(99999999)など、非常に大きな数値の書き込みに用いる。

    ~任意のアドレスaaaaaaaaにnnnn行分の4バイトデータを書き込み (GroupWrite)
    0300nnnn aaaaaaaa
    xxxxxxxx yyyyyyyy
    zzzzzzzz.....
    (例)アドレス00015030~00015038に11111111 22222222 33333333を書き込む
    03000003 00015030
    11111111 22222222
    33333333 00000000
    →長い数列を書き込むときに用いる。連続的なパラメータ書き換えにも有効。
    ※最後の00000000はDreamHackerの構造上必要無いが、念のため書いておく。
     当然、nnnnに0004を指定するとアドレス0001503Cに00000000が書き込まれる。

    ~任意のアドレスaaaaaaaaに1バイトのデータbbを足し続ける (Increment 8bit)
    030100bb aaaaaaaa
    (例)アドレス00015040の1バイトに常に2を足す
    03010002 00015040
    →時間経過とともに回復や、特殊な動作をするコードに用いる。

    ~任意のアドレスaaaaaaaaから1バイトのデータbbを引き続ける (Decrement 8bit)
    030200bb aaaaaaaa
    (例)アドレス00015050の1バイトから常に5を引く
    03020005 00015050
    →時間経過で敵を自滅させたりする場合などに用いる。

    ~任意のアドレスaaaaaaaaに2バイトのデータwwwwを足し続ける(Increment 16bit)
    0303wwww aaaaaaaa
    (例)アドレス00015060の2バイトに常に0100を足す
    03030100 00015060
    →放っておくだけでEXPが上昇するコードなどに用いる。

    ~任意のアドレスaaaaaaaaから2バイトのデータwwwwを引き続ける(Decrement 16bit)
    0304wwww aaaaaaaa
    (例)アドレス00015070の2バイトから常に0511を引く
    03040511 00015070
    →時間経過とともに敵兵士数を減少させる場合などに用いる。

    ~任意のアドレスaaaaaaaaに4バイトのデータddddddddを足し続ける(Increment 32bit)
    03050000 aaaaaaaa
    dddddddd 00000000
    (例)アドレス00015080の4バイトに常に00000001を足す
    03050000 00015080
    00000001 00000000
    →上記までの加算コードよりも大きな値を必要とする場合に用いる。
    ※最後の00000000はDreamHackerの構造上必要無いが、念のため書いておく。

    ~任意のアドレスaaaaaaaaの4バイトのデータddddddddを引き続ける(Decrement 32bit)
    03060000 aaaaaaaa
    dddddddd 00000000
    (例)アドレス00015090の4バイトから常に12345678を引く
    03060000 00015090
    12345678 00000000
    →時間経過とともに敵軍の兵力ダウンなどに用いる。
    ※最後の00000000はDreamHackerの構造上必要無いが、念のため書いておく。

    ~任意のアドレスaaaaaaに、4バイトのデータddddddddをcccc回、
     ssss x 4バイト間隔で書き込む (Repeat/Filler)
    04aaaaaa ccccssss
    dddddddd 00000000
    (例)アドレス000150A0から、数列FFFFFFFFを0005回、8バイト間隔で書き込む。
    040150A0 00050002
    FFFFFFFF 00000000
    少々複雑ですが、これでアドレス000150A0からは…
    FFFFFFFF xxxxxxxx FFFFFFFF xxxxxxxx FFFFFFFF... (x=跳び越えた数値)
    という列が続きます。00050002を00050001にすれば、
    FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
    もちろん00050003にすれば、
    FFFFFFFF xxxxxxxx xxxxxxxx FFFFFFFF xxxxxxxx xxxxxxxx FFFFFFFF...
    こうなるわけですね。
    →全アイテムを99個にする!といったコードで、アイテムの所有情報などの
     箇所に書き込まないようスキップしながら連続的に書き込む場合などに用いる。

    ~アドレスaaaaaaからxxxxxxxxバイトのデータを、
     アドレスccccccccにコピーする (Copy bytes)
    05aaaaaa cccccccc
    xxxxxxxx 00000000
    (例)アドレス000150B0から5バイトのデータをアドレス000150C0にコピーする。
    050150B0 000150C0
    00000005 00000000
    →ブロック単位でのアイテム情報コピーやデータ退避などに用いる。

    ~アドレスaaaaaaにある4バイトがddddddddでなければ、
     全てのコードを無効化する (execute or ALL-skip)
    0Caaaaaa dddddddd
    (例)アドレス000150C0がFFFFFFFFでなければ全てのコードを無効にする。
    0C0150C0 FFFFFFFF
    →これにより「タイトル画面でコードを実行しては危険」という場合、
     任意の場面で変動するアドレス値を元にコードを実行することが可能になる。
     ただし、GameShark互換モードにしか作用しません(本来のコード形式には作用しない
     また「他の全てのGameSharkのコードに作用」します。
     実際にこのコードを使う機会はほとんど無いでしょう。

    ~アドレスaaaaaaにある2バイトがwwwwであれば、
     次の行のコードを実行する (16bit conditional[equal])
    0Daaaaaa 0000wwww
    (例)アドレス000150D0が1234ならアドレス000150E0を63にする
    0D0150D0 00001234
    000150E0 00000063
    →いわゆるDコード(条件判断)の「イコール(適合)」です。
     次の行のコードは00,01,02(8bit~32bit書き込み)しか
     使えないので注意してください。
     あくまで動作としては「条件を満たさなければ次の1行をスキップ」です。
     理論上は03から始まる一部のコードも使えますが推奨はしません。

    ~アドレスaaaaaaにある2バイトがwwwwでなければ、
     次の行のコードを実行する (16bit conditional[different])
    0Daaaaaa 0001wwww
    (例)アドレス000150F0が5678ならアドレス00015100を03E7にする
    0D0150F0 00015678
    01015100 000003E7
    →Dコードの「ディファレント(不適合)」です。
     イコールと逆の動作をしますし、当然、仕様も同じです。

    ~アドレスaaaaaaにある2バイトがwwwwより小さければ、
     次の行のコードを実行する (16bit conditional[less than])
    0Daaaaaa 0002wwww
    (例)アドレス00015110が8000より小さければアドレス00015120をFFFFFFFFにする
    0D015110 00028000
    02015120 FFFFFFFF
    →値の小ささを判断するコードです。
     仕様も上のDコードと同じであり、あくまで判断条件が異なるだけです。

    ~アドレスaaaaaaにある2バイトがwwwwより大きければ、
     次の行のコードを実行する (16bit conditional[greater than])
    0Daaaaaa 0003wwww
    (例)アドレス00015130が5000より多きければアドレス00015140を00000000にする
    0D015130 00035000
    02015140 00000000
    →値の大きさを判断するコードです。
     言うまでもなくless thanと逆の働きをします。

    ~アドレスaaaaaaにある2バイトがwwwwであれば、
     nn/2行のコードを実行する (16bit conditional[equal] -multi line-)
    0Ennwwww 00aaaaaa
    (例)アドレス00015150が1111であればアドレス00015160に99を書き込み、
      アドレス00015170に8888を書き込む
    0E041111 00015150
    00015160 00000099
    01015170 00008888
    →1つの条件で複数のコードに作用する条件判断(イコール)コードですが、
     「nnの値に注意」してください。
     例えば上記の例では「2行」のコードを実行するかを判断するときのnnの値は
     「04」…つまりこのnnは1につき1行2項目の1項目分だけをスキップします。
     それではあまりに危険なのでDreamHackerではたとえ1を指定しても2、
     3を指定しても4と判断するようにしています。

    ~アドレスaaaaaaにある2バイトがwwwwでなければ
     nn/2行のコードを実行する (16bit conditional[different] -multi line-)
    0Ennwwww 01aaaaaa
    (例)アドレス00015180が2222でなければアドレス00015190に99を書き込み、
      アドレス000151A0にAAAAを書き込み、アドレス000151B0にFFFFFFFFを書き込む
    0E062222 00015180
    00015190 00000099
    010151A0 0000AAAA
    020151B0 FFFFFFFF
    →イコールに続いてディファレントで、仕様も全く同じです。
     上の例ではnnに06を指定して下3行を判断しています。

    ~アドレスaaaaaaにある2バイトがwwwwより小さければ
     nn/2行のコードを実行する (16bit conditional[less than] -multi line-)
    0Ennwwww 02aaaaaa
    (例)アドレス000151C0がFFFFでなければアドレス000151D0にFFを書き込む
    0E02FFFF 000151C0
    00015190 000000FF
    →値の小ささを判断するコードの複数行タイプです。
     上の例はnnに2を指定して次の1行のみに作用するような動作ですが、
     普通は0Daaaaaa~のコードを使うほうが賢明ですね。

    ~アドレスaaaaaaにある2バイトがwwwwより大きければ
     nn/2行のコードを実行する (16bit conditional[greater than] -multi line-)
    0Ennwwww 03aaaaaa
    (例)アドレス000151E0がFFFFでなければアドレス000151F0にFFを書き込む
    0E03FFFF 000151E0
    000151F0 000000FF
    →値の大きさを判断するコードの複数行タイプです。
     上記のものと同じ仕様です。


    ----------
    [ 此帖被YZB在2010-06-28 00:08重新编辑 ]
    YZB
    级别: 超级版主

    UID: 12451
    精华: 6
    发帖: 19107
    威望: 173 星
    金钱: 2062 浮游币
    贡献值: 10284 点
    好评度: 54897 点
    人气: 4322 点
    在线时间: 19822(时)
    注册时间: 2004-10-02
    最后登录: 2024-12-27
    板凳  发表于: 2007-07-09 21:39

    NULL DC DEBUG功能我到现在都不会用 - -!
    YZB
    级别: 超级版主

    UID: 12451
    精华: 6
    发帖: 19107
    威望: 173 星
    金钱: 2062 浮游币
    贡献值: 10284 点
    好评度: 54897 点
    人气: 4322 点
    在线时间: 19822(时)
    注册时间: 2004-10-02
    最后登录: 2024-12-27
    地板  发表于: 2007-07-10 18:20

    月华剑士的是修改程序段的??
    到没注意
    YZB
    级别: 超级版主

    UID: 12451
    精华: 6
    发帖: 19107
    威望: 173 星
    金钱: 2062 浮游币
    贡献值: 10284 点
    好评度: 54897 点
    人气: 4322 点
    在线时间: 19822(时)
    注册时间: 2004-10-02
    最后登录: 2024-12-27
    草席  发表于: 2007-07-11 23:48

    引用
    引用第14楼gxb于2007-07-11 22:37发表的  :

    其实要是改程序段的话是可以直接修改ISO
    根据我静态修改FC ROM的经验,如果CB是修改程序段的话,那么只要用模拟器运行游戏,根据CB金手指找到相应的地址,抄下程序段内的一些字节,然后用WINHEX到ISO中寻找修改这些字节,就可以达到永恒修改的目的了。前提是所读入的程序段在ISO中没有压缩,要是压缩了,还得先跟踪出算法才行。


    对,就是想要这样的效果!

    说起来,有的DC游戏前面还带金手指的那些算哪类的?
    YZB
    级别: 超级版主

    UID: 12451
    精华: 6
    发帖: 19107
    威望: 173 星
    金钱: 2062 浮游币
    贡献值: 10284 点
    好评度: 54897 点
    人气: 4322 点
    在线时间: 19822(时)
    注册时间: 2004-10-02
    最后登录: 2024-12-27
    5楼  发表于: 2007-07-22 07:21

    引用
    引用第17楼dask于2007-07-13 08:58发表的  :


    那个叫trainer,修改ISO简单得很,但是我想说的是修改的方法,不是利用CB的码去修改ISO,因为没有好用的反编译软件,SH4的语言也不懂,所以没法改JSR的HP那样的地址动态的码...由于CB有开发机,所以想跟踪游戏很容易...



    找到个SH4资料,但是看不懂
    - -!
    [ 此贴被YZB在2007-07-22 07:33重新编辑 ]
    附件: SHC4.part1.rar (977 K) 下载次数:21
    附件: SHC4.part2.rar (977 K) 下载次数:18
    附件: SHC4.part3.rar (928 K) 下载次数:18
    YZB
    级别: 超级版主

    UID: 12451
    精华: 6
    发帖: 19107
    威望: 173 星
    金钱: 2062 浮游币
    贡献值: 10284 点
    好评度: 54897 点
    人气: 4322 点
    在线时间: 19822(时)
    注册时间: 2004-10-02
    最后登录: 2024-12-27
    6楼  发表于: 2013-09-22 08:24

    好吧,挖一下坟,顺便把Gameshark的加密转换源码和exe都发个上来

    unsigned long seeds[15] = {
        0xA1427921, 0xAC9528B1, 0xC5892354, 0x49671B12,
        0xACC56121, 0xACB5381E, 0x765436E1, 0x9F2C3E54,
        0x1133E312, 0xAC5E7894, 0xE9F208B1, 0x4E87DCFE,
        0x43174312, 0x1D7A6C99, 0x874224A2
    };

    unsigned long decrypt_code(unsigned long address) {
        int seed = seeds[(((address & 0xF0000000) >> 0x1C) - 1)];
        int something = 6;

        if (something & 4) address = (((address << 1) & 0x0FFFFFFE) | ((address >> 0x1B) & 1));
        if (something & 2) {
            address = (((address << 1) & 0x0FFFFFFE) | ((address >> 0x1B) & 1));
            address = (((address << 8) & 0x0FFFFF00) | ((address >> 0x14) & 0xFF));
        }
        if (!(something & 1)) seed >>= 4;
        return ((seed & 0x0FFFFFFF) ^ address);
    }
    附件: dccrypt.zip (8 K) 下载次数:35
    YZB
    级别: 超级版主

    UID: 12451
    精华: 6
    发帖: 19107
    威望: 173 星
    金钱: 2062 浮游币
    贡献值: 10284 点
    好评度: 54897 点
    人气: 4322 点
    在线时间: 19822(时)
    注册时间: 2004-10-02
    最后登录: 2024-12-27
    7楼  发表于: 2021-02-25 10:05

    既然这个贴被顶上来了,趁我还想得起来就把dc金手指的运行原理简单说一下

    在输入完金手指代码以后,进入游戏之前,程序会先把自身代码和金手指码解密然后存放到内存8c004000或者8c008300这个位置,然后修改系统函数区域部分代码,添加一个跳转代码,跳到自己的程序部分,最后才返回游戏代码

    所以如果遇到原游戏用到这2个地址的话就完蛋了
    [ 此帖被YZB在2021-02-25 11:49重新编辑 ]
    YZB
    级别: 超级版主

    UID: 12451
    精华: 6
    发帖: 19107
    威望: 173 星
    金钱: 2062 浮游币
    贡献值: 10284 点
    好评度: 54897 点
    人气: 4322 点
    在线时间: 19822(时)
    注册时间: 2004-10-02
    最后登录: 2024-12-27
    8楼  发表于: 2021-06-27 22:20

    引用
    引用第34楼gxb于2021-06-27 17:56发表的  :

    应该不会有游戏同时用到这两个地址

    话说我今天找DC金手指,发现居然写过现在看起来这么复杂的东西。。。


    印象中好像是莎木1还是2使用了8c004000内存,另外那些带dp3的游戏如果进入dp3的话同样会使用8c008300这个地址