Rumah - Melayani
Jumlah sesi terminal Windows 7

Untuk menambal versi baru (jika logika operasi bagian kode terkait tidak berubah secara signifikan), Anda perlu melakukan hal berikut:

0. Instruksi ini cocok untuk kurang lebih terpelajar, dan yang paling penting, spesialis cerdas yang tahu cara berpikir. Mereka yang terbiasa “menyalin” segala sesuatu dengan Copy/Paste sepertinya tidak akan mampu mengatasinya dan akan melontarkan “keluhan” dan “keluh kesah” tentang “banyak huruf”, “sulit” atau “tidak mudah” karena lebih banyak lagi. ketakutan dan stereotip berpikir daripada kompleksitas masalah. Ini adalah takdir mereka. Seperti diketahui, mereka yang terlahir merangkak tidak bisa terbang. Jangan biarkan dirimu kering, Anon! Minumlah Iada atau BEKERJA dan mulailah menghargai diri sendiri!

1. Unduh apa saja - berbayar atau versi gratis Hai
Bahkan versi yang sangat kuno dari tahun 90an pun bisa, tetapi jika Anda perlu menambal x64, maka Anda memerlukan 8.x (mulai dari pertengahan tahun 2000an :)) Tentu saja lebih baik mengambil yang baru. Penulis telah mengembangkan produk ini selama 25 tahun dan hanya ada sedikit kreasi keterampilan programmer yang sempurna.

2. Ambil termrv.dll dari versi tertentu yang didukung - versi asli dan versi yang ditambal. Kalau belum ada yang dipatch, wajar jika diasumsikan perlu ditambal dengan patcher yang ada, jangan bodoh! Mulailah berpikir! Tempatkan semua file yang diperlukan dalam folder atau folder terpisah. Tidak perlu mencoba mengedit apa pun pada satu salinan di system32. Namun, TIDAK ADA YANG AKAN BEKERJA (catatan diblokir di system32) dan hanya domba yang melakukan ini.

3. Bandingkan versi dll yang sama yang telah ditambal dan belum ditambal dengan pembanding file biner mana pun. Paket Windows menyertakan utilitas konsol FC. Perintah “FC /b termrv.org termrv.crk > perbedaan.txt” menghasilkan keuntungan. Daftar perbedaannya, yang kecil, sekitar 20 baris, akan dikirim ke file perbedaan.txt
Buka berkasnya editor teks dan, biarkan terbuka, atau salin ke selembar kertas tempat byte diubah. Kami segera menyelidikinya dan memahami bahwa semua nilai offset dan byte, seperti di bawah ini di Hiew, ditunjukkan dalam sistem heksadesimal, tetapi ini tidak boleh "menakut-nakuti" siapa pun, karena tidak ada yang perlu diubah ke desimal! (Jika Anda tiba-tiba membutuhkannya, untuk pengembangan umum, kalkulator Windows akan membantu.)

Dalam daftar kita melihat (mengidentifikasi) 3 blok bersyarat, di mana alamatnya berada dalam satu baris. Blok pertama berukuran 2 byte di awal exe, dengan offset 140-s-something-h (dll memiliki format yang sama dengan exe, satu-satunya perbedaan adalah blok tersebut hanya berisi prosedur dan fungsi untuk panggilan eksternal - the disebut .exports, jadi Anda tidak akan bisa langsung mengeksekusinya dengan mengganti namanya menjadi exe). Data ini, offset pencarian, berakhir di header file EXE. Offset ini digunakan untuk menyimpan checksum kode-data (tanpa header), yang diperiksa Windows sebelum memulai, memastikan bahwa file tersebut tidak rusak dan tidak ada sesuatu yang mogok saat mencoba menjalankannya. Kami akan kembali lagi nanti.
Berikutnya adalah blok perubahan sekitar 10 byte. Inilah yang akan kita pelajari. Setelah itu ada blok perubahan lain - 6 byte terakhir dari file yang dapat dieksekusi. Intinya adalah bahwa alih-alih “nol”, penulis memasukkan nama besarnya “deepxw” ke dalam ruang kosong di akhir. Hormat kami padanya untuk tambalan dan idenya, tetapi tidak ada alasan khusus bagi kami untuk mengulangi “kegembiraan” nya saat mentransfer tambalan, oleh karena itu, ini dapat dilakukan oleh mereka yang ingin melakukannya sendiri, yang tidak punya apa-apa untuk dilakukan. lakukan pada malam musim dingin yang panjang sebagai bagian dari penelitian “Mengarahkan huruf biasa ke ruang kosong file EXE menggunakan Hiew.” Namun, ini bisa dianggap sebagai penghormatan kepada penulisnya (hanya saja tidak ada yang membaca “di sana”).

3. Buka dll asli di satu jendela Hiew, yang ditambal di jendela lain (jalankan 2 salinan Hiew! Secara umum, jauh lebih nyaman menggunakan Far - dua hal, sebagai pengelola file dan dasar untuk meluncurkan "ini" Hai). Di keduanya, tekan F4 (Mode) dan pilih Decode (F3). Kita akan melihat bagian file yang dibongkar dari awal. Tidak ada yang bisa dilihat di sana, karena Hiew sedang “mencoba” membongkar judulnya berkas EXE, dan ini adalah data, bukan kode. Tidak perlu menatap ke sana, dia menunjukkan kepada Anda apa yang benar-benar normal, karena di sini Anda perlu BERPIKIR, dan bukan “meniru”! Sekali lagi kita berkumpul dan mulai berpikir, tidak perlu mencoba dengan bodoh dan benar-benar mengikuti instruksinya...

4. Di kedua Hiew (pada gilirannya, sial, menurut kami...) tekan F5 (Goto) dan lihat kolom input telah muncul di bagian atas. Di sana kita memasukkan alamat perbedaan pertama (dari BLOK KEDUA!) yang ditemukan di file perbedaan. CONTOH, di Win7SP1x86Rus ini adalah alamat di wilayah 19100h, dan di VistaSP2Eng (x86 atau x64 - xs), seperti yang saya lihat di blog penulis, ini adalah alamat di wilayah 65200h. Kita sampai pada tempat byte pertama yang dikoreksi.

