Xxd'den bazı çıktılar almak ve elle kullanılabilir kabuk koduna dönüştürmek eğlenceli değildir, bu yüzden işiniz süreci otomatikleştirmek.
kurallar
Gönderiniz bir işlev, lambda, senaryo veya bunların makul bir eşdeğeri olabilir. Sonucu yazdırabilirsiniz veya gönderiminiz bir işlev / lambda ise, bunu da geri verebilirsiniz.
Program ilk böyle bir dosya adı dışında hiçbir savları tamamen XXd çıktısını, ran içeren bir dize olmak üç argüman almalıdır: xxd some_file
. İlk argümanın nasıl görüneceğine bir örnek:
00000000: 31c0 b046 31db 31c9 cd80 eb16 5b31 c088 1..F1.1.....[1..
00000010: 4307 895b 0889 430c b00b 8d4b 088d 530c C..[..C....K..S.
00000020: cd80 e8e5 ffff ff2f 6269 6e2f 7368 4e58 ......./bin/shNX
00000030: 5858 5859 5959 59 XXXYYYY
Baytları içeren orta bölümü (ondan sonraki ilk 8 sütun :
) almanız ve herhangi bir boşluğu kaldırarak ve ardından \x
her bir bayttan önce bir koyarak kabuk koduna dönüştürmeniz gerekir .
Yukarıdaki girdi için çıktı ne olmalıdır (diğer argümanları yok sayarak):
\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68\x4e\x58\x58\x58\x58\x59\x59\x59\x59
İlk bağımsız değişkenin her zaman geçerli bir xxd çıktısı olacağını ve dosya adından başka bir bağımsız değişken olmadan çalıştırıldığını varsayabilirsiniz.
Çıktınız ayrıca ters eğik çizgilerin gerçek ters eğik çizgi olduğu, çıkış karakteri olarak kullanılmadığı bir dize olmalıdır. "\ X65" derken 0x65 baytından, hatta "A" harfinden bahsetmiyorum. Kodda, "\ x65" dizesi olurdu.
İkinci argüman, xxd çıktısında shellcode'un nerede başlayacağını ve üçüncüsü nerede bitmesi gerektiğini belirtir. Üçüncü argüman ise -1
, xxd çıktısının sonunda sona erer. İkinci ve üçüncü argümanlar da üçüncü olmayan zamanlar hariç her zaman negatif olmayacaktır.-1
İşte bazı test örnekleri:
Tartışma 1:
00000000: 31c0 b046 31db 31c9 cd80 eb16 5b31 c088 1..F1.1.....[1..
00000010: 4307 895b 0889 430c b00b 8d4b 088d 530c C..[..C....K..S.
00000020: cd80 e8e5 ffff ff2f 6269 6e2f 7368 4e58 ......./bin/shNX
00000030: 5858 5859 5959 59 XXXYYYY
Bağımsız değişken 2:, 7
Bağımsız değişken 3: e
(bunların her ikisi de onaltılık sayıları temsil eden dizelerdir)
Çıktı: \xc9\xcd\x80\xeb\x16\x5b\x31\xc0
Tartışma 1:
00000000: 31c0 b046 31db 31c9 cd80 eb16 5b31 c088 1..F1.1.....[1..
00000010: 4307 895b 0889 430c b00b 8d4b 088d 530c C..[..C....K..S.
00000020: cd80 e8e5 ffff ff2f 6269 6e2f 7368 4e58 ......./bin/shNX
00000030: 5858 5859 5959 59 XXXYYYY
Argüman 2:, 0
Argüman 3:2e
Çıktı: \x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68\x4e
Tartışma 1:
00000000: 31c0 b046 31db 31c9 cd80 eb16 5b31 c088 1..F1.1.....[1..
00000010: 4307 895b 0889 430c b00b 8d4b 088d 530c C..[..C....K..S.
00000020: cd80 e8e5 ffff ff2f 6269 6e2f 7368 4e58 ......./bin/shNX
00000030: 5858 5859 5959 59 XXXYYYY
Argüman 2:, a
Argüman 3:-1
Çıktı: \xeb\x16\x5b\x31\xc0\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68\x4e\x58\x58\x58\x58\x59\x59\x59\x59
En az bayt olan kod kazanır. Kazanan, 15 Ağustos 2016'da yedi gün içinde ilan edilecektir (ancak daha sonra yapılan başvurular hala takdir edilmektedir).
Güncelleme
~
yerine \x7e
. Ve \t
bunun yerine geri dönebilir miyiz \x09
?
7
sıfır tabanlı bir dizine benziyor ve e
tek tabanlı bir dizin ( e-7=7
ancak çıktınızda 8 onaltılı kod var), yoksa bir şey mi görüyorum?