Acasă - Serviciu
Windows 7 sesiuni rdp multiple

Pentru a corecta versiunile noi (dacă logica de operare a secțiunii de cod corespunzătoare nu s-a schimbat semnificativ), trebuie să faceți următoarele:

0. Instrucțiunile sunt potrivite pentru specialiști mai mult sau mai puțin educați și, cel mai important, deștepți, care știu să gândească. Cei care sunt obișnuiți să „copie” totul folosind Copy/Paste, se pare, nu vor putea face față și vor face „gemete” și „lamentări” despre „multe litere”, „dificil” sau „nu ușor” din cauza mai multor fricile și stereotipurile gândirii mai degrabă decât complexitatea problemei. Acesta este destinul lor. După cum se știe, cei născuți să se târască nu pot zbura. Nu te lăsa să te usuci, Anon! Bea Iada sau fa MUNCA si incepe sa te respecti!

1. Descărcați orice – plătit sau versiune gratuită Hiew
Chiar și versiunile foarte vechi din anii 90 sunt potrivite, dar dacă trebuie să corectați x64, atunci aveți nevoie de 8.x (începând de la mijlocul anilor 2000 :)) Este mai bine, desigur, să luați unul nou. Autorul a dezvoltat produsul de 25 de ani și există puține alte creații perfecte de abilități de programator.

2. Luați termsrv.dll dintr-o anumită versiune acceptată - versiunea originală și versiunea corectată. Dacă nu există nicio corecție, este rezonabil să presupunem că trebuie să fie corectată cu patch-ul existent, nu fi prost! Începe să te gândești! Puneți toate fișierele necesare într-un folder sau foldere separate. Nu este nevoie să încercați să editați nimic dintr-o singură copie în system32. ORUM NIMIC VA FUNCȚIONA (înregistrarea este blocată în system32) și doar oile fac asta.

3. Comparați versiunile corelate și nepatchate ale aceluiași dll cu orice comparator de fișiere binar. Pachetul Windows include utilitarul de consolă FC. Comanda „FC /b termsrv.org termsrv.crk > differences.txt” duce la profit. Lista diferențelor, și este mică, de aproximativ 20 de rânduri, va fi trimisă în fișierul differences.txt
Deschideți fișierul editor de textși, fie lăsați-l deschis, fie copiați-l pe o bucată de hârtie din care și la care offset s-au schimbat octeții. Ne aprofundăm imediat și înțelegem că toate offset-urile și valorile octetilor, ca mai jos în Hiew, sunt indicate în sistemul hexazecimal, dar acest lucru nu ar trebui să „sperii” pe nimeni, pentru că nimic nu trebuie convertit în zecimal! (Dacă aveți nevoie brusc de el, pentru dezvoltare generală, un calculator Windows vă va ajuta.)

În listă vedem (identificăm) 3 blocuri condiționate, unde adresele sunt pe rând. Primul bloc este de 2 octeți chiar la începutul exe, la offset-uri 140-s-something-h (dll-ul are același format ca exe, singura diferență este că conține doar proceduri și funcții pentru apeluri externe - așa-numitele exporturi, așa că nu veți putea să-l executați direct redenumindu-l în exe). Aceste date, offset-ul de căutare, ajung în antetul fișierului EXE. Aceste compensații sunt folosite pentru a stoca suma de control cod-date (fără antet), pe care Windows le verifică înainte de a porni, asigurându-se că fișierul nu a fost deteriorat și că ceva nu se va prăbuși atunci când încearcă să-l execute. Vom reveni la ei mai târziu.
Urmează un bloc de modificări de aproximativ 10 octeți. Este exact ceea ce vom studia. După aceasta, există un alt bloc de modificări - ultimii 6 octeți ai executabilului. Concluzia este că în loc de „zerouri”, autorul și-a introdus numele tare „deepxw” în spațiul gol de la sfârșit. O plecăciune scăzută în fața lui pentru plasture și idee, dar nu există niciun motiv anume pentru ca noi să-i repetăm ​​„deliciile” atunci când transferăm plasturele, prin urmare, acest lucru poate fi făcut de cei care doresc să o facă singuri, care nu au ce să facă. faceți în serile lungi de iarnă, ca parte a studiului „Driving litere obișnuite în spații goale ale fișierelor EXE folosind Hiew”. Cu toate acestea, acest lucru poate fi perceput ca un tribut adus autorului (doar că nimeni nu citește „acolo”).

3. Deschideți dll-ul original într-o fereastră Hiew, cel corectat în alta (rulați 2 copii Hiew! În general, este mult mai convenabil să utilizați Far - două lucruri, ca manager de fișiere și bază pentru lansarea „aceste” Hiew). În ambele, apăsați F4 (Mod) și selectați Decode (F3). Vom vedea o bucată dezasamblată din dosar încă de la început. Nu este nimic de văzut acolo, pentru că Hiew „încearcă” să demonteze titlul Fișierul EXE, iar acestea sunt date, nu cod. Nu e nevoie să te uiți acolo, el îți arată ceea ce este complet normal, pentru că aici trebuie să Gândești, și nu „copii”! Încă o dată ne întâlnim și începem să ne gândim, nu este nevoie să încercăm prost și să urmăm literalmente instrucțiunile...

4. În ambele Hiews (la rândul său, la naiba, credem...) apăsați F5 (Goto) și vedeți că a apărut un câmp de introducere în partea de sus. Acolo introducem adresa primei diferente (din AL DOILEA BLOC!) gasita in fisierul diferentelor. DE EXEMPLU, în Win7SP1x86Rus acestea sunt adrese în regiunea 19100h, iar în VistaSP2Eng (x86 sau x64 - xs), așa cum am văzut pe blogul autorului, acestea sunt adrese în regiunea 65200h. Ajungem la locul primului octet corectat.