Data di jendela Hiew ini terlihat seperti:
– Di kolom pertama – hex offset – dari awal file, atau di memori proses – bergantung pada mode Hiew, dipilih oleh Alt-F1 (Global-Local). Secara default ini menunjukkan Lokal = seperti di memori jika Hiew berhasil mengetahui format kode-data. Dalam kasus kami, hal ini tidak menimbulkan masalah karena format file EXE memungkinkan dia dengan mudah “mencari tahu semuanya.” Oleh karena itu, Anda tidak perlu takut ketika Anda melihat 06F2F8D51 di sana, bukan 19153 yang dimasukkan. Pengalamatan memori penting untuk memahami pengalamatan proses, tampilannya saat dieksekusi, dan untuk analisis kode, jika diperlukan.
– Kolom kedua berisi representasi heksadesimal dari data kode dengan analisis kode mana dan data mana yang termasuk dalam instruksi mana. Oleh karena itu, setiap garis memiliki panjang yang berbeda. Ditampilkan seperti ini semata-mata untuk kenyamanan Anda. "Faktanya" (C) dalam file itu sendiri semuanya "dijahit" bersama-sama dalam satu baris, yang dapat Anda lihat dalam mode tampilan "sederhana" dari data hex (F4->Hex), di mana byte hex ditampilkan "bodoh ” di sebelah kiri dipisahkan oleh spasi, dan di sebelah kanan adalah "kata-kata gila" dari tabel ASCII yang sesuai dengan byte ini - seperti dalam hex editor "any" "lama yang bagus" seperti WinHex, tangkapan layarnya Anda lihat di "any" situs web “kulhatsk”. Kami bekerja dengan byte yang sama sepanjang waktu, sama seperti komputer itu sendiri. Pertanyaannya semata-mata pada penyajian dan penafsirannya. Saat Anda menyalin file yang dapat dieksekusi dari disk ke disk, itu SEMUA DATA dan TANPA KODE, karena tidak ada yang mengeksekusi apa pun. Tetapi segera setelah Anda menunjukkan kepada Windows bahwa ini adalah file yang dapat dieksekusi, jalankan, Windows menguraikannya menjadi kode dan data dan hanya menjalankan kode dari tempat yang telah ditentukan oleh standar dan header, setelah itu kode itu sendiri, dieksekusi oleh prosesor , selanjutnya diurai menurut strukturnya dan dibagi lagi menjadi kode dan data, dan seterusnya.
Dalam mode F4->Decode, alih-alih “krakozyabr”, ini menunjukkan kepada kita byte dan “arti sebenarnya”.
– Di kolom ketiga (kanan) dan terbesar (lebih tepatnya, sepasang kolom) kita diperlihatkan bagian kode yang dibongkar - teks, yang disebut. representasi “mnemonik” dari kode ini (bahasa rakitan), yang dimaksudkan untuk persepsi yang disederhanakan dan dapat dipahami oleh “homo sapiens,” dengan pemikiran asosiatif analognya yang luar biasa, yang sangat sulit memahami rangkaian kode “telanjang” yang abstrak.

5. Setelah pindah ke offset yang diinginkan di paragraf sebelumnya, kita melihat bahwa kursor (yang kecil berwarna abu-abu :)) menunjuk ke awal perintah 6-byte (di x64 mungkin ada lebih banyak byte) di sebelah kanannya instruksi cmp eax TYPE “dibongkar”,
jika Anda mengambil satu baris di atas dan beberapa di bawah, Anda akan mendapatkan konstruksi seperti:
pindahkan eax,
cmp eax
jz.06F30B25E
dorong edi
tekan 020
hubungi .06F2E1440
pop ecx
Untuk memahami konstruksi ini, Anda tidak perlu menjadi “ahli assembler” sama sekali, meskipun disarankan untuk memiliki setidaknya pengetahuan dasar tentang topik “pemrograman dalam bahasa apa pun”. Namun mengetahui bahasa Inggris tidak ada salahnya!

Instruksi pertama (yang tidak ditambal dengan cara apa pun, ini adalah "di atas perbedaan pertama") disebut mov - yang, permisi, adalah asosiasi pertama yang terlintas dalam pikiran dari bahasa Inggris? – benar – pindah – mis. bergerak. Argumen instruksi ada di “subkolom” kedua. eax dan edi adalah yang disebut Register 32-bit adalah sel memori tunggal dalam prosesor itu sendiri, yang dirancang untuk menyimpan data saat sedang diproses. Hampir semua register memiliki tipe yang sama, secara teoritis Anda dapat menulis apa saja di sana, asalkan cocok, tetapi beberapa di antaranya secara tradisional digunakan untuk menyimpan data tipe tertentu (agar tidak bingung), misalnya EAX, EBX , ECX, EDX digunakan secara langsung untuk "data pengguna", Selain itu, ECX secara tradisional bertindak sebagai penghitung (siklus, misalnya), dan ESI, EDI - sebagai penunjuk ke posisi tertentu saat ini dalam memori, alamat yang dapat digunakan untuk bekerja. Dan beberapa register bergantung pada perangkat keras dan "lebih baik tidak menyentuhnya" - misalnya, register IP secara otomatis berisi alamat instruksi saat ini yang dijalankan prosesor, dan jika Anda mencoba menulis beberapa data Anda di sana - variabel program Anda, maka prosesor akan dengan bodohnya mengikuti instruksi dengan alamat ini dan semuanya akan runtuh. ESP - menunjukkan tumpukan - semacam "botol" di mana orang pertama yang masuk adalah orang terakhir yang keluar (Fist In Last Out), dirancang untuk penyimpanan sementara data yang tidak sesuai dengan register, tetapi tidak ada gunanya dalam mendorongnya kembali ke memori setelah ditemukan akan segera digunakan. Untuk bekerja dengan data, biasanya byte tertentu - 8 bit, kata - 16 bit, kata panjang - 32 bit, atau kata panjang ganda 64 bit (untuk prosesor 64-bit) ditempatkan dari memori ke dalam register. Untuk bekerja dengan data pendek, Anda dapat mengakses bagian register (misalnya, eax terdiri dari ax - 16 bit terbawah dan ah dan al - bagian dari ax itu sendiri), tetapi ini di luar cakupan masalah kita. Kemudian beberapa transformasi matematis dilakukan dengan data dalam register, setelah itu hasilnya ditempatkan kembali ke memori - di sel yang sama atau sel lain atau sel lain yang dialokasikan oleh pembuat (atau kompilernya) program untuk tujuan yang sesuai.

