|
You last visited: Today at 14:38
Advertisement
[Hack-Competition] Make a Hack for my Program
Discussion on [Hack-Competition] Make a Hack for my Program within the General Coding forum part of the Coders Den category.
03/05/2011, 17:33
|
#91
|
elite*gold: 0
Join Date: Sep 2008
Posts: 189
Received Thanks: 183
|
einfach t-search (funktioniert), artmoney (billigprogramm funktioniert aber^^) benutzen!
beide programme werden nicht erkannt von deinem programm nur cheatengine wird erkannt^^ ... naja mit t-search adresse finden und dann kann man ganz easy pointer finden und nen hack draus machen ^^
|
|
|
03/05/2011, 18:20
|
#92
|
elite*gold: 0
Join Date: May 2010
Posts: 19
Received Thanks: 3
|
Na dann mach mal! Sowie ich das sehe ändern sich die Adressen iwie...
|
|
|
03/05/2011, 21:04
|
#93
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
Quote:
Originally Posted by Kaktusfresser
Na dann mach mal! Sowie ich das sehe ändern sich die Adressen iwie...
|
dann kann das höchstens an .NET liegen und selbst da müsste es irgendwo nen basepointer geben.
die adresse eines wertes kann sich nicht ändern, auch wenn es sich um einen pointer handelt, dann ist der eben nicht veränderbar.
irgendwo muss ja gespeichert sein, wo sich der wert befindet, also muss es irgendwo auch immer eine statische base geben.
Quote:
Ich möchte zur Sicherheit lieber nochmal fragen obs stimmt, wenn nein versuch ich nochmal ranzugehen:
Hast du den Rijndael-Algorithmus zum verschlüsseln der Value genutzt?
Wenn ja, dann kann man meiner Meinung nach nix tun, selbst wenn man die Adresse des Rijndael-verschlüsselten Strings findet. Ich hab mal gelesen, dass man bei einer Schlüssellänge von 128 bit ein paar Milliarden Jährchen zum Brute-Forcen bräuchte^^
|
lol wozu bitte BF? wenn die zahl verschlüsselt ist, muss der key und der iv auch irgendwo im code sein.
@Infinite:
Wie schon gesagt wurde, wie du die Zahl darstellst ist egal, im Speicher ists eh binär, von daher macht das keinen Unterschied.
Und nein, wenn du die Kommunikation zwischen Server und Client so beeinflussen kannst, dass der Server Dinge für dich tut, die eigentlich nicht möglich sein sollen, dann ist er schlecht programmiert.
Denn dann hört der Server in gewisser Maßen auf den Client und damit wäre es auch per CE möglich, denn das was gesendet wird, muss ja auch irgendwo im Speicher sein.
Sobald das ändern von Werten (ich betone das Ändern! Klar, doch mehrmaliges Senden von Packets kann man in manchen Spielen Shops usw. exploiten, aber das meine ich nicht) per CE keine sichtbare Veränderung für andere oder auf dem Server nach sich zieht, würde die gleiche Änderung per Packet genau so wenig bringen.
@TE:
wenn dich jemand auf einen fehler hinweist, solltest du das dankend annehmen und ihn nicht aus deinem thread verweisen, nur weil er einen fehler bei dir erkennt.
und disassemblieren ist nunmal nicht gleich decompilen!
|
|
|
03/06/2011, 00:19
|
#94
|
elite*gold: 405
Join Date: Dec 2007
Posts: 6,615
Received Thanks: 6,358
|
Quote:
Originally Posted by dj-torrent1
einfach t-search (funktioniert), artmoney (billigprogramm funktioniert aber^^) benutzen!
beide programme werden nicht erkannt von deinem programm nur cheatengine wird erkannt^^ ... naja mit t-search adresse finden und dann kann man ganz easy pointer finden und nen hack draus machen ^^
|
Eigentlich ist ein Schutz gegen die beiden drin, jedoch scheint er nicht so ganz zu funktionieren..
*Update* xd
Quote:
Originally Posted by MrSm!th
Disassemblieren ist nunmal nicht gleich decompilen!
|
Wenn er so ein Vollprofi ist, hätte er mir den Begriff ja auch einfach sagen können.
|
|
|
03/06/2011, 12:20
|
#95
|
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
|
CheatEngine-Protection Patch:
Code:
#include <windows.h>
BOOL PatchEnumChildWindows()
{
HMODULE user32Dll = GetModuleHandle( "User32.dll" );
if( user32Dll == NULL )
return FALSE;
BYTE* adrEnumChildWindows = ( BYTE* )( GetProcAddress( user32Dll, "EnumChildWindows" ) );
if( adrEnumChildWindows == NULL )
return FALSE;
DWORD dwOld = 0;
VirtualProtect( adrEnumChildWindows, 3, PAGE_EXECUTE_READWRITE, &dwOld );
adrEnumChildWindows[0] = 0xC2;
adrEnumChildWindows[1] = 0x10;
adrEnumChildWindows[2] = 0x00;
return TRUE;
}
DWORD WINAPI MainThread( LPVOID lpParam )
{
if( ! PatchEnumChildWindows() )
{
OutputDebugString( "PatchEnumChildWindows fehlgeschlagen" );
return 0;
}
OutputDebugString( "PatchEnumChildWindows erfolgreich" );
return 0;
}
BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved )
{
if( fdwReason == DLL_PROCESS_ATTACH )
{
if( CreateThread( NULL, 0, MainThread, NULL, 0, NULL ) != NULL )
OutputDebugString( "MainThread wurde erstellt" );
else
OutputDebugString( "MainThread wurde nicht erstellt" );
}
return TRUE;
}
Jetzt könnte man weiter mit CE arbeiten.
|
|
|
03/06/2011, 21:05
|
#96
|
elite*gold: 405
Join Date: Dec 2007
Posts: 6,615
Received Thanks: 6,358
|
Quote:
Originally Posted by xNopex
CheatEngine-Protection Patch:
Code:
#include <windows.h>
BOOL PatchEnumChildWindows()
{
HMODULE user32Dll = GetModuleHandle( "User32.dll" );
if( user32Dll == NULL )
return FALSE;
BYTE* adrEnumChildWindows = ( BYTE* )( GetProcAddress( user32Dll, "EnumChildWindows" ) );
if( adrEnumChildWindows == NULL )
return FALSE;
DWORD dwOld = 0;
VirtualProtect( adrEnumChildWindows, 3, PAGE_EXECUTE_READWRITE, &dwOld );
adrEnumChildWindows[0] = 0xC2;
adrEnumChildWindows[1] = 0x10;
adrEnumChildWindows[2] = 0x00;
return TRUE;
}
DWORD WINAPI MainThread( LPVOID lpParam )
{
if( ! PatchEnumChildWindows() )
{
OutputDebugString( "PatchEnumChildWindows fehlgeschlagen" );
return 0;
}
OutputDebugString( "PatchEnumChildWindows erfolgreich" );
return 0;
}
BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved )
{
if( fdwReason == DLL_PROCESS_ATTACH )
{
if( CreateThread( NULL, 0, MainThread, NULL, 0, NULL ) != NULL )
OutputDebugString( "MainThread wurde erstellt" );
else
OutputDebugString( "MainThread wurde nicht erstellt" );
}
return TRUE;
}
Jetzt könnte man weiter mit CE arbeiten.
|
Was bewirkt die "VirtualProtect" Funktion genau?
|
|
|
03/06/2011, 21:34
|
#97
|
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
|
MSDN:
Quote:
VirtualProtect Function
Changes the protection on a region of committed pages in the virtual address space of the calling process.
|
Sprich:
Dadurch erlaubt mir Windows, dass ich den Speicher, in dem der Programmcode liegt, verändern darf.
|
|
|
03/06/2011, 21:43
|
#98
|
elite*gold: 405
Join Date: Dec 2007
Posts: 6,615
Received Thanks: 6,358
|
Quote:
Originally Posted by xNopex
Sprich:
Dadurch erlaubt mir Windows, dass ich den Speicher, in dem der Programmcode liegt, verändern darf.
|
Änderst du damit Berechtigungen meines Programms, oder änderst du Speicher meines Programms, oder änderst du Speicher von Cheat Engine?
|
|
|
03/06/2011, 21:48
|
#99
|
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
|
Ich patche die "EnumChildWindows" - Funktion aus der user32.dll, die du wahrscheinlich importiert hast, um die Fenster durchzuenumerieren, um zu schauen, ob CE offen ist. Also verändere ich letztendlich den Speicher deines Programmes.
|
|
|
03/06/2011, 21:59
|
#100
|
elite*gold: 405
Join Date: Dec 2007
Posts: 6,615
Received Thanks: 6,358
|
Quote:
Originally Posted by xNopex
Ich patche die "EnumChildWindows" - Funktion aus der user32.dll, die du wahrscheinlich importiert hast, um die Fenster durchzuenumerieren, um zu schauen, ob CE offen ist. Also verändere ich letztendlich den Speicher deines Programmes.
|
*** "EnumChildWindows" wird verwendet 
Okay, ich verstehe nicht ganz, was "VirtualProtect" macht, und wie du den Rückgabewert irgendwie verändern kannst, aber ich probier mich mal dranzusetzen..
Ist das die Modifikation?:
Code:
adrEnumChildWindows[0] = 0xC2;
adrEnumChildWindows[1] = 0x10;
adrEnumChildWindows[2] = 0x00;
Bedeutet das, dass du die ersten 3 Rückgabebytes veränderst?
|
|
|
03/06/2011, 22:04
|
#101
|
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
|
Ich hole mir die Adresse der Funktion. Dann überschreibe ich das erste Byte der Funktion mit dem Opcode für den Return Befehl (=0xC2). Die nächsten zwei bytes (=Word) sind die Returnvalue und damit der Operandenteil. Die dürften beliebig wählbar sein, nur nicht 0, wenn ich jetzt nicht völlig falsch liege. Hab sie aus einem anderen Projekt einfach mal übernommen und getestet.
Ergebnis: Die EnumChildWindows - Funktion wird nach dem Call gleich wieder verlassen, ohne dass sie ausgeführt wurde. Damit failed deine Überprüfung und man kann CE wie gewohnt verwenden.
|
|
|
03/06/2011, 22:10
|
#102
|
elite*gold: 405
Join Date: Dec 2007
Posts: 6,615
Received Thanks: 6,358
|
Quote:
Originally Posted by xNopex
Ich hole mir die Adresse der Funktion. Dann überschreibe ich das erste Byte der Funktion mit dem Opcode für den Return Befehl (=0xC2). Die nächsten zwei bytes (=Word) sind die Returnvalue und damit der Operandenteil. Die dürften beliebig wählbar sein, nur nicht 0, wenn ich jetzt nicht völlig falsch liege. Hab sie aus einem anderen Projekt einfach mal übernommen und getestet.
Ergebnis: Die EnumChildWindows - Funktion wird nach dem Call gleich wieder verlassen, ohne dass sie ausgeführt wurde. Damit failed deine Überprüfung und man kann CE wie gewohnt verwenden.
|
 Kool >:|
