|
You last visited: Today at 09:18
Advertisement
[C++ newbie] WinApi gui frage
Discussion on [C++ newbie] WinApi gui frage within the C/C++ forum part of the Coders Den category.
04/11/2009, 19:39
|
#1
|
elite*gold: 0
Join Date: Apr 2007
Posts: 156
Received Thanks: 22
|
[C++ newbie] WinApi gui frage
HI leute,
seit vorgestern habe ich angefangen mich fest mit c++ zu beschäftigen. Mein Ziel ist ein CHARM oder wie das heißt halt bei Multiplayern Models hervorheben. Beispiel wie man oft bei CS/S sieht Blaue oder Rote Models. Oder Aimbot. Aber ich hab an GTA:SA gedacht, weil man das sehr schnell starten kann. Und warum nicht für sa:mp aimbot?
Aber na klar muss man sich von unten nach oben durch arbeiten^^ fing ich mit Basics und memorys an. War schon mir schwer genug weil es kaum Tutorials für Memory read und writes gab. Naja zu mindest ohne Erklärung.. (copy & paste)
hier bis jetzt was ich tat aber per console
Code:
#include <windows.h>
#include <iostream>
using namespace std;
int hp1 = 500;
int mp1 = 500;
int tbuf;
int hp11;
int mp11;
void WriteMem(char* window, LPCVOID address, int value)
{
HWND hWnd = FindWindow(0, window);
DWORD proc_id;
GetWindowThreadProcessId(hWnd, &proc_id);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, proc_id);
BYTE newdata[]={value};
DWORD newdatasize = sizeof(newdata);
WriteProcessMemory(hProcess, (LPVOID)address, &newdata, newdatasize, 0);
CloseHandle(hProcess);
}
void ReadMem(char *window, LPCVOID dAddr)
{
HWND hWnd = FindWindow(0, window);
DWORD proc_id;
GetWindowThreadProcessId(hWnd, &proc_id);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, proc_id);
ReadProcessMemory(hProcess, dAddr, &tbuf, 4, NULL);
}
int main()
{
ReadMem("Little Fighter 2", (LPCVOID)0x01CDFCFC);
hp11 = tbuf;
ReadMem("Little Fighter 2", (LPCVOID)0x01CDFD08);
mp11 = tbuf;
cout<<"Player 1 current HP: ";
cout<<hp11;
hp1 = hp11;
cout<<"\n";
cout<<"Player 1 current MP: ";
cout<<mp11;
mp1 = mp11;
cout<<"\n\n";
while(1)
{
ReadMem("Little Fighter 2", (LPCVOID)0x01CDFCFC);
hp11 = tbuf;
ReadMem("Little Fighter 2", (LPCVOID)0x01CDFD08);
mp11 = tbuf;
if (hp1 != hp11 | mp1 != mp11 )
{
cout<<"Player 1 current HP: ";
cout<<hp11;
hp1 = hp11;
cout<<"\n";
cout<<"Player 1 current MP: ";
cout<<mp11;
mp1 = mp11;
cout<<"\n\n";
}
//WriteMem("Little Fighter 2",(LPCVOID)0x0044E4BC,900);
Sleep(1000);
}
}
Hier wird einfach von Little Fighter 2(Weil man wenig suchen muss  und beide charactere steuern kann) HP und MP gelesen und in console angezeigt. Falls es sich ändert wird neu angezeigt.
Aber jetzt wollte ich gerne ein Fenster, weil es schöner aussieht.
Code:
#define STRICT
#include <windows.h>
#include <iostream>
#include <cstring>
using namespace std;
int hp1 = 500;
int mp1 = 500;
int tbuf;
int hp11;
int mp11;
void WriteMem(char* window, LPCVOID address, int value)
{
HWND hWnd = FindWindow(0, window);
DWORD proc_id;
GetWindowThreadProcessId(hWnd, &proc_id);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, proc_id);
BYTE newdata[]={value};
DWORD newdatasize = sizeof(newdata);
WriteProcessMemory(hProcess, (LPVOID)address, &newdata, newdatasize, 0);
CloseHandle(hProcess);
}
void ReadMem(char *window, LPCVOID dAddr)
{
HWND hWnd = FindWindow(0, window);
DWORD proc_id;
GetWindowThreadProcessId(hWnd, &proc_id);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, proc_id);
ReadProcessMemory(hProcess, dAddr, &tbuf, 4, NULL);
}
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
const char szAppName[] = "Little Fighter 2";
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
MSG msg;
HWND hWnd;
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wc.lpszClassName = szAppName;
wc.lpszMenuName = NULL;
RegisterClass(&wc);
hWnd = CreateWindow( szAppName,
szAppName,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hWnd, iCmdShow);
UpdateWindow(hWnd);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hDC;
char szText[5];
hDC = BeginPaint(hWnd, &ps);
{
ReadMem("Little Fighter 2", (LPCVOID)0x01CDFCFC);
hp11 = tbuf;
ReadMem("Little Fighter 2", (LPCVOID)0x01CDFD08);
mp11 = tbuf;
sprintf(szText,"Player 1 current HP: %d",hp11);
//MessageBox(NULL, szText, "Ha, ha, ha, ha...", MB_ICONINFORMATION);
TextOut(hDC, 50, 50, szText, 25);
sprintf(szText2,"Player 1 current MP: %d",mp11);
TextOut(hDC, 50, 70, szText2, 25);
Sleep(10);
}
EndPaint(hWnd, &ps);
return 0;
}
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
Das habe ich gemacht. Aber ich weiß nicht wie ich jede sekunde text ändern kann. Also ich möchte nur wenn es neue werte findet dann dahin auch schreibt.
Beispiel Player 1 current HP: 500
er verliert dann und wert ist 400
Player 1 current HP: 400
Hab das bis jetzt nicht hingekriegt.. message box zeigt aber neue werte immer an.
EDIT: hmm komischerweise hab ich jetzt nur noch bugs. Console wird nicht angezeigt.
Und Player 1 current HP: 0 kommt immer 0 raus :S
|
|
|
04/11/2009, 19:50
|
#2
|
elite*gold: 15
Join Date: Nov 2005
Posts: 13,021
Received Thanks: 5,324
|
Quote:
Originally Posted by NixIs
HI leute,
seit vorgestern habe ich angefangen mich fest mit c++ zu beschäftigen. Mein Ziel ist ein CHARM oder wie das heißt halt bei Multiplayern Models hervorheben. Beispiel wie man oft bei CS/S sieht Blaue oder Rote Models. Oder Aimbot. Aber ich hab an GTA:SA gedacht, weil man das sehr schnell starten kann. Und warum nicht für sa:mp aimbot?
|
Du wirfst da gerad zwei paar Schuhe durcheinander.
Wallhacks bzw charms geht in richtung directx. Aimbot hat damit aber überhaupt gar nichts zu tun. Der wird mittels Vektoren gemacht.
Quote:
Originally Posted by NixIs
Aber na klar muss man sich von unten nach oben durch arbeiten^^ fing ich mit Basics und memorys an. War schon mir schwer genug weil es kaum Tutorials für Memory read und writes gab. Naja zu mindest ohne Erklärung.. (copy & paste)
|
Hab hier im Forum doch Tutorial gepostet wo auch C++ Code gepostet ist mit dem man den Speicher ausliest und schreibt. Alles mit Erklärung.
Und zu deinem WinApi Problem, ich frage mich ernsthaft, wieso du das per WinApi machst? Mittels WinApi ein Fenster aufbauen ist mitunter das nervigste was es gibt. Du musst da alles von Hand machen. Nimm doch lieber eine Libary o.Ä. dazu. So wie MFC oder GTK oder auch andere.
Bei MFC, z.B. musst du Updatedata(true) und Updatedata(false) benutzten, damit sich das fenster aktualisiert.
|
|
|
04/11/2009, 20:10
|
#3
|
elite*gold: 0
Join Date: Apr 2007
Posts: 156
Received Thanks: 22
|
Naja ich würd MFC benutzen aber jedes mal wenn ich build mache und ausführen will steht da bei Visual Basic C++ "Linkin" und bleib stehen.. ich muss mit Taskmanager immer beenden und dann geht das.. aber bei 2te mal hängst wieder so.
Ich hab daher dev++ benutzt.
Ich weiß das wallhack und so mit directx oder opgengl zu tun hat. Aber bis dahin brauch ich halt die Basics.
Daher hab ich ja nur geschrieben, dass es mein Ziel ist.
Ich finde deinen TUT nicht :S
EDIT: Doch jetzt hab ich es gefunden
|
|
|
04/11/2009, 20:24
|
#4
|
elite*gold: 15
Join Date: Nov 2005
Posts: 13,021
Received Thanks: 5,324
|
Also da steht bestimmt nicht Visual Basic C++ Linking xD Wenn das da steht, hast dir Visual Studio für Visal basic geladen und nicht für C++ ^^
Würd mal neu installieren 2005er Version oder 2008er Full nehmen. Wenn dann noch Probleme hast kannst dich ja melden.
Ja kann ja dein Ziel sein, was ich meinte ist aber das du schreibst das du halt Charms machen willst oder einen Wallhack. Und das sind einfach zwei paar verschiedene Sachen.
Wo du auch unterschiedliche Kenntnisse brauchst.
Also in dem Tut:  Ist der ganze Memory Read und Memory Write kack drin. Das meiste ist da drin auch erklärt. Im Coding Bereich ist auch noch ein General GameHacking Tutorial von BlackFrog mit C++ Code. Kannste dir auch mal anschauen.
|
|
|
04/14/2009, 16:11
|
#5
|
elite*gold: 0
Join Date: Apr 2007
Posts: 156
Received Thanks: 22
|
Hast mich nicht verstanden^^ Ich meinte Basics = Grundlagen. Allgemein wissen über C++
Ok. Thanks für Tipps. Ich hab jetzt mit MFC ein Trainer gemacht.
Nun gucke ich für Freezefunktion. Meine Theorie ist so.
Button angeklickt, while-schleife wiederholt writememory bis false.
Code:
void CL2Dlg::OnHPFreeze()
{
i = 1;
while(i)
{
WriteMemory((void*)0x01CDFCFC, (int)500);
Sleep(1);
}
}
void CL2Dlg::OnHPUnfreeze()
{
i = 0;
}
Aber dann hängt mein Trainer. Mit Sleep 1000 auch. Das Spiel läuft und HP wird auch gefreezed. Nur um mein Trainer zu beenden brauch ichi taskmanger.
|
|
|
04/14/2009, 16:27
|
#6
|
elite*gold: 15
Join Date: Nov 2005
Posts: 13,021
Received Thanks: 5,324
|
Joa ist klar, while(1) ist eine unendlich schleife. Das Freezen eines Wertes ist etwas kompliziert. Weil es keine Funktion gibt die den Wert freezen kann, also hast du schon gut erkannt, musst du ihn immer wieder überschreiben.
Wenn du bei der While Methode bleiben willst, musst du in die while noch eine if abfrage machen, ob eine Taste bzw Button betätigt wurde. Am einfachsten geht das, indem du einem Button ein funktion zuweist und dort eine boolvariable schreibst.
Sprich
Button -> Abbruch oder Ende oder so
PHP Code:
m_funktion_button_ende {
m_bEnde = 1;
}
Dann kannst du bei der if () eine abfrage machen ob m_bEnde == 1 ist. Wenn ja springst du zB mittels break aus der schleife. Wenn nicht, schreibst du den wert wieder in den speicher.
Eine Andere Möglichkeit wäre die funktion zu hooken die den wert schreibt. Du könntest auch mittels Code Injection den Code verändern.
Normal sollte die Funktion ja ungefähr so aussehen, das irgendwas in den register geschrieben wird und dann verringert. Theoretisch müsstest du dieses veringern ändern.
Musst dich mal schlau machen über code injections, wollte eh mal ein deutsches tut dazu posten, aber zur zeit keine lust :P
|
|
|
04/14/2009, 16:32
|
#7
|
elite*gold: 1
Join Date: Jul 2005
Posts: 553
Received Thanks: 454
|
Vielleicht auch wie folgt...
Entweder:
Code:
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)HPThread, NULL, 0, NULL);
DWORD HPThread(void)
{
loop:
while (bHPFreezed)
{
WriteMemory((void*)0x01CDFCFC, (int)500);
Sleep(1);
}
Sleep(200);
goto loop;
}
void CL2Dlg::OnHPFreeze()
{
bHPFreezed = TRUE;
}
void CL2Dlg::OnHPUnfreeze()
{
bHPFreezed = FALSE;
}
Oder:
Code:
void CL2Dlg::OnHPFreeze()
{
SetTimer(hWnd, 0, 1, NULL);
}
void CL2Dlg::OnHPUnfreeze()
{
KillTimer(hWnd, 0);
}
//In die Window-Routine:
case WM_TIMER:
WriteMemory((void*)0x01CDFCFC, (int)500);
break;
|
|
|
04/14/2009, 18:20
|
#8
|
elite*gold: 0
Join Date: Apr 2007
Posts: 156
Received Thanks: 22
|
@Adroxxx
also ich hab schon 2te Button der die whileschleife auflöst. Aber wenn mein Trainer hängt und ich nichts klicken kann ist ja arschkarte.
@link
Ich verstehe da nur bahnhof^^ wenn ich einfach so einfüge kommt da
undeclared identifier HPThread" usw.
bei 2ten findet er HWND nicht
//In die Window-Routine
wo ist das?
LÖSUNG:
PHP Code:
UINT hpfreeze( LPVOID Param )
{
i = TRUE;
while(i)
{
WriteMemory((void*)0x01BCFCFC,500);
WriteMemory((void*)0x01BCFD08,500);
Sleep(1);
}
return TRUE;
}
//button Freeze
void CL2Dlg::OnHPFreeze()
{
//wenn button geklickt und rest erklärt sich von selbst ;)
AfxBeginThread(hpfreeze,NULL,THREAD_PRIORITY_NORMAL,0,0,NULL);
//char szText[10];
//ReadMemory((void*)0x01CDFCFC);
//sprintf(szText,"%d",value);
//MessageBox(szText, "Error", MB_ICONERROR | MB_OK);
}
|
|
|
 |
