Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 

104 wiersze
3.4 KiB

  1. function load_script(o_script, callback) {
  2. let script = document.createElement('script');
  3. script.type = o_script.type || 'text/javascript';
  4. if(o_script.hasAttribute('src')) {
  5. script.src = o_script.src;
  6. script.onload = callback
  7. }
  8. script.innerHTML = o_script.innerHTML;
  9. document.head.appendChild(script);
  10. if(o_script.src === "") {
  11. // NOTE(Felix): it seems the onload is not called on script nodes that
  12. // define the js inline instead of through a src attribute, so for
  13. // them we call the callback manually and hope for the best.
  14. callback();
  15. }
  16. }
  17. var next_script_index = 0
  18. var deferred_scripts = []
  19. function load_next_deferred_script() {
  20. console.log("recurse!")
  21. if (next_script_index >= deferred_scripts.length)
  22. return
  23. load_script(deferred_scripts[next_script_index++], () => load_next_deferred_script())
  24. }
  25. function decrypt_page() {
  26. var key_str = ""
  27. var html_name = window.location.pathname;
  28. var allcookies = document.cookie;
  29. cookiearray = allcookies.split(';');
  30. for(var i=0; i<cookiearray.length; i++) {
  31. name = cookiearray[i].split('=')[0].trim();
  32. value = cookiearray[i].split('=')[1];
  33. if (name == html_name)
  34. key_str = value;
  35. if (name == "__master__") {
  36. key_str = value;
  37. break;
  38. }
  39. }
  40. if (key_str.length == 0)
  41. key_str = document.querySelector('input[name=pwd]').value
  42. // check key length
  43. if (key_str.length != 16 &&
  44. key_str.length != 24 &&
  45. key_str.length != 32)
  46. {
  47. return;
  48. }
  49. var entered_key = aesjs.utils.utf8.toBytes(key_str);
  50. var enc_bytes = aesjs.utils.hex.toBytes(enc_hex_body)
  51. // check if the user input / loaded cookie is the master key
  52. var aesCtr = new aesjs.ModeOfOperation.ctr(entered_key, new aesjs.Counter(initial_counter))
  53. var master_key_dec_real_key = aesCtr.decrypt(aesjs.utils.hex.toBytes(master_key_enc_real_key))
  54. aesCtr = new aesjs.ModeOfOperation.ctr(master_key_dec_real_key, new aesjs.Counter(initial_counter))
  55. var dec_bytes = aesCtr.decrypt(enc_bytes)
  56. // Convert our bytes back into text
  57. var dec_text = aesjs.utils.utf8.fromBytes(dec_bytes)
  58. if (!dec_text.endsWith(correct_key_marker)) {
  59. // check if it is a regular password
  60. aesCtr = new aesjs.ModeOfOperation.ctr(entered_key, new aesjs.Counter(initial_counter))
  61. var org_key_dec_real_key = aesCtr.decrypt(aesjs.utils.hex.toBytes(org_key_enc_real_key))
  62. aesCtr = new aesjs.ModeOfOperation.ctr(org_key_dec_real_key, new aesjs.Counter(initial_counter))
  63. dec_bytes = aesCtr.decrypt(enc_bytes)
  64. dec_text = aesjs.utils.utf8.fromBytes(dec_bytes)
  65. if (!dec_text.endsWith(correct_key_marker)) {
  66. key_str = "";
  67. return
  68. } else {
  69. // entered correct file key
  70. document.cookie = html_name + "=" + key_str;
  71. }
  72. } else {
  73. // entered correct master key
  74. document.cookie = "__master__=" + key_str;
  75. }
  76. // Convert our bytes back into text
  77. // var dec_text = aesjs.utils.utf8.fromBytes(dec_bytes)
  78. var dec_text = new TextDecoder().decode(dec_bytes)
  79. document.body.outerHTML = "<body" + dec_text + "</body>"
  80. deferred_scripts = document.body.querySelectorAll('script');
  81. load_next_deferred_script()
  82. }
  83. window.onload = decrypt_page