GNU/Linux >> Belajar Linux >  >> Linux

Menambal Biner Dengan Dd?

Saya telah membaca kutipan ini (di bawah) beberapa kali, terakhir di sini, dan saya terus-menerus bingung bagaimana dd dapat digunakan untuk menambal apa saja apalagi kompiler:

Sistem Unix yang saya gunakan di sekolah, 30 tahun yang lalu, sangat terbatas dalam RAM dan ruang Disk. Terutama, /usr/tmp sistem file sangat kecil, yang menyebabkan masalah ketika seseorang mencoba untuk mengkompilasi program besar. Tentu saja, siswa tidak seharusnya menulis “program besar”; program besar biasanya kode sumber disalin dari "suatu tempat". Banyak dari kita menyalin /usr/bin/cc ke /home/<myname>/cc , dan menggunakan dd untuk menambal biner menggunakan /tmp bukannya /usr/tmp , yang lebih besar. Tentu saja, ini hanya memperburuk masalah – ruang disk yang ditempati oleh salinan ini memang penting saat itu, dan sekarang /tmp diisi secara teratur, mencegah pengguna lain bahkan mengedit file mereka. Setelah mereka mengetahui apa yang terjadi, sysadmin melakukan chmod go-r /bin/* /usr/bin/* yang “memperbaiki” masalah, dan menghapus semua salinan kompiler C kami.

(Tekankan milikku)

dd halaman manual tidak mengatakan apa-apa tentang menambal dan tidak berpikir itu dapat digunakan kembali untuk melakukan ini.

Bisakah binari benar-benar ditambal dengan dd ? Apakah ada signifikansi historis untuk ini?

Jawaban yang Diterima:

Mari kita coba. Berikut program C sepele:

#include <stdio.h>
int main(int argc, char **argv) {
    puts("/usr/tmp");
}

Kami akan membuatnya menjadi test :

$ cc -o test test.c

Jika kita menjalankannya, ia akan mencetak “/usr/tmp”.

Mari kita cari tahu di mana “/usr/tmp ” ada dalam biner:

$ strings -t d test | grep /usr/tmp
1460 /usr/tmp

-t d mencetak offset dalam desimal ke dalam file setiap string yang ditemukan.

Sekarang mari kita buat file sementara hanya dengan “/tmp

Linux
  1. Pelacakan kernel dengan trace-cmd

  2. memeriksa apakah biner dikompilasi dengan -statis

  3. mengonversi string hex ke biner dan mengirim dengan netcat

  1. Perintah Nohup dengan Contoh

  2. Perintah JQ di Linux dengan Contoh

  3. Menggunakan Notify-send Dengan Cron?

  1. Instal Linux dengan LVM

  2. Unggah file sebagai ASCII atau biner dengan FTP

  3. Menjalankan skrip bash atau biner c pada sistem file dengan opsi noexec