![]() |
Anzeige:
|
|
|||||||
| Spezielles Für die Bereiche API, Subclassing, Inline-Assembler, Prozesse, ect. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.786
|
Hier ist von der Möglichkeit die Rede, die Funktionalität von Virustotal in einer Programmiersprache zu nutzen: VirusTotal - Free Online Virus, Malware and URL Scanner
Leider habe ich von HTTP Request komplett keinen Plan. Lässt sich das mit Profan irgendwie umsetzen?
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT |
|
|
|
|
|
|
#2 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.786
|
Der scheint schon mal auf dem richtigen Weg zu sein...
winhttp post - Sysinternals Forums Hier die Headerkonstanten: http://forums.purebasic.com/german/v...ic.php?t=19078 http://wine.1045685.n5.nabble.com/wi...td1743464.html
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT Geändert von AHT (18.07.2011 um 20:42 Uhr) |
|
|
|
|
|
#3 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.786
|
OK, habe die Lösung. Code läuft jetzt (geile Sache).
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT Geändert von AHT (20.07.2011 um 23:37 Uhr) |
|
|
|
|
|
#4 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Dann poste doch ein Beispiel für die Nachwelt.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#5 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.786
|
Kommt noch, ist aber ohne Key nicht lauffähig.
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT |
|
|
|
|
|
|
#6 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.786
|
Hier Quellcode:
Code:
'#####################################################################################
'######### Virustotal einbinden #########
'######### Code von AHT #########
'######### Gepostet für http://www.paules-pc-forum.de #########
'#####################################################################################
'PCU zur Ermittlung der MD5
$U MD5.pcu = MD5.
'APIs für die Virustotal API
Def WinHttpOpen(5) !"Winhttp.dll", "WinHttpOpen"
Def WinHttpQueryOption(4) !"Winhttp.dll", "WinHttpQueryOption"
Def WinHttpConnect(4) !"Winhttp.dll", "WinHttpConnect"
Def WinHttpOpenRequest(7) !"Winhttp.dll", "WinHttpOpenRequest"
Def WinHttpSendRequest(7) !"Winhttp.dll", "WinHttpSendRequest"
Def WinHttpReceiveResponse(2) !"Winhttp.dll", "WinHttpReceiveResponse"
Def WinHttpQueryDataAvailable(2) !"Winhttp.dll", "WinHttpQueryDataAvailable"
Def WinHttpReadData(4) !"Winhttp.dll", "WinHttpReadData"
Def WinHttpCloseHandle(1) !"Winhttp.dll", "WinHttpCloseHandle"
Def GetLastError(0) !"Kernel32", "GetLastError"
Def MultiByteToWideChar(6) !"Kernel32", "MultiByteToWideChar"
Def SetLastError(1) !"Kernel32", "SetLastError"
Def GetModuleHandle(1) !"Kernel32", "GetModuleHandleA"
'APIs für das Programm
Def GetSysColor(1), !"User32", "GetSysColor"
DEF CreateStatusWindow(4) !"comctl32", "CreateStatusWindow"
DEF GetDlgCtrlID(1) !"USER32.dll","GetDlgCtrlID"
DEF ButtonClicked(1) GetDlgCtrlID(@&(1)) = (%MENUITEM * -1)
'Globale Variablen für das Programm
Declare API_Key_EDIT&, API_Key_Group&, HWWidth&, HWHeight&
Declare Statusbar&, Text$, MD5_Group&, MD5_Edit&, MD5_Button&
Declare Ergebnisse_Group&, Rich_DLL&, Ergebnisse_Edit&
Declare CHARFORMAT#, Dateiname$, Testen&, MD5_String$, Scan$
Declare API_Key$, Vergleich$
Rich_DLL& = UseDLL($SYSPATH + "\RICHED20.DLL")
SET("ErrorLevel", -1)
API_Key$ = readini$("HKEY_1", "SoftWare\VirustotalRequester", "Key")
SET("ErrorLevel", -1)
'HauptFenster erzeugen
WindowStyle 31
WindowTitle "VirustotalRequester (Public API)"
Window 0, 0 - 640, 440
'Controls erzeugen
CLS External("User32", "GetSysColor", 15)
Text$ = "Ready to go..."
Statusbar& = CreateStatusWindow($50000920, ADDR(Text$), %HWND, 1000)
API_Key_Group& = Create("GroupBox", %HWND, "API-Key von Virustotal", 10, 20, int(ABS(Width(%HWND) / 2 - 40)), 100)
API_Key_EDIT& = Create("Edit", %HWND, API_Key$, 20, 60, int(ABS(Width(%HWND) / 2 - 60)), 30)
MD5_Group& = Create("GroupBox", %HWND, "MD5 einer Datei", 20 + int(ABS(Width(%HWND) / 2 - 20)), 20, int(ABS(Width(%HWND) / 2 - 30)), 100)
MD5_Edit& = Create("Edit", %HWND, "", 30 + int(ABS(Width(%HWND) / 2 - 20)), 40, int(ABS(Width(%HWND) / 2 - 50)), 30)
MD5_Button& = Create("Button", %HWND, "Datei auswählen", 30 + int(ABS(Width(%HWND) / 2 - 20)), 80, int(ABS(Width(%HWND) / 4 - 10)), 30)
Testen& = Create("Button", %HWND, "Testen", (30 + int(ABS(Width(%HWND) / 2 - 20))) + ( int(ABS(Width(%HWND) / 4))), 80, int(ABS(Width(%HWND) / 4 - 50)), 30)
EnableWindow Testen&, 0
Ergebnisse_Group& = Create("GroupBox", %HWND, "Ergebnisse der Abfragen", 10, 130, int(ABS(Width(%HWND) - 30)), int(ABS(Height(%HWND) - 170)))
Ergebnisse_Edit& = control("RichEdit20A","",$50000000 | $4 | $200000 | $100000 | $100 | $800 | $1000, 20, 30, int(ABS(Width(%HWND) - 70)), int(ABS(Height(%HWND) - 220)) ,Ergebnisse_Group&, 0, %Hinstance, $200)
SendMessage(Ergebnisse_Edit&, $0400 + 53, 0, $7FFFFFF0)
SendMessage(Ergebnisse_Edit&, $443, 0, RGB(255,255,230))
DIM CHARFORMAT#, 84
Long CHARFORMAT#, 0 = 84
Long CHARFORMAT#, 4 = $40000000
Long CHARFORMAT#, 20 = RGB(0, 0, 255)
Sendmessage(Ergebnisse_Edit&, $444, 4, CHARFORMAT#)
Dispose CHARFORMAT#
While 1
Waitinput
Positioner
If ButtonClicked(MD5_Button&)
SetMenuitem 0
Dateiname$ = LoadFile$("Datei zum überprüfen auswählen...", "*")
IF Dateiname$ <> ""
MD5_String$ = MD5.GetMD5(Dateiname$, 60, 0, 1)
Settext MD5_Edit&, MD5_String$
Text$ = "Jetzt Button 'Testen' klicken!" + Chr$(13) + Chr$(10)
Sendmessage(Statusbar&,$401,0,ADDR(TEXT$))
Sendmessage(Statusbar&,$410,0,ADDR(TEXT$))
endif
endif
If ButtonClicked(Testen&)
SetMenuitem 0
EnableWindow Ergebnisse_Edit&, 0
Text$ = "Verbinde mit Virustotal..."
Sendmessage(Statusbar&,$401,0,ADDR(TEXT$))
Sendmessage(Statusbar&,$410,0,ADDR(TEXT$))
Text$ = "MD5: " + GetText$(MD5_Edit&) + Chr$(13) + Chr$(10)
SendMessage(Ergebnisse_Edit&, $00B1, -1, -1) 'Cursor setzen oder markieren
SendMessage(Ergebnisse_Edit&, $00C2, 0, ADDR(Text$)) 'Text einfügen/ersetzen
If (Dateiname$ <> "") and (MD5_String$ = GetText$(MD5_Edit&))
Text$ = "Dateiname: " + Dateiname$ + Chr$(13) + Chr$(10)
SendMessage(Ergebnisse_Edit&, $00B1, -1, -1) 'Cursor setzen oder markieren
SendMessage(Ergebnisse_Edit&, $00C2, 0, ADDR(Text$)) 'Text einfügen/ersetzen
endif
Scan$ = VT_Scan_MD5(GetText$(API_Key_EDIT&), GetText$(MD5_Edit&), Statusbar&, 0)
Scan$ = Translate$(Scan$, ", ", Chr$(13)+Chr$(10))
Scan$ = Scan$ + Chr$(13) + Chr$(10)
SendMessage(Ergebnisse_Edit&, $00B1, -1, -1) 'Cursor setzen oder markieren
SendMessage(Ergebnisse_Edit&, $00C2, 0, ADDR(Scan$)) 'Text einfügen/ersetzen
Text$ = "##################################################################################################################" + Chr$(13) + Chr$(10)
SendMessage(Ergebnisse_Edit&, $00B1, -1, -1) 'Cursor setzen oder markieren
SendMessage(Ergebnisse_Edit&, $00C2, 0, ADDR(Text$)) 'Text einfügen/ersetzen
EnableWindow Ergebnisse_Edit&, 1
Vergleich$ = CHR$(34) + "result" + CHR$(34) + ": -1}"
If instr(Vergleich$, Scan$) <> len(Scan$) - (Len(Vergleich$) + 1)
Writeini "HKEY_1", "SoftWare\VirustotalRequester", "Key" = GetText$(API_Key_EDIT&)
else
Text$ = "Falscher API Key!"
Sendmessage(Statusbar&,$401,0,ADDR(TEXT$))
Sendmessage(Statusbar&,$410,0,ADDR(TEXT$))
endif
Vergleich$ = CHR$(34) + "result" + CHR$(34) + ": -2}"
If instr(Vergleich$, Scan$) = len(Scan$) - (Len(Vergleich$) + 1)
Text$ = "Zu viele Abfragen getätigt - fünf Minuten bis zur nächsten Abfrage warten (maximal 20 Abfragen in 5 Minuten)!"
Sendmessage(Statusbar&,$401,0,ADDR(TEXT$))
Sendmessage(Statusbar&,$410,0,ADDR(TEXT$))
endif
Vergleich$ = CHR$(34) + "result" + CHR$(34) + ": 0}"
If instr(Vergleich$, Scan$) = len(Scan$) - (Len(Vergleich$) + 1)
Text$ = "Datei ist nicht in der Datenbank zu finden!"
Sendmessage(Statusbar&,$401,0,ADDR(TEXT$))
Sendmessage(Statusbar&,$410,0,ADDR(TEXT$))
endif
endif
If GetText$(MD5_Edit&) = ""
EnableWindow Testen&, 0
else
EnableWindow Testen&, 1
endif
wend
End
'Ermittelt die Fehlerbeschreibung
Proc Fehlercode_bestimmen
Parameters Winerror&, HMod&
Declare GETERROR_Buffer$, GETERROR_Buffer#
DIM GETERROR_Buffer#, 100001
External("kernel32", "FormatMessageA", $800, HMod&,Winerror&, 0, GETERROR_Buffer#, 100000, 0) 'Wandelt Fehlercode in Landesspezifische Message um.
GETERROR_Buffer$ = trim$(STRING$(GETERROR_Buffer#, 0))
Dispose GETERROR_Buffer#
If GETERROR_Buffer$ = ""
GETERROR_Buffer$ = "Fehlercode " + Str$(Winerror&)
endif
return GETERROR_Buffer$
Endproc
'Prozedur zum Auslesen eines Scans bei Virustotal
Proc VT_Scan_MD5
Parameters VT_API_KEY$, VT_MD5_String$, VT_Statusbar&, VT_Statuszeile&
Declare HWinhttp&, UserAgent$, UserAgent#, hSession&
Declare data&, Size&, hConnect&, Server$, Server#
Declare hRequest&, Verb$, Verb#, Objname$, Objname#
Declare bResult&, Parameters$, len&
Declare URL$, Context&, NumberOfBytesAvailable&
Declare Data#, DownLoaded&, Scan_Return$, ReturnEdit&
Declare VT_Lasterror&, VT_Statustext$, Mod$
HWinhttp& = UseDLL("Winhttp.dll")
UserAgent$ = "Virustotal Test"
Server$ = "www.virustotal.com"
Verb$ = "POST"
Objname$ = "api/get_file_report.json"
Parameters$ = "key=" + VT_API_KEY$ + "&resource=" + VT_MD5_String$
URL$ = "https://www.virustotal.com."
Dim UserAgent#, len(UserAgent$) * 2 + 2
Dim Server#, len(Server$) * 2 + 2
Dim Verb#, len(Verb$) * 2 + 2
Dim Objname#, len(Objname$) * 2 + 2
len& = len(Parameters$)
MultiByteToWideChar(0, 0, addr(UserAgent$), -1, UserAgent#, int(SizeOf(UserAgent#) / 2))
MultiByteToWideChar(0, 0, addr(Server$), -1, Server#, int(SizeOf(Server#) / 2))
MultiByteToWideChar(0, 0, addr(Verb$), -1, Verb#, int(SizeOf(Verb#) / 2))
MultiByteToWideChar(0, 0, addr(Objname$), -1, Objname#, int(SizeOf(Objname#) / 2))
SetLastError(0)
hSession& = WinHttpOpen(UserAgent#, 0, 0, 0, 0)
If hSession& <> 0
Size& = 4
If WinHttpQueryOption(hSession&, 3, addr(data&), addr(Size&))
hConnect& = WinHttpConnect(hSession&, Server#, 80, 0)
If hConnect& <> 0
hRequest& = WinHttpOpenRequest(hConnect&, Verb#, Objname#, 0, 0, 0, $0)
If hRequest& <> 0
bResult& = WinHttpSendRequest(hRequest&, 0, 0, addr(Parameters$), len(Parameters$), len(Parameters$), addr(Context&))
If bResult& <> 0
If WinHttpReceiveResponse(hRequest&, 0)
If WinHttpQueryDataAvailable(hRequest&, addr(NumberOfBytesAvailable&))
DIM Data#, abs(NumberOfBytesAvailable&) + 1
WinHttpReadData(hRequest&, Data#, SizeOf(Data#), addr(DownLoaded&))
Scan_Return$ = String$(Data#, 0)
Dispose Data#
else
VT_Lasterror& = GetLastError()
If VT_Statusbar& <> 0
VT_Statustext$ = "WinHttpQueryDataAvailable: " + Fehlercode_bestimmen(VT_Lasterror&, HWinhttp&)
Sendmessage(VT_Statusbar&,$401,0,ADDR(VT_Statustext$))
Sendmessage(VT_Statusbar&,$410,0,ADDR(VT_Statustext$))
endif
endif
else
VT_Lasterror& = GetLastError()
If VT_Statusbar& <> 0
VT_Statustext$ = "WinHttpReceiveResponse: " + Fehlercode_bestimmen(VT_Lasterror&, HWinhttp&)
Sendmessage(VT_Statusbar&,$401,0,ADDR(VT_Statustext$))
Sendmessage(VT_Statusbar&,$410,0,ADDR(VT_Statustext$))
endif
endif
else
VT_Lasterror& = GetLastError()
If VT_Statusbar& <> 0
VT_Statustext$ = "WinHttpSendRequest: " + Fehlercode_bestimmen(VT_Lasterror&, HWinhttp&)
Sendmessage(VT_Statusbar&,$401,0,ADDR(VT_Statustext$))
Sendmessage(VT_Statusbar&,$410,0,ADDR(VT_Statustext$))
endif
endif
WinHttpCloseHandle(hRequest&)
else
VT_Lasterror& = GetLastError()
If VT_Statusbar& <> 0
VT_Statustext$ = "WinHttpOpenRequest: " + Fehlercode_bestimmen(VT_Lasterror&, HWinhttp&)
Sendmessage(VT_Statusbar&,$401,0,ADDR(VT_Statustext$))
Sendmessage(VT_Statusbar&,$410,0,ADDR(VT_Statustext$))
endif
endif
WinHttpCloseHandle(hConnect&)
else
VT_Lasterror& = GetLastError()
If VT_Statusbar& <> 0
VT_Statustext$ = "WinHttpConnect: " + Fehlercode_bestimmen(VT_Lasterror&, HWinhttp&)
Sendmessage(VT_Statusbar&,$401,0,ADDR(VT_Statustext$))
Sendmessage(VT_Statusbar&,$410,0,ADDR(VT_Statustext$))
endif
endif
else
VT_Lasterror& = GetLastError()
If VT_Statusbar& <> 0
VT_Statustext$ = "WinHttpQueryOption: " + Fehlercode_bestimmen(VT_Lasterror&, HWinhttp&)
Sendmessage(VT_Statusbar&,$401,0,ADDR(VT_Statustext$))
Sendmessage(VT_Statusbar&,$410,0,ADDR(VT_Statustext$))
endif
endif
WinHttpCloseHandle(hSession&)
Else
VT_Lasterror& = GetLastError()
If VT_Statusbar& <> 0
VT_Statustext$ = "WinHttpOpen: " + Fehlercode_bestimmen(VT_Lasterror&, HWinhttp&)
Sendmessage(VT_Statusbar&,$401,0,ADDR(VT_Statustext$))
Sendmessage(VT_Statusbar&,$410,0,ADDR(VT_Statustext$))
endif
endif
VT_Lasterror& = GetLastError()
If VT_Statusbar& <> 0
If VT_Lasterror& = 0
Mod$ = "kernel32"
VT_Statustext$ = Fehlercode_bestimmen(VT_Lasterror&, GetModuleHandle(addr(Mod$)))
Sendmessage(VT_Statusbar&,$401,0,ADDR(VT_Statustext$))
Sendmessage(VT_Statusbar&,$410,0,ADDR(VT_Statustext$))
endif
endif
Dispose UserAgent#
Dispose Server#
Dispose Verb#
Dispose Objname#
FreeDLL HWinhttp&
Return Scan_Return$
endproc
'Prozedur zum Positionieren der Controls
Proc Positioner
If (HWWidth& <> Width(%HWND)) or (HWHeight& <> Height(%HWND))
HWWidth& = Width(%HWND)
HWHeight& = Height(%HWND)
SetWindowPos API_Key_Group& = 10, 20 - int(ABS(HWWidth& / 2 - 40)), 100
SetWindowPos API_Key_EDIT& = 20, 60 - int(ABS(HWWidth& / 2 - 60)), 30
SetWindowPos MD5_Group& = 20 + int(ABS(Width(%HWND) / 2 - 20)), 20 - int(ABS(HWWidth& / 2 - 30)), 100
SetWindowPos MD5_Edit& = 30 + int(ABS(Width(%HWND) / 2 - 20)), 40 - int(ABS(Width(%HWND) / 2 - 50)), 30
SetWindowPos MD5_Button& = 30 + int(ABS(Width(%HWND) / 2 - 20)), 80 - int(ABS(Width(%HWND) / 4 - 10)), 30
SetWindowPos Testen& = (30 + int(ABS(Width(%HWND) / 2 - 20))) + ( int(ABS(Width(%HWND) / 4))), 80 - int(ABS(Width(%HWND) / 4 - 50)), 30
SetWindowPos Ergebnisse_Group& = 10, 130 - int(ABS(Width(%HWND) - 30)), int(ABS(Height(%HWND) - 170))
SetWindowPos Ergebnisse_Edit& = 20, 30 - int(ABS(Width(%HWND) - 70)), int(ABS(Height(%HWND) - 220)), 30
SetWindowPos Statusbar& = 0, 0 - 0, 0
Repaint
endif
endproc
Kurze Erklärung: Der Code testet eine MD5 einer Datei bei Virustotal und holt sich die Ergebnisse aus der Datenbank. Die Datei wird dabei nicht aktuell auf den Server geladen - die Scanergebnisse sind also nicht aktuell (für einen Schnelltest reicht das aber oft).. Mit der gleichen API ist es auch möglich, eine Datei aktuell zum Scannen auf den Server von Virustotal zu laden. Dazu müssen aber spezielle Header mit übergeben werden. Um das umzusetzen, fehlt mir im Augenblick noch die Ahnung von HTTP. Hier Infos, wie man den Header in Python formt: Http client to POST using multipart/form-data Python recipes ActiveState Code Für den Zugriff auf die Datenbank von Virustotal über die API benötigt man einen API-Key. Den bekommt man kostenlos, wenn man sich auf VirusTotal - Free Online Virus, Malware and URL Scanner anmeldet. Wer Lust hat, mir beim Erstellen des Codes für den Dateiupload unter die Arme zu greifen kann das gerne tun.
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT Geändert von AHT (25.07.2011 um 20:10 Uhr) |
|
|
|
|
|
#7 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.786
|
Hier noch was, was bei der Umsetzung des Dateiuploads helfen könnte:
my own braindump: WinHttpSendRequest is not so easy to use http://www.computec.ch/forum_viewtopic.php?11.21038
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT Geändert von AHT (26.07.2011 um 14:16 Uhr) |
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [Windows Vista-32 bit] VLC 1.1.0 win32 exe, Virustotal Meldung | JanaG | PC-Sicherheit, Spam und Phishing | 7 | 31.07.2010 23:56 |
| Mozilla firefox - virustotal 2 Meldungen | JanaG | Viren-Forum | 2 | 22.01.2010 09:40 |
| prüfung einer größeren datei- zu groß für virustotal | JanaG | Viren-Forum | 2 | 01.10.2009 18:39 |
| Anleitung zur Dateiüberprüfung bei Virustotal | Paule | 4. PC-Sicherheit | 0 | 12.11.2008 20:17 |