mirror of
https://github.com/kodjodevf/mangayomi.git
synced 2026-03-11 17:25:32 +00:00
68 lines
1.8 KiB
Dart
68 lines
1.8 KiB
Dart
class Deobfuscator {
|
|
static String deobfuscateJsPassword(String inputString) {
|
|
int idx = 0;
|
|
final brackets = ['[', '('];
|
|
final evaluatedString = StringBuffer();
|
|
|
|
while (idx < inputString.length) {
|
|
final chr = inputString[idx];
|
|
|
|
if (!brackets.contains(chr)) {
|
|
idx++;
|
|
continue;
|
|
}
|
|
|
|
final closingIndex = getMatchingBracketIndex(idx, inputString);
|
|
|
|
if (chr == '[') {
|
|
final digit = calculateDigit(inputString.substring(idx, closingIndex));
|
|
evaluatedString.write(digit);
|
|
} else {
|
|
evaluatedString.write('.');
|
|
|
|
if (inputString[closingIndex + 1] == '[') {
|
|
final skippingIndex = getMatchingBracketIndex(
|
|
closingIndex + 1,
|
|
inputString,
|
|
);
|
|
idx = skippingIndex + 1;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
idx = closingIndex + 1;
|
|
}
|
|
|
|
return evaluatedString.toString();
|
|
}
|
|
|
|
static int getMatchingBracketIndex(int openingIndex, String inputString) {
|
|
final openingBracket = inputString[openingIndex];
|
|
final closingBracket = openingBracket == '[' ? ']' : ')';
|
|
var counter = 0;
|
|
|
|
for (var idx = openingIndex; idx < inputString.length; idx++) {
|
|
if (inputString[idx] == openingBracket) counter++;
|
|
if (inputString[idx] == closingBracket) counter--;
|
|
|
|
if (counter == 0) return idx; // found matching bracket
|
|
if (counter < 0) return -1; // unbalanced brackets
|
|
}
|
|
|
|
return -1; // matching bracket not found
|
|
}
|
|
|
|
static String calculateDigit(String inputSubString) {
|
|
final digit = RegExp(r"\!\+\[\]").allMatches(inputSubString).length;
|
|
|
|
if (digit == 0) {
|
|
if (RegExp(r"\+\[\]").allMatches(inputSubString).length == 1) {
|
|
return '0';
|
|
}
|
|
} else if (digit >= 1 && digit <= 9) {
|
|
return digit.toString();
|
|
}
|
|
|
|
return '-'; // Illegal digit
|
|
}
|
|
}
|