Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 20:48

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Mit Olly reversen und in C++ Hooken

Discussion on Mit Olly reversen und in C++ Hooken within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Nov 2011
Posts: 83
Received Thanks: 22
Question Mit Olly reversen und in C++ Hooken

Guten Tag Gemeinde
Ich hoffe der Titel is einigermaßen io, mir is einfach nichts besseres eingefallen ^^

Wie ich ja schon in einem anderen Thread beschrieben habe möchte ich Tastenanschläge an das Spiel DAOC senden, jedoch werden die Funktionen (Send- & Postmessage und co) geblockt, bzw die Virtuellen Inputs.

Headpuster gab mir diesen Hinweis, bzw diese Hilfe:
Quote:
Block Funktion mit OllyDBG reversen (z.B. mit einem VB-Programm einen virtuellen Input senden, dann in den Stack schauen, was gerade gepusht wird und dann die Function bis zum Urpsrung verfolgen), dann in C++ hooken (z.B. mit Detours, HWBPs oder what ever) und am Ende statt dem Pointer "ERROR_SUCCESS" returnen und die Funktion sollte ausgehebelt sein.
Ich dachte mir ich mach mal n neuen Thread auf, da es ja jetzt in den Bereich C/C++ geht und nicht mehr .Net.
Ich bin kein 100%iger neuling in C++, aber würde mich gerne damit näher beschäftigen.

Kennt ihr vllt zum oben gesagten n paar Tuts oder könnt ihr das vllt n bissl näher erklären, bzw beschreiben?

Ich bedanke mich schonmal für eure Hilfe

gruß,
Dominic
dominic.e is offline  
Old 12/07/2011, 22:02   #2


 
MrSm!th's Avatar
 
elite*gold: 47110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,379
Quote:
Block Funktion mit OllyDBG reversen (z.B. mit einem VB-Programm einen virtuellen Input senden, dann in den Stack schauen, was gerade gepusht wird und dann die Function bis zum Urpsrung verfolgen), dann in C++ hooken (z.B. mit Detours, HWBPs oder what ever) und am Ende statt dem Pointer "ERROR_SUCCESS" returnen und die Funktion sollte ausgehebelt sein
Das ist ziemlicher Blödsinn.

Das wird einfach oft realisiert, indem Funktionen wie PostMessage gehookt und geblockt werden. Du müsstest also einen Hook entfernen.

Außerdem ergibt die Vorgehensweise nichtmal Sinn o.ô
MrSm!th is offline  
Thanks
1 User
Old 12/07/2011, 22:24   #3
 
elite*gold: 0
Join Date: Nov 2011
Posts: 83
Received Thanks: 22
Ääähm ... ja was is dann die bessere loesung, bzw wie/was wuerdet ihr empfehlen wie ich jetzt weiter vorgehen soll in dem fall?

wie schon gesagt versuch ich ja tastenanschlaege an daoc zu senden, wie im endeffekt is eig egal

gruss und danke @mr smith fuer die info ^^
dominic.e is offline  
Old 12/07/2011, 23:05   #4
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 735
schonmal sendinput mit directinput scan codes ausprobiert?
ansonsten wirste den hook entfernen müssen, oder direkt die funktionen callen mit ner dll.

(c++)
Code:
#pragma once


