Hallo,
Ich versuche zurzeit die Packete von einem Android MMO abzufangen und zu editieren.
Hier sind mal ein paar Pakete, allerdings scheinen diese ne dynamische Verschlüsselung zu haben.
Hier hab ich 4x "a" (ohne Anführungszeichen) im Chat gesendet
Andere Funktion, welche 3x aufgerufen wurde.
Ich hab mal ein paar interessante Funktionen aufgelistet, welche meiner Meinung nach mit Verschlüsselung arbeiten (reverse engineering der APK).
Hier ein Ausschnitt einer relativ großen Klasse
Ich versuche zurzeit die Packete von einem Android MMO abzufangen und zu editieren.
Hier sind mal ein paar Pakete, allerdings scheinen diese ne dynamische Verschlüsselung zu haben.
Hier hab ich 4x "a" (ohne Anführungszeichen) im Chat gesendet
Code:
98 6D A1 13 E8 DD 73 1D 91 71 A2 87 74 11 49 98 DB 01 78 3D 86 51 1D 25 1D BD 5C CB 5C C3 EB 8D C7 D5 86 BA 0B 40 06 B0 DA 62 70 57 2A D9 7D EC 01 F9 B4 A1 E2 63 2B 16 AE CA FB 84 F5 C4 8E B8 3D 4D 95 0F 4F A6 3E B1 6C 33 1F 5D 7B 45 34 2B F6 98 C1 94 14 5A C4 33 94 30 95 BC 6F 55 6D EA 97 CA FD EF 6D FC FE 30 9A D6 D0 C6 12 FF C7 AD 8C BD 4F 7E BA 15 61 A4 A8 EA 36 D1 0D 0A 0E CA E9 76 14 9C 10 75 C3 5B 5A F7 EE D1 55 45 7D 66 70 EA F1 63 42 84 C0 18 0B 4A 14 14 7E 3F 15 44 76 DE 72 60
Code:
23 00 47 1C EF 45 89 64 8E DB 55 EC 30 C9 09 6B 8A 3E FB C9 9B 31 77 33 73 66 4A AA 63 01 33 B6 9E 2B 8E DE CA D0 63 7B 56 3B 0C EF 95 25 FD 4C D7 FD 5C 0B 34 F3 E2 FA E4 F1 35 8C 69 4E 96
Code:
public String getHashCode(Map<String, String> params) {
String afDevKey = (String)params.get("appsflyerKey");
String timestamp = (String)params.get("af_timestamp");
String uid = (String)params.get("uid");
String nativeSha1 = 0x0;
nativeSha1 = toSHA1(afDevKey.substring(0x0, 0x7) + uid.substring(0x0, 0x7) + timestamp.substring((timestamp.length() - 0x7)));
return nativeSha1;
}
public static String toSHA1(String input) {
String nativeSha1 = 0x0;
try {
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(getBytes("UTF-8"));
return nativeSha1;
} catch(NoSuchAlgorithmException e) {
e.printStackTrace();
return nativeSha1;
} catch(UnsupportedEncodingException e) {
e.printStackTrace();
}
return nativeSha1;
}
private static String byteToHex(byte[] hash) {
Formatter formatter = new Formatter();
byte b = hash[local1]local1 = local1 + 0x1) {
formatter.format("%02x", new Object[] {Byte.valueOf(b)});
}
String result = formatter.toString();
formatter.close();
return result;
}
}
Code:
private static String b(Context p1) {
if((i != null) && (i.length() > 0)) {
return i;
}
try {
d localString1 = new d();
localString1.a("androidId", b.b(p1));
localString1.a("deviceId", b.a(p1));
i = Base64.encodeToString(localString1.toString().getBytes(), 0x2);
} catch(c localc2) {
localc2.printStackTrace();
}
return i;
}
Code:
public static String a(String p1) {
String localString1 = 0x0;
try {
localconst/42 = MessageDigest.getInstance("MD5");
} catch(NoSuchAlgorithmException localNoSuchAlgorithmException3) {
localNoSuchAlgorithmException3.printStackTrace();
}
localString1.update(getBytes(), 0x0, length());
localbyte[]4 = localString1.digest();
new String() = 0x0;
if(new String() >= getBytes().length) {
return (new String() + 0x1);
}
getBytes()[new String()] = getBytes()[new String()] & 0xff;
if(getBytes()[new String()] <= 0xf) {
localStringBuilder5 = "0";
}
localStringBuilder5 = Integer.toHexString(getBytes()[new String()]);
return Integer.toHexString(getBytes()[new String()]).toUpperCase();
}
Code:
private static byte[] encode3to4(byte[] source, int srcOffset, int numSigBytes, byte[] destination, int destOffset, byte[] alphabet) {
0x2 = (source[(srcOffset + 0x2)] << 0x18)) {
switch(numSigBytes) {
}
case 3:
{
destination[destOffset] = alphabet[(source[(srcOffset + 0x2)] << 0x18)];
destination[(destOffset + 0x1)] = alphabet[(((source[(srcOffset + 0x1)] << 0x18) | localint1) & 0x3f)];
destination[(destOffset + 0x2)] = alphabet[(alphabet[(((source[(srcOffset + 0x1)] << 0x18) | localint1) & 0x3f)] & 0x3f)];
destination[(destOffset + 0x3)] = alphabet[(inBuff & 0x3f)];
return destination;
}
case 2:
{
destination[destOffset] = alphabet[(source[(srcOffset + 0x2)] << 0x18)];
destination[(destOffset + 0x1)] = alphabet[(((source[(srcOffset + 0x1)] << 0x18) | localint1) & 0x3f)];
destination[(destOffset + 0x2)] = alphabet[(alphabet[(((source[(srcOffset + 0x1)] << 0x18) | localint1) & 0x3f)] & 0x3f)];
destination[(destOffset + 0x3)] = 0x3d;
return destination;
}
case 1:
{
destination[destOffset] = alphabet[(source[(srcOffset + 0x2)] << 0x18)];
destination[(destOffset + 0x1)] = alphabet[(((source[(srcOffset + 0x1)] << 0x18) | localint1) & 0x3f)];
destination[(destOffset + 0x2)] = 0x3d;
destination[(destOffset + 0x3)] = 0x3d;
break;
}
}
return destination;
}
Code:
public class b {
priva = "uLi4/f4+Pb39.T19".getBytes();
private static b = "nmeug.f9/Om+L823".getBytes();
public static String a(String p1, String p2) throws Exception {
localString1 = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec localbyte[]2 = new SecretKeySpec(a, "AES");
IvParameterSpec localIvParameterSpec3 = new IvParameterSpec(b);
"AES/CBC/PKCS5Padding".init(0x1, localbyte[]2, localIvParameterSpec3);
localString1 = "AES/CBC/PKCS5Padding".doFinal(getBytes(p2));
return c.d("AES/CBC/PKCS5Padding");
}
public static String b(String p1, String p2) throws Exception {
localString1 = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec localString2 = new SecretKeySpec(a, "AES");
IvParameterSpec localIvParameterSpec3 = new IvParameterSpec(b);
"AES/CBC/PKCS5Padding".init(0x2, localString2, localIvParameterSpec3);
localString1 = "AES/CBC/PKCS5Padding".doFinal(c.b(p1));
return new String("AES/CBC/PKCS5Padding", p2);
}
}