Hallo Leute, bin neu hier. ^^
Da ich C++ nur sehr schlecht beherrsche und Visual Basic dafür besser kann, wollte ich eine kleine Funktion von C++ nach VB 2005 umschreiben, damit ich mit ihr besser arbeiten kann. Das hab ich auch getan, allerdings bekomme ich immer einen Überlauf.
Zuerstmal, was die Funktion machen soll: Sie soll einen verschlüsselten hexadezimalen "Code" entschlüsseln. Beispiel:
Verschlüsselt:
address: 0xD935946C
value: 0xD758DF54
Nach dem Entschlüsseln:
address: 0x04225E98
value: 0x00630001
Das funktioniert ja auch, allerdings nur beim C++ Code. Die selbe Funktion bricht in VB 2005 mit einem Überlauf ab.
Hier die Funktion in C++ (bei der keine Fehler auftreten):
Angezeigt werden "address" und "value" übrigens am Ende in Dezimal. In Hexadezimal rechne ich die noch um.
Umgeschrieben in VB 2005:
Was hab ich falsch gemacht? Ist es überhaupt möglich diese Funktion fehlerfrei nach VB 2005 umzuschreiben?
Da ich C++ nur sehr schlecht beherrsche und Visual Basic dafür besser kann, wollte ich eine kleine Funktion von C++ nach VB 2005 umschreiben, damit ich mit ihr besser arbeiten kann. Das hab ich auch getan, allerdings bekomme ich immer einen Überlauf.
Zuerstmal, was die Funktion machen soll: Sie soll einen verschlüsselten hexadezimalen "Code" entschlüsseln. Beispiel:
Verschlüsselt:
address: 0xD935946C
value: 0xD758DF54
Nach dem Entschlüsseln:
address: 0x04225E98
value: 0x00630001
Das funktioniert ja auch, allerdings nur beim C++ Code. Die selbe Funktion bricht in VB 2005 mit einem Überlauf ab.
Hier die Funktion in C++ (bei der keine Fehler auftreten):
Code:
void DecryptGSACode(unsigned int address, unsigned int value)
{
unsigned int rollingseed = 0xC6EF3720;
unsigned int seeds_v1[] = { 0x09F4FBBD, 0x9681884A, 0x352027E9, 0xF3DEE5A7 };
unsigned int seeds_v3[] = { 0x7AA9648F, 0x7FAE6994, 0xC0EFAAD5, 0x42712C57 };
unsigned int *seeds = seeds_v3;
int bitsleft = 32;
while (bitsleft > 0) {
value -= ((((address << 4) + seeds[2]) ^ (address + rollingseed)) ^
((address >> 5) + seeds[3]));
address -= ((((value << 4) + seeds[0]) ^ (value + rollingseed)) ^
((value >> 5) + seeds[1]));
rollingseed -= 0x9E3779B9;
bitsleft--;
}
textBox1->Text = Convert::ToString(address);
textBox2->Text = Convert::ToString(value);
}
Umgeschrieben in VB 2005:
Code:
Private Function DecryptGSACode(ByVal address As ULong, ByVal value As ULong)
Dim rollingseed As ULong
Dim seeds0 As ULong
Dim seeds1 As ULong
Dim seeds2 As ULong
Dim seeds3 As ULong
Dim bitsleft As Integer
rollingseed = 3337565984 'Nimmt den Wert in Hexadezimaler Form nicht an, daher Dezimal.
seeds0 = &H7AA9648F
seeds1 = &H7FAE6994
seeds2 = 3236932309 'Siehe Kommentar oben
seeds3 = &H42712C57
bitsleft = 32
While bitsleft > 0
value -= ((((address << 4) + seeds2) Xor (address + rollingseed)) Xor _
((address >> 5) + seeds3))
address -= ((((value << 4) + seeds0) Xor (value + rollingseed)) Xor _
((value >> 5) + seeds1))
rollingseed -= &H9E3779B9
bitsleft = bitsleft - 1
End While
TextBox1.Text = address
TextBox2.Text = value
End Function
Was hab ich falsch gemacht? Ist es überhaupt möglich diese Funktion fehlerfrei nach VB 2005 umzuschreiben?
Zuletzt bearbeitet: