InfiniteMITM allows you to intercept and modify the game's requests and responses on the fly. To customize them, you can edit the mitm.yaml file in the InfiniteMITM directory within your home directory (e.g., C:\Users\<username>\InfiniteMITM). The mitm.yaml file uses a specific configuration that lets you match various paths based on a service (blobs, authoring, discovery, stats, settings, gamecms, economy, lobby, skill, root), where root is a catch-all, desired REST methods (GET, POST, PATCH, PUT, DELETE), and basic regex support.
- All changes are applied upon saving, so there is no need to restart InfiniteMITM.
- When changing the request
body, theContent-Lengthheader will be automatically recalculated. - By default, only the overridden traffic will be displayed. This behavior can be changed in the
mitm.yamlfile.- Displaying
allrequests and responses may impact table performance.
- Displaying
- Make sure not to send sensitive information (e.g.,
X-343-Authorization-Spartan) when altering the requestbody.
domains:
blobs: # blobs-infiniteugc.svc.halowaypoint.com
- path: "/ugcstorage/map/:guid/:guid/:map-mvar" # Path pattern to match, will catch all .mvar files
methods: # HTTP methods that this configuration will handle
- GET
response: # Response handler
body: ":mitm-dir/resources/ugc/maps/design_21.mvar" # Path to the file that will be used as the response body
headers: # Additional headers to include in the response
x-infinite-mitm-version: ":mitm-version"
content-type: ":ct-bond"
- path: "/ugcstorage/enginegamevariant/:guid/:guid/customgamesuimarkup/Slayer_CustomGamesUIMarkup_en.bin" # Path pattern for specific "CustomGamesUIMarkup", for any assetID and assetVersionID
methods:
- GET
response:
body: ":mitm-dir/resources/ugc/enginegamevariants/cgui-markups/Slayer_8Teams.bin"
headers:
x-infinite-mitm-version: ":mitm-version"
content-type: ":ct-bond"
- path: "/ugcstorage/enginegamevariant/:guid/:guid/FFA.bin" # Path pattern for specific "EngineGameVariant", for any assetID and assetVersionID
methods:
- GET
response:
body: ":blobs-svc/enginegamevariant/$1/9b0d3fd4-2027-4dca-96f5-899b449408e2/FFA.bin" # Path to the external file that will be used as the response body, with a specific assetVersionID
headers:
x-infinite-mitm-version: ":mitm-version"
content-type: ":ct-bond"
- path: "/ugcstorage/enginegamevariant/:guid/:guid/:egv-bin" # Match any "EngineGameVariant"
methods:
- GET
response:
before: # Response pre-handler
commands: # Commands list
- run: # Run the first command
- "echo"
- "\"First GUID: $1\""
- run: # Run the second command
- "echo"
- "\"Second GUID: $2\""
- path: "/ugcstorage/*" # Match all after /ugcstorage/
methods:
- GET
- POST
- PATCH
- PUT
- DELETE
request: # Request handler
headers: # Headers to override in the request
x-343-authorization-spartan: "v4=MyCustomSpartanToken"domains:
root: # Must be one of "blobs | authoring | discovery | settings | root" (root = all)
# Each item in the list represents a specific endpoint configuration
- path: "/example/path" # Targeted path (case insensitive)
methods: # List of HTTP methods to catch (GET, POST, PATCH, PUT, DELETE)
- GET
- POST
request: # Used to alter the request
before: # Used to run various actions before handler execution
commands: # Used to run desired commands
# Each item in the list represents a specific run command
- run: # Used to define a run command
# Each item in the list represents a run parameter
# Output: echo "hello world"
- "echo" # Parameter
- "\"hello world\"" # Parameter
body: ":mitm-dir/response/body/file" # URI to the overridden file
headers: # Override request headers (case insensitive)
custom-response-header: "customValue"
- path: "/ugcstorage/*" # Match all after /ugcstorage/
body: ":mitm-dir/request/body/file" # URI to the file submitted for PUT, POST, and PATCH requests instead of the initial payload
headers: # Override request headers (case insensitive)
custom-header: "customValue"
response: # Used to alter the response
before:
commands:
- run:
- "echo"
- "\"hello world\""
code: 200 # Status code (optional), see https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
body: ":mitm-dir/response/body/file" # URI to the overridden file
headers: # Override response headers (case insensitive)
custom-response-header: "customValue"Please refer to our Commands documentation for further details.
-
:guid- Matches a valid GUID.
- Example:
1104ee8f-90d9-409f-a295-c9cd3ce16b40
-
:map-mvar- Matches all
Mapfiles. - Example:
ctf_bazaar.mvar
- Matches all
-
:egv-bin- Matches all
EngineGameVariantfiles. - Example:
FFA.bin
- Matches all
-
:cgui-bin- Matches all
CustomGamesUIMarkupfiles. - Example:
Slayer_CustomGamesUIMarkup_en.bin
- Matches all
-
:sandbox- Matches all known sandboxes.
- Sandboxes:
retail|test|beta|beta-test
-
:title- Matches all known titles.
- Titles:
hi|hipnk|higrn|hired|hipur|hiorg|hiblu|hi343
-
:ct-bond- Represents the content type of binary files consumed by the game.
- Output:
application/x-bond-compact-binary
-
:ct-json- Represents a JSON content type.
- Output: `application/json
-
:ct-xml- Represents a XML content type.
- Output: `application/xml
-
:blobs-svc- Returns blobs service URL.
- Output:
https://blobs-infiniteugc.svc.halowaypoint.com
-
:authoring-svc- Returns authoring service URL.
- Output:
https://authoring-infiniteugc.svc.halowaypoint.com
-
:discovery-svc- Returns discovery service URL.
- Output:
https://discovery-infiniteugc.svc.halowaypoint.com
-
:stats-svc- Returns stats service URL.
- Output:
https://halostats.svc.halowaypoint.com
-
:settings-svc- Returns stats service URL.
- Output:
https://settings.svc.halowaypoint.com
-
:gamecms-svc- Returns gamecms service URL.
- Output:
https://gamecms-hacs.svc.halowaypoint.com
-
:economy-svc- Returns economy service URL.
- Output:
https://economy.svc.halowaypoint.com
-
:mitm-dir- Represents the root folder of "InfiniteMITM".
- Output:
<drive>:\Users\<username>\InfiniteMITM
-
:mitm-version- Represents the InfiniteMITM version (only suitable for
response.headers). - Example:
0.1.0
- Represents the InfiniteMITM version (only suitable for
In some cases, you might need to reuse a parameter that was matched during the request in your response. To do this, you can use ${pos} where {pos} is the position of your route parameter or regex.
/ekur/97fd2ab9-ece0-41c1-91a8-f0382f24e6d2/olympus/xuid(1234)/details
domains:
blobs:
- path: "/ekur/:guid/olympus/:xuid/([a-z]+)$"
response:
body: ":mitm-dir/example/xuid_$2/test_$1/$3"<drive>:\Users\<username>\InfiniteMITM\example\xuid_1234\test_97fd2ab9-ece0-41c1-91a8-f0382f24e6d2\details