#define DIKEYBOARD_ESCAPE 0x0401 //
#define DIKEYBOARD_1 0x0402 //
#define DIKEYBOARD_2 0x0403 //
#define DIKEYBOARD_3 0x0404 //
#define DIKEYBOARD_4 0x0405 //
#define DIKEYBOARD_5 0x0406 //
#define DIKEYBOARD_6 0x0407 //
#define DIKEYBOARD_7 0x0408 //
#define DIKEYBOARD_8 0x0409 //
#define DIKEYBOARD_9 0x040A //
#define DIKEYBOARD_0 0x040B //
#define DIKEYBOARD_MINUS 0x040C // (* - on main keyboard *)
#define DIKEYBOARD_EQUALS 0x040D //
#define DIKEYBOARD_BACK 0x040E // (* backspace *)
#define DIKEYBOARD_TAB 0x040F //
#define DIKEYBOARD_Q 0x0410 //
#define DIKEYBOARD_W 0x0411 //
#define DIKEYBOARD_E 0x0412 //
#define DIKEYBOARD_R 0x0413 //
#define DIKEYBOARD_T 0x0414 //
#define DIKEYBOARD_Y 0x0415 //
#define DIKEYBOARD_U 0x0416 //
#define DIKEYBOARD_I 0x0417 //
#define DIKEYBOARD_O 0x0418 //
#define DIKEYBOARD_P 0x0419 //
#define DIKEYBOARD_LBRACKET 0x041A //
#define DIKEYBOARD_RBRACKET 0x041B //
#define DIKEYBOARD_RETURN 0x041C // (* Enter on main keyboard *)
#define DIKEYBOARD_LCONTROL 0x041D //
#define DIKEYBOARD_A 0x041E //
#define DIKEYBOARD_S 0x041F //
#define DIKEYBOARD_D 0x0420 //
#define DIKEYBOARD_F 0x0421 //
#define DIKEYBOARD_G 0x0422 //
#define DIKEYBOARD_H 0x0423 //
#define DIKEYBOARD_J 0x0424 //
#define DIKEYBOARD_K 0x0425 //
#define DIKEYBOARD_L 0x0426 //
#define DIKEYBOARD_SEMICOLON 0x0427 //
#define DIKEYBOARD_APOSTROPHE 0x0428 //
#define DIKEYBOARD_GRAVE 0x0429 // (* accent grave *)
#define DIKEYBOARD_LSHIFT 0x042A //
#define DIKEYBOARD_BACKSLASH 0x042B //
#define DIKEYBOARD_Z 0x042C //
#define DIKEYBOARD_X 0x042D //
#define DIKEYBOARD_C 0x042E //
#define DIKEYBOARD_V 0x042F //
#define DIKEYBOARD_B 0x0430 //
#define DIKEYBOARD_N 0x0431 //
#define DIKEYBOARD_M 0x0432 //
#define DIKEYBOARD_COMMA 0x0433 //
#define DIKEYBOARD_PERIOD 0x0434 // (* . on main keyboard *)
#define DIKEYBOARD_SLASH 0x0435 // (* / on main keyboard *)
#define DIKEYBOARD_RSHIFT 0x0436 //
#define DIKEYBOARD_MULTIPLY 0x0437 // (* * on numeric keypad *)
#define DIKEYBOARD_LMENU 0x0438 // (* left Alt *)
#define DIKEYBOARD_SPACE 0x0439 //
#define DIKEYBOARD_CAPITAL 0x043A //
#define DIKEYBOARD_F1 0x043B //
#define DIKEYBOARD_F2 0x043C //
#define DIKEYBOARD_F3 0x043D //
#define DIKEYBOARD_F4 0x043E //
#define DIKEYBOARD_F5 0x043F //
#define DIKEYBOARD_F6 0x0440 //
#define DIKEYBOARD_F7 0x0441 //
#define DIKEYBOARD_F8 0x0442 //
#define DIKEYBOARD_F9 0x0443 //
#define DIKEYBOARD_F10 0x0444 //
#define DIKEYBOARD_NUMLOCK 0x0445 //
#define DIKEYBOARD_SCROLL 0x0446 // (* Scroll Lock *)
#define DIKEYBOARD_NUMPAD7 0x0447 //
#define DIKEYBOARD_NUMPAD8 0x0448 //
#define DIKEYBOARD_NUMPAD9 0x0449 //
#define DIKEYBOARD_SUBTRACT 0x044A // (* - on numeric keypad *)
#define DIKEYBOARD_NUMPAD4 0x044B //
#define DIKEYBOARD_NUMPAD5 0x044C //
#define DIKEYBOARD_NUMPAD6 0x044D //
#define DIKEYBOARD_ADD 0x044E // (* + on numeric keypad *)
#define DIKEYBOARD_NUMPAD1 0x044F //
#define DIKEYBOARD_NUMPAD2 0x0450 //
#define DIKEYBOARD_NUMPAD3 0x0451 //
#define DIKEYBOARD_NUMPAD0 0x0452 //
#define DIKEYBOARD_DECIMAL 0x0453 // (* . on numeric keypad *)
#define DIKEYBOARD_OEM_102 0x0456 // (* < > | on UK/Germany keyboards *)
#define DIKEYBOARD_F11 0x0457 //
#define DIKEYBOARD_F12 0x0458 //
#define DIKEYBOARD_F13 0x0464 // (* (NEC PC98) *)
#define DIKEYBOARD_F14 0x0465 // (* (NEC PC98) *)
#define DIKEYBOARD_F15 0x0466 // (* (NEC PC98) *)
#define DIKEYBOARD_KANA 0x0470 // (* (Japanese keyboard) *)
#define DIKEYBOARD_ABNT_C1 0x0473 // (* / ? on Portugese (Brazilian) keyboards *)
#define DIKEYBOARD_CONVERT 0x0479 // (* (Japanese keyboard) *)
#define DIKEYBOARD_NOCONVERT 0x047B // (* (Japanese keyboard) *)
#define DIKEYBOARD_YEN 0x047D // (* (Japanese keyboard) *)
#define DIKEYBOARD_ABNT_C2 0x047E // (* Numpad . on Portugese (Brazilian) keyboards *)
#define DIKEYBOARD_NUMPADEQUALS 0x048D // (* = on numeric keypad (NEC PC98) *)
#define DIKEYBOARD_PREVTRACK 0x0490 // (* Previous Track (DIK_CIRCUMFLEX on Japanese keyboard) *)
#define DIKEYBOARD_AT 0x0491 // (* (NEC PC98) *)
#define DIKEYBOARD_COLON 0x0492 // (* (NEC PC98) *)
#define DIKEYBOARD_UNDERLINE 0x0493 // (* (NEC PC98) *)
#define DIKEYBOARD_KANJI 0x0494 // (* (Japanese keyboard) *)
#define DIKEYBOARD_STOP 0x0495 // (* (NEC PC98) *)
#define DIKEYBOARD_AX 0x0496 // (* (Japan AX) *)
#define DIKEYBOARD_UNLABELED 0x0497 // (* (J3100) *)
#define DIKEYBOARD_NEXTTRACK 0x0499 // (* Next Track *)
#define DIKEYBOARD_NUMPADENTER 0x049C // (* Enter on numeric keypad *)
#define DIKEYBOARD_RCONTROL 0x049D //
#define DIKEYBOARD_MUTE 0x04A0 // (* Mute *)
#define DIKEYBOARD_CALCULATOR 0x04A1 // (* Calculator *)
#define DIKEYBOARD_PLAYPAUSE 0x04A2 // (* Play / Pause *)
#define DIKEYBOARD_MEDIASTOP 0x04A4 // (* Media Stop *)
#define DIKEYBOARD_VOLUMEDOWN 0x04AE // (* Volume - *)
#define DIKEYBOARD_VOLUMEUP 0x04B0 // (* Volume + *)
#define DIKEYBOARD_WEBHOME 0x04B2 // (* Web home *)
#define DIKEYBOARD_NUMPADCOMMA 0x04B3 // (* , on numeric keypad (NEC PC98) *)
#define DIKEYBOARD_DIVIDE 0x04B5 // (* / on numeric keypad *)
#define DIKEYBOARD_SYSRQ 0x04B7 //
#define DIKEYBOARD_RMENU 0x04B8 // (* right Alt *)
#define DIKEYBOARD_PAUSE 0x04C5 // (* Pause *)
#define DIKEYBOARD_HOME 0x04C7 // (* Home on arrow keypad *)
#define DIKEYBOARD_UP 0x04C8 // (* UpArrow on arrow keypad *)
#define DIKEYBOARD_PRIOR 0x04C9 // (* PgUp on arrow keypad *)
#define DIKEYBOARD_LEFT 0x04CB // (* LeftArrow on arrow keypad *)
#define DIKEYBOARD_RIGHT 0x04CD // (* RightArrow on arrow keypad *)
#define DIKEYBOARD_END 0x04CF // (* End on arrow keypad *)
#define DIKEYBOARD_DOWN 0x04D0 // (* DownArrow on arrow keypad *)
#define DIKEYBOARD_NEXT 0x04D1 // (* PgDn on arrow keypad *)
#define DIKEYBOARD_INSERT 0x04D2 // (* Insert on arrow keypad *)
#define DIKEYBOARD_DELETE 0x04D3 // (* Delete on arrow keypad *)
#define DIKEYBOARD_LWIN 0x04DB // (* Left Windows key *)
#define DIKEYBOARD_RWIN 0x04DC // (* Right Windows key *)
#define DIKEYBOARD_APPS 0x04DD // (* AppMenu key *)
#define DIKEYBOARD_POWER 0x04DE // (* System Power *)
#define DIKEYBOARD_SLEEP 0x04DF // (* System Sleep *)
#define DIKEYBOARD_WAKE 0x04E3 // (* System Wake *)
#define DIKEYBOARD_WEBSEARCH 0x04E5 // (* Web Search *)
#define DIKEYBOARD_WEBFAVORITES 0x04E6 // (* Web Favorites *)
#define DIKEYBOARD_WEBREFRESH 0x04E7 // (* Web Refresh *)
#define DIKEYBOARD_WEBSTOP 0x04E8 // (* Web Stop *)
#define DIKEYBOARD_WEBFORWARD 0x04E9 // (* Web Forward *)
#define DIKEYBOARD_WEBBACK 0x04EA // (* Web Back *)
#define DIKEYBOARD_MYCOMPUTER 0x04EB // (* My Computer *)
#define DIKEYBOARD_MAIL 0x04EC // (* Mail *)
#define DIKEYBOARD_MEDIASELECT 0x04ED // (* Media Select *)
Code:
void pressKey(WORD Scancode)
{	
	INPUT inp;
	memset(&inp,0,sizeof(inp));
	inp.type=INPUT_KEYBOARD;
	inp.ki.wVk = 0;
	inp.ki.wScan = Scancode;
	inp.ki.time = 0;
	inp.ki.dwExtraInfo = 0;
	inp.ki.dwFlags=KEYEVENTF_SCANCODE;
	SendInput(1,&inp,sizeof(inp));
	Sleep(5);
	inp.ki.dwFlags=KEYEVENTF_SCANCODE|KEYEVENTF_KEYUP;
	SendInput(1,&inp,sizeof(inp));
}
Dr. Coxxy is offline  
Old 12/07/2011, 23:36   #5


 
MrSm!th's Avatar
 