Alamat ditunjukkan dalam tanda kurung siku. Jika Anda perlu mengambil DATA dari sel memori di suatu alamat, dan bukan alamat itu sendiri, cukup tulis alamatnya dalam tanda kurung siku. Konstruksi TYPE artinya data harus diambil dari sel memori yang mempunyai alamat, yang nilainya diperoleh dengan menambahkan nilai pada register ESI + 324h. Dalam Majelis biasanya ditulis dengan lebih jelas, tetapi akan lebih mudah bagi penulis Hiew untuk menunjukkannya seperti ini, mungkin untuk kejelasan. Saat memasukkan perintah, Hiew menerima konstruksi standar seperti, seperti yang ditunjukkan di bawah ini, baik-baik saja.

Secara total, kami memahami bahwa instruksi ini mengambil data (4 byte = 32 bit) di alamat dan memasukkannya ke dalam register EAX. Instruksi selanjutnya ((yang sudah ditambal) adalah CMP. Hal pertama yang terlintas di benak orang berwajah cerah yang rajin belajar bahasa Inggris di sekolah adalah membandingkan. Kita berbicara tentang perbandingan. Kalau tidak, semuanya sama saja seperti dalam instruksi sebelumnya. Alamatnya hanya tetangga
cmp eax
membandingkan isi register eax dan lokasi memori di alamat. Instruksi sebelumnya memasukkan nomor dari sel tetangga ke dalam register eax. Sekarang dibandingkan dengan nomor dari sel. Apa rumitnya, permisi??? Anda bisa mengajari seekor domba jantan! Ini tentu saja lebih sederhana daripada benda-benda “berkilo-kilometer” yang terbuat dari sejenis katak, membawa ribuan properti yang bisa Anda tenggelamkan...
Tapi bagaimana dengan hasilnya? Mereka membandingkan, jadi apa gunanya, pembaca yang penuh perhatian akan bertanya... Bagaimana Anda bisa mengetahui di mana anjing itu mencari-cari? Dan hasilnya disimpan dalam register bendera khusus yaitu Flags. Dalam register yang dicadangkan ini, setiap bit mewakili sebuah bendera. Secara khusus, ada bendera nol – Nol. Jika dari hasil pelaksanaan instruksi perbandingan ternyata angka-angkanya sama, maka flag akan disetel (1); jika tidak, maka akan dihapus (0) (atau sebaliknya, terlalu malas untuk melihatnya). debugger - ini tidak penting di sini). Demikian pula, ada kotak centang lain untuk item lebih-kurang - Tanda Tangan. Bendera berubah sebagai akibat dari pelaksanaan instruksi yang mengubahnya, dan akan tetap pada posisinya sampai diubah sebagai akibat dari pelaksanaan instruksi lain yang mempengaruhi keadaannya. Oleh karena itu, setelah cmp kita dapat menjalankan instruksi lain tergantung pada status flagnya sampai kita mengeksekusi instruksi yang mengubahnya. Keadaan bendera dibaca berdasarkan instruksi lompatan bersyarat dan beberapa lainnya dan akibatnya adalah tindakan atau kelambanan tertentu dari instruksi tersebut.