Evil ^^
Aber ist dann ja leicht zu detecten..
|
|
|
03/06/2011, 22:13
|
#103
|
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
|
Wenn du mir erklären würdest, wie dein "Anti-Cheat" Zeug funktioniert, könnte ich es auch leicht "detecten"/aushebeln o,ô bzw. wenn du mir den src geben würdest... Ohne Möglichkeit zu debuggen ist das schon lustig gemeint...
|
|
|
03/06/2011, 22:24
|
#104
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
Quote:
Originally Posted by xNopex
Ich hole mir die Adresse der Funktion. Dann überschreibe ich das erste Byte der Funktion mit dem Opcode für den Return Befehl (=0xC2). Die nächsten zwei bytes (=Word) sind die Returnvalue und damit der Operandenteil. Die dürften beliebig wählbar sein, nur nicht 0, wenn ich jetzt nicht völlig falsch liege. Hab sie aus einem anderen Projekt einfach mal übernommen und getestet.
Ergebnis: Die EnumChildWindows - Funktion wird nach dem Call gleich wieder verlassen, ohne dass sie ausgeführt wurde. Damit failed deine Überprüfung und man kann CE wie gewohnt verwenden.
|
Nun, also eigentlich sind Operanden für return, wenn man sie denn angibt, nicht der Rückgabewert der Funktion, sondern die Anzahl an Bytes, um die der Stackpointer wieder zurückgeschaltet werden soll, also quasi die Freigabe von für die lokalen Variablen und Parameter alloziiertem Speicher.
Quote:
Originally Posted by Mi4uric3
 Kool >:|
