Echipament de eliminare cu basculante protejate aplicații
De protecție de tip Themida (în «Nee» eXtreme protector) și Star-Force, care este protejat de mai multe programe populare, foarte profund „mușcă“ în sistemul de operare, ceea ce reduce performanța și generează BSOD privat. „colegii“ lor nu se comportă agresiv, dar problemele de compatibilitate lipsesc încă, în special în tranziția la sistemele de operare pe 64 de biți sau de procesoare multi-core, care sunt semnificativ diferite de cele pentru care a fost proiectat de protecție folosind în mod activ caracteristici nedocumentate. De câte ori a spus lumii - nu folosesc nimic fara documente pentru aplicații comerciale, dar pur si simplu nu toate în magazin! Așa că trebuie să-și asume instrumente de hacking și scăpa de protecție, chiar și atunci când programul este dobândit prin mijloace legale și pentru a „sparge“ nu este absolut necesar. Dar este necesar! Cât de ciudat este lumea.
cazuri simple de dumping
Să ne imaginăm că extractorul este deja îndeplinită, programul este oprit în punctul de intrare original (OEP) și suntem gata pentru a salva fișierul de imagine (imagine fișier) pe disc, adică, să reseteze o groapa. Debugger moale cu gheață nu oferă o astfel de oportunitate, deci va trebui să acționeze într-un mod sens giratoriu. Dar mai întâi, trebuie să afli ce fel de zonă de memorie trebuie să fie menținută. Echipele cu condiția ca protecția să nu ia nici o acțiune ostilă, informațiile necesare pot fi extrase MOD și MAP32 (vezi. fig. 1 și Listarea 1).
Listarea 1. Definirea desfășurării modulului în memorie. Aici «test_dump» - numele de proces,
din care vom elimina groapa de gunoi (afișează soft-gheață-l în colțul din dreapta jos)
hMod Base PEHeader Modul Nume Numele fișierului
00400000 004000D0 test_dum TEMP est_dump.exe
# Uită-te la harta din modulul de memorie
Proprietar Ob Numele Ob # Adresa Tip Dimensiune
test_dump Text 0001 001B: 00401000 00003B46 COD RO
test_dump rdata 0002 0023: 00405000 0000080E idata RO
test_dump .data 0003 0023: 00406000 00001DE8 idata RW
Figura 1. Determinarea regiunii de memorie pentru îndepărtarea haldei
Listarea 2. O imagine de memorie, împușcat prin istorie
db 400000 L 7DE8
010: 00400000 4D 5A 90 00 03 00 00 00-04 00 00 00 00 00 FF FF MZR.
010: 00400010 B8 00 00 00 00 00 00 00-40 00 00 00 00 00 00 00. @.
010: 00400040 0E 1F BA 0E 00 09 B4 21 B8 CD-4C CD 01 21 54 68. L. Th!
010: 69 73 20 00400050 70 72 6E 67 20 72-61 6D 63 61 6E 6E 6F este programul canno
010: 74 20 62 00400060 65 20 72 75-6E 20 69 6E 20 44 4F 53 20 t rula în DOS
010: 00400070 6D 6E 64 65 2E 0D 0D 0A-24 00 00 00 00 00 00 00 Mod. $.
! Command DUMP (.. A se vedea figura 2 și 3 Listarea) vă permite să salvați blocuri de memorie pe disc în format binar, care este foarte convenabil:
Listarea 3. Dump de memorie, împușcat echipa! DUMP IceExt plugin
Dump de memorie pe disc
benă FileName adr Len
utilitară benă c: dump.dat 400000 1000
benă. c: dump.dat 400000 1000
benă. c: dump.dat EDX + ebx ECx
DUMP C: 400,000 dumping 7DE8
DUMP. C: dumping 400000 7de8
Figura 2. Scoaterea din groapa de gunoi moale cu gheață, cu ajutorul plug-in-IceExt
O altă mufă - icedump (programmerstools.org/system/files?file=icedump6.026.zip), este, de asemenea, capabil să arunce memoria, și în același mod ca și IceExt, a distribuit gratuit cu codul sursă.
Figura 3. îndepărtarea arunca OllyDbg prin dop OllyDump
Figura 4. Aspect utilitate PE-TOOLS
Aflandu-se
Cel mai simplu lucru - pentru a investiga cartela de memorie a procesului experimental, a revenit VirtualQuery / VirtualQueryEx API-funcții. Regiunile etichetate MEM_IMAGE, fac parte din fișierul executabil, sau unul dintre ele utilizate DLL (pentru construirea hărți PE-TOOLS comandă «regiunea haldei» responsabilă (vezi. Fig. 5)).
Firește, OpenProcess funcții / ReadProcessMemory / VirtualProtectEx pot fi interceptate de protecție, și apoi, în loc de haldei obținem eroare, și apoi reporniți. funcții de nivel scăzut NtOpenProcess / NtReadVirtualMemory / NtProtectVirtualMemory prins cu aceeași ușurință, în afară de un proces de protecție, modificați token-ul de securitate, de restricționare descoperirea memoriei lui de a citi chiar administratorul!
Se crede că eliminarea haldei la nivel de kernel deschide mari oportunități pentru ingineria inversă și pentru a contracara acest lucru este imposibil, deoarece conducătorul auto operează cu cele mai înalte niveluri de privilegiu, ceea ce permite tuturor. Dar șoferul și protecție, care lucrează la nivelul nucleului, de asemenea, tot ceea ce este disponibil, inclusiv modificarea nucleului sistemului de operare, în care nevoile driver dumper. Și fără funcții documentate pentru citirea memoriei unui alt procedeu (cu excepția celor menționate mai sus) sunt deja acolo!
Dar acest lucru nu este cel mai rău. Tot mai mulți protectori trecerea la decompresie dinamice, pagini de decodare în care acestea sunt utilizate, iar apoi criptează datele din nou. Chiar dacă trebuie să străpungă apărarea și căile de acces la procesul, groapa va fi nimic. mai degrabă, rezultând haldei va fi aproape de 99% este criptat.
Mecanisme de decriptare dinamice
Restul paginilor sunt criptate, și sunt accesate din nou, excepția care este trimis la server prin WaitForDedugEvent. Serverul criptează pagina anterioară, selectând toate atributele de acces pe care le are doar, și decriptează pagina curentă va ridica o excepție (de fapt, pentru a crește performanța de protecție suportă memorie cache primitivă, care permite clientului să aibă mai multe pagini simultan decriptat).
Necesitatea de a depana server de proces din cauza faptului că alte excepții de captură la stratul de aplicare pur și simplu nu funcționează. Dar ce putem spune despre mecanismul de excludere structurală sau, sub formă prescurtată, SEH? Înregistrați-vă propriile handler și de captură excepții, este numit locul de apariție. Ea ne eliberează de API-apeluri, oferind o interacțiune interprocessor care elementar interceptat de un hacker. Vai! În cazul în care aplicația protejată utilizează Seh (și marea majoritate a aplicațiilor îl folosesc), handler-ul nostru va fi blocată de cealaltă. Confruntați cu excepția „noastre“, el pur și simplu nu știe ce să facă cu el, și cu o probabilitate aproape de unitate, complet pur și simplu aplicația în modul de urgență.
Cele mai recente versiuni ale Armadillo benzii de rulare, redenumit recent Passport Software, pune în aplicare o mult mai fiabile, deși mecanismul de decriptare productivitate de marcare extrem de scăzut, în care întregul cod program este criptat în întregime. server client urme, decodificarea o singură instrucțiune la un moment dat (declarația anterioară, când acesta este criptat). deja dificil de a elimina groapa de recurs tocit în memorie, pentru că protecția interesată numai excepții care apar în timpul execuției. Tot ce putem face este de a „conduce o pană“ între aplicația criptată și decriptare, „kollektsioniruya“ decodificat instrucțiuni care formează linia de execuție firului. Pentru că, pentru a realiza o acoperire de 100% cod este aproape imposibil, groapa de gunoi rezultată va fi incompletă, dar există un mic avertisment. Pokomandnaya Transcrierea nu poate utiliza orice bloc, nici un sensibile la context algoritmi de criptare ca trasor de decriptare nu știe dinainte ce instrucțiunea va fi executată în continuare. Nu sunt de streaming numai algoritmi, cum ar fi XOR sau RC4, care sunt foarte usor de descifrat - este necesar să se găsească o gamă care protector, indiferent de efort, prea adânc pentru a ascunde nu ar putea! Desigur, pentru a automatiza complet procesul de eliminare a haldei în acest caz, nu se mai putea și trebuie să recurgă la dezasamblării și poate chiar la depanare. Din fericire, aceste scheme de protecție nu sunt larg răspândite și este puțin probabil să-l în viitorul apropiat. Trasarea încetinește viteza aplicațiilor în zeci de ori, ca urmare, devine necompetitiv.
Modul clasic de a pune în aplicare codul este pus în aplicare după cum urmează: a deschide procesul funcției OpenProcess, aloca un bloc de memorie prin apel VirtualAllocEx, copiați dumper de cod prin WriteProcessMemory, și apoi fie să creeze o funcție de flux de la distanță CreateRemoteThread (numai sistem NT-like), sau schimbarea PEI registru în contextul fir străin, SetThreadContext adresare (valabil pentru toate sistemele). Desigur, PEI anterior ar trebui să fie stocate, iar debitul - sa oprit.
Stai puțin! Dar nu este cu mult diferit de comunicarea obișnuită interprocessor! Funcții intercepteaza NtAllocateVirtualMemory / NtSetContextThread / NtCreateThread orice protecție cu Gusto! (Nici eroare nu este aici, CreateRemote fir API-funcție este de fapt un „înveliș“ în jurul funcției NtCreateThread nucleare.)
Ei bine, aici e un alt mod clasic. Pune dumper în DLL și prescrie în HKLMSoftwareMicrosoftWindows NTCurrentVersionWindowsAppInit_DLLs, determinându-l să fie afișat pe toate procesele, care există numai în sistem, și înainte de a trece de control la următorul proces executabil obține primul nostru de control DLL! Din păcate, pe această ramură este cunoscut nu numai de protecție, ci și alte programe (antivirus, firewall-uri personale) și urmăriți-l. Rezultatele noastre pot fi eliminate chiar înainte de dumper va începe să lucreze! Dacă el avea în continuare posibilitatea de a obține controlul, primul lucru pe care trebuie să facă - să aloce un bloc de memorie în prezent în proces pentru a copia toate codul necesar și să se întoarcă ramură AppInit_DLLs la starea sa inițială. Deoarece controlul câștigurilor autobasculantă înainte de apărare începe să lucreze, nu va fi capabil să găsească pe cineva că aici a vizitat deja.
Astfel, protecția nu va fi capabil să detecteze modificările fie într-un fișier sau în memorie (atunci când încearcă să determine numele de fișier al sistemului de operare actual va returna numele de fișier, pe care a avut-o la momentul lansării, ignorând faptul că redenumirii „on-line“). Dar este prea greoaie, iar algoritmul de fantezie la aceeași valoare SetTimer intercepta apărare activă și dezactiva setarea cronometrului în procesul de „“ pentru a finaliza controlul despacheta / transfer la OEP.
O protecție proiectat în mod corespunzător și puse în aplicare în mod corespunzător ar trebui să împiedice utilizarea ilegală a programului, dar nu are nici morală, nici dreptul legal de a împiedica utilizatorii onești și mai ales să se amestece în sistemul de operare, care produc nimeni nu a avut modificări autorizate. Cele mai recente versiuni de software de protecție Themida pașaport și vine aproape de rootkit. Un pic mai mult și ei se vor transforma în virusuri reale, crearea de care este interzisă prin lege.
„necinstite“ trucuri defensive
packere Normal (UPX, PKLITE, PECOMPACT) comprimat fișier executabil, fără pierderi, și după despachetare se revine la forma sa inițială, ceea ce face ca procesul de eliminare sarcina banală groapa. Protectorii într-un efort de a consolida protecția merge de multe ori pe o mișcare riscantă - acestea sunt ușor „calandrare“ fișierul procesat în așa fel încât să poată funcționa numai sub banda de rulare, iar după eliberarea din ea devine neviabilă. Cele mai populare metode de astfel de „neloiale“ de protecție descrise mai jos.
bytes furtului autoturismului. OEP Cea mai simplă și mai răspândită podlyanka utilizate chiar și în astfel de protecție inofensivi, de exemplu, ASProtect. Esența ei constă în faptul că packer „fura“ unele instrucțiuni de la punctul de intrare originale, le stochează într-un loc ascuns (probabil într-un deghizată sau criptat), iar după finalizarea despachetare emulează octeți de execuție furat. Cel mai des utilizate în acest scop stiva (în cazul în care bytes furate devin de obicei operanzi de instrucțiuni PUSH), cel puțin - un impact direct asupra registrelor și a memoriei (cu instrucțiuni furate sunt transformate în pseudo-cod și explicit nu sunt stocate oriunde). Concluzia este că, la punctul de intrare al imaginii originale bytes necomprimate nu mai întoarce și scoateți groapa devine nefuncțional. Din fericire pentru noi, marea majoritate a programelor începe cu un cod de start, care face parte din biblioteca runtime (RTL), furnizat cu compilatoare. Folosind „coada“ rămasă a codului de start, putem identifica cu ușurință compilator și de a recupera bytes furat din biblioteca sa. Dacă acest compilator în posesia noastră nu vor apărea, primii câțiva octeți codul de start, în 9 din 10 cazuri sunt destul de previzibile, și de multe ori ei nu se pot repara (desigur, trebuie să aveți experiență cu diferite RTL). Apropo, IDA Pro recunoaște compilator este pentru primul octet al codului de start, iar în cazul în care lipsesc sau sunt deteriorate, mecanismul FLIRT nu va funcționa. Acest lucru înseamnă că am rămas fără numele funcțiilor de bibliotecă și procesul de dezasamblare va dura mult mai mult timp.
nedorită polimorfă în OEP. In loc de a fura bytes cu OEP, unii protectori preferă să modifice codul de pornire, diluarea instrucțiuni polimorfe semnificative de gunoi de sens. Acest lucru nu afectează performanța haldei capturate, dar uimește „FLIRT“, forțându-ne să fie curețe polimorfă de gunoi, sau pentru a determina versiunea de compilator „cu ochiul liber“, descărcarea manual de semnături (IDA Pro permite acest lucru).
Conversia la codul de octet. Protectorii Themida și Start-Force permite de a converti o parte din codul mașină al software-ului protejat într-un limbaj mașină virtuală, și anume bytecode (de asemenea, cunoscut sub numele de p-cod). În cazul în care mașina virtuală este profund „implantat“ în contact cu solul, apoi se rupe de protecție, nu „uciderea“ în această cerere, este practic imposibil, este imposibil să demontați direct bytecode. cel puțin pentru această nevoie de a înțelege algoritmul mașinii virtuale și a scrie un modul special de procesor pentru Pro disassembler IDA, sau pe propriul dvs. la. Aceasta este o activitate foarte intensă a forței de muncă, care ia cercetătorului o grămadă de timp și efort, dar pentru că bytecode mașina virtuală în următoarele versiuni ale benzii de rulare pot fi schimbate și scrise anterior unitatea de procesare / disassembler va fi inutilizabil. Este cea mai bună protecție rezistente la toate existente astăzi, dar nu uita despre două lucruri: în primul rând, în cazul în care banda de rulare este obtinerea de popular, iar noile versiuni ies rar, crearea de procesoare devine viabilă și de protecție economică încep să rupă toată lumea dacă ca noi versiuni sunt lansate aproape zilnic, este puțin probabil ca dezvoltatorul va fi călca timp suficient pentru o restructurare radicală a mașinii virtuale, și trebuie să se limiteze la mici modificări în bytecode, care se traduce modificări minore în modulul procesorului, și va continua să se rupă de protecție. În al doilea rând, hacker poate „rupe“ VM din banda de rulare, acesta nu este adâncit în labirintul de interpretare bytecode, încă o dată confirmă teza bine-cunoscut: poți rupe totul ... în cele din urmă.