【问题标题】:How to avoid full memory error in javascript如何避免javascript中的完整内存错误
【发布时间】:2018-10-20 19:32:04
【问题描述】:

我正在尝试编写一个基本的暴力类型脚本来处理我制作的示例 php 页面。这是我写的脚本:

var userElement = document.getElementById('username');
var passElement = document.getElementById('password');
//sets username, not randomized
var username = 'admin';
//expected characters
var alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')'];
var numOfGuesses = 0; //for fun
var numOfGuessesGenerated = 0; //for fun
var guesses1 = [];
var guesses2 = [];
var guesses3 = [];
var guesses4 = [];
var guesses5 = [];
var guesses6 = [];
var guesses7 = [];
var guesses8 = [];
var guess = "";
var memhandle = 0;

//first for loop is to get all different lengths covered, max being sixteen
var maxNumOfChars = 16;
//generates guesses one character at a time and appends them to array name guesses
for (var y = 0; y < maxNumOfChars; y++) {
    for (var i = 0; i < alphabet.length; i++) {
    while (i < maxNumOfChars) {
            guess+=alphabet[i];
    }
    }
    if (memhandle == 0) {
        guesses1.push(guess);
        memhandle = 1
    } else if (memhandle == 1) {
        guesses2.push(guess);
        memhandle = 2;
    } else if (memhandle == 2) {
        guesses3.push(guess);
        memhandle = 3;
    } else if (memhandle == 3) {
        guesses4.push(guess);
        memhandle = 4;
    } else if (memhandle == 4) {
        guesses5.push(guess);
        memhandle = 5;
    } else if (memhandle == 5) {
        guesses6.push(guess);
        memhandle = 6;
    } else if (memhandle == 6) {
        guesses7.push(guess);
        memhandle = 7;
    } else if (memhandle == 7) {
        guesses8.push(guess);
        memhandle = 0;
    } 


    numOfGuessesesGenerated++;
    guess = "";
}

numOfGuessesesGenerated++;
console.log(numOfGuessesesGenerated);
console.log(guesses);

//try the guesses!
for (var x = 0; x < guesses.length; x++) {
    userElement.value = username;
    passElement.value = guesses[x];
    numOfGuesses++;
    console.log(numOfGuesses);
    document.getElementById("myForm").submit(); //myForm IS the name of the form
}   



document.getElementById("fid").submit();  

我包含“memhandle”变量的原因是尝试将所有猜测分成不同的数组,这也是我有这么多数组的原因。每当我尝试时,页面总是崩溃,有什么方法可以只用 javascript 来做到这一点,还是我需要将用户名存储在某个地方然后从那里拉出来?我只是通过在 url 栏中执行 javascript: 来注入 javascript,这也可能是我的问题的原因。 任何帮助表示赞赏

【问题讨论】:

  • 为什么你认为将项目分成 8 个单独的数组会完全减少内存占用?
  • 为什么要存储猜测?只需生成一个猜测,测试它,然后扔掉它。增加你的计数器并继续下一个。
  • 阅读您的脚本并像计算机一样思考:将自己置于第二个for 循环中(在此循环中增加i)。假设我们正在进行第一次迭代 (i === 0)。我们正在经历一个while 循环并重复它直到i &lt; 16while 循环的第一次迭代:我们将 a 添加到我们的猜测中。我们应该对这个while 循环再做一次迭代吗?是的,i 仍然是 0。我们将a 添加到我们的猜测中。我们应该在这个while 循环上再做一次迭代吗?是的,i 仍然是 0。我们应该对这个while 循环再做一次迭代吗?是的,i 仍然是 0。我们将a 添加到我们的客人中......你明白了。
  • @FrankerZ 我认为单个数组的大小可能存在限制

标签: javascript php arrays memory brute-force


【解决方案1】:

您遇到的主要问题是while (i &lt; maxNumOfChars) {。这个循环永远不会完成。你做了guess+=alphabet[i];,但你根本不增加 i (在这个循环内),所以它最终以崩溃告终。

我是否可以建议查看 iterator functions 以避免数组?

var userElement = document.getElementById('username');
var passElement = document.getElementById('password');
//sets username, not randomized
var username = 'admin';
//expected characters
var alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')'];
var numOfGuesses = 0; //for fun
var numOfGuessesGenerated = 0; //for fun
var guess = "";
var memhandle = 0;

//first for loop is to get all different lengths covered, max being sixteen
var maxNumOfChars = 16;
//generates guesses one character at a time and appends them to array name guesses
function *getNextGuess() {
  for (var y = 0; y < maxNumOfChars; y++) {
      for (var i = 0; i < alphabet.length; i++) {
        //while (i < maxNumOfChars) {
              guess+=alphabet[i];
        //}
      }
      yield guess;
  }
}

//try the guesses!
for (var guess of getNextGuess()) {
  console.log(guess);
  numOfGuesses++;
  console.log(numOfGuesses);
  
  if (numOfGuesses > 10)
    break;
}   



//document.getElementById("fid").submit();  

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 2020-07-13
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多