Mengambil beberapa output dari xxd dan mengubahnya menjadi shellcode yang dapat digunakan dengan tangan tidak menyenangkan, jadi tugas Anda adalah mengotomatiskan proses.
Aturan
Kiriman Anda dapat berupa fungsi, lambda, skrip, atau yang setara dengan itu. Anda dapat mencetak hasilnya, atau jika kiriman Anda adalah fungsi / lambda maka Anda juga dapat mengembalikannya.
Anda Program harus mengambil tiga argumen, yang pertama adalah string yang berisi output dari xxd, berlari tanpa argumen selain nama file, seperti ini: xxd some_file
. Berikut ini contoh tampilan argumen pertama:
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
Anda perlu mengambil bagian tengah yang berisi byte (8 kolom pertama setelah :
) dan mengubahnya menjadi shellcode dengan menghapus spasi, lalu meletakkan \x
sebelum setiap byte.
Inilah yang seharusnya menjadi input untuk input di atas (mengabaikan argumen lain):
\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
Anda dapat mengasumsikan argumen pertama akan selalu berupa output xxd yang valid, dijalankan tanpa argumen selain nama file.
Output Anda juga harus berupa string di mana garis miring terbalik adalah garis miring terbalik literal, tidak digunakan sebagai karakter pelarian. Jadi ketika saya mengatakan "\ x65", saya tidak berbicara tentang byte 0x65, atau bahkan huruf "A". Dalam kode, itu adalah string "\ x65".
Argumen kedua menentukan di mana dalam output xxd shellcode harus dimulai, dan argumen ketiga menentukan di mana ia harus berakhir. Jika argumen ketiga adalah -1
, itu akan berakhir pada akhir output xxd. Argumen kedua dan ketiga juga akan selalu non negatif, kecuali ketika argumen ketiga-1
Berikut ini beberapa kasus uji:
Argumen 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
Argumen 2 7
:, Argumen 3: e
(keduanya adalah string yang mewakili angka heksadesimal)
Keluaran: \xc9\xcd\x80\xeb\x16\x5b\x31\xc0
Argumen 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
Argumen 2 0
:, Argumen 3:2e
Keluaran: \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
Argumen 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
Argumen 2 a
:, Argumen 3:-1
Keluaran: \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
Kode dengan byte paling sedikit menang. Pemenang akan diumumkan dalam tujuh hari, pada 15 Agustus 2016 (tetapi pengiriman setelah itu masih dihargai).
Memperbarui
Selamat kepada @Adnan untuk memenangkan tantangan!
~
bukannya \x7e
. Dan bisakah kita kembali, \t
bukan \x09
?
7
terlihat seperti indeks berbasis nol dan e
merupakan indeks berbasis satu ( e-7=7
tetapi ada 8 kode hex pada output Anda), atau apakah saya mengabaikan sesuatu?