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 |
Obfuscare - problema disassembly
Last Updated: Feb 07 2018 08:33, Started by
Alex99_1
, Apr 22 2017 16:36
·
0
#1
Posted 22 April 2017 - 16:36
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? |
#3
Posted 22 April 2017 - 17:04
Mie imi trebuie opcodul generat de programul meu in c cu ajutorul framework-lui intel xed. Primesc ca si input un executabil.
|
#4
Posted 22 April 2017 - 17:06
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
Posted 22 April 2017 - 17:11
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
Posted 22 April 2017 - 17:25
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
Posted 22 April 2017 - 17:35
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
Posted 22 April 2017 - 17:50
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
Posted 22 April 2017 - 17:57
Am sa pun tot programul cu toate sectiunile si am sa caut prin documentatie. O sa revin cu intrebari
|
#10
Posted 22 April 2017 - 19:03
Alex99_1, on 22 aprilie 2017 - 17:11, said:
Cum as putea sa aflu lungimea fiecarei intructiuni(eu daca stiu doar codu in hexa)? http://beatrix2004.f...e/download1.php http://www.beaengine...d/LDE64-x86.zip http://www.beaengine...d/LDE64-x64.rar |
|
#11
Posted 22 April 2017 - 19:30
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
Posted 22 April 2017 - 19:56
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 ) 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.
Edited by sags, 22 April 2017 - 19:58. |
#13
Posted 22 April 2017 - 20:11
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
Posted 22 April 2017 - 22:32
#15
Posted 23 April 2017 - 06:39
Alex99_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? |
|
#16
Posted 23 April 2017 - 12:00
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
Posted 23 April 2017 - 12:02
Deci, dupa 16 postari, concluzionam ca vrei sa faci o solutie de obfuscare?
|
#18
Posted 23 April 2017 - 12:12
Da.Asa este! Si nu am sursele de la ce programe primesc doar .exe
|
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users