Autor |
Beitrag |
uall@ogc
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Sa 26.02.05 14:24
geeigenet für dll injection in andere prozesse, API hooks etc.
funktionen:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212:
| function mygetOwnModuleHandle: integer; stdcall;
function myLoadLibrary(dllname: pchar): integer; stdcall; overload;
function myLoadLibrary(dllname, name: pchar): integer; stdcall; overload;
function myFreeLib(module: integer): boolean; stdcall;
function myCreateRemoteThread(pid: cardinal; p: pointer): boolean; stdcall;
function myInjectLibrary2(pid: cardinal; dlln: pchar): pointer; stdcall;
function myInjectLibrary(pid: cardinal; dlln: pchar): boolean; stdcall;
function myVirtualAllocEx(pid: cardinal; size: cardinal): pointer; stdcall;
function myVirtualFreeEx(pid: cardinal; memaddr: pointer; size: cardinal): boolean; stdcall;
function myOpenThread(access: integer; inherithandle: boolean; tid: integer): integer; stdcall;
function myGetThread(pid: integer): integer; stdcall;
function myFindProcessThread(exenames: pchar): integer; stdcall;
function myFindModulesInProcess(pid: cardinal): pchar; stdcall;
function myHookApiIAT(modulehandle: integer; oldfunction, myfunction: pointer): boolean; stdcall; overload;
function myHookApiIAT(oldfunction, myfunction: pointer): boolean; stdcall; overload;
function myInjectLibraryUnsecure(pid: cardinal; dlln: pchar): boolean; stdcall;
function myInjectLibraryUnsecure2(pid: cardinal; dlln: pchar): boolean; stdcall;
function myInstructionLength(addr: pointer): integer; stdcall;
function myHookAPIJMP(oldfunction,yourfunction: pointer; var nextfunction: pointer): boolean; stdcall;
function myUnhookAPIJMP(nextfunction: pointer): boolean;
function myHookAPIJMPUnsecure(oldfunction,yourfunction: pointer; var nextfunction: pointer): boolean; stdcall; assembler;
function myUnhookApiJMPunsecure(nextfunction: pointer): boolean; stdcall; assembler;
function myFindProcess(exenames: pchar): integer; stdcall;
function myCreateRemoteThreadUnsecure(pid: cardinal; addr: pointer; NTuseCRT: boolean): cardinal; stdcall;
function myisNT: boolean; stdcall;
function myGetProcAddr(module: integer; procname: pchar): pointer; stdcall;
function myGetDebugPrivilege: boolean; stdcall; |
Moderiert von UGrohne: Link entfernt.
Zuletzt bearbeitet von uall@ogc am Sa 26.02.05 14:28, insgesamt 1-mal bearbeitet
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Sa 26.02.05 14:25
Hallo!
Bitte beschreibe Deine Unit ein wenig, damit man auch weiß, worum es geht!
MfG
Christian
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
uall@ogc
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Fr 04.03.05 14:52
2 neue funktionen hinzugefügt:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| function myForceLoadLibraryA(name: pchar): integer; stdcall;
function myGhostLibrary(lib: integer): boolean; stdcall; |
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
F34r0fTh3D4rk
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Di 29.03.05 14:14
angenommen ich lade damit eine gefakte opengl32.dll in den prozess, dann muss ich doch nur die funktionen in die fake dll eintragen, die ich brauche, die anderen sind schon im speicher, oder ?
werden dann nur die "alten" funktionen überschrieben ?
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| library fakeogl32;
uses windows;
const opengl32 = 'C:\windows\system32\opengl32.dll';
type HGLRC = THandle;
type GLenum = Cardinal;
const GL_TRIANGLE_STRIP = $0005; GL_TRIANGLE_FAN = $0006; GL_DEPTH_TEST = $0B71;
procedure oldglBegin (mode: GLenum); stdcall; external opengl32 name 'glBegin'; procedure glDisable (cap: GLenum); stdcall; external opengl32 name 'glDisable'; procedure glEnable (cap: GLenum); stdcall; external opengl32 name 'glEnable';
procedure glBegin(mode: glenum); stdcall; begin if (mode = GL_TRIANGLE_STRIP) or (mode = GL_TRIANGLE_FAN) then glDisable(GL_DEPTH_TEST) else glEnable(GL_DEPTH_TEST); end;
exports glBegin;
begin end. |
reicht das als dll aus, um sie dann als wallhack in cs zu laden ?
wird alles andere übernommen ?
|
|
BenBE
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Di 29.03.05 14:35
Ich glaubs nicht, da der Normalen GetProcAddress-Funktion die ganzen anderen Methoden aus der OGL fehlen würden --> Fehler.
Du könntest aber einen GetProcAddress-Hook machen, der bei Angabe des OGL-Handles erst prüft, ob die Funktionen bei dir drin stehen und wenn dies nicht der Fall ist, diese aus der eigentlichen OGL nachladen.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
F34r0fTh3D4rk
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Di 29.03.05 14:45
ich dachte, das wäre bei der funktion automatisch, also dass das alte im speicher durch das neue ersetzt wird, nur muss man die dll ja erstmal kompilieren können ^^
|
|
uall@ogc
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Di 29.03.05 14:48
nein geht so nicht
1.) solltest in einer dll die glBegin etc. dynamisch laden (nicht statisch) d.h. mit GetProcAddress holen -> d.h. du musst gegebenfalls vorher selber die opgnl32.dll laden falls sie noch nicht im speicher ist
2.) danach kannste nen API jmp hook machen (myHookApiJmp) und zwar mit den parametern @oldglBegin (die aus der opengl32.dll) @myglBegin (deine glBegin functkion) @nextglBegin (die funktion die du aufrufen musst anstatt der originalen glBegin da diese ja gehookt wurde, also die funktion die du dann wieder in myglBegin benutzen kannst)
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
F34r0fTh3D4rk
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Di 29.03.05 14:53
ok werde ich so machen, hab ja genug beispiele von dir
bart rox !
@uall: hab beim thread (asm code an spiel schicken) noch was editiert, gucks dir an
Zuletzt bearbeitet von F34r0fTh3D4rk am Di 29.03.05 14:55, insgesamt 1-mal bearbeitet
|
|
uall@ogc
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Di 29.03.05 14:53
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| library hackdll;
uses windows, myhook;
type GLenum = Cardinal; const GL_TRIANGLE_STRIP = $0005; GL_TRIANGLE_FAN = $0006; GL_DEPTH_TEST = $0B71;
var nextglBegin: procedure (mode: GLenum); stdcall; oldglBegin: procedure (mode: GLenum); stdcall; oldglDisable: procedure (cap: GLenum); stdcall; oldglEnable: procedure (cap: GLenum); stdcall;
procedure myglBegin(mode: glenum); stdcall; begin if (mode = GL_TRIANGLE_STRIP) or (mode = GL_TRIANGLE_FAN) then oldglDisable(GL_DEPTH_TEST) else oldglEnable(GL_DEPTH_TEST); nextglBegin(mode); end;
var hogl: integer; begin hogl := GetModuleHandle('opengl32.dll'); if hogl = 0 then hogl := LoadLibaryA('opengl32.dll');
@oldglBegin := GetProcAddress(oglh,'glBegin'); @oldglEnable := GetProcAddress(oglh,'glEnable'); @oldglDisable := GetProcAddress(oglh,'glDisable');
myhook.myHookAPIJMP(@oldglBegin,@myglBegin,@nextglBegin); end. |
die dll sollte dann so aussehen (ungetestet) wenn du nun die in den speicher lädst fänst du immer glBegin ab
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
Zuletzt bearbeitet von uall@ogc am Di 29.03.05 14:57, insgesamt 1-mal bearbeitet
|
|
F34r0fTh3D4rk
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Di 29.03.05 14:55
oh, danke fürs beispiel
wie lade ich die jetzt von der exe aus ?
mit function myInjectLibrary(pid: cardinal; dlln: pchar): boolean; stdcall; ?
Zuletzt bearbeitet von F34r0fTh3D4rk am Di 29.03.05 15:00, insgesamt 2-mal bearbeitet
|
|
uall@ogc
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Di 29.03.05 14:58
hatte vergessen die original glBegin funktion aufzurufen,wenn das nicht machst dann flackert das bild und du siehst nichst mehr
aber pass auf das du nextGlbegin aufrufst und nicht oldglBegin da wir ja oldglBegin gehookt haben und es sonst zu einer endlosschleife kommen würde
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
F34r0fTh3D4rk
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Di 29.03.05 15:01
meinst du die zeile
Delphi-Quelltext
aus der myglbegin ?
|
|
uall@ogc
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Di 29.03.05 15:02
jo genau die
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
F34r0fTh3D4rk
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Di 29.03.05 15:06
hab gestern versucht text anzeigen zu lassen, beim starten habe ich gesehen, dass mein konsolen text blau war, hab ich gedacht, ist ja auch mal schön, aber im spiel hatte ich nur blaues bild ^^ (guck mal bei asm befehl an spiel schicken, ich glaub ich mach da aber gleich mal nen neuen thread für auf ^^)
//ist aber doch sehr cs spezifisch die frage, kannst eh nur du wissen ^^
dann lass ichs ^^
ich schick dir ne pm !
|
|
F34r0fTh3D4rk
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Sa 18.03.06 12:17
îch hab mich mal wieder dran versucht, weil ich grad nichts zu tun habe:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62:
| library glhook;
uses windows, SysUtils, uallhook;
type GLenum = cardinal; const GL_TRIANGLE_STRIP = $0005; GL_TRIANGLE_FAN = $0006; GL_DEPTH_TEST = $0B71; var oldglBegin, nextglBegin: procedure(mode: GLenum); stdcall; oldglDisable: procedure(cap: GLenum); stdcall; oldglEnable: procedure(cap: GLenum); stdcall;
procedure myglBegin(mode: glenum); stdcall; begin if (mode = GL_TRIANGLE_STRIP) or (mode = GL_TRIANGLE_FAN) then oldglDisable(GL_DEPTH_TEST) else oldglEnable(GL_DEPTH_TEST); nextglBegin(mode); end;
procedure injectmain; var h: integer; begin h := GetModuleHandle('opengl32.dll'); if h = 0 then LoadLibraryA('opengl32.dll'); if h > 0 then begin @oldglBegin := GetProcAddress(h, 'glBegin'); @oldglEnable := GetProcAddress(h, 'glEnable'); @oldglDisable := GetProcAddress(h, 'glDisable'); if @oldglBegin <> nil then uallHook.HookCode(@oldglBegin, @myglBegin, @nextglBegin); end; end;
procedure uninjectmain; begin uallHook.UnhookCode(@nextglBegin); end;
procedure dllmain(dwReason: integer); begin case dwreason of DLL_PROCESS_ATTACH: injectmain; DLL_PROCESS_DETACH: uninjectmain; end; end;
begin DLLProc := @DLLMain; DLLMain(1); end. |
hack.exe 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| program hack;
{$APPTYPE CONSOLE}
uses windows, uallHook, uallProcess, uallUtil;
var pid: integer; begin pid := uallProcess.FindProcess('cstrike.exe'); if pid = 0 then pid := uallProcess.FindProcess('hl.exe'); if pid <> 0 then begin if uallHook.InjectLibrary(pid,pchar(uallUtil.GetExeDirectory + 'glhook.dll')) <> nil then MessageBox(0, 'Injection successful', nil, 0) else MessageBox(0, 'Injection failed', nil, 0); end; end. |
das war nur zu testzwecken, weil ich mal was anderes vorhatte, jedoch schmiert cs nach der injektion ab, warum ?
|
|
oern
Beiträge: 142
Linux, Win XP
D7
|
Verfasst: So 19.03.06 20:41
Gibt es vieleicht noch einen anderen Downloadlink der oben funktioniert nicht
_________________ Ich hab eine Signatur
|
|
uall@ogc
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: So 19.03.06 21:00
hihu
cvs.sourceforge.net/...rphia/uallCollection
wenns mal gerade nicht down ist
ansonsten
uall.overclock.ch/pu...c/uallCollection.zip
Ist relativ neu, hab heute soagr hinbekommen unter 9x des kernelcode hooking anständig zum laufen zu bekommen.
Da sich wieder so viel geändert hat wirds in nächsten Tagen wieder ein update geben.
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
uall@ogc
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: So 19.03.06 21:07
@FearOfTheDark:
uallProcess kann auch mehrere Namen als Parameter bekommen, dann findet der einen von den Prozessen
für HL wäre da z.b. sowas gedacht:
Delphi-Quelltext 1:
| uallProcess.FindProcess('hl.exe' + #13#10 + 'cstrike.exe' + #13#10 + 'czero.exe'); |
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
F34r0fTh3D4rk
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 20.03.06 15:05
das ist schön, leider funktioniert es nicht, das game schmiert einfach nur ab
ich habe mir mal andere loader von dir angeguckt, auch den SE Lite Loader, der import die inject funktionen ja von der dll, die er in den prozess injiziert, wo liegt der zweck dessen ?
|
|