Datele din această fereastră Hiew arată astfel:
– În prima coloană – offset hex – de la începutul fișierului, sau în memoria procesului – depinde de modul Hiew, selectat prin Alt-F1 (Global-Local). În mod implicit, arată Local = ca în memorie dacă Hiew reușește să descopere formatul codului-date. În cazul nostru, acest lucru nu reprezintă o problemă, deoarece formatul de fișier EXE îi permite să „descopere cu ușurință totul”. Prin urmare, nu trebuie să vă speriați când vedeți 06F2F8D51 acolo în loc de 19153 introdus. Adresarea de memorie este importantă pentru înțelegerea adresei procesului, a modului în care va arăta când este executat și pentru analiza codului, dacă este necesar.
– A doua coloană conține o reprezentare hexazecimală a datelor-cod cu analiza codului și datelor căreia îi aparțin instrucțiunii. Prin urmare, fiecare linie are lungime diferită. Afișat în acest fel numai pentru confortul dumneavoastră. „De fapt” (C) în fișierul în sine, toate sunt „legate” împreună într-un rând, ceea ce îl puteți vedea în modul „simplu” de vizualizare a datelor hexadecimale (F4->Hex), unde octeții hexadecimale sunt afișați „prost ” în stânga, separate de spații, iar în dreapta sunt „crackere” din tabelul ASCII care corespund acestor octeți - ca în „orice” „bun vechi” editor hexadecimal precum WinHex, capturi de ecran pe care le-ați văzut pe „orice” „ site-ul web kulhatsk”. Lucrăm cu aceiași octeți tot timpul, așa cum face computerul însuși. Întrebarea este doar în prezentarea și interpretarea lor. Când copiați un fișier executabil de pe disc pe disc, acesta este TOATE DATELE și NU COD, pentru că nimeni nu execută nimic. Dar de îndată ce indicați Windows că acesta este un fișier executabil, rulați-l, Windows îl analizează în cod și date și rulează doar codul dintr-un loc predeterminat de standard și antet, după care codul în sine, executat de procesor , este analizat în continuare în funcție de structura sa și el însuși este împărțit din nou pe cod și date și așa mai departe.
În modul F4->Decode, în loc de „krakozyabr”, ne arată octeți și „sens adevărat”.
– În a treia coloană (dreapta) și cea mai mare (mai precis, o pereche de coloane) ni se arată o secțiune dezasamblată de cod - text, așa-numita. o reprezentare „mnemonică” a acestui cod (limbaj de asamblare), destinată unei percepții oarecum simplificate și ușor de înțeles pentru „homo sapiens”, cu minunata sa gândire asociativă analogică, care are un timp extrem de dificil să perceapă secvențe de cod abstracte „goale”.

5. După ce am trecut la offset-ul dorit din paragraful anterior, vedem că cursorul (cel gri mic :)) indică începutul unei comenzi de 6 octeți (în x64 pot fi mai mulți octeți) în dreapta căreia instrucțiunea cmp eax TYPE este „dezasamblată”,
dacă luați o linie deasupra și câteva dedesubt, veți obține o construcție ca:
muta eax,
cmp eax
jz.06F30B25E
push edi
apăsați 020
sunați la .06F2E1440
pop ecx
Pentru a înțelege această construcție, nu trebuie să fii deloc un „expert în asamblare”, deși este recomandat să ai cel puțin cunoștințe de bază pe tema „programare în orice limbă”. Dar să cunoști engleza nu va strica!

Prima instrucțiune (care nu este peticică în niciun fel, este „peste prima diferență”) se numește mov - care, scuzați-mă, este prima asociere care îmi vine în minte de la Limba engleză? – corect – muta – adică mişcare. Argumentele instrucțiunii merg în a doua „subcoloană”. eax și edi sunt așa-numitele Registrele pe 32 de biți sunt celule de memorie unice din procesorul însuși, concepute pentru a stoca date în timp ce acestea sunt procesate. Aproape toate registrele sunt de același tip, teoretic poți scrie orice acolo, atâta timp cât se potrivește, dar unele dintre ele sunt folosite în mod tradițional pentru a stoca date de anumite tipuri (pentru a nu te confunda), de exemplu, EAX, EBX , ECX, EDX sunt folosite direct pentru „datele utilizatorului”, Mai mult, ECX acționează în mod tradițional ca un contor (cicluri, de exemplu), iar ESI, EDI - ca pointeri către o anumită poziție curentă în memorie, adrese cu care să lucreze. Și unele dintre registre sunt dependente de hardware și „este mai bine să nu le atingeți” - de exemplu, registrul IP conține automat adresa instrucțiunii curente pe care o execută procesorul și, dacă încercați să scrieți unele dintre datele dvs. acolo - o variabilă a programului tău, atunci procesorul va merge prost la instrucțiunea cu această adresă și totul se va prăbuși. ESP - indică o stivă - un fel de „sticlă” în care primul care intră este ultimul care iese (Fist In Last Out), conceput pentru stocarea temporară a datelor care nu se încadrează în registre, dar nu are rost în împingerea lor înapoi în memorie odată ce sunt găsite vor fi folosite în curând. Pentru a lucra cu date, de obicei un anumit octet - 8 biți, un cuvânt - 16 biți, un cuvânt lung - 32 de biți sau un cuvânt dublu lung de 64 de biți (pentru procesoarele pe 64 de biți) sunt plasați din memorie într-un registru. Pentru a lucra cu date scurte, puteți accesa părți ale registrului (de exemplu, eax constă din ax - cei 16 biți inferiori și ah și al - părți ale axului în sine), dar acest lucru depășește scopul problemei noastre. Apoi se efectuează unele transformări matematice cu datele din registru, după care rezultatul este plasat înapoi în memorie - în aceeași celulă sau în altă celulă sau în oricare alta alocată de autorul (sau compilatorul său) a programului pentru scopurile corespunzătoare.