elite*gold: 47110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,379
SendInput wird eigentlich mit normalen ScanCodes und nicht mit DIKs verwendet.
MrSm!th is offline  
Old 12/07/2011, 23:42   #6
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 735
funtzt aber wenn du
Code:
	inp.ki.dwFlags=KEYEVENTF_SCANCODE;
benutzst.

siehe:



Quote:
KEYEVENTF_SCANCODE
0x0008
If specified, wScan identifies the key and wVk is ignored.
und

Quote:
wScan

Type: WORD

A hardware scan code for the key. If dwFlags specifies KEYEVENTF_UNICODE, wScan specifies a Unicode character which is to be sent to the foreground application.
funtzt aber manchmal, wenn 'normale' scancodes versagen.
Dr. Coxxy is offline  
Old 12/08/2011, 06:49   #7
 
elite*gold: 0
Join Date: Nov 2011
Posts: 83
Received Thanks: 22
werd ich heute mal ausprobieren coole sache danke.

werde dann spaeter gleich berichten obs geklappt hat, jetz aber erstma in die schule -.-' ^^

bis denne,
gruss

Edit (08.12 um 23:45)

Also, ich habs ausprobiert und wie erwartet hat es leider nicht funktioniert -.-'
Habe es einmal mit WoW getestet und einmal mit DAoC.
Bei WoW klappt es problemlos, bei DAoC eben nicht.

