Kérdés:
A C objektív Mach-O módszer szétszerelése Radare 2-vel
3asm_
2015-12-30 20:58:05 UTC
view on stackexchange narkive permalink

Lehetséges-e visszakeresni a Mach-O fájlokban deklarált Objective-C módszerek szétszerelését a Radare2 használatával?

Kettő válaszokat:
Moreaki
2017-01-01 21:00:01 UTC
view on stackexchange narkive permalink

Alapvetően a következő munkafolyamatról van szó:

  r2 -A / path / to / bináris // betölti a bináris fájlt, és végrehajtja a kezdeti elemzéstafl // print függvény symbolspdf @ sym.of.interest / / disassemblepdc @ sym.of.interest // "dekompilál" vagy álkód létrehozása  

Íme egy példa a MachoViewer függvényének szétszerelésére:

  @ 0x4B6169: / $ r2 -A /Applications/MachOView.app/Contents/MacOS/MachOView 2> / dev / null - A .dmm * futtatásával töltheti be az összes betöltött modul szimbólumait. a hibakeresőben [0x100001da0] > afl | grep sym .__ MachOLayout_get0x10000b252 4 49 szim .__ MachOLayout_getSectionByIndex: _0x10000b283 4 49 szim .__ MachOLayout_getSection64ByIndex: _0x10000b2b4 4 49 szim .__ MachOLayout_getSymbolByIndex: _0x10000b2e5 4 49 szim .__ MachOLayout_getSymbol64ByIndex: _0x10000b316 4 49 szim .__ MachOLayout_getDylibByIndex: _ [0x100001da0] > pdf @sym .__ MachOLayout_getSymbolByIndex: _ ; - func.10000b2b4:; - method.MachOLayout.getSymbolByIndex :: ╒ (fcn) sym .__ MachOLayout_getSymbolByIndex: _ 49│ 0x10000b2b4 55 push rbp│ 0x10000b2b5 4889e5 mov rbp, rsp│ 0x1002 mov rdx, qword [rip + 0xf761f]; [0x1001028e0: 8] = 176 LEA sym._OBJC_IVAR ___ MachOLayout.symbols; sym._OBJC_IVAR ___ MachOLayout.symbols│ 0x10000b2c1 488b0c17 mov rcx, qword [rdi + rdx] │ 0x10000b2c5 488b541708 mov rdx, qword [rdi + rdx + 8]; [0x8: 8] = 0x280000003│ 0x10000b2ca 4829ca sub rdx, rcx│ 0x10000b2cd 48c1fa03 sar rdx, 3│ 0x10000b2d1 4839d0 cmp rax, rdx│ ┌─< 0x10000b2d raad ]
│ ┌──< 0x10000b2da eb07 jmp 0x10000b2e3│ ││; JMP XREF 0x10000b2d4-ből (szimbólum: MachOLayout_getSymbolByIndex: _) │ │└─> 0x10000b2dc 488d05e5fd0a. lea rax, [rip + 0xafde5]; 0x1000bb0c8; sym .__ MachOLayoutgetSymbolByIndex: _ :: nem található; sym .__ MachOLayoutgetSymbolByIndex: _ :: notfound│ │; JMP XREF from 0x10000b2da (sym .__ MachOLayout_getSymbolByIndex: _) │ └──> 0x10000b2e3 5d pop rbp╘ 0x10000b2e4 c3 ret [0x100001da0] > quit  
  [0x100001da0] > pdc @sym .__ MachOLayout_getSymbolByIndex: _function sub .__ MachOLayoutgetSymbolByIndex: _. notfound_2b4 () {r2p4b) (r2 push4b) edx rdx = qword sym._OBJC_IVAR ___ MachOLayout.symbols // [0x1001028e0: 8] = 176; "__text" rcx = qword [rdi + rdx] rdx = qword [rdi + rdx + 8] // [0x8: 8] = 0x280000003 rdx - = rcx rdx >> = 3 var = rax - rdx jae 0x10000b2dc // und locx locd : // JMP XREF from 0x10000b2d4 (sub .__ MachOLayoutgetSymbolByIndex: _. Notfound_2b4) rax = [sym .__ MachOLayoutgetSymbolByIndex: _ :: notfound] //method.__MachOLayoutgetSymbolByIndex:_.notfound; 0x1000bb0c8; method .__ MachOLayoutgetSymbolByIndex: _. notfound do {loc_0x10000b2e3: // JMP XREF from 0x10000b2da (sub .__ MachOLayoutgetSymbolByIndex: _. notfound_2b4 pop rbp} while (?); } míg (?); } return;}  

A garat v4 belsejében ugyanezt a következőképpen teheti meg:

  hopperv4 -e / Applications / MachOView .app / Contents / MacOS / MachOView  

Ez megnyitja a garatot, és rákattinthat a "Proc" gombra. fülre, és keresse meg a függvényt. Ha rákattint, a következő szétszerelést fogja látni (radare2 1.5.0 0 @ darwin-x86-64 git.1.5.0, Végrehajtás: HEAD build: 2017-05-31__14: 31: 32):

  000000010000b2b4 push rbp; C célkitűzés megvalósítása: 0x1000f5de8 (példány metódus), DATA XREF = 0x1000f5de8000000010000b2b5 mov rbp, rsp000000010000b2b8 mov eax, edx000000010000b2ba mov rdx, qword [_OBJC_IVAR _ $ _r _2 _md200000000000000000000 $ rbx RDI + RDX + 8] 000000010000b2ca sub RDX, rcx000000010000b2cd sar RDX, 0x3000000010000b2d1 cmp Rax, rdx000000010000b2d4 Jae loc_10000b2dc000000010000b2d6 mov Rax, qword [RCX + Rax * 8] 000000010000b2da JMP loc_10000b2e3 loc_10000b2dc: 000000010000b2dc lea Rax, qword [__ZZ32- [MachOLayout getSymbolByIndex:] E8találatlan]; KÓD XREF = - [MachOLayout getSymbolByIndex:] + 32 loc_10000b2e3: 000000010000b2e3 pop rbp; KÓD XREF = - [MachOLayout getSymbolByIndex:] + 38000000010000b2e4 ret  

Nyilvánvaló, hogy a garat belsejében található álkód ebben a pillanatban még mindig jobb, mint amit a radare2 belsejében kaphatnék. A fenti szétszerelés az álkódban a garatban (v4.2.1) így szól:

  struct nlist * - [MachOLayout getSymbolByIndex:] (void * self, void * _cmd, unsigned int arg2) {rax = arg2; rcx = self->symbols; if (rax < SAR (* (self + * _OBJC_IVAR _ $ _ MachOLayout.szimbólumok + 0x8) - rcx, 0x3)) {rax = * (rcx + rax * 0x8); } else {rax = - [MachOLayout getSymbolByIndex:] :: notfound; } return rax;}  
pancake
2015-12-30 23:46:37 UTC
view on stackexchange narkive permalink

Csak a rabin2 -c parancsot használja ... most hülye szöveget kell kitöltenem 30 karakter kitöltéséhez

A rabin2 -c csak osztályokat sorol fel. Kérdésem az egyik módszer szétszerelésére vonatkozik.


Ezt a kérdést és választ automatikusan lefordították angol nyelvről.Az eredeti tartalom elérhető a stackexchange oldalon, amelyet köszönünk az cc by-sa 3.0 licencért, amely alatt terjesztik.
Loading...