Adresele sunt indicate între paranteze drepte. Dacă trebuie să luați DATE dintr-o celulă de memorie la o anumită adresă, și nu adresa în sine, atunci pur și simplu scrieți adresa între paranteze drepte. Construcția TYPE înseamnă că datele trebuie preluate dintr-o celulă de memorie care are o adresă, a cărei valoare se obține prin adăugarea valorii în registrul ESI + 324h. În Adunare se obișnuiește să scrieți mai clar, dar a fost mai convenabil pentru autorul cărții Hiew să o arate astfel, poate pentru claritate. Când introduceți comenzi, Hiew acceptă constructe standard precum , așa cum se arată mai jos, foarte bine.

În total, înțelegem că această instrucțiune preia date (4 octeți = 32 biți) la adresa și le pune în registrul EAX. Următoarea instrucțiune ((care este deja în curs de reparare) este CMP. Primul lucru care îi vine în minte unei persoane corecte care a studiat cu sârguință engleza la școală este compararea. Vorbim despre comparație. În rest, totul este la fel ca în instrucţiunea anterioară Adresa este numai învecinată
cmp eax
compară conținutul registrului eax și locația memoriei la adresa . Instrucțiunea anterioară a inserat un număr din celula vecină în registrul eax. Acum este comparat cu numărul din celulă. Ce e asa complicat, scuza-ma??? Poți să înveți un berbec! Acest lucru este cu siguranță mai simplu decât obiectele „multi-kilometri” făcute dintr-un fel de rahat, trăgând cu ele mii de proprietăți în care te poți îneca...
Dar cum rămâne cu rezultatul? S-au comparat, deci ce rost are, cititorul atent va întreba... Cum poți afla unde a scotocit câinele? Iar rezultatul este stocat într-un registru special de steaguri, Flags. În acest registru rezervat, fiecare bit reprezintă un steag. În special, există un steag zero - Zero. Dacă, în urma executării instrucțiunii de comparare, se dovedește că numerele sunt egale, steag-ul va fi setat (1, dacă nu, atunci va fi șters (0) (sau invers, prea leneș pentru a fi privit); depanatorul - acest lucru nu este important aici). În mod similar, există o altă casetă de selectare pentru elementul mai puțin - Semnează. Indicatoarele se modifică ca urmare a execuției instrucțiunilor care le modifică și vor rămâne în poziția lor până când sunt modificate ca urmare a execuției unei alte instrucțiuni care le afectează starea. Prin urmare, după cmp putem executa orice alte instrucțiuni în funcție de starea steagului până când o executăm pe cea care îl modifică. Starea steagurilor este citită prin instrucțiuni salt condiționatși unele altele și rezultatul este o anumită acțiune sau inacțiune a acestor instrucțiuni.

Următoarele instrucțiuni venire
jz.06F30B25E
Instrucțiunile care încep cu J [aproape] toate înseamnă Salt, adică. mutarea în alt loc. Această instrucțiune se referă la instrucțiunile de sărituri condiționate și reprezintă Jump if Zero - i.e. mergeți la adresa dacă este bifat indicatorul Zero. Dacă caseta de selectare NU este bifată, atunci „nu se va întâmpla nimic”. Adresa de tranziție este dată ca argument (pot fi diferite, relative sau absolute, „departe” sau „aproape” în memorie. Aici adresa este indicată în spațiul de adrese al programului, așa cum este configurată de antetul exe, nu are rost să aprofundăm, acest lucru va complica totul dacă instrucțiunea anterioară a detectat egalitatea argumentelor, atunci tranziția va avea loc, dacă nu, atunci nu se va întâmpla și procesorul va trece la următoarea instrucțiune.

Următoarele 2 instrucțiuni
push edi
apăsați 020
Să ne amintim că în engleză push înseamnă a împinge, a împinge. Aici, aceasta înseamnă împingerea numerelor în stivă pentru stocare temporară. Variabilele sunt adesea salvate în acest fel înainte de introducerea în proceduri, registrele în interiorul unei proceduri pot fi utilizate în alte scopuri, iar cu ajutorul stivei, puteți să salvați valorile de registru și să transmiteți argumente unei proceduri, care le va scoate după; introduceți-l și împingeți rezultatele acolo înainte de a ieși, dacă sunt disponibile și necesare. Comoditatea este că nu trebuie să vă faceți griji cu privire la evidențiere spatiu de adresare pentru stocarea datelor temporare de volum semnificativ. Dacă trebuie să transmiteți o matrice, treceți adresa sa în memorie. Nu există niciun motiv pentru a transfera toate elementele matricei, va pierde doar memorie și timp de procesor, așa cum se face cu codificarea codului. (Când este necesară salvarea copiei originale a matricei conform logicii lucrării, aceasta este o situație diferită și programatorul însuși inițiază în mod conștient copierea matricei în scopul replicării.)
Când lucrați cu stiva, procesorul se va ocupa de tot - zona pentru stocarea stivei este alocată de sistemul de operare cu suport hardware de la procesor.
Prima instrucțiune va salva valoarea registrului EDI - un pointer către o anumită zonă de memorie, iar a doua va împinge acolo o constantă predeterminată de 20 de ore. Probabil un fel de argument de procedură, dar acest lucru nu este important pentru noi, deoarece nu este nevoie să facem analiza pe care a făcut-o autorul patch-ului - la urma urmei, transferăm patch-ul terminat într-o altă versiune a programului și aceasta este de obicei SIMPLU!

Următoarele instrucțiuni
sunați la .06F2E1440
În engleză, apel înseamnă a suna, a chema.
Este vorba despre apelarea unei proceduri. Nu există nume în codul pentru procedurile de apelare - există adrese unde se află codul lor. Pentru comoditate, dezasamblatorii (inclusiv Hiew) pot extrage numele procedurilor și funcțiilor din tabelele de import și export ale fișierelor EXE (interacțiunea este de așteptat acolo diferite programe iar „bibliotecilor” după compilare și procedurilor li se dau nume prin care pot fi apelate dintr-un alt program, dar procedurile interne nu sunt denumite după compilare). Bineînțeles că în codul sursă erau nume, dar după compilare nu erau de nici un folos... Ocupau doar spațiu. Procesorul nu are nevoie să știe numele nimănui, numără numere... Uneori, decompilatorii/dezasamblatorii reușesc să extragă nume de proceduri din informațiile de depanare (dacă un alt codificator a uitat să o taie și a umflat dimensiunea binarului cu informații inutile) și acest lucru ajută la analiza codului, dar în cazul nostru nici nu contează. Nu trebuie să înțelegem de ce este necesară această procedură și ce face... Permiteți-mi să vă reamintesc că avem un patch gata făcut și dacă reușim să-l transferăm „fără incidente”, atunci nu va fi nevoie să facem adânciți în ea.

Ultima instrucțiune dată
pop ecx
Pop – acțiunea inversă a împingerii – adică pop ultima valoare împinsă în stivă. În acest caz, la registrul ecx. Probabil că această instrucțiune este necesară pentru a extrage rezultatul procedurii, dar nici nu ne pasă de asta, inclusiv. și pentru că această instrucțiune, precum cele 2 apăsări de mai sus și apelul, nu se schimbă după patch și sunt date pentru o prezentare generală și ca punct de referință pentru marginea patch-ului. După patch, toate aceste instrucțiuni vor rămâne la locul lor, la fel ca tot ce va urma după ele.

6. Acum luăm termsrv.dll patched într-o altă fereastră Hiew, la aceeași adresă ne uităm la ce instrucțiuni există.
muta eax,
muta eax, 000000100
nup
mov ,eax
push edi
apăsați 020
sunați la .06F2E1440
pop ecx
Vedem diferențe doar în a doua, a treia și a patra instrucțiune.
A doua mutare eax, 000000100
trebuie doar să introduceți constanta 100h (=256) în registrul eax
A treia nop
cel mai „ridicol” = NoOperation - nu face nimic și pentru totdeauna. De ce este nevoie? Și este necesar să se alinieze sincronizarea în funcție de datele codului. Faptul este că dimensiunile codului original și corecționat trebuie să coincidă complet în numărul de octeți și limitele comenzilor (împreună cu argumentele acestora). Dacă ceva se mișcă chiar și cu un octet, procesorul va merge „în locul greșit” și va percepe un anumit argument de instrucțiune ca o comandă, iar octeții care îl urmează ca argumente pentru această comandă, chiar dacă există un alt cod de comandă. Totul se va îndepărta imediat și fatal. 99% că programul se va bloca greseala fatala. Comanda nop are codul 90h și ocupă un octet. Dacă există cod redundant care este inutil sau chiar dăunător pentru scopurile patch-ului, acesta poate fi înlocuit împreună cu argumentele cu atâtea nop-uri la rând câte octeți ocupă. Printre hackeri, acesta se numește zanopat sau zanopat. De fapt, asta singura cale eliminați codul inutil din codul executabil, deoarece acesta nu este text și orice „decupare din mijloc” „în scopul scurtării” va duce imediat la faptul că toate adresele vor fi mutate, mâncate și nimic nu va funcționa. toate. Și cel mai rău lucru se întâmplă când cod nou, care trebuie să-l înlocuiască pe cel vechi, nu se potrivește în locul „vechi”... Aici începe durerea de cap a hackerului - cum să-l stoarce pentru a se potrivi...
A patra mișcare, eax
puneți un număr din registrul eax într-o locație de memorie
În principiu, a treia și a patra sau a treia și a doua instrucțiune pot fi schimbate - acest lucru nu va schimba nimic. Dar nu există nicio modalitate de a elimina nop deoarece noile comenzi au lungimea codului cu 1 octet mai mică decât cele vechi și o astfel de discrepanță, dacă nu este contracarată de nop, va duce imediat la o eroare de sincronizare.

Comparația „cu ceea ce a fost” pune imediat totul la locul său!
A fost - luați un număr dintr-o celulă, comparați-l cu un număr dintr-o celulă. Dacă sunt egali, atunci săriți „undeva” dacă nu, atunci mergeți mai departe și finalizați procedura. În contextul problemei, această comparație de numere seamănă conexiuni valide cu o limită permisă (adică 1 pentru o stație de lucru sau 2 pentru un server). Limita este stocată într-un fel de constantă, a cărei adresă este specificată în instrucțiunea de comparare.
Ce s-a întâmplat - luați numărul din celulă, uitați de „acesta este cazul” și suprascrieți imediat valoarea registrului EAX cu constanta 100h (=256 - adică, aparent, noua limită de 256 de conexiuni), apoi plasați acest număr din celulă
Nimeni nu compară nimic, procedura care se numește mai jos va fi întotdeauna executată. În plus, în celulă este scrisă o nouă limită = 256 unde, evident, limita de conectare a fost stocată „forțat” în cazul în care există alte verificări ale acestei limite în altă parte în program. ASTA E TOT! E greu să găsești ceva mai primitiv!

Dacă ar trebui să căutăm noi înșine acest loc, ar trebui să urmărim procedurile acestui dll cu un depanator, așa cum se pare că a făcut autorul patch-ului, sau să dezasamblam totul cu ceva de genul IDA și să studiem cu atenție codul care conține sute de mii de instrucţiuni. Dar avem totul gata! Este ca gluma despre mecanicul care a lovit-o o dată cu un ciocan și mașina a pornit, dar subtilitatea este că știa unde să lovească și costă multă muncă. (Nu vorbiți despre bani aici - băgați-vă în fund! Mai ales în ajunul unei vacanțe grozave! Pentru cei cărora le place să „face bani pe internet” există site-uri specializate.)

De ce patch-ul nu funcționează pe toate versiunile ulterioare - deoarece adresele se schimbă, iar codul (argumentele sale) se modifică ușor în timpul compilării. Acest lucru duce la deplasarea codului necesar în interiorul EXE către alte offset-uri, iar dacă căutați după semnătură (secvență strictă de octeți), căutarea poate să nu găsească argumentele care s-au schimbat. Multe adrese sunt, de asemenea, argumente pentru instrucțiuni și schimbare cod binar dincolo de recunoaștere, în ciuda faptului că esența ei este încă aceeași... Fă-o manual! Ai capul pe umeri și nu o „secvență strictă de circumvoluții”...

7. Acum, în versiunea ORIGINALĂ a termsrv.dll, pe care patch-ul îl patchează, trebuie să găsiți o secvență unică de octeți, în contextul programului, APROAPE de locul pe care trebuie să-l corectați pentru a o căuta în noua versiune termsrv.dll, cel pe care doriți să îl corectați, dar patch-ul nu îl corectează...
Trebuie să vă uitați la dezasamblator și să căutați BYTES-ii corespunzători acestuia, iar dacă alegeți ceva prea „simplu”, atunci o astfel de combinație va apărea de multe ori în timpul căutării și va fi dificil să găsiți locul potrivit, se va „cufunda” printre o grămadă de altele similare. Iar „acuratețea impactului” este extrem de importantă pentru noi, deoarece dacă o corectezi „în locul greșit”, nu va funcționa sau chiar și Windows se va bloca...
Nu puteți selecta instrucțiuni care conțin adrese lungi fixe pentru șirul de căutare. Când compilați alte versiuni, cel mai probabil se vor pierde și nu veți găsi nimic despre ele în noua versiune.
Întreaga procedură în care are loc verificarea este mică, doar câteva zeci de comenzi. Pentru un asamblator, acesta este „nimic”. Hiew vă va arăta limitele condiționate ale procedurii sub formă de „dungi” _^_^_^_^_^_. Vă rugăm să rețineți că la începutul procedurii există o contestație la adresa de „import”. Proceduri Windows API – CDefPolicy::Query și Hiew au detectat acest lucru (de aceea am aflat numele funcției și am scris-o). Acesta ar trebui să fie un ghid bun pentru tine pe drumul către locul potrivit. În plus, acest „kakbe sugerează” că poate exista o altă modalitate de a rezolva problema, de exemplu, găsirea unei anumite politici „secrete” responsabilă pentru comportamentul Terminal Server. Cei interesați pot urmări codul cu un depanator și pot căuta cum este inițializată o variabilă sau constantă cu numărul de conexiuni. Dar pentru șirul de căutare „codul de la CDefPolicy” nu este potrivit, deoarece adresa procedurii în import va fi cel mai probabil eliminată în noua versiune. Aș încerca să caut după octeți de la începutul procedurii după CDefPolicy. Acolo merge:
57 push edit
6A10 apăsați 010
8BF1 mov esi,ecx
33DB xor ebx,ebx
iese 57 6A 10 8B F1 33 DB
La sfârșit, puteți adăuga un alt cod E8 pentru instrucțiunea de apel, urmat de acesta, dar NU argumentul acestuia (următorii octeți), deoarece aceasta este adresa și se va schimba când se vor compila versiuni noi.
Această secvență îmi oferă atunci când caut în Hiew (F7-Search)
Există doar 3 potriviri Mai mult, apelul CDefPolicy este vizibil în context doar într-un singur caz - în primul. Dacă este la fel și pentru tine – un loc a fost găsit, notează-i adresa din prima coloană (după ce ai apăsat Alt-F1 – Global!) „pe o bucată de hârtie” și încearcă să-l parchezi.
Dacă codul s-a schimbat atât de mult încât nu găsește nimic, căutăm alte secvențe unice, inclusiv. culese din procedurile vecine și încercați să le căutați. Sarcina este să găsim codul necesar, unde „totul se potrivește în sens”, și nu o secvență, ne gândim la asta și ne uităm la context, încercând să găsim CDefPolicy::Query în noua versiune. Puteți căuta textul CDefPolicy::Query în new.dll Veți găsi linia (de mai multe ori), dar nu locul unde este referită adresa. Această metodă vă ajută uneori să găsiți ceea ce aveți nevoie folosind F6 (Referință) în Hiew și am reușit să găsesc locul potrivit în dll-ul de la Win7SP1x86Rus de dragul experimentării, dar nu este un fapt că va funcționa peste tot, în special cu alte programe).

8. Acum trebuie să luați termsrv.dll din versiunea pe care trebuie să o corectați. Lansăm a treia copie a Hiew, deschidem un nou dll în ea” (pentru a comuta cu ușurință între toate trei și a compara vizual). Găsim locul potrivit, așa cum este descris mai sus, sau mergem la adresa pe care am scris-o „pe o bucată de hârtie” (hârtia, în general, este prietenul unui programator în această lume muritoare în care oamenii mor. hard disk-uri, elimină blocajele de trafic și blochează sistemul de operare).
Să analizăm codul de mai jos CDefPolicy::Query și să găsim cu ușurință locul potrivit, ASEMNĂ cu:
cmp eax
jz.06F30B25E
ÎNȚELEM că adresa este , dar dacă s-a schimbat, de exemplu, aceasta este adresa de care avem nevoie și operăm cu ea în editarea ulterioară.

9. Dacă sunteți sigur că ați găsit exact ceea ce aveți nevoie, mutați cursorul peste instrucțiunea cmp și nu ezitați să apăsați F3-Edit. Cursorul „gri” se va schimba în „normal” (pentru modul de afișare a textului) – indice. Trebuie să indice aceeași instrucțiune cmp.
Apăsați Tab (sau F2) și va apărea un dialog pentru introducerea instrucțiunilor de asamblare.
Introduceți instrucțiunile acolo
mută eax, 100
Apoi Enter. Pe ecranul principal veți vedea că octeții „din instrucțiuni” s-au schimbat și unii dintre ei au devenit „aurii” (galben). În același timp, instrucțiunile de MAI JOS s-au „mutat” și în coloana din dreapta opusă lor arată „gunoi” - deloc ceea ce a fost acolo înainte.
Fereastra de dialog pentru introducerea comenzilor din partea de sus a ferestrei principale continuă să „se blocheze” și să aștepte introducerea de noi instrucțiuni, în timp ce afișează instrucțiunile următoare, interpretate incorect din cauza unei erori de adresare.
Nu acordăm nici cea mai mică atenție acestei instrucțiuni și introducem următoarea.
Tastați nop și apăsați Enter
În fereastra principală, următoarea linie cu codul 90 se va aprinde în galben.
Sincronizarea va fi restabilită și următoarea comandă va fi din nou jz. Vă va solicita să schimbați dialogul pentru introducerea instrucțiunilor.
Condu-l acolo
mov ,eax
Dacă în loc de 320 a fost o altă adresă în comanda cmp, atunci introduceți IT!
Apăsați Enter. după aceea, codul din rândul 3 se va aprinde în galben, în dreapta căruia ar trebui să fie instrucțiunea mov ,eax (sau nu 320, ci numărul care a fost introdus).
Verificăm dacă sincronizarea cod-date NU a mers prost. Următoarea instrucțiune ar trebui să fie push edi (sau alta dacă codul s-a schimbat foarte mult și ați avut o altă instrucțiune acolo înainte de patch - ar trebui să rămână la locul ei și să fie interpretată corect, ceea ce înseamnă că totul după ea este OK).

Când totul este introdus, apăsați O dată pe Esc. Dialogul de introducere a instrucțiunilor va dispărea, dar îl puteți apela din nou oricând (în modul de editare) apăsând Tab. Toți octeții modificați vor fi galbeni. Verificați cu atenție dacă totul pare corect și nu ați încurcat nicăieri. Nimeni de aici nu va verifica nimic pentru tine, NU există „protecții împotriva proștilor” de orice rang sau titlu. Nimeni nu va ține cont de regalia. Ceea ce am făcut este ceea ce am primit. Dacă dai peste cap, va îngheța și nu va funcționa.
Dacă totul este OK, apăsați F9 (Actualizare). Modificările vor fi scrise într-un fișier de pe disc, iar octeții modificați își vor schimba culoarea în normal (cyan).

10. Acum trebuie să corectați suma de control EXE. A face acest lucru este incredibil de plictisitor, pentru că Hiew va face treaba pentru tine și nu va trebui să faci aproape nimic. Apăsați F8 (Header). Apare o fereastră „gri, nedescriptivă” cu o „decriptare” a parametrilor antetului fișierului EXE.
Apăsați F3 (Editare). Un violet „colorat” apare deasupra ferestrei „nondescriptive”. Listează toți parametrii antetului cu adresele și valorile lor. Cu o față plictisitoare, derulăm spre final și găsim acolo parametrul Sumă de control. În dreapta este valoarea sa (suma de control în sine) în expresie hexazecimală și zecimală, care a fost „moștenită” din fișierul original UNPATCHED. Apăsați din nou F3 și, iată, linia devine galbenă și suma de control își schimbă valoarea. Îl putem crede pe Hiew, sau îl putem găsi pe forumuri sau în cărți și îl putem calcula manual. Dacă „totul este satisfăcător”, apăsați F9 (Actualizare). Windows flash, totul dispare... Acesta este sfârșitul, crede cititorul neinițiat. Dar când praful se așează, suma de control este corectă. Cei care sunt neîncrezători pot reveni la dialogul menționat și pot compara Suma de control cu ​​cea salvată cu grijă înainte de execuție într-un backup pe o foaie de hârtie. Puteți ieși din Hiew folosind Esc și puteți trece la etapa de testare a unității.

11. După ce ați primit fișierul corelat, puteți încerca să înlocuiți termsrv.dll în sistemul de operare țintă.
Datorită mecanismelor de protecție ale Windows împotriva modificărilor fișiere de sistem, precum și interzicerea înregistrării rulează programe(încălcarea partajării) va fi necesar să opriți serviciul de servicii Terminal (vezi în comentariile altor utilizatori de mai sus) și să înlocuiți copiile dll-urilor în „tot felul de WinSxS”, etc., astfel încât Windows neautorizat să uite chiar să se gândească la încercare pentru a restabili versiunea nepatchată.

Dacă totul funcționează, înseamnă că ai devenit kulhatzker sau ai făcut primul pas CONȘTIENT pe această cale. Nimeni nu te împiedică să explorezi și să înveți mai departe, făcând lumea un loc mai bun și mai bun. Există multe instrucțiuni și forumuri tematice întregi pe Internet pentru cei care vor să gândească cu capul lor și nu doar să consume porno de consum din Matrix.

Nu ezitați să publicați o listă de octeți modificați (o puteți obține folosind același „stoc” „FC /b File1 File2″) pentru alți utilizatori, mai puțin sofisticați, aici și/sau pe alte resurse, faceți bine vecinului dvs., așa cum Domnul a lăsat moștenire și glorifica numele său în analele istoriei hackerilor.

Folosind lista de modificări, puteți crea un fișier .CRK (pentru patcherii care înțeleg acest format străvechi) sau puteți crea patch.exe folosind orice producător de patch-uri, din care, de-a lungul anilor de evoluție, au fost scrise zeci și sute. Alege doar „cu sprijin” Windows Vista/7″ pentru că cei vechi, deși buni și buni, nu știu nimic despre privilegiile Escalate, iar Windows prostește nu le va permite să patcheze nimic în Windows/System sau Program Files. Instrucțiunile ar trebui să menționeze cerința de a opri serviciul terminal sau utilizarea patch-urilor pe fișiere din foldere separate, cu înlocuirea ulterioară în system32 de către utilizatorii înșiși. În orice caz, publică lista modificărilor, nu-ți pierde laurii, cineva ar putea fi nevoit să tragă cu mâna și informațiile te vor ajuta să găsești solutie alternativa. Patch-ul autorului face toate acestea automat, inclusiv lucrul cu WinSxS - m-am uitat la cod, dar cred că nu va fi ușor să găsești un patchmaker care să țină cont de toate acestea.

Ca și în cazul versiunilor client anterioare ale sistemelor de operare Microsoft, utilizatorii edițiilor Pro și Enterprise ale Windows 10 se pot conecta de la distanță la computerele lor prin Remote Desktop Services (RDP). Cu toate acestea, există o limită a numărului de sesiuni RDP simultane - doar un utilizator la distanță poate lucra la un moment dat. Când încercați să deschideți o a doua sesiune RDP, sesiunea primului utilizator este solicitată să se încheie.

De fapt, limitarea numărului de conexiuni RDP simultane nu este tehnică, ci mai degrabă una de licențiere, care interzice crearea unui server RDP bazat pe o stație de lucru pentru mai mulți utilizatori.

Sfaturi. Acasă ediții de Windows 10 conexiuni de intrare la desktop-ul de la distanță sunt complet interzise, ​​care, totuși, pot fi depășite folosind.

Vom analiza două moduri de a dezactiva limita numărului de simultane conexiuni RDP la Windows 10:

Nota. Modificările sistemului descrise în acest articol vor fi probabil considerate o încălcare a Acordului de licență Windows, cu toate consecințele care decurg.

Modificarea fișierului termsrv.dll

Puteți elimina limita numărului de conexiuni RDP modificând fișierul termsrv.dll (fișierul de bibliotecă utilizat de serviciu Desktop la distanță Servicii). Fișierul se află în directorul C:\Windows\System32).