Petunjuk berikut yang akan datang
jz.06F30B25E
Instruksi yang dimulai dengan J [hampir] semuanya berarti Lompat, yaitu. pindah ke tempat lain. instruksi ini mengacu pada instruksi lompatan bersyarat dan merupakan singkatan dari Jump if Zero - yaitu. pergi ke alamat jika bendera Nol dicentang. Jika kotak centang TIDAK dicentang, maka “tidak akan terjadi apa-apa.” Alamat transisi diberikan sebagai argumen (dapat berbeda, relatif atau absolut, “jauh” atau “dekat” dalam memori. Di sini alamat ditunjukkan dalam ruang alamat program, seperti yang dikonfigurasi oleh header exe, tidak ada gunanya mendalaminya, ini hanya akan memperumit segalanya. Jika instruksi sebelumnya mendeteksi kesetaraan argumen, maka transisi akan terjadi, jika tidak, maka tidak akan terjadi dan prosesor akan melanjutkan ke instruksi berikutnya.

2 instruksi berikutnya
dorong edi
tekan 020
Ingatlah bahwa dalam bahasa Inggris push artinya mendorong, mendorong. Di sini ini berarti memasukkan angka ke tumpukan untuk penyimpanan sementara. Variabel sering kali disimpan dengan cara ini sebelum memasukkan register ke dalam prosedur, dapat digunakan untuk tujuan lain, dan dengan bantuan tumpukan, Anda dapat menyimpan nilai register dan meneruskan argumen ke prosedur, yang akan menariknya keluar setelahnya. memasukkannya, dan dorong hasilnya di sana sebelum keluar jika ada yang tersedia dan diperlukan. Kenyamanannya adalah Anda tidak perlu khawatir tentang highlight ruang alamat untuk menyimpan data sementara dalam jumlah besar. Jika Anda perlu meneruskan sebuah array, cukup berikan alamatnya di memori. Tidak ada alasan untuk mentransfer semua elemen array; ini hanya akan membuang-buang memori dan waktu prosesor, seperti yang dilakukan dengan pengkodean kode. (Bila salinan asli array perlu disimpan sesuai dengan logika pekerjaan, ini adalah situasi yang berbeda dan pemrogram sendiri secara sadar memulai penyalinan array untuk tujuan replikasi.)
Saat bekerja dengan tumpukan, prosesor akan mengurus semuanya - area untuk menyimpan tumpukan dialokasikan oleh sistem operasi dengan dukungan perangkat keras dari prosesor.
Instruksi pertama akan menyimpan nilai register EDI - sebuah penunjuk ke area memori tertentu, dan yang kedua akan mendorong konstanta yang telah ditentukan selama 20 jam di sana. Mungkin semacam argumen prosedur, tetapi ini tidak penting bagi kami karena tidak perlu melakukan analisis seperti yang dilakukan pembuat tambalan - lagi pula, kami mentransfer tambalan yang sudah selesai ke versi program lain dan ini biasanya SEDERHANA!

Instruksi selanjutnya
hubungi .06F2E1440
Dalam bahasa Inggris call artinya memanggil, memanggil.
Ini tentang memanggil suatu prosedur. Tidak ada nama dalam kode panggilan prosedur - ada alamat di mana kodenya berada. Untuk kenyamanan, disassembler (termasuk Hiew) dapat mengekstrak nama prosedur dan fungsi dari tabel impor dan ekspor file EXE (interaksi diharapkan ada di sana program yang berbeda dan “perpustakaan” setelah kompilasi dan prosedur diberi nama yang dapat dipanggil dari program lain, namun prosedur internal tidak diberi nama setelah kompilasi). Tentu saja, ada nama-nama di kode sumbernya, tetapi setelah dikompilasi, nama-nama itu tidak ada gunanya... Nama-nama itu hanya akan menghabiskan ruang. Prosesor tidak perlu mengetahui nama siapa pun, ia menghitung angka... Terkadang dekompiler/disassembler berhasil mengekstrak nama prosedur dari informasi debug (jika pembuat kode lain lupa memotongnya dan memperbesar ukuran biner dengan informasi yang tidak berguna) dan ini membantu dalam menganalisis kode, tetapi dalam kasus kami hal itu tidak menjadi masalah. Kami tidak perlu memahami mengapa prosedur ini diperlukan dan apa fungsinya... Izinkan saya mengingatkan Anda bahwa kami memiliki tambalan yang sudah jadi dan jika kami berhasil mentransfernya "tanpa insiden", maka kami tidak perlu melakukannya menyelidikinya.

Instruksi terakhir diberikan
pop ecx
Pop – tindakan kebalikan dari push – yaitu. pop nilai terakhir yang dimasukkan ke tumpukan. Dalam hal ini, ke register ecx. Mungkin instruksi ini diperlukan untuk mengekstrak hasil prosedur, tetapi kami juga tidak mempermasalahkannya, termasuk. dan karena instruksi ini, seperti 2 dorongan dan panggilan di atas, tidak berubah setelah patch dan diberikan untuk beberapa presentasi umum dan sebagai titik referensi untuk batas patch. Setelah patch, semua instruksi ini akan tetap berlaku, begitu pula semua instruksi setelahnya.

6. Sekarang kita ambil termrv.dll yang ditambal di jendela Hiew lain, di alamat yang sama kita melihat instruksi apa yang ada.
pindahkan eax,
bergerak eax, 000000100
tidak
bergerak, eax
dorong edi
tekan 020
hubungi .06F2E1440
pop ecx
Perbedaannya hanya kita lihat pada instruksi kedua, ketiga dan keempat.
Gerakan kedua eax, 000000100
cukup masukkan konstanta 100h (=256) ke dalam register eax
Tidak ketiga
yang paling "konyol" = NoOperation - tidak melakukan apa pun dan selama-lamanya. Mengapa itu diperlukan? Dan diperlukan penyelarasan sinkronisasi sesuai kode-datanya. Faktanya adalah bahwa ukuran kode asli dan kode yang ditambal harus benar-benar sesuai dalam jumlah byte dan batasan perintah (bersama dengan argumennya). Jika ada yang bergerak bahkan satu byte pun, prosesor akan pergi "ke tempat yang salah" dan akan menganggap argumen instruksi tertentu sebagai perintah, dan byte berikutnya sebagai argumen untuk perintah ini, bahkan jika ada kode perintah yang berbeda. Semuanya akan hilang seketika dan berakibat fatal. 99% bahwa program akan crash kesalahan fatal. Perintah nop memiliki kode 90h dan memakan satu byte. Jika ada kode berlebihan yang tidak diperlukan atau bahkan berbahaya untuk tujuan patch, kode tersebut dapat diganti bersama dengan argumennya sebanyak nop berturut-turut sebanyak byte yang ditempati. Di kalangan hacker, hal ini disebut zanopat atau zanopat. Faktanya, ini satu-satunya cara hapus kode yang tidak perlu dari kode yang dapat dieksekusi, karena ini bukan teks dan setiap "pemotongan dari tengah" "untuk tujuan memperpendek" akan segera mengarah pada fakta bahwa semua alamat akan digeser, dimakan habis dan tidak ada yang berfungsi sama sekali . Dan hal terburuk terjadi ketika kode baru, yang perlu mengganti yang lama, tidak cocok dengan tempat "lama"... Di sinilah sakit kepala para hacker dimulai - cara memencetnya agar pas...
Langkah keempat, eax
memasukkan nomor dari register eax ke dalam lokasi memori
Pada prinsipnya, instruksi ketiga dan keempat atau ketiga dan kedua dapat ditukar - ini tidak akan mengubah apa pun. Tetapi tidak ada cara untuk menghapus nop karena perintah baru memiliki panjang kode 1 byte lebih sedikit daripada yang lama dan perbedaan seperti itu, jika tidak diatasi dengan nop, akan segera menyebabkan kegagalan sinkronisasi.

Perbandingan "dengan apa yang terjadi" segera menempatkan segala sesuatu pada tempatnya!
Itu - ambil nomor dari sel, bandingkan dengan nomor dari sel. Jika keduanya sama, maka lompatlah “ke suatu tempat”; jika tidak, lanjutkan lebih jauh dan selesaikan prosedurnya. Dalam konteks permasalahannya, perbandingan angka ini menyerupai koneksi yang valid dengan batas yang diperbolehkan (yaitu 1 untuk workstation atau 2 untuk server). Batasnya disimpan dalam beberapa jenis konstanta, yang alamatnya ditentukan dalam instruksi perbandingan.
Apa yang terjadi - ambil nomor dari sel, lupakan "ini masalahnya" dan segera timpa nilai register EAX dengan konstanta 100h (=256 - yaitu, tampaknya, batas baru 256 koneksi), lalu tempatkan nomor ini di dalam sel
Tidak ada yang membandingkan apa pun, prosedur yang disebut di bawah ini akan selalu dijalankan. Selain itu, batas baru = 256 ditulis ke sel di mana, jelas, batas koneksi disimpan “secara paksa” jika ada pemeriksaan lain terhadap batas ini di tempat lain dalam program. ITU SEMUA! Sulit untuk menemukan sesuatu yang lebih primitif!

Jika kami harus mencari tempat ini sendiri, kami harus melacak prosedur dll ini dengan debugger, seperti yang dilakukan pembuat tambalan, atau membongkar semuanya dengan sesuatu seperti IDA dan mempelajari dengan cermat kode yang berisi ratusan ribu instruksi. Tapi kami sudah menyiapkan segalanya! Ini seperti lelucon tentang mekanik yang memukulnya sekali dengan palu dan mobil mulai menyala, tetapi halusnya adalah dia tahu di mana harus memukul dan itu membutuhkan banyak usaha. (Hanya saja, jangan bicara tentang uang di sini - doronglah! Terutama pada malam hari libur yang menyenangkan! Bagi mereka yang suka "menghasilkan uang di Internet" ada situs khusus.)

Mengapa tambalan tidak berfungsi pada semua versi berikutnya - karena alamat berubah dan kode (argumennya) sedikit berubah selama kompilasi. Hal ini menyebabkan perpindahan kode yang diperlukan di dalam EXE ke offset lain, dan jika Anda mencari berdasarkan tanda tangan (urutan byte yang ketat), pencarian mungkin tidak menemukan argumen yang telah berubah. Banyak alamat juga merupakan argumen terhadap instruksi dan perubahan kode biner tak bisa dikenali lagi, padahal esensinya masih sama... Lakukan secara manual! Anda memiliki kepala di pundak Anda, dan bukan "urutan konvolusi yang ketat"...

7. Sekarang dalam versi ASLI dari termrv.dll yang ditambal oleh patcher, Anda perlu menemukan beberapa urutan byte yang unik, dalam konteks program, DEKAT tempat yang perlu Anda patch untuk mencarinya di versi baru termrv.dll, yang ingin dipatch, tetapi patcher tidak menambalnya...
Anda perlu melihat disassembler, dan mencari BYTES yang sesuai, dan jika Anda memilih sesuatu yang terlalu "sederhana", maka kombinasi seperti itu akan muncul berkali-kali selama pencarian dan akan sulit untuk menemukan tempat yang tepat, itu akan “tenggelam” di antara sekumpulan yang serupa lainnya. Dan “akurasi” sangat penting bagi kami, karena jika Anda menambalnya “di tempat yang salah”, itu tidak akan berfungsi, atau bahkan Windows akan hang...
Anda tidak dapat memilih instruksi yang berisi alamat tetap yang panjang untuk string pencarian. Saat mengkompilasi versi lain, kemungkinan besar versi tersebut akan hilang dan Anda tidak akan menemukan apa pun tentang versi tersebut di versi baru.
Seluruh prosedur di mana pemeriksaan dilakukan kecil, hanya beberapa lusin perintah. Bagi seorang assembler, ini bukan apa-apa. Hiew akan menunjukkan kepada Anda batasan kondisional dari prosedur sebagai “garis” _^_^_^_^_^_. Harap dicatat bahwa di awal prosedur ada banding ke alamat “impor”. Prosedur Windows API – CDefPolicy::Query dan Hiew mendeteksi ini (itulah sebabnya saya menemukan nama fungsinya dan menulisnya). Ini harus menjadi panduan yang baik bagi Anda menuju tempat yang tepat. Selain itu, “kakbe ini memberi petunjuk” bahwa mungkin ada cara lain untuk menyelesaikan masalah, misalnya dengan menemukan Kebijakan “rahasia” tertentu yang bertanggung jawab atas perilaku Server Terminal. Mereka yang tertarik dapat melacak kode dengan debugger dan mencari bagaimana variabel atau konstanta dengan jumlah koneksi diinisialisasi. Namun untuk string pencarian “kode dari CDefPolicy” tidak cocok, karena alamat prosedur yang diimpor kemungkinan besar akan dihapus di versi baru. Saya akan mencoba mencari berdasarkan byte dari awal prosedur setelah CDefPolicy. Ini dia:
57 tekan edisi
6A10 menekan 010
8BF1 bergerak esi,ecx
33DB xor ebx,ebx
keluar 57 6A 10 8B F1 33 DB
Pada akhirnya, Anda dapat menambahkan kode E8 lain untuk instruksi panggilan, diikuti olehnya, tetapi BUKAN argumennya (byte berikutnya), karena ini adalah alamatnya dan akan berubah ketika versi baru dikompilasi.
Urutan ini memberi saya ketika mencari di Hiew (F7-Search)
Hanya ada 3 kecocokan. Selain itu, panggilan CDefPolicy hanya terlihat dalam konteks dalam satu kasus - dalam kasus pertama. Jika Anda juga mengalami hal yang sama – suatu tempat telah ditemukan, tuliskan alamatnya dari kolom pertama (setelah menekan Alt-F1 – Global!) “di selembar kertas” dan coba menambalnya.
Jika kode telah banyak berubah sehingga tidak menemukan apa pun, kami mencari urutan unik lainnya, termasuk. diperoleh dari prosedur tetangga dan mencoba mencarinya. Tugasnya adalah menemukan kode yang diperlukan, di mana "semuanya cocok artinya", dan bukan urutannya, kami memikirkan hal ini dan melihat konteksnya, mencoba menemukan CDefPolicy::Query di versi baru. Anda dapat mencari teks CDefPolicy::Query di new.dll. Anda akan menemukan barisnya (berkali-kali), tetapi bukan tempat di mana alamatnya direferensikan. Metode ini terkadang membantu menemukan apa yang Anda perlukan menggunakan F6 (Referensi) di Hiew, dan saya berhasil menemukan tempat yang tepat di dll dari Win7SP1x86Rus demi eksperimen, tetapi bukan fakta bahwa ini akan berfungsi di mana saja, terutama dengan yang lain program).

