我很难扭转这个算法:
decrypt_algorithm = function (text) {
var parser = new TextParser(text);
var decrypt_key = [16, 19, 17, 7, 20, 23, 13, 1, 24, 15, 6, 12, 0, 18, 21, 2, 9, 14, 3, 10, 5, 25, 8, 4, 22, 11];
var text_size = parser.getSize();
var text_size_without_last_part = text_size - 26;
var output = [];
if (text_size_without_last_part > 0) {
for (var m = 0; m < text_size_without_last_part; m += 26) {
var word_to_decrypt = [];
for (var k = 0; k < 26; k++) {
word_to_decrypt[k] = parser.readNextChar()
}
for (var k = 0; k < 26; k++) {
output[m + k] = word_to_decrypt[decrypt_key[k]]
}
}
var parser_position = parser.getPosition();
var last_part_size = text_size - text_size_without_last_part - 1;
if (last_part_text > 0) {
for (var k = 0; k < last_part_size; k++) {
output[text_size_without_last_part + k] = parser.readNextChar()
}
}
}
return output;
};
我没有任何逆向工程知识,所以如果你能指出一些解释如何“逆向”函数的资源,那将非常有帮助。
我不需要确切的代码作为答案,但是我非常感谢一些关于如何自己逆向工程的指南。
编辑1:
稍作停顿,稍微思考了一下算法后,我明白了这个问题,而且比我想象的要容易:
output[decrypt_key[k]] = word_to_decrypt[m + k]
改变这将恢复算法,解决问题。