Construct 3 Crack

Personal License Crack for C3 by ImmortalAI ft. WladekHack

  1. // ==UserScript==
  2. // @name Construct 3 Crack
  3. // @namespace https://t.me/wladekhack
  4. // @version 1.0
  5. // @description Personal License Crack for C3 by ImmortalAI ft. WladekHack
  6. // @author ImmortalAI ft. WladekHack
  7. // @match https://account.construct.net/*
  8. // @run-at document-start
  9. // @icon https://construct-static.com/images/v1253/r/global/construct-3-logo_v64.png
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15.  
  16. const loginJsonUrl = 'https://account.construct.net/login.json';
  17. const tokenJsonUrl = 'https://account.construct.net/token.json';
  18.  
  19. const modifiedLoginJson = {
  20. "request": {
  21. "status":"ok",
  22. "time":999999999,
  23. "date":"2021-08-29T20:20:49.2635326Z",
  24. "server":"prd-vm-login-01"
  25. },
  26. "response": {
  27. "token":"b63a40dd-0088-4f88-8bd5-f31db0834a92",
  28. "userID":1
  29. }
  30. };
  31.  
  32. const modifiedTokenJson = {
  33. "request":{
  34. "status":"ok",
  35. "time":999999999,
  36. "date":"2021-10-05T01:28:00.8575421Z",
  37. "server":"prd-vm-login-01"
  38. },
  39. "response":{
  40. "newToken":"ff9b3ec1-3798-4bff-8fbf-9ce012c80375",
  41. "user":{
  42. "id":1052352,
  43. "username":"WladekHack",
  44. "highResAvatar":{
  45. "url":"https://construct-static.com/avatars/1183565/get"
  46. }
  47. },
  48. "license":{
  49. "type":"personal",
  50. "hash":"",
  51. "gamejamLicenseAvailable":true,
  52. "activeGamejamLicense":{
  53. "startTime":1633003200,
  54. "endTime":1649231178,
  55. "name":"WladekHack",
  56. "relatedURL":"https://www.construct.net/en/blogs/construct-official-blog-1/ludum-dare-once-again-free-1572"
  57. },
  58. "scriptingEnabled":true,
  59. "reason":"Thereisnoseatorlicenseassignedtoyou.",
  60. "canUseBuildService":true,
  61. "canUseRemovePreview":true,
  62. "canExport":true,
  63. "canShareProject":true
  64. }
  65. }
  66. };
  67.  
  68. // Override the fetch function to intercept the response
  69. const originalFetch = window.fetch;
  70. window.fetch = function() {
  71. return originalFetch.apply(this, arguments).then((response) => {
  72. if (response.url === loginJsonUrl) {
  73. return new Response(JSON.stringify(modifiedLoginJson), {
  74. status: 200,
  75. statusText: 'OK',
  76. headers: new Headers({
  77. 'Content-Type': 'application/json'
  78. })
  79. });
  80. } else if (response.url === tokenJsonUrl) {
  81. return new Response(JSON.stringify(modifiedTokenJson), {
  82. status: 200,
  83. statusText: 'OK',
  84. headers: new Headers({
  85. 'Content-Type': 'application/json'
  86. })
  87. });
  88. }
  89. return response;
  90. });
  91. };
  92. })();