8. Sekarang Anda perlu mengambil termrv.dll dari versi yang perlu Anda patch. Kami meluncurkan salinan ketiga Hiew, membuka dll baru di dalamnya” (untuk dengan mudah beralih di antara ketiganya dan membandingkan secara visual). Kita cari tempat yang tepat, seperti yang dijelaskan di atas, atau pergi ke alamat yang kita tulis “di selembar kertas” (kertas pada umumnya adalah teman programmer di dunia fana di mana orang mati. hard drive, menghilangkan kemacetan lalu lintas dan membekukan OS).
Mari kita analisis kode di bawah CDefPolicy::Query dan temukan tempat yang tepat dengan mudah, SEPERTI:
cmp eax
jz.06F30B25E
KAMI MENGERTI bahwa alamatnya adalah , tetapi jika sudah berubah, misalnya, ini adalah alamat yang kami perlukan dan kami akan mengoperasikannya dalam pengeditan lebih lanjut.

9. Jika Anda yakin telah menemukan apa yang Anda butuhkan, gerakkan kursor ke atas instruksi cmp dan tekan F3-Edit. Kursor “abu-abu” akan berubah menjadi “normal” (untuk mode tampilan teks) – subskrip. Itu harus menunjuk ke instruksi cmp yang sama.
Tekan Tab (atau F2) dan dialog untuk memasukkan instruksi perakitan akan muncul.
Masukkan instruksi di sana
bergerak eax, 100
Lalu Masuk. Di layar utama Anda akan melihat bahwa byte "dari instruksi" telah berubah dan beberapa di antaranya menjadi "emas" (kuning). Pada saat yang sama, instruksi DI BAWAH telah "dipindahkan" dan di kolom kanan di seberangnya menunjukkan "sampah" - sama sekali tidak seperti yang ada sebelumnya.
Dialog untuk memasukkan perintah di atas jendela utama terus "hang" dan menunggu instruksi baru dimasukkan, sambil menampilkan beberapa instruksi berikutnya, disalahartikan karena kesalahan pengalamatan.
Kami tidak memperhatikan sedikit pun instruksi ini dan mengetik instruksi berikutnya.
Ketik nop dan tekan Enter
Di jendela utama, baris berikutnya dengan kode 90 akan menyala kuning.
Sinkronisasi akan dipulihkan dan perintah selanjutnya adalah jz. Ini akan meminta Anda untuk mengubah dialog untuk memasukkan instruksi.
Mengendarainya ke sana
bergerak, eax
Jika alih-alih 320 ada alamat berbeda di perintah cmp, masukkan IT!
Tekan Enter. setelah itu kode pada baris 3 akan menyala kuning, di sebelah kanannya harus ada instruksi mov ,eax (atau bukan 320, tetapi angka yang dimasukkan).
Kami memeriksa bahwa sinkronisasi kode-data TIDAK salah. Instruksi selanjutnya harus berupa push edi (atau yang lain jika kode telah banyak berubah dan Anda memiliki instruksi yang berbeda sebelum patch - instruksi tersebut harus tetap di tempatnya dan ditafsirkan dengan benar, yang berarti semuanya setelahnya baik-baik saja).

