Saya secara tidak sengaja menimpa skrip bash yang sangat kompleks, di mana saya mencoba menerapkan pelingkupan dan threading dengan cara yang rapi.
Sekarang skrip yang sama masih berjalan tetapi file tidak lebih, pertanyaannya adalah: Apakah mungkin untuk memindai ram dan menemukan representasi sengatan dari file itu sendiri?
Masalah lain adalah: Saya tidak dapat menemukan file / dev / mem atau / dev / kmem, sudah mencoba untuk menerimanya untuk isinya.
Untuk lingkungan: Ini adalah hostet debian / mesin samping (vps) di vpsfx.com
root @ heisenberg: ~ # ls -a / dev . kmsg ptyp2 ptyp9 acak tty1 tty5 ttyp2 ttyp9 urandom .. log ptyp3 ptypa shm tty10 tty6 ttyp3 ttypa xconsole .udev null ptyp4 ptypb stderr tty11 tty7 ttyp4 ttypb nol char ptmx ptyp5 ptypc stdin tty12 tty8 ttyp5 ttypc konsol pts ptyp6 ptypd stdout tty2 tty9 ttyp6 ttypd fd ptyp0 ptyp7 ptype tty tty3 ttyp0 ttyp7 ttype ptyp1 ptyp8 ptypf tty0 penuh tty4 ttyp1 ttyp8 ttypf
/proc
fs tidak bertempat tinggal di RAM. Bahkan, ia tidak berada di mana pun . Lihat unix.stackexchange.com/questions/74713/… . Meskipun Anda bisa mendapatkan fd dari/proc
,cat
ing fd membaca file dari fs, bukan RAM. Benar, Anda menghapus file, mengurangi jumlah inode ref, dan tidak ada orang lain yang bisa melihatnya sekarang, tetapi sebenarnya tidak dihapus dari fs sampai proses menjalankan skrip menutupnya. Lihat stackoverflow.com/questions/2028874/… .Dengan asumsi bahwa OP benar-benar berarti dari RAM dan bukan cara yang mungkin , dan dengan asumsi bahwa proses di mana skrip dieksekusi memiliki batas nol file inti (yang biasanya merupakan pengaturan default,
cat /proc/PID/limits
), maka Anda perlu melampirkan ke proses dan atur batas inti ke nilai yang cukup besar untuk menyertakan gambar proses dan gunakan sinyal ABRT untuk menghasilkan file inti, atau gunakan alat sepertigdb
yang dapat melampirkan ke proses dan menghasilkan gambar inti dari proses dari RAM.gdb
Di beberapa shell dengan kepemilikan yang sama dengan script yang berjalan atau kepemilikan root:
ps ax
untuk menemukan id proses (PID)gdb -p PID
Perhatikan bahwa ini akan menghentikan eksekusi proses dari melanjutkan tetapi tidak menghapusnya dari tabel proses.
generate-core-file
gdb harus merespons dengan sesuatu seperti
Saved corefile core.15113
, dengan asumsi bahwa PID adalah 15113.detach
Script Anda akan terus berjalan (melanjutkan).
quit
strings core.15113 > my_script.sh
Buka
my_script.sh
di beberapa editor. Teks skrip Anda harus berada di akhir file sebelum bagian lingkungan. Gunakan editor untuk menghapus bagian sebelum dan sesudah skrip.Uji solusi ini pada skrip lain sebelum Anda menggunakannya pada skrip hadiah Anda. YMMV.
Urutannya terlihat seperti ini:
sumber
dd partisi harddisk dalam potongan yang tumpang tindih dan ambil binary untuk bagian skrip. jika Anda beruntung, tuliskan potongan-potongan itu ke direktori sementara di ram untuk melakukan greeping di dalamnya untuk menyimpan harddisk atau siklus tulis ssd Anda. tidak, ini bukan solusi 'dari ram'. Waspadai fakta bahwa ketika membaca disk byte demi byte skrip mungkin dalam format charset utf-8 (atau serupa), sehingga parameter grep mungkin harus disesuaikan juga.
sumber