Advertisement
ModdedAsTy

PS4 BO3でGSC風の弾無限再現してみた

Jun 21st, 2018
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.65 KB | None | 0 0
  1. /*
  2. ◆PS4 side◆
  3. ファームウェア:5.05
  4. アプリ:Call of Duty Black Ops 3 , マルチプレイヤー Ver1.00
  5.  
  6. ◆PCクライアント側◆
  7. 開発環境:Visual Studio 2013
  8. 言語:C#
  9. DLL:PS4Lib.dll
  10. Payload:ps4-api-server-5.05.bin
  11. Exploits:ps4-exploit-hosts for 5.05 (Windows version)
  12.  
  13. ----------
  14.  
  15. 目的として、PS4APIでの動作確認ができるようになったため、試しにPS4Lib使ってツール作ってみようかな、と思い立ち...
  16. それで作ってみた的な。
  17. 書き方はCCAPIと全く変わらなくて懐かしさを感じてる。
  18.  
  19. 作ってみたのはInfinity ammo(弾薬無限)。
  20. とは言っても、ただ0xFF, 0xFFを埋め込むだけじゃ面白くない...
  21. ってことでGSC的なのを再現してみました。
  22. ロジックとして
  23. 1. チェックした時の弾数を記憶
  24. 2. ループスレッド立ち上げて記憶した弾を書き込みまくる
  25. 3. オフにしたときはループ抜ける
  26. でやってる。
  27.  
  28. 誰か暇なPS4解析者さん集まってほしい。
  29.  
  30. */
  31.  
  32.  
  33. byte[] Full ; // 弾数多い状態用のバイト変数
  34. byte[] Once ; // 現在の弾数が1発か確認する用のバイト変数
  35. byte[] PrimaryAmmo ; // メインウェポンの装弾数用のバイト変数
  36. byte[] PrimaryAmmoStock ; // メインウェポンの残弾数用のバイト変数
  37. byte[] SecondaryAmmo ; // サブウェポンの装弾数用のバイト変数
  38. byte[] SecondaryAmmoStock ; // サブウェポンの残弾数用のバイト変数
  39. byte[] Lethal ; // フラググレネードとかの装備用のバイト変数
  40. byte[] Tactical ; // フラッシュグレネードとかの装備用のバイト変数
  41.  
  42. private void SaveAmmo( )
  43. {
  44. Full = new byte[]{ 0xFF } ; // Full = 255発であると定義する
  45. Once = new byte[]{ 0x01 } ; // Once = 1発であると定義する
  46. PrimaryAmmo = ps4.GetBytes( 0x21A87B8 , 1 ) ; // PrimaryAmmoに 0x21A87B8のアドレスから1バイト分の範囲から取り出した値を代入する
  47. PrimaryAmmoStock = ps4.GetBytes( 0x21A87F4 , 1 ) ; // PrimaryAmmoStockに 0x21A87F4のアドレスから1バイト分の範囲から取り出した値を代入する
  48. SecondaryAmmo = ps4.GetBytes( 0x21A87F8 , 1 ) ; // SecondaryAmmoに 0x21A87F8のアドレスから1バイト分の範囲から取り出した値を代入する
  49. SecondaryAmmoStock = ps4.GetBytes( 0x21A87BC , 1 ) ; // SecondaryAmmoStockに 0x21A87BCのアドレスから1バイト分の範囲から取り出した値を代入する
  50. Lethal = ps4.GetBytes( 0x21A87FC , 1 ) ; // Lethalに 0x21A87FCのアドレスから1バイト分の範囲から取り出した値を代入する
  51. Tactical = ps4.GetBytes( 0x21A8800 , 1 ) ; // Tacticalに 0x21A8800のアドレスから1バイト分の範囲から取り出した値を代入する
  52. }
  53.  
  54. private void SetAmmo( )
  55. {
  56. if ( PrimaryAmmo == Once ) ps4.SetMemory( 0x21A87B8 , Full ) ; // もしメインウェポンの装弾数が1発なら255発に書き換える
  57. else ps4.SetMemory( 0x21A87B8 , PrimaryAmmo ) ; // それ以外の数値だった場合はSaveAmmo( )で記憶した値を書き込む
  58.  
  59. if ( PrimaryAmmoStock == Once ) ps4.SetMemory( 0x21A87F4 , Full ) ; // もしメインウェポンの残弾数が1発なら255発に書き換える
  60. else ps4.SetMemory( 0x21A87F4 , PrimaryAmmoStock ) ; // それ以外の数値だった場合はSaveAmmo( )で記憶した値を書き込む
  61.  
  62. if ( SecondaryAmmo == Once ) ps4.SetMemory( 0x21A87F8 , Full ) ; // もしサブウェポンの装弾数が1発なら255発に書き換える
  63. else ps4.SetMemory( 0x21A87F8 , SecondaryAmmo ) ; // それ以外の数値だった場合はSaveAmmo( )で記憶した値を書き込む
  64.  
  65. if ( SecondaryAmmoStock == Once ) ps4.SetMemory( 0x21A87BC , Full ) ; // もしサブウェポンの残弾数が1発なら255発に書き換える
  66. else ps4.SetMemory( 0x21A87BC , SecondaryAmmoStock ) ; // それ以外の数値だった場合はSaveAmmo( )で記憶した値を書き込む
  67.  
  68. if ( Lethal == Once ) ps4.SetMemory( 0x21A87FC , Full ) ; // もしリーサルの残弾数が1発なら255発に書き換える
  69. else ps4.SetMemory( 0x21A87FC , Lethal ) ; // それ以外の数値だった場合はSaveAmmo( )で記憶した値を書き込む
  70.  
  71. if ( Tactical == Once ) ps4.SetMemory( 0x21A8800 , Full ) ; // もしタクティカルの残弾数が1発なら255発に書き換える
  72. else ps4.SetMemory( 0x21A8800 , Tactical ) ; // それ以外の数値だった場合はSaveAmmo( )で記憶した値を書き込む
  73. }
  74.  
  75. private void RestoreAmmo( )
  76. {
  77. ps4.SetMemory( 0x21A87B8 , PrimaryAmmo ) ; // メインウェポンの装弾数をSaveAmmo( )で記憶した値に戻す
  78. ps4.SetMemory( 0x21A87F4 , PrimaryAmmoStock ) ; // サブウェポンの残弾数をSaveAmmo( )で記憶した値に戻す
  79. ps4.SetMemory( 0x21A87F8 , SecondaryAmmo ) ; // メインウェポンの装弾数をSaveAmmo( )で記憶した値に戻す
  80. ps4.SetMemory( 0x21A87BC , SecondaryAmmoStock ) ; // サブウェポンの残弾数をSaveAmmo( )で記憶した値に戻す
  81. ps4.SetMemory( 0x21A87FC , Lethal ) ; // リーサルの残弾数をSaveAmmo( )で記憶した値に戻す
  82. ps4.SetMemory( 0x21A8800 , Tactical ) ; // タクティカルの残弾数をSaveAmmo( )で記憶した値に戻す
  83. }
  84.  
  85. async private void checkBox1_CheckedChanged( object sender , EventArgs e )
  86. {
  87. if ( checkBox1.Checked ) // もしInfinity ammoにチェックが付いたら
  88. {
  89. SaveAmmo( ) ; // 現在の装弾数、残弾数を読み取る
  90. while ( checkBox1.Checked ) // Infinity ammoにチェックが付いている間は
  91. {
  92. await Task.Run( ( ) => // 別スレッドで下の処理を動かす動かす
  93. {
  94. Thread.Sleep( 150 ) ; // 0.15秒待つ
  95. } ) ;
  96. SetAmmo( ); // 装弾数、残弾数を書き換える
  97. }
  98. }
  99. else // もしInfinity ammoのチェックが外されたら
  100. {
  101. RestoreAmmo( ) ; // 装弾数、残弾数をSaveAmmo( ) で記憶した値に初期化する
  102. }
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement