Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Presbiopia - la 43 ani ?

Termen transcriere autovehicul

Cazare Timisoara pe 4-5 zile

Primele zile ale internetului per...
 Ditra 25

Casti USB-C ptr A-54

Aplicatie medicala / asistent med...

De ce vor atația politicieni...
 ERR_ADDRESS_UNREACHABLE

Legea 18/1968 Se mai aplica?

Digi conectare 2 routere prin fir

Succesiune notar versus instanta ...
 Montaj aer conditionat in balcon ...

Cont curent mulți valuta far...

Sugestii plan casa

Experiente cu firme care cumpara ...
 

Obfuscare - problema disassembly

- - - - -
  • Please log in to reply
48 replies to this topic

#1
Alex99_1

Alex99_1

    Junior Member

  • Grup: Members
  • Posts: 93
  • Înscris: 14.01.2012
Salutare! Intampin o problema in a dezasambla un executabil(folosesc intel xed). Procedez astfel:
Transform imaginea  programului in hexa,caut  sectiunea .txt si o dau la functiile din intel xed(primeste cate 15 biti) spre dezasamblare.
Problema apare cand incearca sa dezasambleze aceste bucati. Incercand cu un soft de dezasamblare am observat ca se obtine opcodu din bucati de 15 biti combinate gen:
cc 55 8b ec 81 ec c0 00 00 00 53 56 57 8d bd
40 ff ff ff b9 30 00 00 00 b8 cc cc cc cc f3 - eroare

opcodu s-ar obtine din: 8d bd 40 ff ff ff         lea edi, dword [ ebp + 0xffffff40 ]

Intrebarea este cum fac sa calculez secventele de genu "8d bd 40 ff ff ff" inainte sa le dau spre dezasamblare?

#2
Argv

Argv

    Senior Member

  • Grup: Senior Members
  • Posts: 2,496
  • Înscris: 25.10.2007
Incearca cu OllyDbg

#3
Alex99_1

Alex99_1

    Junior Member

  • Grup: Members
  • Posts: 93
  • Înscris: 14.01.2012
Mie imi trebuie opcodul generat de programul meu in c cu ajutorul framework-lui intel xed. Primesc ca si input un executabil.

#4
sags

sags

    Senior Member

  • Grup: Senior Members
  • Posts: 9,940
  • Înscris: 24.04.2013
Mai intai nu e vorba de 15 biti ci bytes. Mai apoi, si cel mai important, este ca se pare ca nu ai inteles bine ce e cu acel ‘15’. Instructiunile IA32/IA64 au maxim 15 octeti (cel putin asa zic autorii xed, nu stiu daca valoarea e corecta), nu exact 15. In plus, in segmentul de cod (.text) nu este obligatoriu sa fie doar instructiuni una dupa alta, ci pot fi si zone neutilizate sau date.

Deci dezasamblarea e o chestie foarte complicata. Trebuie sa pornest dintr-un punct unde sti ca trebuie sa inceapa o instructiune, cum ar fi adresa de pornire a programului data in antetul fisierului *.exe, si sa dezasamblezi tinund cont de lungimea fiecarei instructiuni intalnite. In plus trebuie sa urmaresti instructiunile de salt (jmp/ jcond/ call/ ret/ etc) pentru ca ele iti dau adrese noi de unde sa continui; de asemena dupa un salt neconditionat este posibil sa nu mai urmeze cod.

Edited by sags, 22 April 2017 - 17:06.


#5
Alex99_1

Alex99_1

    Junior Member

  • Grup: Members
  • Posts: 93
  • Înscris: 14.01.2012
Am inteles. Cred ca algortimul ar fi recursiv,daca sare intr-o functie si nu este cod. Cum as putea sa aflu lungimea fiecarei intructiuni(eu daca stiu doar codu in hexa)?

#6
sags

sags

    Senior Member

  • Grup: Senior Members
  • Posts: 9,940
  • Înscris: 24.04.2013
