Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
casa verde 2024

Intrerupator cu N - doza doar cu ...

Incalzire casa fara gaz/lemne

Incalzire in pardoseala etapizata
 Suprataxa card energie?!

Cum era nivelul de trai cam din a...

probleme cu ochelarii

Impozite pe proprietati de anul v...
 teava rezistenta panou apa calda

Acces in Curte din Drum National

Sub mobila de bucatarie si sub fr...

Rezultat RMN
 Numar circuite IPAT si prindere t...

Pareri brgimportchina.ro - teapa ...

Lucruri inaintea vremurilor lor

Discuții despre TVR Sport HD.
 

Obfuscare - problema disassembly

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

#19
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,570
  • Înscris: 30.07.2003
Uite un loader si modifica partea de criptare cum vrei:
http://www.cppblog.c...8/08/29574.html
https://github.com/c...ter/loadEXE.cpp

#20
Alex99_1

Alex99_1

    Junior Member

  • Grup: Members
  • Posts: 93
  • Înscris: 14.01.2012
Multumesc! Posted Image

Edited by Alex99_1, 23 April 2017 - 15:53.


#21
Alex99_1

Alex99_1

    Junior Member

  • Grup: Members
  • Posts: 93
  • Înscris: 14.01.2012
Poate sa lase cineva niste exemple de obfuscare binara(gen inlocuirea intructiuni jmp cu altceva care se comporta la fel)?Sau niste carti.

Edited by Alex99_1, 03 May 2017 - 03:34.


#22
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,383
  • Înscris: 10.08.2005