Jika semuanya sudah dimasukkan, tekan Esc SEKALI. Dialog untuk memasukkan instruksi akan hilang, namun Anda dapat memanggilnya lagi kapan saja (dalam mode edit) dengan menekan Tab. Semua byte yang diubah akan berwarna kuning. Periksa dengan cermat apakah semuanya sudah benar dan Anda tidak membuat kesalahan di mana pun. Tidak ada seorang pun di sini yang akan memeriksa apa pun untuk Anda, TIDAK ada “perlindungan terhadap orang bodoh” dengan pangkat atau gelar apa pun. Tidak ada yang akan memperhitungkan tanda kebesaran itu. Apa yang kami lakukan adalah apa yang kami dapatkan. Jika Anda mengacaukannya, itu akan membeku dan tidak berfungsi.
Jika semuanya OK, tekan F9 (Perbarui). Perubahan akan ditulis ke file di disk dan byte yang diubah akan berubah warna menjadi normal (Cyan).

10. Sekarang Anda perlu memperbaiki checksum EXE. Melakukan hal ini sangatlah membosankan, karena Hiew akan melakukan pekerjaannya untuk Anda dan Anda tidak perlu melakukan apa pun. Tekan F8 (Tajuk). Jendela "abu-abu, tidak mencolok" muncul dengan "dekripsi" parameter header file EXE.
Tekan F3 (Edit). Warna ungu "berwarna" muncul di atas jendela "tidak mencolok". Ini mencantumkan semua parameter header dengan alamat dan nilainya. Dengan wajah membosankan, kita gulir ke akhir dan temukan parameter Checksum di sana. Di sebelah kanan adalah nilainya (checksum itu sendiri) dalam ekspresi heksadesimal dan desimal, yang “diwarisi” dari file UNPATCHED asli. Tekan F3 lagi dan, lihatlah, garis berubah menjadi kuning dan checksum berubah nilainya. Kita bisa mempercayai Hiew, atau kita bisa menemukannya di forum atau di buku dan menghitungnya secara manual. Jika “semuanya memuaskan”, tekan F9 (Perbarui). Windows berkedip, semuanya hilang... Inilah akhirnya, pikir pembaca yang belum tahu. Tapi ketika debu mengendap, checksumnya benar. Mereka yang tidak percaya dapat kembali ke dialog yang disebutkan dan membandingkan Checksum dengan yang disimpan dengan hati-hati sebelum eksekusi dalam cadangan di selembar kertas. Anda dapat keluar dari Hiew menggunakan Esc dan melanjutkan ke tahap pengujian unit Anda.

11. Setelah menerima file patch, Anda dapat mencoba mengganti termrv.dll di OS target.
Karena mekanisme perlindungan Windows terhadap perubahan file sistem, serta larangan merekam menjalankan program(pelanggaran berbagi) layanan Terminal harus dihentikan (lihat di komentar pengguna lain di atas) dan ganti salinan dll di "semua jenis WinSxS", dll., sehingga Windows yang tidak sah lupa untuk berpikir untuk mencoba untuk memulihkan versi yang belum ditambal.

Jika semuanya berhasil, berarti Anda telah menjadi seorang kulhatzker atau telah mengambil langkah SADAR pertama di jalur ini. Tidak ada yang menghentikan Anda untuk menjelajah dan belajar lebih jauh, menjadikan dunia tempat yang lebih baik dan ramah. Ada banyak instruksi dan forum tematik di Internet bagi mereka yang ingin berpikir sendiri, dan tidak hanya mengonsumsi pornografi konsumen dari Matrix.

Jangan ragu untuk mempublikasikan daftar byte yang diubah (Anda bisa mendapatkannya menggunakan “stok” yang sama “FC /b File1 File2″) untuk pengguna lain yang kurang mahir, di sini dan/atau di sumber lain, berbuat baiklah kepada tetangga Anda, sebagaimana Tuhan mewariskan dan mengagungkan namanya dalam catatan sejarah hacker.

