Beiträge von Twice
-
-
Ich finde das sehr schön.
Eine Sache wäre vielleicht, dass du alles in Deutsch schreibst. Mach das nicht. Maximal die Kommentare und eigentlich nicht mal die. Halt dich an internationale Standards und wenn deine Englischkenntnisse nicht ausreichen, solltest du nicht programmieren.MfG
-
Mir wurde in dieser Nacht langweilig, also kam ich auf diese Idee.
Ich weiß, dass es hier viele C# Programmierer gibt, also könnte das ganze vielleicht sogar einen Sinn gehabt haben:Code- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
- using System.Runtime.InteropServices;
- using System.Diagnostics;
- using System.IO;
- namespace External_CoD4_Radar
- {
- public partial class frmMain : Form
- {
- int m_ClientNum = 0;
- float[ ]m_ViewOrigin = new float[ 3 ];
- float[ ]m_ViewAngles = new float[ 3 ];
- float[ , ] m_PlayerOrigins = new float[ 64, 3 ];
- int[ ] m_PlayerAlives = new int[ 64 ];
- int[ ] m_PlayerTeams = new int[ 64 ];
- [DllImport( "kernel32.dll" )]
- public static extern IntPtr OpenProcess( UInt32 dwDesiredAccess, Int32 bInheritHandle, UInt32 dwProcessId );
- [DllImport( "kernel32.dll" )]
- public static extern Int32 CloseHandle( IntPtr hObject );
- [DllImport( "kernel32.dll" )]
- public static extern Int32 ReadProcessMemory( IntPtr hProcess, IntPtr lpBaseAddress, [In, Out] byte[ ] buffer, UInt32 size, out IntPtr lpNumberOfBytesRead );
- public enum ProcessAccessType
- {
- PROCESS_TERMINATE = ( 0x0001 ),
- PROCESS_CREATE_THREAD = ( 0x0002 ),
- PROCESS_SET_SESSIONID = ( 0x0004 ),
- PROCESS_VM_OPERATION = ( 0x0008 ),
- PROCESS_VM_READ = ( 0x0010 ),
- PROCESS_VM_WRITE = ( 0x0020 ),
- PROCESS_DUP_HANDLE = ( 0x0040 ),
- PROCESS_CREATE_PROCESS = ( 0x0080 ),
- PROCESS_SET_QUOTA = ( 0x0100 ),
- PROCESS_SET_INFORMATION = ( 0x0200 ),
- PROCESS_QUERY_INFORMATION = ( 0x0400 )
- }
- private Process m_GameProcess;
- private IntPtr m_ProcessHandle;
- private byte[ ] ReadMemoryAtAdress( IntPtr MemoryAddress, uint bytesToRead )
- {
- byte[ ] buffer = new byte[ bytesToRead ];
- IntPtr ptrBytesRead;
- ReadProcessMemory( m_ProcessHandle, MemoryAddress, buffer, bytesToRead, out ptrBytesRead );
- return buffer;
- }
- private int ReadInt( IntPtr addr )
- {
- byte[ ] rawData = ReadMemoryAtAdress( addr, 4 );
- MemoryStream memoryStream = new MemoryStream( rawData );
- BinaryReader binaryReader = new BinaryReader( memoryStream );
- int i = binaryReader.ReadInt32( );
- binaryReader.Close( );
- memoryStream.Close( );
- return i;
- }
- private float[ ] ReadVec3( IntPtr addr )
- {
- byte[ ] rawData = ReadMemoryAtAdress( addr, 12 );
- MemoryStream memoryStream = new MemoryStream( rawData );
- BinaryReader binaryReader = new BinaryReader( memoryStream );
- float[ ] vec3 = new float[ 3 ];
- vec3[ 0 ] = binaryReader.ReadSingle( );
- vec3[ 1 ] = binaryReader.ReadSingle( );
- vec3[ 2 ] = binaryReader.ReadSingle( );
- binaryReader.Close( );
- memoryStream.Close( );
- return vec3;
- }
- public frmMain( )
- {
- InitializeComponent( );
- }
- private void txtRange_TextChanged( object sender, EventArgs e )
- {
- int iValue = Convert.ToInt32( txtRange.Text );
- if ( iValue > 500 )
- iValue = 500;
- else if ( iValue < 0 )
- iValue = 0;
- trackbarRange.Value = iValue;
- txtRange.Text = Convert.ToString( iValue );
- }
- private void trackbarRange_Scroll( object sender, EventArgs e )
- {
- txtRange.Text = Convert.ToString( trackbarRange.Value );
- }
- private void txtRange_KeyPress( object sender, KeyPressEventArgs e )
- {
- if ( !System.Text.RegularExpressions.Regex.IsMatch( e.KeyChar.ToString( ), "\\d+" ) )
- e.Handled = true;
- }
- private void frmMain_Load( object sender, EventArgs e )
- {
- m_GameProcess = new Process( );
- m_ProcessHandle = IntPtr.Zero;
- tmrRefreshProcess.Enabled = true;
- }
- private void tmrRefreshProcess_Tick( object sender, EventArgs e )
- {
- Process[ ] gameProcesses = Process.GetProcessesByName( "iw3mp" );
- if ( gameProcesses.Length > 0 )
- {
- if ( m_ProcessHandle.ToInt32( ) == 0 )
- {
- m_GameProcess = gameProcesses[ 0 ];
- txtProcessInfo_Name.Text = m_GameProcess.ProcessName;
- ProcessAccessType accessType = ProcessAccessType.PROCESS_VM_READ | ProcessAccessType.PROCESS_VM_WRITE | ProcessAccessType.PROCESS_VM_OPERATION;
- m_ProcessHandle = OpenProcess( ( uint )accessType, 1, ( uint )m_GameProcess.Id );
- if ( m_ProcessHandle.ToInt32( ) != 0 )
- tmrRefreshRadar.Enabled = true;
- }
- }
- else
- {
- txtProcessInfo_Name.Text = "CoD4 not started";
- tmrRefreshRadar.Enabled = false;
- m_ProcessHandle = IntPtr.Zero;
- }
- }
- bool IsFriend( int clientNum )
- {
- if ( m_PlayerTeams[ m_ClientNum ] > 0 )
- return ( m_PlayerTeams[ m_ClientNum ] == m_PlayerTeams[ clientNum ] );
- else
- return false;
- }
- Point CalcRadarPoint( int clientNum )
- {
- // .Net doesn't provide cool math. :-(
- // We've to do it all ourselves.
- float[ ] clientPos = new float[ 3 ];
- clientPos[ 0 ] = m_PlayerOrigins[ clientNum, 0 ];
- clientPos[ 1 ] = m_PlayerOrigins[ clientNum, 1 ];
- clientPos[ 2 ] = m_PlayerOrigins[ clientNum, 2 ];
- float[ ] delta = new float[ 3 ];
- delta[ 0 ] = clientPos[ 0 ] - m_ViewOrigin[ 0 ];
- delta[ 1 ] = clientPos[ 1 ] - m_ViewOrigin[ 1 ];
- delta[ 2 ] = clientPos[ 2 ] - m_ViewOrigin[ 2 ];
- float distance = ( float )Math.Sqrt( delta[ 0 ] * delta[ 0 ] + delta[ 1 ] * delta[ 1 ] + delta[ 2 ] * delta[ 2 ] );
- float angle = ( float )( Math.Atan2( delta[ 1 ], delta[ 0 ] ) * 180.0f / Math.PI );
- angle = angle - m_ViewAngles[ 1 ] - 90;
- float range = Convert.ToSingle( txtRange.Text ) * 10.0f;
- Point result = new Point( );
- result.X = ( int )( picRadar.Width / 2 + ( Math.Cos( ( 90 + ( 90 - angle ) ) * Math.PI / 180.0f ) * ( distance / range * picRadar.Width / 2 ) ) );
- result.Y = ( int )( picRadar.Height / 2 + ( Math.Sin( angle * Math.PI / 180.0f ) * ( distance / range * picRadar.Height / 2 ) ) );
- return result;
- }
- private void tmrRefreshRadar_Tick( object sender, EventArgs e )
- {
- Bitmap bmp = new Bitmap( picRadar.Width, picRadar.Height );
- for ( int x = 0; x < bmp.Width; x++ )
- {
- for ( int y = 0; y < bmp.Height; y++ )
- {
- if ( x == bmp.Width / 2 || y == bmp.Height / 2 )
- bmp.SetPixel( x, y, Color.White );
- else
- bmp.SetPixel( x, y, Color.Gray );
- }
- }
- m_ClientNum = ReadInt( new IntPtr( 0x0074E338 ) );
- m_ViewOrigin = ReadVec3( new IntPtr( 0x00797618 ) );
- m_ViewAngles = ReadVec3( new IntPtr( 0x0079B698 ) );
- Graphics graphic = Graphics.FromImage( bmp );
- for ( int i = 0; i < 64; i++ )
- {
- float[ ] origin = ReadVec3( new IntPtr( 0x0084F2D8 + i * 476 + 28 ) );
- m_PlayerOrigins[ i, 0 ] = origin[ 0 ];
- m_PlayerOrigins[ i, 1 ] = origin[ 1 ];
- m_PlayerOrigins[ i, 2 ] = origin[ 2 ];
- m_PlayerAlives[ i ] = ReadInt( new IntPtr( 0x0084F2D8 + i * 476 + 448 ) );
- m_PlayerTeams[ i ] = ReadInt( new IntPtr( 0x00839270 + i * 1228 + 28 ) );
- // Draw the radar in the same loop, the infos are gathered.
- if ( m_ClientNum == i )
- continue;
- if ( m_PlayerAlives[ i ] == 0 )
- continue;
- Point radarPoint = CalcRadarPoint( i );
- if ( radarPoint.X <= 0 || radarPoint.Y <= 0 || radarPoint.X >= picRadar.Width || radarPoint.Y >= picRadar.Height )
- continue;
- Color color = ( IsFriend( i ) ) ? Color.Blue : Color.Red;
- // graphic.FillRectangle( new SolidBrush( color ), new Rectangle( radarPoint.X - 2, radarPoint.Y - 2, 4, 4 ) );
- graphic.DrawRectangle( new Pen( new SolidBrush( color ) ), new Rectangle( radarPoint.X - 3, radarPoint.Y - 3, 6, 6 ) );
- }
- picRadar.Image = bmp;
- }
- }
- }
Ich weiß das ganze ist unperformant und mit sicherheit grottig geschrieben, aber ich bin auch mit dem .Net Framework nicht so dicke.
MfG
-
-
Ich rate dir von x22 ab. Das ist nur einer der populärsten Hacks.
Ich empfehle dir den Royal-Hack.Kommt aber auch darauf an, was du von dem Cheat erwartest? Nur einen guten Aimbot, oder auch hübsche Visuals?
Wer bei Bot vs. Bot zuerst getroffen und somit gekillt wird, kommt nämlich zum größten Teil auf deine Ping und auch auf deine Config an. Die Aimbots sind was Präzision angeht nämlich ziemlich gleich und Perfect NoSpread + NoRecoil hat sowieso jeder Pay-Hack. -
Indem du Wildcards benutzt?
-
Nochmal, du hast 16 Bits, die den Port angeben. Du gibst aber nur Bytes (8 Bits) aus. Deswegen shiftest du die 61 8 Bits nach links und addierst die 163 drauf:
WORD port = 61 << 8 + 163; // Das ist 15779.
Andersrum geht das so:
BYTE high = port >> 8;
BYTE low = port - ( high << 8 );MfG
PS: Mir stellt sich natürlich die Frage, warum du nicht direkt die sockaddr_in struktur nimmst.
-
Es steht doch schon in deiner struct, dass das ein WORD ist.
*( WORD* )&your_byte_array_or_whatevery[ 2 ] = 1337; // Or what port you'd like.
MfG
-
dwFindPattern sucht dir einfach ein Muster im aktiven Prozess. Ich habe die Funktion das erste mal von P47R!CK gesehen und der hat damals eben noch die ungarische Notation auch bei Funktionen verwendet. Deswegen der "dw"-Präfix für DWORD. Das ist aber C++ und hilft dir somit nicht.
In C# nimmst du am besten ReadProcessMemory aus der WinAPI und ließt das entsprechende Modul komplett ein. Die größe + BaseAddress kriegt du mit .Net glaube ich schon raus.
Danach das Muster zu suchen, sollte kein Problem sein.MfG
-
kann mir jemand verraten wie das lied heißt ?
-
Noch eine andere Detour-Methode: Hardware-Breakpoints
EInige werden die von Olly und anderen Debuggern schon kennen und werden wissen, dass es nur 4 pro Thread geben kann und man sie auch für jeden Thread setzen muss, in den man hooken möchte. Meistens reicht der Main-Thread.
Der große Vorteil ist, dass nichts an der .text Section geändert wird. Trotzdem ist ein weiterer Hook von GetThreadContext sinnvoll, um Erkennungen zu vermeiden.Code- void* CreateCodeCave( void* lpOldFunc, void* FUCK_YOU_FAGGOT_MICROSOFT_LINKER, int nSize )
- {
- BYTE* lpOpcodes = new BYTE[ nSize + 5 ];
- DWORD dwOpDist = ( DWORD )lpOldFunc - ( DWORD )lpOpcodes - 5;
- DWORD dwOld;
- VirtualProtect( lpOpcodes, nSize + 5, PAGE_EXECUTE_READWRITE, &dwOld );
- memcpy( lpOpcodes, lpOldFunc, nSize );
- lpOpcodes[ nSize ] = 0xE9;
- memcpy( &lpOpcodes[ nSize + 1 ], &dwOpDist, 4 );
- return lpOpcodes;
- }
- HANDLE hThread = OpenThread( THREAD_ALL_ACCESS, FALSE, *( DWORD* )0x7EFDB048 );
- CONTEXT ctx = { CONTEXT_DEBUG_REGISTERS };
- GetThreadContext( hThread, &ctx );
- g_dwHookAddr = ( DWORD )GetProcAddress( GetModuleHandle( "user32.dll" ), "MessageBoxA" );
- g_dwHookMy = ( DWORD )my_MessageBoxA;
- g_dwHookOrig = ( DWORD )CreateCodeCave( ( void* )g_dwHookAddr, NULL, 5 );
- /*char buf[ 256 ];
- sprintf( buf, "HookOrig: 0x%p", g_dwHookOrig );
- MessageBox( 0, buf, 0, 0 );*/
- ctx.Dr0 = g_dwHookAddr;
- ctx.Dr7 = 0x00000001;
- SetThreadContext( hThread, &ctx );
- CloseHandle( hThread );
- AddVectoredExceptionHandler( TRUE, HWBP_ExceptionHandler );
Den g_dwHook Mist solltet ihr natürlich ersetzen und die Adresse bei OpenThread findet ihr, wenn ihr nach der ThreadID in CheatEngine + Olly sucht.
Die anderen 3 Breakpoints kann man durch setzen der Bits 2, 4, 6 (von 0 angefangen) und der Register Dr0 - Dr3 aktivieren.Das nächste Stück Code ist der Exception-Handler, der die originale Funktion aufruft:
Code- LONG WINAPI HWBP_ExceptionHandler( EXCEPTION_POINTERS* ExceptionInfo )
- {
- if ( ExceptionInfo->ExceptionRecord->ExceptionCode == EXCEPTION_SINGLE_STEP )
- {
- if ( ExceptionInfo->ExceptionRecord->ExceptionAddress == ( void* )g_dwHookAddr )
- {
- // Set new EIP to return address.
- ExceptionInfo->ContextRecord->Eip = *( DWORD* )ExceptionInfo->ContextRecord->Esp;
- UINTuType= *( UINT* )( ExceptionInfo->ContextRecord->Esp + 4 );
- LPCSTRlpCaption= *( LPCSTR* )( ExceptionInfo->ContextRecord->Esp + 8 );
- LPCSTRlpText= *( LPCSTR* )( ExceptionInfo->ContextRecord->Esp + 12 );
- HWNDhWnd= *( HWND* )( ExceptionInfo->ContextRecord->Esp + 16 );
- my_MessageBoxA( hWnd, lpText, lpCaption, uType );
- return EXCEPTION_CONTINUE_EXECUTION;
- }
- }
- return EXCEPTION_CONTINUE_SEARCH;
- }
Wie man sehen kann, werden die argumente vom Stack geholt. Aufpassen, welche Calling-Convention ihr habt! Das EIP-Register wird dann auf die Rücksprung-Adresse gesetzt.Die Hooked-Function:
Viel Spaß, wenn ihr es benutzt, oder ich euch damit helfen konnte.
Credits: Ich weiß es nicht mehr. Der Code stammt zu 100% von mir, aber die Idee nicht. Wer die Idee zuerst hatte, ist eine gleiche Frage, wie die Frage nach dem Menschen, der das Feuer erfunden hat.
MfG
PS: Entschuldigt das wirre Zeug (Code + Erklärung). Ich befinde mich zur Zeit in einem Zustand geistiger Diffusion könnte man fast sagen. Und je mehr ich schreibe und mich auf eine Stelle konzentriere, desto schlimmer wird es.
-
-
Herzlichen Glückwunsch
MfG
-
Sieht sehr gut aus und funktioniert anscheinend auch genau so super.
Tolle Arbeit!MfG
-
Hallo,
nach 6 Wochen Arbeit minus 2 Wochen Urlaub, also eigentlich 4 Wochen Arbeit, kann ich ein Ergebnis vorzeigen.
Es handelt sich um einen CoD4 Multihack mit Aimbot, ESP und sonstigen Features.
Screenshots der Entwicklung kann man in meiner Galerie sehen.Aimbot-Feautres:
- aim_enabled: Aktiviert oder Deaktiviert alle Features.
- aim_toggle: Taste zum An- oder Ausschalten (Virtual KeyCodes).
- aim_selmode: 3D oder Nähe-Zum-Crosshair Methode um das Ziel auszuwählen.
- aim_zoom: AutoZoom und Only-Shoot-When-Zoomed.
- aim_autoshoot: Schießen, sobald das Ziel erfasst wurde.
- aim_silent: Zielen, ohne die Blickwinkel zu verlieren.
- aim_autowall: Automatisch durch Wände schießen.
- aim_delay: Warten, bevor das Ziel aufgeschaltet wird.
- aim_shootdelay: Warten, bevor geschossen wird.
- aim_prediction: Vorhersage der Zielposition
- aim_vecz: Höher zielen, um den Kopf besser zu treffen.
- aim_triggerbot: Abdrücken, sobald ein Ziel im Crosshair ist.
ESP-Features:
- esp_enabled: Aktiviert oder Deaktiviert alle Features.
- esp_box: Zeichnet eine 2D Box um den Spieler.
- esp_name: Zeigt den Namen des Spielers.
- esp_weapon: Zeigt den Waffennamen, oder Icon auf dem Spieler.
- esp_rank: Zeigt den Ragnamen, oder Icon auf dem Spieler.
- esp_class: Zeigt den Namen der Klasse auf dem Spieler.
- esp_distance: Zeigt die Distanz zum Spieler.
- esp_explosives: Zeigt alle Explosiven Gegenstände.
- esp_helicopter: Zeichnet eine 2D Box um den Helikopter.
Radar-Features:
- rdr_enabled: Aktiviert oder Deaktiviert alle Features.
- rdr_normalradar: Zeigt das bekannte Radar-Rechteck und die Rot/Blauen Punkte
- rdr_roundradar: Zeichnet Zeiger zu den Gegnern um das Crosshair
Misc-Features:
- msc_enabled: Aktiviert oder Deaktiviert alle Features.
- msc_namechange: Wechselt alle X Sekunden den Namen zu einem Mitspieler.
- msc_stats: Zeigt die eigenen Stats.
- msc_killmessages: Schreibt Nachrichten in den Chat, wenn man jemanden killt.
- msc_weaponhud: Zeigt Infos über die aktuelle Waffe.
- msc_crosshair: Zeichnet ein eigenes Crosshair
"Undeactivatable"-Features:
- NoRecoil
- NoViewKick (Bei DamageFeedBack)
Nachwort:
Das beeindruckenste an diesem Public Hack ist wohl das AutoWall Feature, was erstaunlich gut funktioniert und sonst nur in Private-Hacks zu finden ist. Ich denke, aber nicht, dass sich dieser Hack weit genug verbreiten wird, als dass es ein Problem wäre.
Wenn man den Namechanger aktiviert hat, funktionieren die Killmessages nicht richtig.
Die Box des Helikopters sollte sich drehen.
Die Prediction ist recht schlecht.
Stellt das AutoWall Feature auf 20 und das Shootdelay, auf 150. Wenn ihr mit Hackern spielt, dann beides auf 1.
Der Wert der Prediction sollte irgendwo zwischen 5 und 8 liegen und der VecZ bei 30.MfG
EDIT\\ Natürlich nicht PB-Proof
-
Du machst schon den ersten Fehler, nämlich deine Sprache in Zwei zu spalten.
Konsole und die tollen Fenster sind nicht zwei Welten und wenn du dich mit der Sprache beschäftigst, wirst du nach einiger Zeit herausfinden, was dahinter steckt und dann ist alles gleich. Das entwickelt sich aber erst mit der Zeit und noch einiges an Wissen über die Architektur des PCs und der Sprache, die du lernst.
Deswegen rate ich dir: Mach den Konsolenkram fertig und begebe dich dann zu den größeren Sachen, sonst wirst du enttäuscht sein.
An dieser Stelle kann ich aber mal folgende Erfahrung mitteilen: Ich halte es für falsch eine Sprache explizit lernen zu wollen. Das heißt, es wird nichts draus, wenn man sich ein Buch nimmt, dieses durcharbeitet und die Sprache dann kann (was durchaus möglich ist), denn dir vergeht sehr schnell die Lust an dem Zeug, was da geschrieben wurde. Deswegen rate ich dir zu implizitem Lernen, also zum ausprobieren und selber beibringen). Der Nachteil dabei ist aber, dass du Systeme und Lösungen gar nicht mitbekommst, weil du sie nie gebraucht hast und noch nicht mal weißt, dass es sie gibt.MfG
-
Es gibt in der C-Library die Funktionen toupper und tolower.
MfG
-
Die Fehlermeldung sagt dir doch, was falsch ist.
Sind deine Projekteinstellungen richtig?MfG
-
Probier mal bitte meinen und sag mir, ob 's geht.
MfG
-
Welchen Injector benutzt du?
MfG