Înainte de a modifica fișierul termsrv.dll, este recomandabil să îl creați copie de rezervă(dacă este necesar, puteți reveni la versiunea originală a fișierului):

copiați c:\Windows\System32\termsrv.dll termsrv.dll_backup


Înainte de a edita fișierul termsrv.dll, trebuie să deveniți proprietarul acestuia și să îl oferiți grupului de administratori drepturi depline pe ea (toate operațiunile sunt efectuate în mod similar cu cele descrise în articol). Apoi opriți serviciul Desktop la distanță (TermService) din consola services.msc sau din linia de comandă:

Net stop TermService


Pentru ediția Windows 10 x64 RTM (versiunea fișierului termsrv.dll este 10.0.10240.16384): deschideți fișierul termsrv.dll folosind orice Editor HEX(de ex. Tiny Hexer)

Găsiți linia:

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

Și înlocuiește-l cu:

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


Salvați fișierul și porniți serviciul TermService.

Biblioteca Wrapper RDP

O alternativă la modificarea fișierului termsrv.dll este utilizarea proiectului Biblioteca Wrapper RDP. Acest program funcționează ca un strat între managerul de control al serviciului (SCM-Service Control Manager) și serviciul terminal (Servicii terminale) și vă permite să activați nu numai suportul pentru mai multe sesiuni RDP simultane, ci și să activați suportul pentru gazdă RDP pe edițiile de acasă. din Windows 10. RDP Wrapper nu face nicio modificare fișierului termsrv.dll, pur și simplu încărcând termsrv cu parametrii modificați.