Dengan menggunakan daftar perubahan, Anda dapat membuat file .CRK (untuk patcher yang memahami format kuno ini), atau membuat patch.exe menggunakan pembuat patch mana pun, yang, selama bertahun-tahun evolusi, lusinan dan ratusan telah ditulis. Pilih saja “dengan dukungan” Windows Vista/7″ karena yang lama, meskipun bagus dan bagus, tidak tahu apa-apa tentang hak istimewa Escalate, dan Windows dengan bodohnya tidak akan mengizinkan mereka menambal apa pun di Windows/Sistem atau File Program. Instruksi harus menyebutkan persyaratan untuk menghentikan layanan terminal, atau penggunaan tambalan pada file di folder terpisah dengan penggantian berikutnya di system32 oleh pengguna sendiri. Bagaimanapun, publikasikan daftar perubahan, jangan sia-siakan kemenangan Anda, seseorang mungkin harus melakukannya sendiri dan infonya akan membantu Anda menemukannya solusi alternatif. Patcher pembuat melakukan semua ini secara otomatis, termasuk bekerja dengan WinSxS - Saya melihat kodenya, tapi menurut saya tidak akan mudah untuk menemukan pembuat patch yang memperhitungkan semua ini.

Terminal Server Windows 7/Vista/XP (sp1/sp2/sp3)- solusi nyata. Server terminal untuk terhubung ke desktop jarak jauh Windows 7/Vista/XP (sp1/sp2/sp3) beberapa pengguna secara bersamaan.

Server Terminal dapat digunakan untuk meluncurkan satu aplikasi dengan komputer jarak jauh atau milikmu server terminal pada Windows 7/XP / pemandangan/ Anda dapat menghubungkan komputer lama yang berbeda seperti 486 dan Pentium 1 secara bersamaan, keduanya akan berfungsi seolah-olah sistem operasi telah diinstal pada komputer tersebut Windows Vista / 7 / XP dengan Office XP-2003-2007, 1C dan banyak program perkantoran yang berbeda.

Bawaan Windows 7/Vista/XP tidak mendukung banyak pengguna secara bersamaan. Untuk memungkinkan beberapa pengguna bekerja secara bersamaan RDP, Anda perlu mengganti file C:\Windows\System32\termsrv.dll dan membuat perubahan pada registri - untuk menghapus batasan yang dikenakan pada Windows XP/7/Vista.

Sebelum melakukan perubahan pada Windows 7/Vista/XP, pastikan tindakan Anda tidak bertentangan dengan hukum negara Anda dan perjanjian lisensi, jadi terserah Anda untuk memutuskan apakah akan menggunakan metode ini atau tidak.

Bagaimana cara membuat terminal server dari Windows XP/7/Vista?

1. Buat beberapa pengguna dengan hak administrator atau pengguna biasa, pastikan untuk menyetel kata sandi.

Pastikan opsi ini diaktifkan - Peralihan cepat antar pengguna (Panel Kontrol -> Akun pengguna -> Mengubah login pengguna)

2. Izinkan koneksi jarak jauh- pilih "My Computer" dengan mengklik kanan dan buka "Properties" nya. Di jendela yang muncul, buka “ Sesi jarak jauh" Butir “Izinkan akses jarak jauh ke komputer ini" konfirmasi dengan tanda centang. Pilih pengguna yang dihapus (jika tidak Desktop Jarak Jauh hanya akan berfungsi untuk administrator) dan klik "OK"

3. Verifikasi bahwa Koneksi Desktop Jarak Jauh berfungsi untuk satu pengguna.

Membuat server terminal Windows XP/7/Vista

4. Unduh patch universal untuk membuat server terminal:
-
Windows XP sp2 sp3;
- Windows Vista sp1 sp2;
- Windows 7, 32bit(x86)/64bit(x64).

5. Jalankan filenya UniversalTermsrvPatch-*.exe yang sesuai dengan ukuran bit sistem Anda dan tekan Tambalan untuk mengganti file C:\Windows\System32\termsrv.dll

6. Jalankan file *.reg yang sesuai dengan sistem operasi Anda untuk membuat perubahan pada registri

7. Nyalakan ulang sistem operasi

8. Mulai -> Jalankan -> gpedit.msc


Untuk Windows 7

Konfigurasi Komputer -> Template Administratif -> Komponen Windows-> Layanan Desktop Jarak Jauh -> Host Sesi Desktop Jarak Jauh -> Koneksi ->


Untuk Windows XP

Konfigurasi Komputer -> Template Administratif -> Komponen Windows -> Server Terminal -> Batasi Jumlah Koneksi


Setel ke "Diaktifkan" dan ubah nilai jumlah terminal yang diizinkan.


9. Nyalakan kembali komputer Anda

Jika Anda melakukan semuanya dengan benar, maka server terminal Windows 7/Vista/XP (sp1/sp2/sp3) siap. Ini seharusnya berhasil untuk Anda sekarang desktop jarak jauh untuk banyak pengguna secara bersamaan.

Pengaturan server terminal tambahan Windows XP

1. Seperti yang ditunjukkan oleh praktik, pengguna server terminal cukup memutuskan sambungan, dan program terus bekerja. Anda dapat mengatur waktu untuk memutuskan sambungan sesi yang tidak aktif

Mulai -> Jalankan -> gpedit.msc
Konfigurasi Komputer -> Templat Administratif -> Komponen Windows -> Server Terminal -> Sesi -> Tetapkan batas waktu untuk sesi yang terputus

Aktifkan dan atur waktu

Ada juga batasan lainnya, Anda bisa memilih sesuka Anda

2. Jalankan satu program untuk semua pengguna jarak jauh di server terminal, tanpa desktop

Mulai -> Jalankan -> gpedit.msc
Konfigurasi Komputer -> Template Administratif -> Komponen Windows -> Server Terminal -> Jalankan program saat terhubung

Menyalakan
\Bkc.RemoteClient.exe

Tentukan folder kerja
C:\Program Files\Bankomzv"bahasa\Perhatian pelanggan tambahan

3. Jalankan satu program untuk pengguna server terminal yang dipilih, tanpa desktop(perhatian, ini berfungsi meskipun Anda masuk secara lokal, jadi saya bahkan tidak tahu cara membatalkannya nanti, kecuali mungkin menghapus pengguna lalu membuat yang baru atau menggunakan disk boot liveCD, (program ERD-commander) dengan pilihan memuat registry sistem operasi yang kita butuhkan.

Mulai -> Jalankan -> regedit

Buat parameter string Shell dan di bidang "Nilai" tentukan path lengkap ke file program

4. Meluncurkan satu program secara mandiri oleh pengguna server terminal, tanpa desktop

Untuk memulai, lakukan poin 2 untuk semua pengguna , reboot lalu kembalikan nilainya seperti semula (Tidak ditentukan)

Dalam pengaturan klien Windows(Remote Desktop Connection) dari mana kita menghubungkan, di Opsi di tab Program, centang kotak “Saat menghubungkan, jalankan program berikut”

Tentukan path lengkap ke program dan nama file

Tentukan folder kerja
C:\Program Files\Bankomzv"bahasa\Perhatian pelanggan tambahan

5. Luncurkan program saat Anda masuk ke desktop

Tambahkan pintasan ke folder Startup
C:\Dokumen dan Pengaturan\nama pengguna\Menu Utama\Program\Startup\

Seperti pada versi klien sebelumnya sistem operasi Pengguna Microsoft, Pro, dan Enterprise edisi Windows 10 dapat terhubung dari jarak jauh ke komputer mereka melalui Remote Desktop Services (RDP). Namun, ada batasan jumlah sesi RDP secara simultan - hanya satu pengguna jarak jauh yang dapat bekerja dalam satu waktu. Saat mencoba membuka sesi RDP kedua, sesi pengguna pertama diminta untuk mengakhiri.

Faktanya, pembatasan jumlah koneksi RDP secara bersamaan bukanlah bersifat teknis, melainkan bersifat perizinan, yang melarang pembuatan server RDP berdasarkan stasiun kerja untuk banyak pengguna.

Nasihat. Di rumah edisi Windows 10 koneksi masuk ke desktop jarak jauh sepenuhnya dilarang, namun hal ini dapat diatasi dengan menggunakan.

Kami akan melihat dua cara untuk menonaktifkan batas jumlah simultan koneksi RDP ke Windows 10:

Catatan. Modifikasi sistem yang dijelaskan dalam artikel ini kemungkinan besar akan dianggap sebagai pelanggaran perjanjian lisensi pada Windows dengan segala konsekuensinya.

Modifikasi file termrv.dll

Anda dapat menghapus batasan jumlah koneksi RDP dengan memodifikasi file termrv.dll (file perpustakaan yang digunakan oleh layanan Layanan Desktop Jarak Jauh). File terletak di direktori C:\Windows\System32).

Sebelum memodifikasi file termrv.dll, disarankan untuk membuatnya salinan cadangan(jika perlu, Anda dapat kembali ke versi asli file):

salin c:\Windows\System32\termsrv.dll termsrv.dll_backup


Sebelum mengedit file termrv.dll, Anda harus menjadi pemiliknya dan memberikannya kepada grup administrator hak penuh di atasnya (semua operasi dilakukan dengan cara yang sama seperti yang dijelaskan dalam artikel). Kemudian hentikan layanan Remote Desktop (TermService) dari konsol services.msc atau dari baris perintah:

TermService berhenti bersih


Untuk edisi Windows 10 x64 RTM (versi file termrv.dll adalah 10.0.10240.16384): Buka file termrv.dll menggunakan apa saja Editor HEX(misalnya Hexer Kecil)

Temukan garisnya:

39 81 3C 06 00 00 0F 84 73 42 02 00

Dan ganti dengan:

B8 00 01 00 00 89 81 38 06 00 00 90


Simpan file dan mulai layanan TermService.

Perpustakaan Pembungkus RDP

Alternatif untuk memodifikasi file termrv.dll adalah dengan menggunakan proyek Perpustakaan Pembungkus RDP. Program ini bekerja sebagai lapisan antara manajer kontrol layanan (SCM-Service Control Manager) dan layanan terminal (Layanan Terminal) dan memungkinkan Anda untuk mengaktifkan tidak hanya dukungan untuk beberapa sesi RDP secara bersamaan, tetapi juga mengaktifkan dukungan untuk Host RDP pada edisi rumahan Windows 10. RDP Wrapper tidak membuat perubahan apa pun pada file termrv.dll, cukup memuat termrv dengan parameter yang diubah.

Oleh karena itu, solusi ini akan berfungsi bahkan jika Anda memperbarui versi file termrv.dll, jadi Anda tidak perlu khawatir tentang pembaruan Windows.

Anda dapat mengunduh RDP Wrapper dari repositori GitHub: https://github.com/binarymaster/rdpwrap/releases (versi terbaru yang tersedia dari RDP Wrapper Library v1.6)

Nasihat. Omong-omong, sumber Perpustakaan Pembungkus RDP tersedia, yang memungkinkan Anda merakit sendiri file yang dapat dieksekusi jika Anda mau.

Arsip RDPWrap-v1.6.zip berisi beberapa file:

  • RDPWinst.exe - program instalasi/penghapusan untuk RDP Wrapper Library
  • RDPConf.exe - Utilitas konfigurasi RDP Wrapper
  • RDPCheck.exe - Pemeriksa RDP Lokal - utilitas pemeriksaan RDP
  • instal.bat, uninstall.bat, perbarui.bat - file kumpulan untuk menginstal, menghapus, dan memperbarui RDP Wrapper


Untuk menginstal utilitas, jalankan file install.bat dengan hak administrator.


Setelah instalasi selesai, jalankan RDPConfig.exe. Dan pastikan itu di bagian tersebut Diagnostik semua elemen dicat hijau.

Kami mencoba membuka sesi RDP kedua. Semuanya berhasil! Sekarang Windows 10 kami memungkinkan dua pengguna jarak jauh untuk terhubung secara bersamaan melalui RDP.




 


Membaca:



Menggunakan gaya di Excel Cara membuat gaya baru Anda sendiri

Menggunakan gaya di Excel Cara membuat gaya baru Anda sendiri

Jika Anda secara konsisten menggunakan opsi yang sama untuk memformat sel lembar kerja di spreadsheet Anda, mungkin ada baiknya Anda membuat gaya pemformatan...

Kesalahan apa yang terjadi saat instalasi?

Kesalahan apa yang terjadi saat instalasi?

Catatan: Program AutoLISP hanya dapat dijalankan pada AutoCAD versi lengkap, tidak dapat dijalankan pada AutoCAD LT. (tidak termasuk kasus pemuatan...

Status sosial seseorang dalam masyarakat

Status sosial seseorang dalam masyarakat

Sarankan apa yang menentukan pilihan seseorang terhadap status utamanya. Dengan menggunakan teks dan fakta kehidupan sosial, buatlah dua asumsi dan...

Interpretasi penuh atas kesalahan

Interpretasi penuh atas kesalahan

Tak sedikit pengguna yang menjumpai fenomena blue screen of death. Apa yang harus dilakukan (Windows 7 paling sering rentan terhadap masalah ini)...

gambar umpan RSS