Evil ^^
Aber ist dann ja leicht zu detecten..
|
Meinst du das Verändern der Funktion damit? Ja ist es, genau so leicht ist es aber auch, andere Varianten zu wählen.
Die Aufzählung von Prozessen und/oder Fenstern ist immer eine schlechte Methode zur Detection von Hacks!
|
|
|
03/06/2011, 22:41
|
#105
|
elite*gold: 405
Join Date: Dec 2007
Posts: 6,615
Received Thanks: 6,358
|
Quote:
Originally Posted by MrSm!th
Nun, also eigentlich sind Operanden für return, wenn man sie denn angibt, nicht der Rückgabewert der Funktion, sondern die Anzahl an Bytes, um die der Stackpointer wieder zurückgeschaltet werden soll, also quasi die Freigabe von für die lokalen Variablen und Parameter alloziiertem Speicher.
|
Ja dann muss ich nur die ersten Bytes dieser Funktion überprüfen..
Oder einfach gucken ob immer "0" dabei rauskommt..
Quote:
Originally Posted by MrSm!th
Meinst du das Verändern der Funktion damit? Ja ist es, genau so leicht ist es aber auch, andere Varianten zu wählen.
Die Aufzählung von Prozessen und/oder Fenstern ist immer eine schlechte Methode zur Detection von Hacks!
|
Ich arbeite mit der GetClassName-Funktion, damit kann man Programme leicht detecten, und das ist auch recht kompliziert (glaube ich.. oO) den Klassen-Namen zu verändern..
Aber du hast recht, da es scheinbar so einfach ist, Rückgabewerte zu manipulieren (0) ist die Methode im großen und ganzen schlecht.
Ich hab nur ein paar Idee(e)n (3 e?  )..
Aber dabei muss ich immer eine Prozessliste erstellen..
Wie soll ich sonst wissen, welche Prozesse laufen.. :/
Obwohl ich grad noch eine Idee bekomme, wie ich mein Programm schützen kann, ohne eine Prozessliste erstellen zu müssen..
Aber das hätte globale (PC weite) Auswirkungen.. :/
|
|
|
All times are GMT +1. The time now is 14:38.
|
|