[教程]不再做傻瓜!自己動手玩轉hookboot(使用教程初、中、高級篇)

[教程]不再做傻瓜!自己動手玩轉hookboot(使用教程初、中、高級篇)

轉載請著名 PSPChina

hookboot應該是使用頻率最高的loader了,支持遊戲很多,而且比較完善。因為論壇一直沒有給出比較詳細的講解,所以導致了這樣那樣的傻瓜版下載,耐心看完你就不會再作傻瓜了,也許你還可以發現新的可以玩的遊戲。

UMD遊戲數據介紹:
UMD光盤是存放遊戲的載體,他存放數據使用的ISO9600標準,這表示我們可以把裡面的數據使用運行在程序讀到記憶棒上去,現在咱們手裡的ISO就是從原來的UMD裡面複製過來的。ISO是一個光盤鏡像,用winrar打開可以看到裡面的目錄和文件列表。UMD遊戲目錄結構是這樣的:
┌PSP_GAME/┌USEDIR/-----(遊戲數據目錄)
│               ├SYSDIR/┌UPDATE/-----(有些遊戲會帶這個強制升級您的PSP版本)
│               │           ├EBOOT.BIN---(遊戲主執行程序)
│               │           └BOOT.BIN----(遊戲啟動程序)
│               ├PIC1.PNG---(遊戲背景)
│               ├PIC2.PNG---(遊戲背景小圖片)
│               ├PARAM.SFO--(信息)
│               ├ICON1.PMF--(遊戲圖標動畫)
│               ├ICON0.PNG--(遊戲圖標)
│               ├SND0.AT3----(遊戲背景音樂)
└UMD_DATA.BIN---(UMD光盤信息)

USERDIR目錄下呢有一些文件你要注意,就是*.prx文件,他有時放在module目錄下,有時放在kmodule目錄下,有時放在sys目錄下不等,這些*.prx文件是遊戲啟動或執行的時候需要裝載的庫文件。這些文件的轉載至關重要,下面會講到有關他的東西

MSD運行遊戲的歷史:
其實最早使我們能玩msd遊戲的還得感謝wab他支持1.0和1.5,他的原理就是修改BOOT.BIN文件在遊戲本身載入前由loader去載入那些*.prx文件,並修改了轉載遊戲數據的路徑,並屏蔽一些檢測UMD光盤和其他的一些重要的函數,雖然他的程序和使用方法非常簡單,但是畢竟有很多局限和bug的地方支持遊戲也不是很多,但是儘管這樣WAB的到來是開闢了msd遊戲的道路。跟隨著wab的腳步Hookboot出現了,他同樣支持1.0和1.5,hookboot同樣也會修改BOOT.BIN文件,但是原理有所不同的是他使用鉤子原理把運行某些重要函數的時候做個標記用hookboot程序去運行那些函數而不是簡單的屏蔽這樣顯得更合理,也不需要修改*.prx路徑,因為他的所有啟動順序都是按照BOOT.BIN的順序去運行的,而且需要檢測UMD的函數就屏蔽掉了。這樣做非常的明智而合理。因此hookboot支持更多遊戲,也減少了很多的錯誤。hookboot還在不斷的發展,相信有完美的那一天。hookboot出現後fastloader出現了他是第一個直接裝載遊戲ISO的程序,也支持了幾個hookboot不支持的遊戲,但是他只支持1.5並且還需要光盤引導,但是他的發展還是值得期待的。同時hookboot0.94版也支持了ISO。對於支持ISO我抱有不同的意見,主要是容量上,ISO比釋放出來後要稍微大一些。但是隨著棒子大了,我想應該不是問題,他的好處就是方便。

hookboot的教程:
這個東西也許應該寫寫,目的就是減少傻瓜:) 別介意我這樣稱呼,我相信很多人看到罈子鋪天蓋地的裸體男人都不舒服哈哈.其實看到這裡您應該有信心我會把hookboot講清楚,以後自己就能自己動手了,而你要做的就是下載完整的ISO.不要再當傻瓜了。
下載下來的hookboot的文件目錄(以最新的0.94為例):

┌PSP/ ┌HOOKBOOT/-----(原始的hookboot程序,也提供自定義背景圖標等的工具)
│       └GAME/┌xxxx1遊戲目錄
│                 ├xxxx2遊戲目錄
│                         。
│                         。
│                         。
│                 └xxxxn遊戲目錄
├module/┌V150/---(1.5使用的*.prx文件的收集目錄)
│       └V100/---(1.0使用的*.prx文件的收集目錄)
└HOOKBOOT.ini---(hookboot的總配置文件)

hookboot包的目錄完全按照psp的目錄結構這告訴你直接將它解壓到psp根目錄就可以了,但是我們不是傻瓜我們不要這樣做。你看PSP/HOOKBOOT這個目錄我們就沒必要放到psp裡的對吧。還有GAME目錄下那些xxxxx遊戲目錄,是hookboot的作者預設置的幾個典型的遊戲,每個xxxxx遊戲目錄裡的hookboot.ini文件都是不一樣的,你可以看看「漆黑騎士」的哪個置頂的hookboot遊戲支持列表帖子,裡面有遊戲對應哪個hookboot.ini的說明。其實hookboot的執行程序就一個,就是psp/hookboot目錄裡的那個eboot.pbp文件。市面上那麼多傻瓜般的都是用這個eboot.pbp加入了對應遊戲的圖標、背景和音樂而已。

所以對於一般的玩家當我們要玩一個遊戲的時候我們要怎麼做呢?看下面
1。查看一下hookboot的遊戲列表是否支持您要玩的遊戲,並看他是需要哪個hookboot.ini文件,這個因該不難。
2。然後將hookboot.ini和eboot.pbp文件放在PSP/GAME/的自定義目錄下比如NBA2005。eboot.pbp呢你可以直接用原始的,也可以修改一下加入對應那個遊戲的背景拉音樂拉什麼的。你可以使用PSPBrew工具做,下載和具體可以看看這個帖子。
http://bbs.pspchina.net/read.php?tid=18675&fpage=1&toread=1
3。遊戲呢,比如剛才建立的NAB2005目錄,這裡你需要在NBA2005下面再建立umd0/目錄,遊戲數據(ISO裡的所有東西)就放到NBA2005下的umd0/目錄去。
4。最後一步,這一步你也可以不管。修改hookboot.ini文件裡的相關信息,1)TITLE=xxxxxx

好,你可以玩遊戲了。

對於高級玩家和測試遊戲能否運行來說,你可能要更多的解說了。
一、首先你要明白從0.94以後hookboot.bin有兩種,第一種是對應釋放出來的遊戲數據,第二種是對應ISO的。區別就在這裡。
1)。
# 重新指向*.prx文件的路徑,你可以找到下面的部分,這個是mingolf的例子,不同的
#遊戲它的*.prx路徑不一樣,1.0指到v100目錄,1.5指向v150目錄這是需要修改的
# redirect *.prx folder because module file can't access in IS9660 image.
ASSIGN_PATH=disc0:/PSP_GAME/USRDIR/module/module,fatms0:/module/V100
ASSIGN_PATH=disc0:/PSP_GAME/USRDIR/module/kmodule,fatms0:/module/V100
ASSIGN_PATH=disc0:/PSP_GAME/USRDIR/module,fatms0:/module/V100

2)。
#指定替換disc0:/,
#mount ISO9660 file system
ASSIGN_PATH=disc0:/,UMD.ISO@

3)。
#加入設備模擬
#for UMD block access mode
ASSIGN_PATH=umd0:,UMD.ISO
ASSIGN_PATH=umd1:,UMD.ISO

4)。
#指定boot.bin路徑,這裡寫以UMD.ISO@為盤符
#TARGET_PATH=UMD0/PSP_GAME/SYSDIR/BOOT.BIN
TARGET_PATH=UMD.ISO@/PSP_GAME/SYSDIR/BOOT.BIN #in ISO9660 file


二、也就是說,0.94里只有MINGOLF這個遊戲的配置文件是對應ISO的,假如你要讓泡泡龍支持ISO你就可以在泡泡龍的hookboot.ini文件裡做第一步的那些修改

三、如何測試更多的遊戲支持?
當你測試的時候你先別管ISO,你只需要用傳統的把遊戲數據放到umd0/目錄下的方法去測試。然後用不同的hookboot.ini文件來測試這個遊戲用哪個hookboot.ini文件能運行。
  如果都不能你就可以做下面的工作了。
  1)改成記錄日誌模式,我們需要看看哪些函數需要被hook
#----------------------------------------------------------
# UMD EMULATION MODE
#----------------------------------------------------------
UMD_EMU=1(把這裡替換成0,採用記錄日誌模式)

LOG_DEVICE=FILE             #msfat0:/LOG.txt --------這是日誌文件
 
2)修改hook函數表,對應著log.txt裡面的函數表,我們需要hook的
#----------------------------------------------------------
# HOOK NID LIST
#
# syntax:
# NID=[hook_nid],[hook_mode]
#
# hook_nid : HEX nid number (ffffffff == ALL supported NID)
# hook_mode : N=NO HOOK , M=MODULE , S = SYSTEMCALL
#----------------------------------------------------------
NID=B7F46618,S #sceKernelLoadModuleByID

#path replace
NID=977DE386,S #sceKernelLoadModule
#NID=B29DDF9C,S #sceIoDopen     (NID前面帶#號的是不hook的)
        ·
        ·
        ·
        ·
#UMD emu 這些是需要的,跟UMD相關的函數都需要hook
NID=46EBB729,S #sceUmdCheckMedium
NID=C6183D47,S #sceUmdActivate
NID=E83742BA,S #sceUmdDeactivate
NID=8EF08FCE,S #sceUmdWaitDriveStat
NID=56202973,S #sceUmdWaitDriveStatWithTimer
NID=4A9E5E29,S #sceUmdWaitDriveStatCB
NID=6B4A146C,S #sceUmdGetDriveStat
NID=20628E6F,S #sceUmdGetErrorStat
NID=340B7686,S #sceUmdGetDiscInfo
NID=AEE7404D,S #sceUmdRegisterUMDCallBack
NID=BD2BDE07,S #sceUmdUnRegisterUMDCallBack

  3)好了將UMD_EMU設置為遊戲方式就可以去測試遊戲是否運行了,
#----------------------------------------------------------
# UMD EMULATION MODE
#----------------------------------------------------------
UMD_EMU=1(把這裡替換成0,採用記錄日誌模式)

評論: 0 | 引用: 0 | 閱讀: 3603 | 列印
 加入网摘
發表評論
暱 稱: 密 碼:
網 址: E - mail:
驗證碼: 驗證碼圖片 選 項:
頭 像:
內 容:
  • 粗體
  • 斜體
  • 底線
  • 插入圖片
  • 超連結
  • 電子郵件
  • 插入引用