滲透測試之冷門語言的利用
滲透測試之冷門語言的利用
主要介紹種被使用的不多的冷門語言來減少一些對抗AV的難度,就像現在的Nim和之前的Go、Python同理。
V Lang
這是一門新發布的語言由Alexander Medvednikov發起,開源時間為2019年6月22日。目前貢獻者已有4百多人,快速迭代開發中。
目前,語言的穩定性和成熟度肯定還需要時間完善,不能期望太高。
V語言官網:https://vlang.io/
V語言代碼庫:https://github.com/vlang
V語言社區dicord:https://discord.com/invite/vlang
V感覺就是go+rust+c的結合體,吸收了這三者的優點,不過像go更多一點。
V語言的目標
作者希望把V變成一個通用編程語言:
- 能夠像C那樣,成為新一代的主流靜態類型語言。
- 能夠像C/C++/rust那樣,用來開發操作系統,數據庫,瀏覽器等核心系統。
- 能夠像shell/python那樣,用來寫系統腳本。
- 能夠像python那樣,用來寫機器學習。
- 能夠像go/java那樣,用來寫網絡應用。
- 能夠像C/C++那樣,用來寫GUI圖形框架。
- 能夠像ts那樣,用來編譯生成js前端代碼。
下圖為V語言的吉祥物,還是有點好看的。

目前V語言的編譯需要依賴C編譯器:gcc或clang,如果沒有C編譯器,可以參考以下文檔,進行安裝:
https://github.com/vlang/v/wiki/Installing-a-C-compiler-on-Windows
或者直接去官網搞一個預編譯安裝包,IDE方面推薦VScode,因為有現成的插件。

如果都沒問題了之后,可以嘗試運行下面的代碼:
module main
fn main() {
println("hello V")
}

而其可以完美的調用C的代碼庫,只需要#include宏或#define宏,編譯時這些宏會被原封不動地搬到生成的C代碼中,下面看一個簡單的例子就知道了。
module main
#include <stdio.h>
fn C.getpid() int
fn C.GetComputerName(lpFileName &u16, nSize u32)int
fn hostname1() string{
mut sz := 256
mut buf := unsafe{&u16(malloc(256))}
defer{
unsafe{free(buf)}
}
if C.GetComputerName(voidptr(buf), u32(&sz)) == 0{
eprintln(C.errno)
}
ret := unsafe{string_from_wide2(buf, sz)}
return ret
}
fn main(){
pid:=C.getpid()
println(pid)
println(hostname1())
}

另外V也提供了各種各樣的庫供我們使用,比如操作系統的os庫,有人新建了一個關于V的倉庫,這里可以參考著來學:
https://github.com/diljith369/OffensiveVLang/
問題也跟NIm差不多,就是編譯體積比較大,簡單cs的shellcode混淆后目前可過windows defender

文章轉自公眾號:網絡安全學習圈