Programele de protecție de către dezasambla

Poate că fiecare dintre voi se confruntă cu problema pe care o diferență în unele prog ciudat. În cazul în care prevede o simplă înlocuire a informațiilor, atunci nu se gândesc, executați vizualizator HEX preferat și a schimbat toate acestea posibile. Nu întotdeauna pentru a obține un rezultat reușit să mențină dimensiunea programului. Dar chiar și atunci se răcească programator nu se oprește și începe dezasamblor dvs. (dezasamblare - procesul prin care programul pe care îl obține codul sursă pentru limbaj de asamblare ... :). Ha astăzi cunoscut tueva Hucha decente e / a, cum ar fi IDA, Periscop, bule
Camera, Sourcer, etc ...). Dacă aveți încă acest lucru, vă sugerez începând cu IDA (Interactive Disassembler Pro), pe care le puteți obține pe
www.datarescue.com/idabase. Mai mult, în dosarele ASM care rezultă schimba faptul că era necesară, iar apoi sunt turnate din nou
care rulează un program. Programatorii cele mai avansate de multe ori derivate din surse care încearcă să compileze programe pentru limbaje de nivel înalt, fie C, Fortran sau Basic sau Pascal. Acest proces este numit decompilării, din cauza complexității punerii sale în aplicare automată sunt extrem de rare. Decompilarea, de obicei, de mână, în timp ce caută pentru funcțiile de început și de sfârșit. De exemplu, șirul de a întâlni „push ebp; mov EBP, ESP „poate spune acest lucru este începutul funcției, și“ EBP pop; retn „- capătul său. Astfel de disassemblers avansate cum ar fi AID furnizează deja toate funcțiile și sarcina este atribuită doar pentru a înțelege ceea ce fac.

Dar ați început să demontați programul și ... Nasol :(. Prog tău a emis foarte puțin cod și completate cu unele db cu numere de neînțeles. În acest caz, în mod evident, ai suspectat că ceva era în neregulă. În cazul în care programul este criptat sau protejat de ceva foarte teribil, nu ar trebui să-l aruncați și țipi imediat „sunt atât de dezgustător și Transcrie! timp de o sută de ani.“ este suficient pentru a realiza ceea ce ar fi fost nu un program este codat, ea te decodificat pentru a lucra. este bine. și apoi trebuie doar să acționeze. în cazul în care programul în sine decriptează / decomprimă sau esche_h_znaet_cht . _delaet, este posibil ca o parte a programului pentru a rula și lua mai mult timp pentru a despacheta COD Există o altă abordare, în principiu, nu este diferit de cel anterior: pentru a rula un program, și în timp ce se execută de înregistrare utilizat memoria pe disc.

De obicei, programele criptate, inclusiv viruși polimorfi :) criptați de mai multe ori, iar acestea se pot deplasa sau chiar schimba codul, executați informațiile decodificate pentru mai despachetare, bine, precum și utilizarea alte abordări sunt confuze. Rezultă că utilizarea unui disassembler este neprofitabilă. În acest scop, un program pare avantajos executa secvențial o singură instrucțiune (așa-numita urmărire - urme) sau de a efectua instrucțiunile de program într-o / memorie predeterminată. Aceste funcții au aproape toate debuggeri (debugger). Nu-mi spune că ai nici unul. Chiar și în DOS (și mastdayke inclusiv) este un DEBUG utilitar - debugger cel mai simplu. Dar, din păcate, pe 16 biți, și, în general, nu îndeplinesc cerințele de programatori abrupte. În general, aproape orice limbaj de programare are un depanator. În Borlandovskih (Turbo Assembler (TASM), Borland C ++) - o serie de TD (Turbo Debugger). TD - pentru programele dos dvs., TDW - pentru vindovskih. TDW dar de multe ori nu iau programul cu antet 32bit PE / NE. Apoi, începe cu îndrăzneală TD32. Nu uita MicroSoft. Produsele lor (MicroSoft Assembler, MASM) pot fi găsite CodeView debugger (CV, CVW). Relativ recent, a aparut NuMega companie pachet de utilități Compuware, a se vedea
www.numega.com. Debugger NuMega SoftIce (winice) permite debaggit chiar kernel-ul, după cum a vizualiza și cu ușurință toate firele sunt procese și ferestre. de multe ori El vine într-un set de BoundsChecker.