Astfel, această soluție va funcționa chiar dacă actualizați versiunea fișierului termsrv.dll, astfel încât să nu vă faceți griji cu privire la actualizările Windows.

Puteți descărca RDP Wrapper din depozitul GitHub: https://github.com/binarymaster/rdpwrap/releases (cea mai recentă versiune disponibilă a RDP Wrapper Library v1.6)

Sfaturi. Apropo, sunt disponibile sursele RDP Wrapper Library, ceea ce vă permite să asamblați singur fișierele executabile dacă doriți.

Arhiva RDPWrap-v1.6.zip conține mai multe fișiere:

  • RDPWinst.exe - program de instalare/eliminare pentru RDP Wrapper Library
  • RDPConf.exe - Utilitar de configurare RDP Wrapper
  • RDPCheck.exe - Local RDP Checker - Utilitar de verificare RDP
  • install.bat, uninstall.bat, update.bat - fișiere batch pentru a instala, elimina și actualiza RDP Wrapper


Pentru a instala utilitarul, rulați fișierul install.bat cu drepturi de administrator.


După finalizarea instalării, rulați RDPConfig.exe. Și asigurați-vă că în secțiune Diagnosticare toate elementele sunt vopsite în verde.

Încercăm să deschidem o a doua sesiune RDP. Totul a mers! Acum, Windows 10 permite a doi utilizatori la distanță să se conecteze simultan prin RDP.


Terminal Server Windows 7/Vista/XP (sp1/sp2/sp3)- o soluție reală. Server terminal pentru a vă conecta la desktopul de la distanță Windows 7 / Vista / XP (sp1/sp2/sp3) mai mulți utilizatori în același timp.

Terminal Server poate fi folosit pentru a lansa o aplicație cu calculatoare la distanță sau la a ta server terminal pe Windows 7/XP / Vista/ puteți conecta diferite computere vechi precum 486 și Pentium 1 în același timp, acestea vor funcționa ca și cum sistemul de operare ar fi instalat pe ele Windows Vista / 7 / XP cu Office XP-2003-2007, 1Cși o grămadă de programe de birou diferite.

Implicit Windows 7/Vista/XP nu acceptă mai mulți utilizatori în același timp. Pentru a permite mai multor utilizatori să lucreze simultan RDP, trebuie să înlocuiți fișierul C:\Windows\System32\termsrv.dll și să faceți modificări în registry - pentru a elimina restricția impusă Windows XP/7/Vista.

Înainte de a face modificări la Windows 7/Vista/XP, asigurați-vă că acțiunile dvs. nu contrazic legile țării dvs. și contract de licență, așa că rămâne la latitudinea dvs. să decideți dacă utilizați metoda sau nu.

Cum se face un server terminal din Windows XP / 7 / Vista?

1. Creați mai mulți utilizatori cu drepturi de administrator sau utilizator obișnuit, asigurați-vă că setați o parolă.

Asigurați-vă că opțiunea este activată - Comutare rapidăîntre utilizatori (Panou de control -> Conturi utilizatori -> Modificarea autentificarii utilizatorului)

2. Permite conexiune la distanță- selectați „Computerul meu” făcând clic dreapta și deschideți „Proprietăți”. În fereastra care apare, accesați „ Sesiuni la distanță" Elementul „Permite acces la distanță la acest computer” confirmați cu o bifă. Selectați utilizatorii șterși (în caz contrar Desktop la distanță va funcționa numai pentru administratori) și faceți clic pe „OK”

3. Verificați dacă Conexiunea Desktop la distanță funcționează pentru un utilizator.

Realizarea unui server terminal Windows XP/7/Vista

4. Descărcați un patch universal pentru crearea unui server terminal:
-
Windows XP sp2 sp3;
- Windows Vista sp1 sp2;
- Windows 7, 32 de biți (x86)/64 de biți (x64).

5. Executați fișierul UniversalTermsrvPatch-*.exe care corespunde mărimii de biți a sistemului dvs. și apăsați Plasture pentru a înlocui fișierul C:\Windows\System32\termsrv.dll