Cauti pe net ‘Intel® 64 and IA-32 Architectures Developer's Manual’, si din cele multe-multe pagini (4-5 mii) afli tot ce vrei. Printre altele ai si modul de codificare a instructiunilor de unde poti elabora un algoritm care, dandu-se o secventa de octeti despre care stii ca incepe cu o instructiune, sa iti spuna cat e lungimea acelei prime instructiuni. Dar nu cumva xed te poate ajuta? Adica tot trebuie sa ii dai un sir de octeti sa o decodeze (ii dai maximul posibil, 15), nu iti spune si cati octeti a ‘consumat’ din ea pentru prima instructiune de care a identificat-o?

LE: De fapt, ce anume exact vrei sa faci? Scrii ca e ‘programul tau’ si e ‘in C’. Deci ai sursele, nu? Stii ca practic orice compilator are optiuni in linia de comanda sa iti scoata un fisier ‘listing’ cu codul generat? Si atunci nu mai e nimic de dezasamblat…

Edited by sags, 22 April 2017 - 17:33.


#7
Alex99_1

Alex99_1

    Junior Member

  • Grup: Members
  • Posts: 93
  • Înscris: 14.01.2012
Nu cred sau nu-mi dau eu seama?!?!
[ http://i63.tinypic.com/25qw2sw.jpg - Pentru incarcare in pagina (embed) Click aici ]

Edited by Alex99_1, 22 April 2017 - 17:38.


#8
sags

sags

    Senior Member

  • Grup: Senior Members
  • Posts: 9,940
  • Înscris: 24.04.2013
CC este instructiunea int 3 (una din codificarile posibile ale ei), de un singur octet. Este vorba de o intrare in debugger (sau abandonarea programului). Deci urmeaza sa continui dezasamblarea dupa acel octet CC (‘consumi’ unul singur). Din poza pe care ai pus-o nu vad unde ar fi lungimea instructiunii decodificate. Cauta totusi prin ceva documentatie a xed, poate zice acolo - e mult mai sigur decat sa o iei pe ghicite. Daca nu, IA32/64 Reference nu are decat 4700 de pagini…

Chestia este ca unele compilatoare (nu stiu daca toate) umplu cu CC zonele, de regula de date, neinitializate. Scopul este se declanseze debugger-ul daca se ajunge din greseala cu executia pe acolo. Deci zone pline cu CC = poate fi zona de date, adica sa nu fi nimerit bine .text..

Edited by sags, 22 April 2017 - 17:53.


#9
Alex99_1

Alex99_1

    Junior Member

  • Grup: Members
  • Posts: 93
  • Înscris: 14.01.2012
Am sa pun tot programul cu toate sectiunile si am sa caut prin documentatie. O sa revin cu intrebari :D

#10
csgabe

csgabe

    Active Member

  • Grup: Members
  • Posts: 1,522
  • Înscris: 08.12.2009

View PostAlex99_1, on 22 aprilie 2017 - 17:11, said:

Cum as putea sa aflu lungimea fiecarei intructiuni(eu daca stiu doar codu in hexa)?
Cu LDE:
http://beatrix2004.f...e/download1.php
http://www.beaengine...d/LDE64-x86.zip
http://www.beaengine...d/LDE64-x64.rar

#11
Alex99_1

Alex99_1

    Junior Member

  • Grup: Members
  • Posts: 93
  • Înscris: 14.01.2012
Ar fi ceva,am sa incerc. Proiectul asta este un obfuscator care primeste ca input un executabil(doar x86 pecoff) si face modificari in cod asm. Le encodeaza inapoi si programul trebuie sa mearga la fel.

#12
sags

sags

    Senior Member

  • Grup: Senior Members
  • Posts: 9,940
  • Înscris: 24.04.2013
Sanse sa modifici codul existent ‘pe loc’ si dupa modificare programul sa mai si functioneze sunt nule. Inlocuind instructiuni se modifica lungimile lor deci si adresele de inceput ale instructiunilor. Cum nu poti sti (cu un efort decent, si nici macar cu unul in-decent Posted Image) care sunt toate adresele destinatie ale salturilor, dupa modificare te trezesti ca se face un salt de cine stie unde in mijlocul unei instructiuni pe care ai pus-o tu; si chiar daca le-ai cunoaste, e cam greu sa rescrii secvente de cod pastrand limite de instructiuni atat de dese.

Ce ai putea face este sa adaugi cod de pornire personalizat, caz in care nu ai nevoie sa dezasamblezi nimic fiindca tratezi programul original ca o cutie neagra.
  • Codul pe care il adaugi va primi controlul la lansarea programului si va modifica in memorie zona care corespunde programului original ca sa il de-obfuscheze, apoi ii va preda controlul.
  • Pe disc fisierul *.exe va contine programul original obfuscat plus loaderul tau.
  • Modifici in antet adresa de lansare a.i. sistemul de operare sa predea controlul catre loaderul tau.
  • Atentie la fixup-uri, pe acestea operatiile de ‘obfuscare’ si ‘de-obfuscare’ trebuie sa le ocoleasca.
  • Bineinteles pentru modificarea fisierelor *.exe vei scrie un alt program care preia informatiile despre programul original din antet, obfuscheaza codul original, adauga loader-ul tau la sfarsit, apoi modifica antetul in mod corespunzator (sa tina cont de lungimea mai mare si punctul de pornire sa fie in codul tau). Nu stiu exact cum sa adaugi cod suplimentar (poate o sectiune noua - dar nu mai tin minte cum e organizat PE) fara sa nu deplasezi sectiunile care vin dupa .text.
  • Atentie ca procesoarele Intel preiau si chiar executa provizoriu instructiuni in avans, chiar si unele la care nu se va ajunge niciodata, plus ca au tot felul de memorii cache. Cum tu ajungi de fapt sa ai cod automodificabil, trebuie sa te asiguri ca ‘faci curatenie’ in aceste cache-uri. O buna parte din cele 4700 de pagini de care ti-am zis iti vor fi foarte necesare…
A, si sa nu te mire daca la final programele antivirus/ AntiMalware vor detecta programul modificat ca virus, cracker sau ‘potentially unwanted program’.

Edited by sags, 22 April 2017 - 19:58.


#13
Alex99_1

Alex99_1

    Junior Member

  • Grup: Members
  • Posts: 93
  • Înscris: 14.01.2012
Prin obfuscheaza codul original te-ai gandit ca il cripteaza sau nush(ii face XOR cu o cheie),iar apoi cand se executa programul. Loaderul il decripteaza si apoi programul ruleaza normal?

#14
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,233
  • Înscris: 24.02.2007

View Postsags, on 22 aprilie 2017 - 17:25, said:

LE: De fapt, ce anume exact vrei sa faci? Scrii ca e ‘programul tau’ si e ‘in C’. Deci ai sursele, nu?


#15
sags

sags

    Senior Member

  • Grup: Senior Members
  • Posts: 9,940
  • Înscris: 24.04.2013

View PostAlex99_1, on 22 aprilie 2017 - 20:11, said:

Prin obfuscheaza codul original te-ai gandit ca il cripteaza sau nush(ii face XOR cu o cheie),iar apoi cand se executa programul. Loaderul il decripteaza si apoi programul ruleaza normal?
Da, asa ceva am vrut sa spun. Daca vrei mai mult, cum ar fi sa se decodifice pe bucati dupa cum e nevoie de diferite fragmente in timpul executiei sau sa faca diferite verificari de ‘licenta valida’ in timpul executiei, atunci iti trebuie sursa sa o modifici. Sa pornesti de la un program oarecare si in el ‘sa faci modificari in asm’, sansele de reusita sunt nule.

#16
Alex99_1

Alex99_1

    Junior Member

  • Grup: Members
  • Posts: 93
  • Înscris: 14.01.2012
Am inteles. O incerc ce ai spus. Sa fac un program care imi cripteaza programul input si ii adauga un loader pentru decriptate.

Edited by Alex99_1, 23 April 2017 - 12:02.


#17
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,233
  • Înscris: 24.02.2007
Deci, dupa 16 postari, concluzionam ca vrei sa faci o solutie de obfuscare?

#18
Alex99_1

Alex99_1

    Junior Member

  • Grup: Members
  • Posts: 93
  • Înscris: 14.01.2012
Da.Asa este! Si nu am sursele de la ce programe primesc doar .exe

Anunturi

Chirurgia endoscopică a hipofizei Chirurgia endoscopică a hipofizei

"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală.

Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate