Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- ◆PS4 side◆
- ファームウェア:5.05
- アプリ:Call of Duty Black Ops 3 , マルチプレイヤー Ver1.00
- ◆PCクライアント側◆
- 開発環境:Visual Studio 2013
- 言語:C#
- DLL:PS4Lib.dll
- Payload:ps4-api-server-5.05.bin
- Exploits:ps4-exploit-hosts for 5.05 (Windows version)
- ----------
- 目的として、PS4APIでの動作確認ができるようになったため、試しにPS4Lib使ってツール作ってみようかな、と思い立ち...
- それで作ってみた的な。
- 書き方はCCAPIと全く変わらなくて懐かしさを感じてる。
- 作ってみたのはInfinity ammo(弾薬無限)。
- とは言っても、ただ0xFF, 0xFFを埋め込むだけじゃ面白くない...
- ってことでGSC的なのを再現してみました。
- ロジックとして
- 1. チェックした時の弾数を記憶
- 2. ループスレッド立ち上げて記憶した弾を書き込みまくる
- 3. オフにしたときはループ抜ける
- でやってる。
- 誰か暇なPS4解析者さん集まってほしい。
- */
- byte[] Full ; // 弾数多い状態用のバイト変数
- byte[] Once ; // 現在の弾数が1発か確認する用のバイト変数
- byte[] PrimaryAmmo ; // メインウェポンの装弾数用のバイト変数
- byte[] PrimaryAmmoStock ; // メインウェポンの残弾数用のバイト変数
- byte[] SecondaryAmmo ; // サブウェポンの装弾数用のバイト変数
- byte[] SecondaryAmmoStock ; // サブウェポンの残弾数用のバイト変数
- byte[] Lethal ; // フラググレネードとかの装備用のバイト変数
- byte[] Tactical ; // フラッシュグレネードとかの装備用のバイト変数
- private void SaveAmmo( )
- {
- Full = new byte[]{ 0xFF } ; // Full = 255発であると定義する
- Once = new byte[]{ 0x01 } ; // Once = 1発であると定義する
- PrimaryAmmo = ps4.GetBytes( 0x21A87B8 , 1 ) ; // PrimaryAmmoに 0x21A87B8のアドレスから1バイト分の範囲から取り出した値を代入する
- PrimaryAmmoStock = ps4.GetBytes( 0x21A87F4 , 1 ) ; // PrimaryAmmoStockに 0x21A87F4のアドレスから1バイト分の範囲から取り出した値を代入する
- SecondaryAmmo = ps4.GetBytes( 0x21A87F8 , 1 ) ; // SecondaryAmmoに 0x21A87F8のアドレスから1バイト分の範囲から取り出した値を代入する
- SecondaryAmmoStock = ps4.GetBytes( 0x21A87BC , 1 ) ; // SecondaryAmmoStockに 0x21A87BCのアドレスから1バイト分の範囲から取り出した値を代入する
- Lethal = ps4.GetBytes( 0x21A87FC , 1 ) ; // Lethalに 0x21A87FCのアドレスから1バイト分の範囲から取り出した値を代入する
- Tactical = ps4.GetBytes( 0x21A8800 , 1 ) ; // Tacticalに 0x21A8800のアドレスから1バイト分の範囲から取り出した値を代入する
- }
- private void SetAmmo( )
- {
- if ( PrimaryAmmo == Once ) ps4.SetMemory( 0x21A87B8 , Full ) ; // もしメインウェポンの装弾数が1発なら255発に書き換える
- else ps4.SetMemory( 0x21A87B8 , PrimaryAmmo ) ; // それ以外の数値だった場合はSaveAmmo( )で記憶した値を書き込む
- if ( PrimaryAmmoStock == Once ) ps4.SetMemory( 0x21A87F4 , Full ) ; // もしメインウェポンの残弾数が1発なら255発に書き換える
- else ps4.SetMemory( 0x21A87F4 , PrimaryAmmoStock ) ; // それ以外の数値だった場合はSaveAmmo( )で記憶した値を書き込む
- if ( SecondaryAmmo == Once ) ps4.SetMemory( 0x21A87F8 , Full ) ; // もしサブウェポンの装弾数が1発なら255発に書き換える
- else ps4.SetMemory( 0x21A87F8 , SecondaryAmmo ) ; // それ以外の数値だった場合はSaveAmmo( )で記憶した値を書き込む
- if ( SecondaryAmmoStock == Once ) ps4.SetMemory( 0x21A87BC , Full ) ; // もしサブウェポンの残弾数が1発なら255発に書き換える
- else ps4.SetMemory( 0x21A87BC , SecondaryAmmoStock ) ; // それ以外の数値だった場合はSaveAmmo( )で記憶した値を書き込む
- if ( Lethal == Once ) ps4.SetMemory( 0x21A87FC , Full ) ; // もしリーサルの残弾数が1発なら255発に書き換える
- else ps4.SetMemory( 0x21A87FC , Lethal ) ; // それ以外の数値だった場合はSaveAmmo( )で記憶した値を書き込む
- if ( Tactical == Once ) ps4.SetMemory( 0x21A8800 , Full ) ; // もしタクティカルの残弾数が1発なら255発に書き換える
- else ps4.SetMemory( 0x21A8800 , Tactical ) ; // それ以外の数値だった場合はSaveAmmo( )で記憶した値を書き込む
- }
- private void RestoreAmmo( )
- {
- ps4.SetMemory( 0x21A87B8 , PrimaryAmmo ) ; // メインウェポンの装弾数をSaveAmmo( )で記憶した値に戻す
- ps4.SetMemory( 0x21A87F4 , PrimaryAmmoStock ) ; // サブウェポンの残弾数をSaveAmmo( )で記憶した値に戻す
- ps4.SetMemory( 0x21A87F8 , SecondaryAmmo ) ; // メインウェポンの装弾数をSaveAmmo( )で記憶した値に戻す
- ps4.SetMemory( 0x21A87BC , SecondaryAmmoStock ) ; // サブウェポンの残弾数をSaveAmmo( )で記憶した値に戻す
- ps4.SetMemory( 0x21A87FC , Lethal ) ; // リーサルの残弾数をSaveAmmo( )で記憶した値に戻す
- ps4.SetMemory( 0x21A8800 , Tactical ) ; // タクティカルの残弾数をSaveAmmo( )で記憶した値に戻す
- }
- async private void checkBox1_CheckedChanged( object sender , EventArgs e )
- {
- if ( checkBox1.Checked ) // もしInfinity ammoにチェックが付いたら
- {
- SaveAmmo( ) ; // 現在の装弾数、残弾数を読み取る
- while ( checkBox1.Checked ) // Infinity ammoにチェックが付いている間は
- {
- await Task.Run( ( ) => // 別スレッドで下の処理を動かす動かす
- {
- Thread.Sleep( 150 ) ; // 0.15秒待つ
- } ) ;
- SetAmmo( ); // 装弾数、残弾数を書き換える
- }
- }
- else // もしInfinity ammoのチェックが外されたら
- {
- RestoreAmmo( ) ; // 装弾数、残弾数をSaveAmmo( ) で記憶した値に初期化する
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement