Thema: Passwort-Kodierung v9.0anp
-
27.06.2012, 02:17 #1
- Registriert seit
- 09.11.2011
- Beiträge
- 121
Thanked 129 Times in 46 PostsPasswort-Kodierung v9.0anp
Moin,
hier habt ihr die Passwort-Kodierung aus dem Applet 9.0anp, ist 1:1 aus dem Client übernommen.
Ich hab es einfach mal hingeklascht, funktioniert aber. Ob man das mit dem Serializable in C# ändern kann, weiß ich nicht, ist mir aber auch ehrlich gesagt wayne.
Password.cs:
PHP-Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Dein_Tolles_Projekt
{
/// <summary>
/// Eine Klasse, die das Passwort hasht (Applet: 9.0anp)
/// </summary>
class Password
{
/// <summary>
/// Hasht das Passwort
/// </summary>
/// <param name="password">Passwort des Benutzers</param>
/// <param name="key">Der vom Server empfangene Key</param>
/// <returns>Passworthash</returns>
///
public static int HashPassword(string password, string key)
{
string text4 = key;
object arg_230_1 = text4;
object _ref = "cekpfrHjpVj";
Serializable serializable;
serializable.__obj = _ref;
text4 = a(arg_230_1, serializable);
text4 = new StringBuilder().Append(text4).Append(c(text4) + 1050098570).ToString();
int num = (text4.Length <= 0) ? 0 : (text4.Length - 1);
int num2 = num;
int expr_162 = (num2 ^ text4.Length) + 3;
int expr_16A = text4.Length;
num2 = ((expr_16A != -1) ? (expr_162 % expr_16A) : 0);
text4 = new StringBuilder().Append(text4).Append((char)(num2 + 40103)).ToString();
int expr_19A = c(text4);
int expr_1A6 = text4.Length;
num2 = ((expr_1A6 != -1) ? (expr_19A % expr_1A6) : 0);
int expr_1B4 = num2;
int expr_1BB = expr_1B4 * expr_1B4 + num2 + 18;
int expr_1C3 = text4.Length;
num2 = ((expr_1C3 != -1) ? (expr_1BB % expr_1C3) : 0);
if (num2 == 0)
{
num2 = text4.Length / 2;
}
StringBuilder arg_2D7_0 = new StringBuilder();
object arg_2D2_1 = text4.Substring(num2);
_ref = "Um";
serializable.__obj = _ref;
text4 = arg_2D7_0.Append(a(arg_2D2_1, serializable)).Append(text4.Substring(0, num2)).ToString();
num2 = text4.Length / 2;
int expr_309 = (num2 ^ text4.Length) + 9;
int expr_311 = text4.Length;
num2 = ((expr_311 != -1) ? (expr_309 % expr_311) : 0);
int expr_31F = num2;
int expr_326 = expr_31F * expr_31F + num2 + 10;
int expr_32E = text4.Length;
num2 = ((expr_32E != -1) ? (expr_326 % expr_32E) : 0);
int expr_345 = (int)(text4[num2] + '\t');
int expr_34D = text4.Length;
num2 = ((expr_34D != -1) ? (expr_345 % expr_34D) : 0);
int expr_364 = (int)(text4[num2] + '\n');
int expr_36C = text4.Length;
num2 = ((expr_36C != -1) ? (expr_364 % expr_36C) : 0);
int expr_382 = (int)(text4[num2] + '\u0002');
int expr_38A = text4.Length;
num2 = ((expr_38A != -1) ? (expr_382 % expr_38A) : 0);
StringBuilder arg_400_0 = new StringBuilder().Append("");
object arg_3FB_1 = new StringBuilder().Append("").Append(c(text4.Substring(0, num2)) * c(text4.Substring(0, num2))).ToString();
_ref = text4.Substring(num2);
serializable.__obj = _ref;
StringBuilder arg_469_0 = arg_400_0.Append(a(arg_3FB_1, serializable));
object arg_464_1 = new StringBuilder().Append("").Append(c(text4.Substring(num2)) * c(text4.Substring(num2))).Append(992257450).ToString();
_ref = text4.Substring(0, num2);
serializable.__obj = _ref;
text4 = arg_469_0.Append(a(arg_464_1, serializable)).ToString();
int num3 = ah(a(password, text4));
return num3;
}
private static int c(object this2)
{
string text = this2.ToString();
int num = 0;
int num2 = 0;
int num3 = 0;
int i = 0;
int num4 = text.Length;
while (i < num4)
{
int arg_9C_0 = num2;
int num5 = ((num3 & 3) == 3) ? 3 : 5;
int num6 = arg_9C_0;
num2 = num6 * num5 + (int)text[num4 - i - 1];
num3 = (num ^ num2);
int arg_A9_0 = num;
int num7 = ((num3 & 4) != 0) ? 7 : 3;
int num8 = arg_A9_0;
int arg_7D_0 = num8 * num7;
string arg_78_0 = text;
int expr_6B = i * 43973;
int expr_6E = num4;
num = arg_7D_0 + (int)arg_78_0[(expr_6E != -1) ? (expr_6B % expr_6E) : 0];
i++;
}
return (int)((uint)num3 >> 26 ^ (uint)((num2 ^ num) & 67108863));
}
private static int ah(string @this)
{
int num = 0;
int num2 = 0;
int num3 = @this.Length;
if (num3 < 19)
{
for (int i = num3 - 1; i >= 0; i += -1)
{
num = num * 3 + (int)@this[i];
num2 = num2 * 5 + (int)@this[num3 - i - 1];
}
}
else
{
int i = num3 / 19;
for (int j = num3 - 1; j >= 0; j -= i)
{
num = num * 5 + (int)@this[j];
num2 = num2 * 3 + (int)@this[num3 - j - 1];
}
}
int num4 = num ^ num2;
return (num4 & 16777215) ^ num4 >> 24;
}
private static string a(object obj, Serializable s)
{
object serializable = s;
object _obj = s.__obj;
string text = obj.ToString();
int num = text.Length;
string text2 = _obj.ToString();
int num2 = text2.Length;
int num3 = num2 ^ num << 3;
int num4 = num;
if (num2 < 1)
{
return text;
}
if (num < 1)
{
return text2;
}
if (num2 > num4)
{
num4 = num2;
}
StringBuilder stringBuffer = new StringBuilder(num4);
int num5 = (int)text2[0];
int num6 = (int)text[0];
int i = 0;
while (i < num4)
{
if (num5 >= num)
{
num5 = 0;
}
if (num6 >= num2)
{
num6 = 0;
}
stringBuffer.Append((char)(num3 ^ (int)text[num5] ^ (int)text2[num6]));
i++;
num5++;
num6++;
}
return stringBuffer.ToString();
}
private static string a(string str1, string str2)
{
int num = str1.Length;
int num2 = str2.Length;
int num3 = num ^ num2 << 4;
if (num < 1)
{
return str1;
}
if (num2 < 1)
{
return str2;
}
int num4 = num;
if (num2 > num4)
{
num4 = num2;
}
StringBuilder stringBuffer = new StringBuilder(num4);
for (int i = 0; i < num4; i++)
{
StringBuilder arg_60_0 = stringBuffer;
int expr_37 = i;
int expr_3A = num;
char arg_5C_0 = str1[(expr_3A != -1) ? (expr_37 % expr_3A) : 0];
int expr_4A = i;
int expr_4D = num2;
arg_60_0.Append((char)((int)(arg_5C_0 ^ str2[(expr_4D != -1) ? (expr_4A % expr_4D) : 0] ^ num3)));
}
return stringBuffer.ToString();
}
}
}
PHP-Code:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Dein_Tolles_Projekt
{
[Serializable()]
public struct Serializable
{
public interface __Interface
{
}
public object __obj;
public static bool IsInstance(object obj)
{
return obj is string || obj is Exception || obj is Array || obj is Serializable.__Interface;
}
public static bool IsInstanceArray(object obj, int rank)
{
if (obj == null)
{
return false;
}
Type type = obj.GetType();
int num = rank;
while (type.IsArray)
{
type = type.GetElementType();
num--;
if (num == 0)
{
return typeof(string).IsAssignableFrom(type) || typeof(Exception).IsAssignableFrom(type) || typeof(Array).IsAssignableFrom(type) || typeof(Serializable.__Interface).IsAssignableFrom(type) /*|| GhostTag.IsGhostArrayInstance(obj, typeof(Serializable).TypeHandle, rank)*/;
}
}
return false;
}
public static Serializable Cast(object obj)
{
if (!(obj is string) && !(obj is Exception) && !(obj is Array))
{
Serializable.__Interface arg_1E_0 = (Serializable.__Interface)obj;
}
Serializable result;
result.__obj = obj;
return result;
}
public static void CastArray(object obj, int rank)
{
if (obj != null && !Serializable.IsInstanceArray(obj, rank))
{
//GhostTag.ThrowClassCastException(obj, typeof(Serializable).TypeHandle, rank);
}
}
public static implicit operator Serializable(string _obj)
{
Serializable result;
result.__obj = _obj;
return result;
}
public static implicit operator Serializable(Exception _obj)
{
Serializable result;
result.__obj = _obj;
return result;
}
public static implicit operator Serializable(Array _obj)
{
Serializable result;
result.__obj = _obj;
return result;
}
public object ToObject()
{
return this.__obj;
}
public override bool Equals(object obj)
{
return this.__obj == obj;
}
public override int GetHashCode()
{
return this.__obj.GetHashCode();
}
public static bool operator ==(Serializable serializable, Serializable serializable2)
{
return serializable.__obj == serializable2.__obj;
}
public static bool operator !=(Serializable serializable, Serializable serializable2)
{
return serializable.__obj != serializable2.__obj;
}
}
}
PHP-Code:int pwHash = Password.HashPassword("Passwort", "empfangener Key");
-
02.07.2012, 15:48 #2
- Registriert seit
- 01.07.2011
- Beiträge
- 103
Thanked 54 Times in 45 PostsPasswort-Kodierung v9.0anp
Welcke Klassen/Methoden sind denn dazu von der 90anp?
Kann die irgendwie nicht im applet finden ^^
-
02.07.2012, 20:19 #3
- Registriert seit
- 09.11.2011
- Beiträge
- 121
Thanked 129 Times in 46 PostsPasswort-Kodierung v9.0anp
Also alle Methoden bleiben gleich (vom Algorithmus schon, nur die Namen ändern sich), außer eine, die sich von Appletversion zu Appletversion ändert.
In meiner Klasse bleiben im Applet alle Methoden gleich, außer die HashPassword-Methode, die sich ändert.
Such mit einem Decompiler (jd-gui z.B.) in der GroupChat nach "Serializable", dort gibt es die Methode a, die einen String zurückgibt:
private string a(string nick, string pass, string channel, bool flag)
Dort findest du innerhalb der Methode einen StringBuilder, der das Login-Packet erzeugt (new StringBuilder().append(k1.a(19514)).append(Jy.u).a ppend(channel)...)
Und davor findet das Hashen statt, kannst du dir ja angucken.
MfG
-
02.07.2012, 21:30 #4
- Registriert seit
- 01.07.2011
- Beiträge
- 103
Thanked 54 Times in 45 PostsPasswort-Kodierung v9.0anp
Also ist des die einzigte Methode die Serialisierung nutzt? Ich schaus mit gleich mal zuhause an Danke fuer die Info.
Was fuer eine Funktion hat der Boolosche Wert?
Edit:
Hab in der "GroupChat" bzw. Superklasse von Start nur folgende Methode gefunden, die Serialize enthält:
PHP-Code:public String a(Object paramObject, Serializable paramSerializable)
PHP-Code:private final String a(String paramString1, String paramString2, String paramString3, boolean paramBoolean)
{
Object localObject = null;
fq localfq = av(paramString3);
if (localfq == null)
break label766;
}
Hab nun mal anhand deinem Beispiel des zu Java umgemodelt,.. Aber irgendwie kommt da ein völlig anderer Wert raus, oder täusche ich mich da?
PHP-Code:import java.io.Serializable;
public class pwFromC {
public static void main(String[] args) {
System.out.println(HashPassword("ThePassword", "TheKey"));
}
public static int HashPassword(String password, String key) {
Serializable serializable;
String text4 = key;
Object arg_230_1 = text4;
Object _ref = "cekpfrHjpVj";
serializable = (Serializable) _ref;
text4 = a(arg_230_1, serializable);
text4 = new StringBuilder().append(text4).append(c(text4) + 1050098570).toString();
int num = (text4.length() <= 0) ? 0 : (text4.length() - 1);
int num2 = num;
int expr_162 = (num2 ^ text4.length()) + 3;
int expr_16A = text4.length();
num2 = ((expr_16A != -1) ? (expr_162 % expr_16A) : 0);
text4 = new StringBuilder().append(text4).append((char) (num2 + 40103)).toString();
int expr_19A = c(text4);
int expr_1A6 = text4.length();
num2 = ((expr_1A6 != -1) ? (expr_19A % expr_1A6) : 0);
int expr_1B4 = num2;
int expr_1BB = expr_1B4 * expr_1B4 + num2 + 18;
int expr_1C3 = text4.length();
num2 = ((expr_1C3 != -1) ? (expr_1BB % expr_1C3) : 0);
if(num2 == 0) {
num2 = text4.length() / 2;
}
StringBuilder arg_2D7_0 = new StringBuilder();
Object arg_2D2_1 = text4.substring(num2);
_ref = "Um";
serializable = (Serializable) _ref;
text4 = arg_2D7_0.append(a(arg_2D2_1, serializable)).append(text4.substring(0, num2)).toString();
num2 = text4.length() / 2;
int expr_309 = (num2 ^ text4.length()) + 9;
int expr_311 = text4.length();
num2 = ((expr_311 != -1) ? (expr_309 % expr_311) : 0);
int expr_31F = num2;
int expr_326 = expr_31F * expr_31F + num2 + 10;
int expr_32E = text4.length();
num2 = ((expr_32E != -1) ? (expr_326 % expr_32E) : 0);
char[] text5 = text4.toCharArray();
int expr_345 = (int)(text5[num2] + '\t');
int expr_34D = text4.length();
num2 = ((expr_34D != -1) ? (expr_345 % expr_34D) : 0);
int expr_364 = (int)(text5[num2] + '\n');
int expr_36C = text4.length();
num2 = ((expr_36C != -1) ? (expr_364 % expr_36C) : 0);
int expr_382 = (int)(text5[num2] + '\u0002');
int expr_38A = text4.length();
num2 = ((expr_38A != -1) ? (expr_382 % expr_38A) : 0);
StringBuilder arg_400_0 = new StringBuilder().append("");
Object arg_3FB_1 = new StringBuilder().append("").append(c(text4.substring(0, num2)) * c(text4.substring(0, num2))).toString();
_ref = text4.substring(num2);
serializable = (Serializable) _ref;
StringBuilder arg_469_0 = arg_400_0.append(a(arg_3FB_1, serializable));
Object arg_464_1 = new StringBuilder().append("").append(c(text4.substring(num2)) * c(text4.substring(num2))).append(992257450).toString();
_ref = text4.substring(0, num2);
serializable = (Serializable) _ref;
text4 = arg_469_0.append(a(arg_464_1, serializable)).toString();
int num3 = ah(a(password, text4));
return num3;
}
private static int c(Object this2) {
String text = this2.toString();
char[] text2 = text.toCharArray();
int num = 0;
int num2 = 0;
int num3 = 0;
int i = 0;
int num4 = text.length();
while(i < num4) {
int arg_9C_0 = num2;
int num5 = ((num3 & 3) == 3) ? 3 : 5;
int num6 = arg_9C_0;
num2 = num6 * num5 + (int) text2[num4 - i - 1];
num3 = (num ^ num2);
int arg_A9_0 = num;
int num7 = ((num3 & 4) != 0) ? 7 : 3;
int num8 = arg_A9_0;
int arg_7D_0 = num8 * num7;
int expr_6B = i * 43973;
int expr_6E = num4;
num = arg_7D_0 + (int) text2[(expr_6E != -1) ? (expr_6B % expr_6E) : 0];
i++;
}
return (int) (num3 >> 26 ^ ((num2 ^ num) & 67108863));
}
private static int ah(String that) {
int num = 0;
int num2 = 0;
int num3 = that.length();
char[] that2 = that.toCharArray();
if (num3 < 19) {
for (int i = num3 - 1; i >= 0; i += -1) {
num = num * 3 + (int) that2[i];
num2 = num2 * 5 + (int) that2[num3 - i - 1];
}
} else {
int i = num3 / 19;
for (int j = num3 - 1; j >= 0; j -= i) {
num = num * 5 + (int) that2[j];
num2 = num2 * 3 + (int) that2[num3 - j - 1];
}
}
int num4 = num ^ num2;
return (num4 & 16777215) ^ num4 >> 24;
}
private static String a(Object obj, Serializable s) {
Object _obj = s;
String text = obj.toString();
int num = text.length();
String text2 = _obj.toString();
int num2 = text2.length();
int num3 = num2 ^ num << 3;
int num4 = num;
if (num2 < 1) {
return text;
}
if (num < 1) {
return text2;
}
if (num2 > num4) {
num4 = num2;
}
char[] text_c2 = text2.toCharArray();
char[] text_c1 = text.toCharArray();
StringBuilder stringBuffer = new StringBuilder(num4);
int num5 = (int) text_c2[0];
int num6 = (int) text_c1[0];
int i = 0;
while (i < num4) {
if (num5 >= num) {
num5 = 0;
}
if (num6 >= num2) {
num6 = 0;
}
stringBuffer.append((char) (num3 ^ (int) text_c1[num5] ^ (int) text_c2[num6]));
i++;
num5++;
num6++;
}
return stringBuffer.toString();
}
private static String a(String str1, String str2) {
int num = str1.length();
int num2 = str2.length();
int num3 = num ^ num2 << 4;
if (num < 1) {
return str1;
}
if (num2 < 1) {
return str2;
}
int num4 = num;
if (num2 > num4) {
num4 = num2;
}
StringBuilder stringBuffer = new StringBuilder(num4);
char[] str_c1 = str1.toCharArray();
char[] str_c2 = str2.toCharArray();
for (int i = 0; i < num4; i++) {
StringBuilder arg_60_0 = stringBuffer;
int expr_37 = i;
int expr_3A = num;
char arg_5C_0 = str_c1[(expr_3A != -1) ? (expr_37 % expr_3A) : 0];
int expr_4A = i;
int expr_4D = num2;
arg_60_0.append((char) ((int) (arg_5C_0 ^ str_c2[(expr_4D != -1) ? (expr_4A % expr_4D) : 0] ^ num3)));
}
return stringBuffer.toString();
}
}
-
03.07.2012, 01:11 #5
- Registriert seit
- 09.11.2011
- Beiträge
- 121
Thanked 129 Times in 46 PostsPasswort-Kodierung v9.0anp
Nein, kommt das gleiche heraus wie bei dem C#-Code. Habe mich aber wohl geirrt, bei jd-gui sieht man das nicht, aber wenn man jad benutzt schon.
MfG
-
03.07.2012, 01:35 #6
- Registriert seit
- 01.07.2011
- Beiträge
- 103
Thanked 54 Times in 45 PostsPasswort-Kodierung v9.0anp
Funktionieren tut es aber definitiv ned. Hab mal probiert, das Original 90anp Applet auf BC zu nutzen. Connect findet erfolgreich statt, Das Passwort matched aber in keinster Weise.
-
04.07.2012, 01:33 #7
- Registriert seit
- 09.11.2011
- Beiträge
- 121
Thanked 129 Times in 46 PostsPasswort-Kodierung v9.0anp
PHP-Code:public static int HashPasswordANS(string password, string key)
{
string text = key;
object arg_1A3_1 = text;
object _ref = "OWluLAUErWm";
Serializable serializable;
serializable.__obj = _ref;
text = a(arg_1A3_1, serializable);
int num = text.Length / 3;
int expr_1B9 = num * 37;
int expr_1C1 = text.Length;
num = ((expr_1C1 != -1) ? (expr_1B9 % expr_1C1) : 0);
int expr_1D9 = (num ^ text.Length) + 19;
int expr_1E1 = text.Length;
num = ((expr_1E1 != -1) ? (expr_1D9 % expr_1E1) : 0);
if (num == 0)
{
num = text.Length / 2;
}
StringBuilder arg_2DB_0 = new StringBuilder();
object arg_2D6_1 = text.Substring(num);
_ref = "eO";
serializable.__obj = _ref;
text = arg_2DB_0.Append(a(arg_2D6_1, serializable)).Append(text.Substring(0, num)).ToString();
num = ((text.Length <= 0) ? 0 : (text.Length - 1));
int expr_235 = num;
int expr_23C = expr_235 * expr_235 + num + 20;
int expr_244 = text.Length;
num = ((expr_244 != -1) ? (expr_23C % expr_244) : 0);
text = new StringBuilder().Append(text).Append((char)(num + 48628)).ToString();
int num2 = ah(a(password, text));
return num2;
}
MfG
-
09.07.2012, 18:53 #8
- Registriert seit
- 09.11.2011
- Beiträge
- 121
Thanked 129 Times in 46 PostsPasswort-Kodierung v9.0anp
Ich denk mal nicht, dass ich das hier fortsetzen werde, kann ja vielleicht eine andere Person machen.
Hier habt ihr die Passwort-Kodierungen von anp bis anv (aktuell, 09.07.2012):
Private Paste - Pastie
MfG
-
29.07.2012, 17:30 #9
Passwort-Kodierung v9.0anp
Abend,
hat jemand die Kodierung schon soweit umgeschrieben, so das man nur den privaten Key ändern muss und nicht immer den kompletten Algorithmus?
Ähnliche Themen
-
Knuddels Passwort kodierung
Von MiBo im Forum Knuddels ProgrammierungAntworten: 0Letzter Beitrag: 05.02.2013, 15:47 -
Huffmann Kodierung / Komprimierung
Von Snees im Forum JavaAntworten: 2Letzter Beitrag: 25.01.2013, 17:56 -
[Java] Passwort-Kodierung v9.0alq
Von Flav im Forum SourcecodeAntworten: 0Letzter Beitrag: 09.04.2012, 00:57 -
[v9.0acb] Passwort-Kodierung
Von Flav im Forum SourcecodeAntworten: 8Letzter Beitrag: 29.05.2011, 23:30 -
Passwort von Karibikinsel
Von Rabbit im Forum Fragen & ProblemeAntworten: 13Letzter Beitrag: 20.02.2011, 01:44
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.