Similar Threads
|
The question newbie want to ask.but lazy/shy to ask.Me newbie..T^T answer pls
04/24/2010 - EO PServer Hosting - 10 Replies
Question 1 : How to edit map to become a PK MAP/Non PK MAP
Question 2 : How to edit teleport NPC to make it teeleport at place we want
Question 3 : I use Mannequin Client/Database..when i login in the game i buy
eudemon and when i hatch it and evolve it..It will become GC 15*
how can i change it?????????
Question 4 : How can i change my server COMPOSE RATE
|
Maussimulation ohne Winapi?
04/27/2009 - Kal Online - 1 Replies
Hi,
Hat jemand von euch ne idee wie man ne Maussimulation ohne Winapi schreiben kann?.
(Möcht n bot zum pimpen von waffen machen da mir der normale weg echt zu stressig sit ;).
Nur as Problem ist dass Kal komplett mir alle bekannten Möglichkeiten sperrt.
Jemand ne idee was man noch benutzen könnte?
|
WinAPI use in C#
06/09/2008 - .NET Languages - 15 Replies
Hi,
in Anlehnung an die Topics hier habe ich mich dazu aufgerafft, nen Annotrainer zu schreiben (siehe Attachment).
In der Listview werden halt aktive Annoprozesse angezeigt, die man dann anwählen kann um dann mit dem Cheat button Geld zu cheaten. Jedes item in der Listview hat im item.Tag das jeweilige Prozessobject, somit auch die ID.
Allerdings komme ich mit den eigentlichen Funktionen OpenProcess, ReadProcessMemory und WirteProcessMemory in C# noch nicht klar. Zwar bekomme ich das...
|
WinAPI use in C#
05/19/2008 - .NET Languages - 0 Replies
Hi,
in Anlehnung an die Topics hier habe ich mich dazu aufgerafft, nen Annotrainer zu schreiben (siehe Attachment).
In der Listview werden halt aktive Annoprozesse angezeigt, die man dann anwählen kann um dann mit dem Cheat button Geld zu cheaten. Jedes item in der Listview hat im item.Tag das jeweilige Prozessobject, somit auch die ID.
Allerdings komme ich mit den eigentlichen Funktionen OpenProcess, ReadProcessMemory und WirteProcessMemory in C# noch nicht klar. Zwar bekomme ich das...
|
Newbie hat Frage ;P
07/05/2007 - General Coding - 7 Replies
Hoi ihrse ;)
Also ichhab mir zur Aufgabe gemacht ein kleines Programm zu schreiben. Und mir fehlt der Anfang dafür.
So werden wir mal genauer:
Ich möchte gerne ein Programm schreiben , was einen bestimmten Wert aus einem Onlinegame anzeigt. Ich erklärs mal genauer. In einem Egoshooter spielen 2 Partein gegeneinander und beide haben eine Spawnzeit. Ich möchte gern diese Spawnzeit auslesen und von einem Programm anzeigen lassen. Das Problem was ich dabei hab ist, dass ich ned weiß wie ich den...
|
All times are GMT +1. The time now is 09:20.
|
|