mangayomi-mirror/lib/utils/cryptoaes/deobfuscator.dart
Moustapha Kodjo Amadou 3e401c8af2 dart format
2025-02-23 15:31:49 +01:00

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
}
}