Aber ich hab gemerkt, das DaoC garnichts durchlässt, sogar wenn ich ingame die Windoof taste drücke passiert nichts. also das Game blockt mächtig ^^

Was wäre so jetzt der nächste schritt, den man angehen könnte?

Aber trotzdem schonmal danke für den Tipp.

Gruß,
Dominic
dominic.e is offline  
Old 12/09/2011, 00:33   #8


 
MrSm!th's Avatar
 
elite*gold: 47110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,379
Quote:
Originally Posted by Dr. Coxxy View Post
funtzt aber wenn du
Code:
	inp.ki.dwFlags=KEYEVENTF_SCANCODE;
benutzst.

siehe:





und



funtzt aber manchmal, wenn 'normale' scancodes versagen.
Sag mal kannst du lesen?

Ich habe doch geschrieben:

SI funktioniert mit ScanCodes, nicht mit DIKs.

Eine Möglichkeit gibts aber, warum das trotzdem klappen könnte:

Ich habe keine Ahnung, wie MS bei DirectInput ihre DIKs definiert haben.
Kann gut sein, dass sie den echten ScanCodes entsprechen.
MrSm!th is offline  
Old 12/09/2011, 01:08   #9
 
elite*gold: 0
Join Date: Nov 2011
Posts: 83
Received Thanks: 22
Das heißt jetzt im endeffekt wie kann/sollte ich fortfahren?