6. Executați fișierul *.reg care se potrivește cu dvs sistem de operare pentru a face modificări în registru

7. Reporniți sistemul de operare

8. Start -> Run -> gpedit.msc


Pentru Windows 7

Configurare computer -> Șabloane administrative -> Componentele Windows-> Servicii Desktop la distanță -> Gazdă sesiune Desktop la distanță -> Conexiuni ->


Pentru Windows XP

Configurare computer -> Șabloane administrative -> Componente Windows -> Terminal Server -> Limitează numărul de conexiuni


Setați-l la „Activat” și modificați valoarea numărului de terminale permise.


9. Reporniți computerul

Dacă ai făcut totul corect, atunci server terminal Windows 7/Vista/XP (sp1/sp2/sp3) gata. Ar trebui să funcționeze pentru tine acum desktop la distanță pentru mai mulți utilizatori simultan.

Setări suplimentare pentru serverul terminal Windows XP

1. După cum arată practica, utilizatorii de terminal server pur și simplu se deconectează, iar programele continuă să funcționeze. Puteți seta ora pentru a deconecta o sesiune inactivă

Start -> Run -> gpedit.msc
Configurare computer -> Șabloane administrative -> Componente Windows -> Terminal Server -> Sesiuni -> Setați o limită de timp pentru sesiunile deconectate

Activați și setați ora

Există și alte restricții, puteți alege după cum doriți

2. Rulați un singur program pentru toți utilizatorii de la distanță ai serverului terminal, fără un desktop

Start -> Run -> gpedit.msc
Configurare computer -> Șabloane administrative -> Componente Windows -> Terminal Server -> Rulați programul când este conectat

Porniți
\Bkc.RemoteClient.exe

Specificați folderul de lucru
C:\Program Files\Bankomzv"limba\Atenție suplimentară pentru clienți

3. Rulați un program pentru utilizatorii selectați de server terminal, fără un desktop(atenție, funcționează chiar dacă vă autentificați local, așa că nici nu știu cum să anulez acest lucru mai târziu, cu excepția posibilității de a șterge utilizatorul și apoi de a crea unul nou sau de a folosi disc de pornire liveCD, (programul ERD-commander) cu alegerea încărcării registrului sistemului de operare de care avem nevoie.

Start -> Run -> regedit

Creați un parametru șir Shell și în câmpul „Valoare” specificați calea completă către fișierul program

4. Lansarea unui program independent de către un utilizator de terminal server, fără un desktop

Pentru a începe, fă punctul 2 pentru toți utilizatorii , reporniți și apoi returnați valoarea așa cum a fost (Nespecificat)

În setări Client Windows(Conexiune la desktop la distanță) de la care ne conectăm, în Opțiuni din fila Programe, bifați caseta „La conectare, rulați următorul program”

Specificați calea completă către program și numele fișierului

Specificați folderul de lucru
C:\Program Files\Bankomzv"limba\Atenție suplimentară pentru clienți

5. Lansați programul când vă conectați la desktop

Adăugați o comandă rapidă în folderul Startup
C:\Documents and Settings\nume utilizator\Meniu principal\Programe\Startup\



 


Citire:



Cum să resetați parola de administrator pe Mac OS X fără un disc de instalare

Cum să resetați parola de administrator pe Mac OS X fără un disc de instalare

În ciuda titlului ambiguu, articolul nu va fi despre piratarea conturilor în Mac OS X (puteți citi despre asta dacă doriți...

Configurarea Shadow Defender

Configurarea Shadow Defender

Și multe altele, în special, am atins lucruri precum (care pot servi și ca un fel de protecție împotriva infecției, sau cel puțin o modalitate de a reveni...

De ce procesorul de pe computerul meu devine foarte fierbinte?

De ce procesorul de pe computerul meu devine foarte fierbinte?

Nu am avut de gând să scriu acest articol, am fost îndemnat să-l scriu de multe întrebări despre supraîncălzirea laptopului, curățarea acestuia și înlocuirea pastei termice. Pe...

Ce este modul „Turbo” în browserele moderne: Chrome, Yandex, Opera

Ce este modul „Turbo” în browserele moderne: Chrome, Yandex, Opera

Multe browsere web cunoscute, de exemplu, Yandex.Browser, au un mod special „Turbo”, care poate crește semnificativ viteza...

imagine-alimentare RSS