Iti las un video, iti descrie procesul pe care o sa il parcurgi, si da, trebuie sa te lupti cu JMP
[ https://www.youtube-nocookie.com/embed/y124L75ZKAc?feature=oembed - Pentru incarcare in pagina (embed) Click aici ]
slide-show-ul folosit
https://www.defcon.o...g-With-Math.pdf

#23
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,570
  • Înscris: 30.07.2003

View PostAlex99_1, on 03 mai 2017 - 03:27, said:

gen inlocuirea intructiuni jmp cu altceva care se comporta la fel
Si care-i utilitatea? Daca vrei sa nu vada codul cineva, la o analiza statica, ti-am dat material mai sus, nu-l vede nimeni la decompilare. Abia la rulare e copiat undeva in memorie si executat. Din RAM ti-l ia oricine pana la urma, procesorul il vrea in clar sa-l rontaie.

#24
Alex99_1

Alex99_1

    Junior Member

  • Grup: Members
  • Posts: 93
  • Înscris: 14.01.2012
Multumesc de video.
Macar e un inceput. Am sa vad si cu memeoria,deocamdata sa fac ceva sa mearga.

#25
Alex99_1

Alex99_1

    Junior Member

  • Grup: Members
  • Posts: 93
  • Înscris: 14.01.2012
Am reusit sa fac dezasamblarea si sa inlocuiesc call cu push si jmp. Acum ma confrunt cu problema encodarii..nu prea inteleg cum este syntaxa la stringul dat spre encodare. Poate cineva sa-mi dea niste hinturi sau ceva exemple?

#26
politete

politete

    Junior Member

  • Grup: Junior Members
  • Posts: 40
  • Înscris: 02.06.2017
salut,
in atasament am pus un program mic care afiseaza un mesaj apeland APIul MessageBox
dezasamblarea acestui program este urmatoarea:
instructiune (echivalent hex)
XOR EAX,EAX (31C0)
PUSH EAX (50)
CALL program1.00401009 (E8 01000000)
RETN (C3)
PUSH EBP (55)
MOV EBP,ESP (89E5)
PUSH DWORD PTR SS:[EBP+8] (FF75 08)
PUSH program1.00403009 (68 09304000) 				 ; Titlu = "TITLU"
PUSH program1.00403000 (68 00304000) 				 ; Text = "CONTINUT"
PUSH DWORD PTR SS:[EBP+8] (FF75 08)
CALL DWORD PTR DS:[<&USER32.MessageBoxA>] (FF15 3C204000)
LEAVE (C9)
RETN 4 (C2 0400)
00			 DB 00
00			 DB 00
00			 DB 00
00			 DB 00


ce trebuie sa faca programul tau acestui program? ce trebuie sa modifice?

Attached Files



#27
Alex99_1

Alex99_1

    Junior Member

  • Grup: Members
  • Posts: 93
  • Înscris: 14.01.2012
0x1: XOR EAX,EAX (31C0)
0x2: PUSH EAX (50)
0x3: [b]jmp 0x18[/b]
0x4: RETN (C3)
0x5: PUSH EBP (55)
0x6: MOV EBP,ESP (89E5)
0x7: PUSH DWORD PTR SS:[EBP+8] (FF75 08)
0x8: PUSH program1.00403009 (68 09304000)							 ; Titlu = "TITLU"
0x9: PUSH program1.00403000 (68 00304000)							 ; Text = "CONTINUT"
0x10: PUSH DWORD PTR SS:[EBP+8] (FF75 08)
0x11: CALL DWORD PTR DS:[<&USER32.MessageBoxA>] (FF15 3C204000)
0x12: LEAVE (C9)
0x13: RETN 4 (C2 0400)
0x14: 00					 DB 00
0x15 00					 DB 00
0x16 00					 DB 00
0x17 00					 DB 00
new section at the end of program:
[b]Section obf:[/b]
0x18: push 0x4						 ; replace call 401009
0x19: jmp program1.00401009 ; replace call 401009
0x20: int3
0x21: int3 ; next call
si tot asa mai departe pentru fiecare call


cam asta modific eu. Problema e sa fac encodarea la aceste intructiuni cu xed..

Edited by Alex99_1, 13 September 2017 - 10:25.


#28
politete

politete

    Junior Member

  • Grup: Junior Members
  • Posts: 40
  • Înscris: 02.06.2017
daca la encodare te referi la transformarea instructiunilor in echivalentul hex, pt saritura lunga jmp (de exemplu jmp 421000) ai E9 urmat de inca 4 bytes, in total 5 bytes
cei 4 bytes ii calculezi astfel:
iei adresa urmatoarei instructiuni de dupa locul unde bagi jmp-ul, o notezi cu adresa1
iei adresa unde vrei sa sari, o notezi cu adresa2
aplici formula: 0 - (adresa1 - adresa2)
rezultatul obtinut il transformi in hex cu lungime de 4 bytes si il scrii dupa byteul E9, dar incepand cu byteul al 4-lea, apoi al treilea .. deci in ordine inversa a bytes-urilor

pe exemplul concret din atasamentul de mai sus:

00401000	 31C0		  XOR EAX,EAX							  ;  kernel32.BaseThreadInitThunk
00401002	 50			PUSH EAX
00401003	 E8 01000000   CALL program1.00401009
00401008	 C3			RETN
00401009	 55			PUSH EBP
0040100A	 89E5		  MOV EBP,ESP
0040100C	 FF75 08	   PUSH DWORD PTR SS:[EBP+8]
0040100F	 68 09304000   PUSH program1.00403009				   ;  Titlu "TITLU"
00401014	 68 00304000   PUSH program1.00403000				   ;  Text = "CONTINUT"
00401019	 FF75 08	   PUSH DWORD PTR SS:[EBP+8]			 
0040101C	 FF15 3C204000 CALL DWORD PTR DS:[<&USER32.MessageBoxA>]
00401022	 C9			LEAVE
00401023	 C2 0400	   RETN 4
00401026	 00			DB 00
00401027	 00			DB 00
00401028	 00			DB 00
00401029	 00			DB 00
0040102A	 00			DB 00
0040102B	 00			DB 00
0040102C	 00			DB 00
0040102D	 00			DB 00
0040102E	 00			DB 00
0040102F	 00			DB 00
00401030	 00			DB 00
00401031	 00			DB 00
00401032	 00			DB 00


la adresa 401003 ai o instructiune call. vrei sa o inlocuiesti cu un jmp care sa sara la 401028.
iei adresa urmatoarei instructiuni de unde bagi jmpul: este 401008. o notezi cu adresa1
iei adresa unde vrei sa sari: este 401028, o notezi cu adresa2
aplici formula: 0 - (401008 - 401028) = 0 - ( -20) = 0 + 20 = 20
20 pe 4 bytes este 00000020
deci la 401003 (unde ai call) vei pune E9 20000000

la adresa 401028 vei pune 'push adresa de intoarcere', care este 401008. 401008 pe 4 bytes este 00401008. push are antet 68. vei urca pe stiva adresa adresa virtuala relativa (RVA) in cazul push-ului, tot in ordine inversa a bytes-urilor. deci vei avea 68 08104000

apoi dedesuptul instructiunii push vrei jmp la codul din call. adresa unde bagi instructiunea de jump este cea de dupa push, adica 40102D.
iei adresa urmatoarei instructiuni de unde bagi jmpul: este 40102D+5(jmp lung pe 5 bytes) = 401032. o notezi cu adresa1
iei adresa unde vrei sa sari: callul incepe la 401009. o notezi cu adresa2
aplici formula 0 - (401032 - 401009) = 0 - (29) = -29 = ffffffD7
deci la 401032 vei pune E9 D7ffffff

deci vei avea urmatorul cod dupa 'obfuscare':

00401000	 31C0		  XOR EAX,EAX
00401002	 50			PUSH EAX
00401003	 E9 20000000   JMP program1.00401028
00401008	 C3			RETN
00401009	 55			PUSH EBP
0040100A	 89E5		  MOV EBP,ESP
0040100C	 FF75 08	   PUSH DWORD PTR SS:[EBP+8]
0040100F	 68 09304000   PUSH program1.00403009				   ; Titlu = "TITLU"
00401014	 68 00304000   PUSH program1.00403000				   ; Text = "CONTINUT"
00401019	 FF75 08	   PUSH DWORD PTR SS:[EBP+8]			   
0040101C	 FF15 3C204000 CALL DWORD PTR DS:[<&USER32.MessageBoxA>]
00401022	 C9			LEAVE
00401023	 C2 0400	   RETN 4
00401026	 00			DB 00
00401027	 00			DB 00
00401028	 68 08104000   PUSH program1.00401008
0040102D	E9 D7FFFFFF   JMP program1.00401009
00401032	 00			DB 00



#29
Alex99_1

Alex99_1

    Junior Member

  • Grup: Members
  • Posts: 93
  • Înscris: 14.01.2012
Multumesc! Foarte bine explicat. Insa mai este o problema. Eu trebuie sa encodez un fisier cu instructiuni. Fisierul "dis.xml" e cel in care am modificat adresele de la jmp si call( sa fie VA). In fisierul "dis2.xml" e asa cum a decodat xed cu RVA. Instructiuni se pot encoda cu xed dandui doar un string "call_far 0x123456",dar aici e problema ca nu stiu prea bine syntaxa la string. Din cate am mai citit trebuie gen "call_far mem4:eax,12345" insa is in mare dilema cu asta. Inca ceva.Cand in sfarsit o encodez ar trebui cred sa transform adresele din dis.xml asa cum sunt in dis2.xml,adica cum le-a decodat la inceput?

Attached Files

  • Attached File  dis.xml   297.84K   2 downloads
  • Attached File  dis2.xml   296.74K   1 downloads

Edited by Alex99_1, 13 September 2017 - 13:04.


#30
Alex99_1

Alex99_1

    Junior Member

  • Grup: Members
  • Posts: 93
  • Înscris: 14.01.2012
Nu mai am nevoie de xed ca sa encodez. O sa le fac manual,dar cum s-ar traduce in hex o instructiune de genu "jmp dword ptr [0xffffff]"?

#31
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,570
  • Înscris: 30.07.2003
Pune in debugger instructiunea si vezi si hex-ul.

#32
Alex99_1

Alex99_1

    Junior Member

  • Grup: Members
  • Posts: 93
  • Înscris: 14.01.2012
Asta am vazut, dar nu stiu cum se calculeaza!

Edited by Alex99_1, 27 September 2017 - 11:56.


#33
Alex99_1

Alex99_1

    Junior Member

  • Grup: Members
  • Posts: 93
  • Înscris: 14.01.2012
Lasand la o partea "JMP" m-am lovit de alta problema. La obfuscare cand fac "push nextAddr" nextAddr nu ceea care trebuie sa programul imi crapa. Am pus ca in exemplul lui politete(am incercat si rva si va),dar nu reusesc si nu inteleg de ce nu e corecta adresa aia..? Any help..
In imagine,daca execut pas cu pas merge,dar daca salvez in executabil si pun din nou in olly crapa..

#34
politete

politete

    Junior Member

  • Grup: Junior Members
  • Posts: 40
  • Înscris: 02.06.2017
salut,
daca adaugi sectiuni noi, trebuie sa modifici capul PE-ului in care sa pui informatii despre noua sectiune
eventual scrie pas cu pas ce faci + cod

#35
Alex99_1

Alex99_1

    Junior Member

  • Grup: Members
  • Posts: 93
  • Înscris: 14.01.2012
Far enough. In olly daca fac astfel functioneaza,dar daca salvez permanet in executabil imi crapa la rulare.
https://imgur.com/KUFUEEI

"lab1_prog.exe" e cel modficat si "lab1_progC.exe" original.
https://imgur.com/wRuC0r6

iar in olly cum arata cel modificat.
https://imgur.com/8Rs7jtC
=> jmp in noua sectiune https://imgur.com/AEifwLr
iar acolo la retn imi crapa
https://imgur.com/7c7Rts3

Si bucati de cod atunci cand scriu instructiunile:
[ https://i.imgur.com/3sCUa17.png - Pentru incarcare in pagina (embed) Click aici ]
[ https://i.imgur.com/ImJVsO3.png - Pentru incarcare in pagina (embed) Click aici ]
0x400(offset fisier) l-am adaugat raw doar sa vad daca merge
NewSect->Characteristics = 0xE00000E0

Edited by Alex99_1, 02 October 2017 - 15:13.


#36
politete

politete

    Junior Member

  • Grup: Junior Members
  • Posts: 40
  • Înscris: 02.06.2017
deci iti 'crapa' pt ca daca te uiti in capul stivei (esp) vei vedea ca vrei sa te intorci la 10e8h  - are un loc dedicat in olly si anume lista din coltul dreapta-jos. cand esti pe cale de a executa instructiunea ret uita-te in capul stivei ( https://imgur.com/7c7Rts3 )
in imaginea https://imgur.com/AEifwLr tu ai push 0ba5h , dar tie iti trebuie adresa de memorie acolo (eu confund va cu rva ; deci voi spune adresa de memorie la adresa de memorie, si adresa de foaie la adresa pe care o gasesti cu hexeditorul cand programul e pe hard). deci capul stivei (esp) inainte de instructiunea ret trebuie sa contina adresa de memorie unde se va face intoarcerea.
totusi, nu stiu exact ce instructiuni executi in sectiune (vad ca compiezi continutul functiilor), insa daca ai facut push la 0ba5h, ar trebui ca capul stivei sa contina tot 0ba5h si nu 10e8h cum arata atunci cand zici ca iti 'crapa'

hai sa incercam sa lucram pe programul meu. deci fa modificarile necesare si uploadeaza-l sa imi dau si eu seama mai bine ce modificari ai facut

cat despre codul in c in care lucrezi, nu te pot ajuta pt ca nu cunosc c

Anunturi

Bun venit pe Forumul Softpedia!

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