Gruß
dominic.e is offline  
Old 12/09/2011, 14:19   #10
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 735
sry mrsmith, hab dich da missverstanden, dachte du meintest die VK_scancodes...

edit:
und ***, sind die gleichen.
zumindest auf den amerikanischen tastaturen, habs mit y und z usw. noch nicht ausprobiert.
Dr. Coxxy is offline  
Old 12/09/2011, 15:38   #11
 
elite*gold: 0
Join Date: Nov 2011
Posts: 83
Received Thanks: 22
ich denk ma so n hook waere wohl leichter zu schreiben.

habt ihr dazu vllt n guten ansatz oder gute tuts wie ich das am besten mache?

gruss
dominic.e is offline  
Old 12/09/2011, 16:02   #12
 
elite*gold: 42
Join Date: Jun 2008
Posts: 5,426
Received Thanks: 1,887
Quote:
Originally Posted by dominic.e View Post
ich denk ma so n hook waere wohl leichter zu schreiben.

habt ihr dazu vllt n guten ansatz oder gute tuts wie ich das am besten mache?

gruss
gamedeception.
MoepMeep is offline  
Old 12/10/2011, 09:00   #13
 
elite*gold: 0
Join Date: Nov 2011
Posts: 83
Received Thanks: 22
du meinst ja denke ich ma die seite gamdeception werd mich da mal umgucken, danke

ich wuerde ja dann n hook schreiben, sprich ich muss das ding am ende injecten, oder versteh ich da was falsch?

gruss
dominic.e is offline  
Old 12/10/2011, 09:54   #14
 
elite*gold: 42
Join Date: Jun 2008
Posts: 5,426
Received Thanks: 1,887
Quote:
Originally Posted by dominic.e View Post
du meinst ja denke ich ma die seite gamdeception werd mich da mal umgucken, danke

