Saya mendapat file biner dan saya harus memecahkan kata sandinya (pekerjaan rumah). Ada juga fungsi yang diberikan (fungsi yang merupakan bagian dari file biner). Fungsi itu menunjukkan bahwa string input dibandingkan dengan karakter kata sandi yang benar berdasarkan karakter dan mengembalikan false secara instan ketika suatu karakter salah (itu bukan cara aman untuk melakukannya saya kira karena ini waktu yang bocor dan kami mendapatkan gagasan tentang panjang kata sandi yang benar sebagai contoh). Tetapi guru kami telah menambahkan penghitung waktu acak yang mengembalikan hasil (Benar / Salah) untuk membuatnya sedikit lebih sulit bagi kita ...
Ngomong-ngomong, saya sudah berhasil melakukannya dengan reverse engineering dan mendapatkan kata sandi yang benar. Sekarang saya bermain dengannya di baris perintah:
/usr/bin/time -v ./program_name enter_password
Dengan perintah ini, saya mendapatkan banyak informasi seperti waktu sistem, swap, waktu eksekusi..Tapi yang paling menarik bagi saya adalah "Switch konteks sukarela" karena karakter kata sandi yang lebih tepat saya masukkan, semakin sedikit "Switch konteks sukarela" " Saya mendapat!
Semakin banyak karakter yang salah saya masukkan, semakin banyak "Konteks sukarela beralih" saya dapatkan.
Saya butuh hampir dua jam untuk memecahkan kata sandi hanya dengan memasukkan perintah itu, memasukkan karakter, dan mengamati "Switch konteks sukarela". Setiap kali SATU karakter benar, "Sukarela konteks switch" berkurang satu.
Pertanyaan saya, apa sebenarnya "Switch konteks sukarela" dan mengapa mereka membantu saya memecahkan kata sandi?
sumber
Jawaban:
The halaman manual untuk
time
menjelaskan konsep sukarela dan tidak sukarela konteks switch:(kutipan dari sistem Debian saya, halaman manual yang ditautkan memiliki teks yang sedikit berbeda)
Artinya, saklar konteks adalah sukarela, jika proses meninggalkan CPU karena tidak ada lagi yang harus dilakukan (sambil menunggu sesuatu eksternal terjadi). Secara sukarela, jika ingin melanjutkan beberapa perhitungan, tetapi OS memutuskan sudah waktunya untuk beralih ke beberapa proses lainnya.
Bagaimana semua ini terkait dengan program pemeriksaan kata sandi, tergantung pada apa yang sebenarnya dilakukan oleh program.
Dari kode sumber yang ditautkan dalam komentar, kita melihat bahwa program memanggil
usleep()
satu kali untuk setiap karakter yang tidak cocok, melanjutkan loop perbandingan pada karakter berikutnya sesudahnya. Tidur adalah tentang sukarela seperti menghasilkan CPU yang pernah didapat, sehingga panggilan ini akan menunjukkan sebagai konteks sukarela beralih untuk setiap karakter non-maching.Di Linux, Anda juga dapat melihat panggilan
strace
itu.Penundaan terakhir berasal dari tidur acak
T * (rand() % 3)
, yaitu 0, 1, atau 2 kali konstanta. Itu granularity agak kasar, sehingga harus mudah untuk rata-rata dengan melakukan beberapa upaya dengan kata sandi yang sama.sumber