Äîêóìåíò âçÿò èç êýøà ïîèñêîâîé ìàøèíû. Àäðåñ îðèãèíàëüíîãî äîêóìåíòà : http://sp.cs.msu.ru/proseminar/2013/padaryan.2013.03.22.pdf
Äàòà èçìåíåíèÿ: Fri Mar 22 20:05:28 2013
Äàòà èíäåêñèðîâàíèÿ: Thu Feb 27 23:02:09 2014
Êîäèðîâêà:


vartan@ispras.ru




· · · ,


· · ·


· · ·


· , · · ·
2



· /
­ ­ ­

· /
­ ­ ­ ­ QEMU: http://wiki.qemu.org/Main_Page

· · / Android / ARM · (DPI)
3










, ...

· . · .
­ ­ ­

· . · «» .
4



· : /
­ ,

·
­ ­ ,

· :
­
5



·
­ ­ ­ ­ (IDA Pro) (IDA Pro/HexRays) (IDA Pro + , CodeSurfer/x86)

·
­ , (SoftICE, OllyDbg, WinDbg) ­ ­ (Post-Mortem vs. Online)

·
­ BitBlaze, CodeSurfer/x86, S2E ...
6


7




+
-

· ­
·
­

· IDA Pro
­ ­

· IDA Pro ­
­ ­ IDC- -, (Zynamics, Google)
8


: « »
·
­

·
­ : Linux, BSD, ...

· ,

9



· , · · ,

10


11


: (1/2)
·
­ -, //

·
­ //

·
­ : , , ...

·
­ ?
12


: (2/2)
· : , ,
­ ?

· ,
­

· · (PDS)

13


?
: · · · · ...


14


?
· ,
: exit(), fork() ..

15


Push Down Systems (PDS)
· « » ­ · PDS 4 :
­ ­ ­ ­ ,

·

16


CFG PDS
CFG PDS

17



· · ·

18



00823 00823 00824 00823 FEF FF0 01D FF1 60 EB2B EBD2 2BD2 PUSHAD JMP JMP SUB

0082401Dh 00823FF1h EDX, EDX

00823FF3 00823FF5

700E EB1D

JO JMP

00824003h 00824014h

19



Main: CALL FuncA MOV EAX, 0
Main
FuncA FuncB
FuncA FuncB

FuncA:
FuncB:

JMP @FuncB
MOV EAX, 1 RET

Trace:

CALL FuncA JMP @FuncB MOV EAX, 1 RET MOV EAX, 0

20


:
· PDS,
­

·
­ ­
21


:
· ·
­ ­ ( )

·
­

·
­ ,

· :
­ ­
22


:
· ()
­ AMD SimNow, Bochs, Simics, ...

·
­ QEMU, VMWare Workstation

·
­ VMWare Workstation, Microsoft Hyper-V, Xen, KVM ­
· AMD SVM (Secure Virtual Machine) · Intel VT-x (Virtualization Extensions)

­ ­ ARM
23


: AMD SimNOW

24




25


QEMU ­
· ·
­

·
­ x86, PowerPC, ARM, Sparc, ...

· ·
­ Android, Symbian, Tizen, ...

· :

26



· QEMU · · :
­ , ­ ­ «»
27



· QEMU gdb . QEMU , gdb , · QEMU gdb, , · : «» gdb
28


QEMU
· - QEMU
­ ­ ­ ­ , , , .

· .
29


QEMU

30


QEMU:
· , · · , () ·
31


QEMU:
· · ·

32


QEMU
·
­ ­ ­

·
­ ­ ­ ­ ­ ­ , , QEMU
33



void helper_rdtsc(void) { uint64_t val; if ((env->cr[4] & CR4_TSD_MASK) && ((env->hflags & HF_CPL_MASK) != 0)) { raise_exception(EXCP0D_GPF); } helper_svm_check_intercept_param(SVM_EXIT_RDTSC, 0); val = cpu_get_tsc(env) + env->tsc_offset; EAX = (uint32_t)(val); EDX = (uint32_t)(val >> 32); }
34


QEMU
· :
­ , , ­

· , · QEMU :
­ ­ ­ ­ ( ) ,
35



· ­ , ·
­

· ­
­ ­

36



· :
­ ­

· :
­ ­ I/O, MSR' ­ I/O, .. DMA-

37


38


QEMU

39


7 00 7

40