ich wuerde ja dann n hook schreiben, sprich ich muss das ding am ende injecten, oder versteh ich da was falsch?

gruss
Nicht zwingend, aber machts deutlich einfacher.
MoepMeep is offline  
Old 12/10/2011, 11:00   #15
 
elite*gold: 0
Join Date: Nov 2011
Posts: 83
Received Thanks: 22
Okay, ich werd mich erstma auf der seite umgucken un bissl versuchen und dann sag ich euch nochmal bescheid.

Gruß

Edit:

ich hab mich jetz nomma auf der seite umgeschaut und komplett google aufn kopp gestellt, aber iwie finde ich nicht so das richtige.
wenn ich das richtig verstanden habe muss ich die sendmessage/postmessage funktion hooken um sie zu benutzen.

habt ihr vllt konkret n link zu nem tut oder iwo nochn snippet oder so? -.-'

und wie siehts denn aus, es gibt ja dann wohl die moeglichkeit das ding zu injecten oder eben nicht. worin wuerde denn die schwierigkeit liegen das ding zum laufen zu bekommen ohne es zu injecten und wie leicht ist es entdeckt zu werden? ^^

aber trotzdem schonmal vielen dank fuer eure hilfe , is halt noch n bissl neuland fuer mich ^^

gruss
dominic.e is offline  
Reply


Similar Threads Similar Threads
[C++] Hooken einer Funktion?
09/12/2011 - C/C++ - 6 Replies
Hallo, ich versuche gerade eine Funktion in CPP zu hooken. In OllyDBG sieht es so aus: CPU Disasm Address Hex dump Command Comments 0040E54D |. 8D8C24 840000 LEA ECX, 0040E554 |. 51 PUSH ECX ; /Arg3 0040E555 |. 50 PUSH EAX ; |Arg2
iw3sp stürzt ab nach dem d3d hooken
01/27/2011 - General Coding - 3 Replies
Hallo epvp, Hab ein Problem und zwar möchte ich ein pinkes Rechteck oben links zeichnen lassen. Aber wenn ich es mithilfe eines Hotkeys anzeigen lassen möchte, sieht man das Rechteck kurz und dann stürzt das Programm ab. Ohne die Hotkey Funktion klappt das super, aber man möchte ja sein d3d menu auch wieder schließen o.O Hier mein Source Code: #pragma once #pragma comment(lib, "d3d9.lib") #pragma comment(lib, "d3dx9.lib")
Reversen? Wie finde ich Values?
11/26/2010 - S4 League - 6 Replies
Hi Leute, Ich weiß, dass jetzt viel geflame kommen wird, aber: Wie finde ich die S4 Values? Wenn ich die nicht habe, kann ich ja nichts hacken. Ich bin noch so ziemlich am Anfang und habe nichts gefunden, was mir geholfen hat. Ich habe zwar was gafunden, aber das habe ich nicht verstanden (Englisch) oder konnte die Dateien nicht downloaden (die TuTs):o Wäre nett wenn mir das jemand erklären könnte oder einen Link von einem gutem deutschem Tut geben könnte. Danke schonmal
Allgemeine Frage zum reversen von tclient.exe
11/17/2010 - 4Story - 12 Replies
Hey, Ich wollte mir grade mal die Tclient.exe mit ollydbg anschauen um ein bisschen über die kommunikation zwischen dem HS und 4story rauzubekommen. Als ich das Ollyfenster offen hatte war es leer es stand kein code drin und es ließ sich nicht starten, also habe ich mal PEID drüberlaufen lassen und UPX gefunden. Da ich die exe selbst mit einem gefixxten pe-header nicht in olly offen bekommen habe, wollte ich das Teil automatisch entpacken. Wenn ich dies jedoch versuche sagt mir der Unpacker...



All times are GMT +1. The time now is 20:48.


Powered by vBulletin®
Copyright ©2000 - 2023, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2023 elitepvpers All Rights Reserved.