難読化されたAndroidアプリのデコードを試みています。より良く理解するためにPython 2.7のUnicode文字列のXOR
static char[] java_decode(char[] cArr, char[] cArr2) {
int i = 0;
for (int i2 = 0; i2 < cArr.length; i2++) {
cArr[i2] = (char) (cArr2[i]^cArr[i2]);
i++;
if (i >= cArr2.length) {
i = 0;
}
}
return cArr;
}
str2 = new String(epgwmgrwgrdvzck("浶㫻ᒍ夓䌎箜湛泰Ⳮ䯣倝".toCharArray(), new char[]{'浌', '㫛', 'ᓮ', '奼', '䍻', '篲', '港', '沂', 'Ⲕ', '䯃', '倧'})).intern();
# java.lang.String str2 = ": country :"
をクイックレビューのために、私は無地の一つに、すべてのこれらの文字列を変更したいと思います;:逆コンパイルした後、それは、私はいくつかの文字列が、このように難読化されていることがわかります私はPythonを選んだのは、速くて速いスクリプト言語だからです。
悲しいことに、私はこれらのマルチバイト文字で苦労しています。
# coding=utf-8
def decode(string1, string2):
string1 = list(string1)
i = 0
i2 = 0
while i2 < len(string1):
string1[i2] = chr(ord(string2[i])^ord(string1[i2]))
i += 1
if i >= len(string2):
i = 0
i2 += 1
string1 = str("".join(string1))
print string1
return string1
decode("浶㫻ᒍ夓䌎箜湛泰Ⳮ䯣倝", ['浌', '㫛', 'ᓮ', '奼', '䍻', '篲', '港', '沂', 'Ⲕ', '䯃', '倧'])
# TypeError: ord() expected a character, but string of length 3 found
ここでの主な問題は、それらの文字列がマルチバイト文字で構成されている間ord()
のみ、一度に一つの文字を受け入れるということです。これは私が書くしようとした機能です。
この問題を回避するにはどうすればよいですか?
私はPython 2.7.11 | Anaconda 4.0.0(x86_64)を使用しています。私はPython 3がPython 2よりはるかに優れたUnicodeサポートを持っていることを知っています。ソリューションがPython 3でしか動作しない場合は、単なるスクリプトなので、問題なく使用できます。
を畜生、私はPythonのバージョンを追加するつもりだったし、私がクリックそれを掲示することなく「尋ねなさい」。 – tampe125
Python 3を使用していただきありがとうございます。これらのPython 2文字列は、Javaの 'byte []'に似ていて、Unicodeバイトを含んでいます。 –