Kleine Spielerei - will nur mal zeigen, was möglich ist...
Folgendes Programm ist komplett in Profan geschrieben (ist kein Virus, kein Treiber ist dafür nötig, kein Hooking, keine Callbacks, keine besonderen Rechte erforderlich - nur reines Profan und etwas API - habe eine eigene, unbekannte Technik verwendet).
http://freenet-homepage.de/ahfundgrube/Te…_vorgaukeln.zip
Bitte: Programm mal starten (nicht Windows95/98/ME, nur NT basiert) und versuchen, aus dem gestarteten Programm den Programmpfad zu ermitteln :D. Bin gespannt...
[Blockierte Grafik: http://freenet-homepage.de/ahfundgrube/FPROZESS.JPG]
Frage: Welche Programme ermitteln den Programmpfad (den Ordner, aus dem das Programm gestartet wurde) korrekt, welche Programme tun das nicht? Auch selbst was Schreiben ist natürlich erlaubt.
Will hoffen, dass alles funktioniert.
Nach dem Motto - API = Arme Programmierer irritiert.
Trickserei: Programmpfad ermitteln
-
-
-
Hm, irgendwie bin ich zu blöd, dem Taskmanager überhaupt begreiflich zu machen, die Prozesspfade anzuzeigen. Die zuständige Checkbox ist immer grau unterlegt.
Hab jetzt auf die Schnelle auch nichts eigenes da, was die vollen Prozessnamen ausliest. Vielleicht erstelle ich morgen was, wenn ich genug Zeit finde.
Der Depency Walker zumindest lässt sich anscheinend nicht täuschen. Dort wird überall der richtige Pfad angezeigt.
Andreas, textet dein Testprog eigentlich irgendwo im Fenster den falschen Pfad? Alle Texte dort zeigen den korrekten Pfad an unter XP. Soll ich einen Screenshot posten?
-
Zitat von Frabbing;675929
Andreas, textet dein Testprog eigentlich irgendwo im Fenster den falschen Pfad?
Ja, ganz unten.Zitat von Frabbing;675929
Alle Texte dort zeigen den korrekten Pfad an unter XP. Soll ich einen Screenshot posten?
Gerne, vielleicht habe ich noch einen Fehler drin. -
Helfe mal grad mit etwas Quelltext aus. Unter Vista muss der Code als Admin ausgeführt werden, damit der Token das SeDebugPrivilege besitzt.
Code
Alles anzeigen'############################################################################################# '###################### Quelltext erstellt von AHT ############################# '############################################################################################# Def GetModuleFileNameEx(4) !"Psapi","GetModuleFileNameExA" Def CreateToolhelp32Snapshot(2) !"Kernel32", "CreateToolhelp32Snapshot" Def Process32First(2) !"Kernel32", "Process32First" Def Process32Next(2) !"Kernel32", "Process32Next" Def CloseHandle(1) !"Kernel32", "CloseHandle" Def GetCurrentProcessID(0) !"Kernel32", "GetCurrentProcessId" Def OpenProcess(3) !"Kernel32", "OpenProcess" DEF LookupPrivilegeValue(3) !"advapi32","LookupPrivilegeValueA" DEF AdjustTokenPrivileges(6) !"advapi32","AdjustTokenPrivileges" DEF OpenProcessToken(3) !"advapi32","OpenProcessToken" DEF GetCurrentProcess(0) !"KERNEL32","GetCurrentProcess" DEF CopyMemory(3) !"kernel32","RtlMoveMemory" Declare Entry#, err&, handle&, cpid&, text$, text2$, PHandle&, Filename# Declare TOKEN_PRIVILEGES#, LUID#, Fehler& Struct PROCESSENTRY32=dwSize&, \ cntUsage&, \ th32ProcessID&, \ th32DefaultHeapID&, \ th32ModuleID&, \ Threads&, \ th32ParentProcessID&, \ pcPriClassBase&, \ dwFlags&, \ szExeFile$(260) Dim Entry#,PROCESSENTRY32 Entry#.dwSize& = SizeOf(Entry#) Proc Set_Privilege_Status Parameters Privilege_name$,Aktive& Declare NewState&,AH_Token_Handle&,LU_SYSTEM$ DIM TOKEN_PRIVILEGES#,16 DIM LUID#,8 Clear LUID#,LU_SYSTEM$ @LookupPrivilegeValue(@ADDR(LU_SYSTEM$),@ADDR(Privilege_name$),LUID#) CLEAR AH_Token_Handle& LET FEHLER&=@OpenProcessToken(@GetCurrentProcess(),$20,@ADDR(AH_Token_Handle&)) LONG TOKEN_PRIVILEGES#,0=1 LET NewState&=TOKEN_PRIVILEGES# @CopyMemory(NewState&+4,LUID#,8) LET NewState&=Aktive& Clear Aktive& IF @or(NewState&,$2)=NewState& LET Aktive&=@or(AKTIVE&,$2) Endif IF @or(NewState&,$80000000)=NewState& LET Aktive&=@or(AKTIVE&,$80000000) Endif LONG TOKEN_PRIVILEGES#,12=Aktive& LET FEHLER&=@AdjustTokenPrivileges(AH_Token_Handle&,0,TOKEN_PRIVILEGES#,0,0,0) If AH_TOKEN_Handle&<>0 @CLOSEHANDLE(AH_Token_Handle&) endif Dispose TOKEN_PRIVILEGES# Dispose LUID# endproc Proc FillProcessList DIM Filename#, 514 cpid& = GetCurrentProcessID() handle& = CreateToolhelp32Snapshot(2,0) If handle& err& = Process32First(handle&, Entry#) If err& text$ = Str$(Entry#.th32ProcessID&) text2$ = Entry#.szExeFile$ Clear Filename#, PHandle& PHandle& = OpenProcess($400 | $10, 0, Entry#.th32ProcessID&) IF PHandle& > 0 GetModuleFilenameEx(PHandle&, 0, Filename#, 513) Closehandle(PHandle&) endif ADDSTRING "PID: " + text$ + " | Prozessname: " + text2$ + " | Prozesspfad: " + String$(Filename#,0) Repeat err& = Process32Next(handle&, Entry#) If err& text$ = Str$(Entry#.th32ProcessID&) text2$ = Entry#.szExeFile$ Clear Filename#, PHandle& PHandle& = OpenProcess($400 | $10, 0, Entry#.th32ProcessID&) IF PHandle& > 0 GetModuleFilenameEx(PHandle&, 0, Filename#, 513) Closehandle(PHandle&) endif ADDSTRING "PID: " + text$ + " | Prozessname: " + text2$ + " | Prozesspfad: " + String$(Filename#,0) EndIf Until err& = 0 CloseHandle(handle&) EndIf EndIf Dispose Filename# EndProc ClearList Set_Privilege_Status "SeDebugPrivilege",$2 FillProcessList EditBox("Prozesse",1)
Hier noch ein Screenshot davon, was bei der svchost.exe aus dem Download oben zu sehen sein sollte:
[Blockierte Grafik: http://www.postimage.org/gx13bxOi.jpg]
Ich hoffe, es wird klar, worauf ich hinaus will. -
Ja, wird klar. Unter XP-Home scheint es aber noch nicht zu klappen:
-
Zitat von Frabbing;676202
Ja, wird klar. Unter XP-Home scheint es aber noch nicht zu klappen:
Das liegt nicht an der Home Version. Mal schauen, wo es hakt...
-
So sieht es bei mir aus
XP-Home -
Zitat von horsthorn;676214
So sieht es bei mir aus
XP-Home
Genau so solls auch aussehen. Habe gerade ein Update hochgeladen und will hoffen, dass es jetzt auch bei Frank richtig funktioniert -
Zitat
Habe gerade ein Update hochgeladen und will hoffen, dass es jetzt auch bei Frank richtig funktioniert
Nein, leider nicht. Nach wie vor wird unten der originale Pfad angezeigt.
-
Hab jetzt die neue Version auf D:\ kopiert und hier ist das Ergebnis :
-
-
Zitat von Frabbing;676580
Sorry, Screenshot vergessen...
Besten Dank, das hilft mir weiter! -
Na freut mich ja.
-
Noch mal neue Versin hochgeladen.
-
Büddeseehr - der Test
-
Nein, noch nicht.
Meldet Fehlercode Speicher bereitstellen: 0 -
Zitat von Frabbing;676922
Nein, noch nicht.
Meldet Fehlercode Speicher bereitstellen: 0
Ich hatte bei der API WideCharToMultiByte noch einen Fehler drin. Hier hatte ich die Stringlänge als viel zu klein angeben (eine Null vergessen). War der Ursprungspfad zu lang, stieg das Programm vorzeitig aus dem Schreibvorgang aus. Neue Version hochgeladen. Bräuchte jetzt leider noch einmal paar Screenshots. -
-
Das ist es wohl gewesen, was gehakt hat.
-
Frank
Da hast Du aber auch ein extra langes Verzeichnis gemacht
Kein Wunder, dass dem bereitgestellten Speicher "die Puste ausging !" -
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!