Acum avem totul pentru a rupe. Executați un program în debugger este necesar, și să execute în conformitate cu instrucțiunile ... 🙂 terpezha dacă nu este suficient, apoi pune un punct de control la ieșirea din ciclul și executați programul din punctul în care ați rămas. Programul va transfera controlul la debugger înainte de a executa instrucțiunile marcate breakpointom. În cele mai multe breakpointy reprezintă întrerupere (mai precis, capcana), care să înlocuiască instrucțiuni marcate. De ce scriu acest lucru. - doar
Feriți-vă că programul nu înlocuiește instrucțiunile pe care breakpoint, și apoi el poate
. Pierdut și programul va rula până la sfârșitul anului :-( Ei bine, să spunem că am ajuns în punctul în care începe programul real decomprimat ... cel puțin la fel crezi, dar, de fapt, poate fi o continuare a decodorului :. D Acum puteți salvați toate terciul primite ca EXEshnik. Dar, amintiți-vă doar noul punct de intrare și
Asigurați-vă că pentru a înregistra valoarea conservate ... și dintr-o dată ei vor continua să fie utilizate. Titlul puteți vedea cu ajutorul unui utilitar Hiew rece (Hacker View) de către SEN (ftp.kemsc.ru/pub/sen). Dacă dos prog hard - MZ antet vindovskaya - cea mai mare parte PE.

Acum, uita-te la câteva modalități de a proteja programe de inginerie inversă. Dacă - un programator rece, face un prog rece, iar pentru un motiv oarecare doresc să ascundă codul său (și poate că cineva va observa că este troyanchika meu preferat.), Atunci primul lucru care vine în minte - să-l cripta. Aici puteți naviga prin cărți despre criptografie, amuzant, dar în cele din urmă dau seama că extractor este prea simplu. Eu pot, de asemenea, nu oferi doar criptat, dar, de asemenea, pachet vechi. Dacă nu știi nimic - primul lucru care va veni va RunLengthEncode, dar ambala codul - o cameră moartă. Este mai bine să utilizați unele modificări ale algoritmului LZW. El, sau mai degrabă modificările sale sunt folosite în multe archivers (RAR, ZIP), GIF fișier imagine, chiar și PDFah ei pachet EXEshniki (PKLITE). Acum, că este baza, gândiți-vă cum să strice iubitorii de viață pentru a deschide programul. În primul rând, puteți cripta o parte din Dezarhivator, în general, astfel încât să puteți cripta piesa de program cu bucată, și de mai multe ori cripta transcrierile :), și apoi o alta, cripta toate împreună :))). Puteți amesteca cu ușurință părțile programului, ceea ce poate duce, de asemenea, la confuzie.
În plus, puteți veni cu modalități mai eficiente de protecție. Credeți că va fi în registre după executarea următoarea secțiune de cod:

Label1: mov ax, 1ab8h
mov bx, 06bbh
mov cx, 00b9h
mov dx, 01bah
mov si, 0ffbeh
mov di, 32bfh
jmp Label1 + 1

Răspunsul corect este: bx = 0x0b906; cx = 0x0ba00; dx = 0x0be01; si = 0x0bfff; di = 0x0eb32. Ei nu au înțeles de ce. Apoi și protrassiruyte compila. Pentru a elimina codul executabil breakpointy admonestare poate fi schimbat, de exemplu, crește sau descrește următoarea declarație poate fi pus pe măștile lor, pliante, sau pur și simplu suprascrie. Astfel, de fiecare dată când o instrucțiune ulterioară poate fi modificat:

împinge cs
ds pop
mov ch, 0ebh
mov esi, compensate $ sau Label2: mov esi, ofset Label2
add byte ptr [esi + 07] 08
sub byte ptr [esi + 10], 5
db Rel

Acest fragment a fost realizat în ceea ce privește trecerea la Rel bytes (echivalent cu Jmp scurt Rel PTR). Puteți (ar trebui) pentru a proteja programul de ... urmărire. Da, este prin trasarea. Ei bine, nu-brainer că urmărirea este mult mai lung decât execuție normală de program. De asemenea, poate fi folosit. Mai jos am oferi un fragment care cauzează obține funcția de DOS“
Timpul „:

mov ah, 2ch; Get Timp
21h int; numesc servicii DOS
împinge dx; - DH secunde, dl - sutimi de secundă (0-99)
mov ah, 2ch; Get Timp
21h int; numesc servicii DOS
ax pop; ah - secunde
cmp dh, ah
JZ continua
; GOTCHA.

În cazul în care timpul nu sa schimbat în câteva secunde, puteți sări peste eticheta continua, în caz contrar programul continuă. Ei bine ... aici poți pune și la nivel scăzut formatarea 80h de disc (Ei bine, C: Vreau să spun ...). Acest lucru este deosebit de rău pentru oameni ca mine: p, iar restul ... Te sfătuiesc să atârne doar sistemul.
Chiar și fragmentul de mai sus, de fapt, îl puteți urmări mult mai rapid în al doilea rând, așa că vă sfătuiesc să introduceți interogări de timp, în diferite părți ale programului,
puteți chiar și în mod diferit ambalate despachetarea mult mai rapid de urmărire.
În plus, comparația secunde poate fi amânată pentru următoarea secțiune de cod, astfel încât aceasta nu se opune în special afară, și apoi imediat suspect: prima sa uitat de mult timp, apoi se compara cu ceva, și de ce. ... Adesea multe biscuiti (inclusiv eu) provoacă suspiciuni condiționate de instrucțiuni de ramură, așa că ar fi mai bine să scrie totul, fără a le:

De fapt, puteți veni în continuare cu moduri de a Tuyev huchu creier praf de spărgători, astfel încât cineva din atât de mult :). Noi credem că programul este bine criptate. Rămâne să o facă în practică. Sper că nu aveți dorința de a ambala EXEshnik în întregime. Ei bine, dacă da, și nu te-ai gândit cum să facă acest lucru, sugerează: în EXEshnikov poate schimba punctul de intrare ... adică vă pachet Vechiul compilat și decodorul atașați de mai jos :). Nu vrei să? Doar? Vă rugăm să - Știu, de exemplu,
C ++ Buildere unei astfel de funcții pentru a compila fișierul în ... sursa de asamblare (el sa bucurat), deci nu ezitați să braț de asamblare și mai departe. Ei bine, una dintre modalitățile cele mai distractive - ambalaj o procedură separată, pur și simplu inserați codul de asamblare în programul ... În final, puteți crea un * .lib, * sau * .obj fișier .dll și răsturnat peste ele. Există cineva care mai mult
cum ar fi. Principalul lucru pe care gimor mai mici și ... locul de muncă!

Arată acest articol unui prieten: