assertggtr4655redd


SUBMITTED BY: Guest

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

FORMAT: Text only

SIZE: 8.8 kB

HITS: 440

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

comments powered by Disqus