hooklog.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. //this file is a little example of how to use injecting ability
  2. //to hook a function and change its behavior
  3. //in this case we hook the function that is responsible for the decryption of the license
  4. //and we change the behavior to return a valid license
  5. // JUST FOR LEARNING PURPOSES, DON'T USE THIS TO CRACK SOFTWARE
  6. //Adding hook
  7. const crypto = require("crypto");
  8. const pubdec = crypto["publicDecrypt"];
  9. delete crypto["publicDecrypt"];
  10. let fingerprint, email, uuid, license, computerInfo = "";
  11. let License = ""
  12. crypto.publicDecrypt = function (key, buffer) {
  13. log("PubDec Key:" + key);
  14. log("buf: " + buffer.toString('base64'));
  15. if (buffer.slice(0, 26).compare(Buffer.from("CRACKED_BY_DIAMOND_HUNTERS")) == 0) {
  16. License = buffer.toString('base64');
  17. let ret = buffer.toString().replace("CRACKED_BY_DIAMOND_HUNTERS", "");
  18. log("backdoor data,return : " + ret);
  19. return Buffer.from(ret);
  20. }
  21. return pubdec(key, buffer);
  22. };
  23. const fetch = require("electron-fetch")
  24. fetch_bak = fetch['default'];
  25. delete fetch['default'];
  26. fetch.default = async function fetch(url, options) {
  27. log('[fetch]fetch ' + url);
  28. log('[fetch]Arg ' + JSON.stringify(options));
  29. data = await fetch_bak(url, options);
  30. if (url.indexOf('api/client/activate') != -1) {
  31. params = JSON.parse(options.body);
  32. fingerprint = params.f, email = params.email, uuid = params.u, license = params.license, computerInfo = params.l
  33. log('[activate]Fingerprint ' + fingerprint);
  34. log('[activate]Email ' + email);
  35. log('[activate]UUID ' + uuid);
  36. log('[activate]License ' + license);
  37. log('[activate]ComputerInfo ' + computerInfo);
  38. log('[fetch]RetCode ' + data.status);
  39. ret = await data.buffer();
  40. log('[fetch]Ret ' + ret.toString());
  41. ret = Buffer.from('{"code":0,"retry":true,"msg":"' + Buffer.from("CRACKED_BY_DIAMOND_HUNTERS" + JSON.stringify(
  42. {
  43. "fingerprint": fingerprint,
  44. "email": email,
  45. "license": license,
  46. "type": ""
  47. })).toString('base64') + '"}');
  48. log("replace ret: " + ret.toString());
  49. data.text = () => {
  50. return new Promise((resolve, reject) => {
  51. resolve(ret.toString());
  52. });
  53. };
  54. data.json = () => {
  55. return new Promise((resolve, reject) => {
  56. resolve(JSON.parse(ret.toString()));
  57. });
  58. };
  59. }
  60. if (url.indexOf('api/client/renew') != -1) {
  61. ret = await data.buffer();
  62. log('[fetch]Ret ' + ret.toString());
  63. ret = Buffer.from('{"success":true,"code":0,"retry":true,"msg":"' + License + '"}');
  64. log("replace ret: " + ret.toString());
  65. data.text = () => {
  66. return new Promise((resolve, reject) => {
  67. resolve(ret.toString());
  68. });
  69. };
  70. data.json = () => {
  71. return new Promise((resolve, reject) => {
  72. resolve(JSON.parse(ret.toString()));
  73. });
  74. };
  75. }
  76. return new Promise((resolve, reject) => {
  77. resolve(data);
  78. });
  79. }
  80. http = require("http")
  81. function log(str) {
  82. http.get('http://127.0.0.1:3000/log?str=' + str, res => {
  83. }).on('error', err => {
  84. console.log('Error: ', err.message);
  85. });
  86. }
  87. log = console.log;
  88. log('Hook Init')
  89. var Module = require('module');
  90. var originalRequire = Module.prototype.require;
  91. Module.prototype.require = function () {
  92. log('Require ' + arguments[0])
  93. if (arguments[0] == 'crypto') {
  94. log('Hooking crypto');
  95. return crypto;
  96. }
  97. if (arguments[0] == 'electron-fetch') {
  98. log('Hooking electron-fetch');
  99. return fetch;
  100. }
  101. return originalRequire.apply(this, arguments);
  102. };
  103. console.log = log
  104. let validator = {
  105. set: function (target, key, value) {
  106. if (key === 'log') {
  107. log('console.log override blocked');
  108. return;
  109. }
  110. target[key] = value;
  111. }
  112. }
  113. let proxy = new Proxy(console, validator);
  114. console = proxy
  115. module.exports = fetch
  116. //hook finished