Wolfs T3S.live


SUBMITTED BY: Guest

DATE: Jan. 2, 2021, 8:46 p.m.

FORMAT: Text only

SIZE: 8.8 kB

HITS: 339

  1. import System;
  2. import System.Windows.Forms;
  3. import Fiddler;
  4. import Fiddler.WebFormats;
  5. var partyOwnership;
  6. var partyOwnership_hostname;
  7. var partyOwnership_version;
  8. var original_parameters;
  9. function JSONGetValue(key, json, startindex) {
  10. var to_return = ""
  11. var JSON_BRACE = -1;
  12. var JSON_BROKE_AT = -1;
  13. var JSON_BREAKPOINT = false;
  14. var WAIT_FOR_COLON = false
  15. var i = 0;
  16. var char = ""
  17. if (startindex > 0) {
  18. JSON_BRACE = 0;
  19. i = startindex
  20. }
  21. for (; i < json.length; i++) {
  22. char = json[i]
  23. JSON_BRACE += char == "{"
  24. JSON_BRACE -= char == "}"
  25. if (JSON_BRACE == -1) {
  26. return ["", 0]
  27. }
  28. if (JSON_BRACE > -1) {
  29. if (JSON_BREAKPOINT) {
  30. if (WAIT_FOR_COLON) {
  31. if (char == ":") {
  32. WAIT_FOR_COLON = false;
  33. }
  34. } else {
  35. // Collect
  36. if (JSON_BRACE == JSON_BROKE_AT) {
  37. if (char == "}" || char == ",") {
  38. if (char == "}") {
  39. to_return += "}";
  40. i++
  41. }
  42. return [to_return, i]
  43. } else {
  44. to_return += char
  45. }
  46. } else {
  47. to_return += char
  48. }
  49. }
  50. } else if (
  51. to_return == key && char == "\""
  52. ||
  53. to_return == key && char == ":"
  54. ) {
  55. to_return = "";
  56. WAIT_FOR_COLON = char != ":";
  57. JSON_BREAKPOINT = true;
  58. JSON_BROKE_AT = parseInt(JSON_BRACE)
  59. } else {
  60. if (char == "\"" || char == ",") {
  61. to_return = ""
  62. } else {
  63. to_return += char
  64. }
  65. }
  66. } else if (JSON_BREAKPOINT) {
  67. return [to_return, i]
  68. }
  69. }
  70. FiddlerObject.log("Probably couldn't find the key, or EOF")
  71. return false;
  72. }
  73. function JSONGetKeys(json) {
  74. var to_return = []
  75. var JSON_BRACE = -1;
  76. var JSON_BREAKPOINT = false;
  77. var char = "";
  78. var name_build = ""
  79. for (var i = 0; i < json.length; i++) {
  80. char = json[i]
  81. JSON_BRACE += char == "{"
  82. JSON_BRACE -= char == "}"
  83. if (JSON_BRACE > -1) {
  84. if (JSON_BREAKPOINT) {
  85. if (JSON_BRACE == 0) {
  86. if (char == ",") {
  87. JSON_BREAKPOINT = false
  88. }
  89. }
  90. } else {
  91. if (char != "\"" && char != ":" && char != "{") {
  92. name_build += char
  93. } else if (char == ":") {
  94. to_return.push(String(name_build))
  95. name_build = ""
  96. JSON_BREAKPOINT = true
  97. }
  98. }
  99. }
  100. if (JSON_BRACE == -1) {
  101. return to_return
  102. }
  103. }
  104. return false
  105. }
  106. function decodeIP(rawBytes) {
  107. var is_safe = true
  108. var fail_reason = -1
  109. var secureDeviceAddress
  110. try {
  111. secureDeviceAddress = Convert.FromBase64String(rawBytes)
  112. } catch(Error) {
  113. return "(base64 decode failure)"
  114. }
  115. if (is_safe) {
  116. if (secureDeviceAddress[0] == 0x01 && secureDeviceAddress[1] == 0x00) {
  117. var last4 = [0, 0, 0, 0]
  118. var arrayIndex = 0
  119. for (var char = 0; char < secureDeviceAddress.length; char++) {
  120. arrayIndex++
  121. last4.shift()
  122. last4.push(secureDeviceAddress[char])
  123. if (last4[0] == 32 && last4[1] == 1 && last4[2] == 0 && last4[3] == 0) break;
  124. }
  125. if (last4[0] != 32 || last4[1] != 1 || last4[2] != 0 || last4[3] != 0) return "(Teredo address missing) IPv6";
  126. var ipv4 = ""
  127. var ipvp = 0
  128. for (var x = 0; x < 4; x++) {
  129. ipv4 += "." + String(0xff - secureDeviceAddress[(arrayIndex + 8) + x])
  130. }
  131. for (var x = 0; x < 2; x++) {
  132. ipvp += (0xff - secureDeviceAddress[(arrayIndex + 7) - x]) * (1 + (0xff * x))
  133. }
  134. ipv4 = ipv4.replace(".", "", 1)
  135. return ipv4 + " : " + String(ipvp)
  136. } else {
  137. return "(invalid secureDeviceAddress)"
  138. }
  139. }
  140. return "An unknown exception occurred."
  141. }
  142. function inspect_party(inputJSON, is_group) { // Peeks into the party.
  143. if (inputJSON.length && inputJSON.indexOf("{") == 0) {
  144. var party_members = JSONGetValue("members", inputJSON, 0)
  145. if (party_members != false) {
  146. FiddlerObject.log("Working on Xbox Live Party...")
  147. party_members = party_members[0]
  148. var to_print = "\r\n"
  149. to_print += "= = = Xbox Live "
  150. if (is_group) to_print += "Group"; else to_print += "Party";
  151. to_print += " = = ="
  152. var member_keys = JSONGetKeys(party_members)
  153. var member = []
  154. var quickindex = 1;
  155. for (var i = 0; i < member_keys.length; i++) {
  156. member = JSONGetValue(member_keys[i], party_members, quickindex)
  157. quickindex = member[1]
  158. to_print += "\r\n" + String(i) + " | " + member[0].split("\"gamertag\":\"")[1].split("\"")[0]
  159. if (!is_group) if (member[0].indexOf("\"secureDeviceAddress\":\"") > -1) to_print += " | " + decodeIP(member[0].split("\"secureDeviceAddress\":\"")[1].split("\"")[0]); else to_print += " | (mobile Device / unavailable)";;
  160. if (member[0].indexOf("\"description\":{\"text\":\"") > -1) to_print += " | Request Message: " + member[0].split("\"description\":{\"text\":\"")[1].split("\"")[0];
  161. }
  162. to_print += "\r\n= = = = = = = = = = = = ="
  163. FiddlerObject.log(to_print)
  164. } else {
  165. FiddlerObject.log("Failed to find key")
  166. }
  167. }
  168. return inputJSON;
  169. }
  170. class Handlers
  171. {
  172. static function OnBeforeRequest(oSession) {
  173. var oReq = System.Text.Encoding.UTF8.GetString(oSession.requestBodyBytes);
  174. if (oSession.PathAndQuery.indexOf("/serviceconfigs/") > -1) {
  175. if (oReq.indexOf("\"constants\"") > -1) { // Get party path for remove feature
  176. partyOwnership = oSession.PathAndQuery
  177. partyOwnership_hostname = oSession.host
  178. partyOwnership_version = oSession.oRequest["x-xbl-contract-version"]
  179. FiddlerObject.log(partyOwnership_version)
  180. }
  181. }
  182. if (oSession.PathAndQuery.indexOf("/people/mute") > -1) {
  183. if (partyOwnership != undefined) {
  184. var to_kick = oReq.split(": \"")[1].split("\"")[0]
  185. oSession.PathAndQuery = partyOwnership
  186. oSession.host = partyOwnership_hostname
  187. oSession.oRequest["x-xbl-contract-version"] = partyOwnership_version
  188. oSession.oRequest["If-Match"] = "*"
  189. oReq = "{\"properties\":{\"custom\":{\"kickusers\":{\"" + to_kick + "\":\"kick\"}}}}"
  190. }
  191. }
  192. oSession.utilSetRequestBody(oReq)
  193. }
  194. static function OnBeforeResponse(oSession) {
  195. var oReq = System.Text.Encoding.UTF8.GetString(oSession.requestBodyBytes);
  196. var oRes = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes);
  197. if (oSession.PathAndQuery.indexOf("/sessions?") == -1) {
  198. if (oSession.PathAndQuery.indexOf("/serviceconfigs/") > -1 && oSession.PathAndQuery.indexOf("/chat/") > -1) { // Is a party
  199. oRes = inspect_party(oRes, false);
  200. } else if (oSession.PathAndQuery.indexOf("/handles/") > -1 && oSession.PathAndQuery.indexOf("/session") > -1) { // Is a group
  201. oRes = inspect_party(oRes, true);
  202. } else if (oSession.PathAndQuery.indexOf("/decoration/") > -1) {
  203. oRes = oRes.replace("Offline", "Online")
  204. }
  205. }
  206. if (oRes.indexOf("\"kickusers\":{\"") > -1) { // Omit kick request
  207. var removeKick = oRes.split("\"kickusers\":{\"")[1].split("}")[0]
  208. oRes = oRes.Replace("\"kickusers\":{\"" + removeKick + "}", "")
  209. oSession.utilSetResponseBody(oRes)
  210. }
  211. var limiter = 0
  212. while (oRes.IndexOf(",}") > -1 && limiter < 100) { // Correct errors
  213. oRes = oRes.Replace(",}", "}")
  214. limiter += 1
  215. }
  216. oSession.utilSetResponseBody(oRes)
  217. }
  218. static function Main() {
  219. var today: Date = new Date();
  220. FiddlerObject.StatusText = " Xbox Party additions was loaded at: " + today;
  221. }
  222. }

comments powered by Disqus