% output=pdf

\mathsurround=4pt
\usemodule[pre-orange]
\definetyping[codetyping]\setuptyping[codetyping][style=\small]

\starttext
\startcolor[TextColor]

\bottomtitle{SSTIC 2007 -- Metasm}

\def\secuinfo{\security0}


\Title%
{
\startcolor[ORouge]
\midaligned{
{\switchtobodyfont[40pt]Metasm}\\
un framework pour code machine
}
\stopcolor
\blank[2cm]
\midaligned{Yoann Guillot}
\blank[1.5cm]
}{}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\Slide[Plan]{Sommaire}

\startitemize
\item Pr\'esentation du framework
	\startitemize
	\item Aper{\cc}u de l'architecture
	\item Fonctionnalit\'es
	\stopitemize
\item Ce qui devient possible
\item Exemples
\stopitemize

\vfill


\Slide[Intro]{Pr\'esentation du framework}

\startitemize
\item Metasm est un framework de manipulation de code machine
	\startitemize
	\item Code ex\'ecutable multi-architecture (actuellement Ia32 et MIPS)
	\item Formats de fichier ex\'ecutables Windows et GNU/Linux
	\item Interaction avec un syst\`eme en cours d'ex\'ecution
	\stopitemize
%\item Offre des fonctionnalit\'es avanc\'ees ``out of the box''
\item Ecrit int\'egralement en Ruby
\item Licence LGPL
\stopitemize

\vfill


\UnSlide{Architecture interne}

\startMPgraphic
def draw_class(expr name, pos) =
	draw unitsquare xscaled 4cm yscaled 1cm shifted (pos scaled 2cm);
	label top (name, pos scaled 2cm shifted (2cm, 0));
enddef;

def draw_arrow (expr src, dst) =
	drawarrow (src shifted (1, 0) scaled 2cm)...(dst shifted (1, 0.5) scaled 2cm);
enddef;

pair prog, cpu, op, sec, edata, instr, block, dec, exe;
prog = (4.5, 9);
cpu  = (0, 7);
op   = (0, 5.5);
sec  = (3, 6.75);
block= (6, 7.5);
edata= (2.5, 4.5);
instr= (5.5, 4.5);
dec  = (6, 6);

draw_class("Exeformat", prog);
  draw_class("CPU", cpu);
    draw_class("Opcodes", op);
  draw_class("Sections", sec);
    draw_class("EncData", edata);
    draw_class("Instructions", instr);
  draw_class("Blocks", block);
    draw_class("DecInstr", dec);


draw_arrow(prog, cpu);
draw_arrow(prog, sec);
draw_arrow(prog, block);
draw_arrow(cpu, op);
draw_arrow(sec, edata);
draw_arrow(sec, instr);
draw_arrow(block, dec);
draw_arrow(dec, instr);
\stopMPgraphic

\loadcurrentMPgraphic

\placeMPgraphic

\vfill


\UnSlide{Assemblage de code machine}

\startitemize
\item Fournit une chaine relogeable : {\tt EncodedData}
	\startitemize
	\item Code machine
	\item Relocations
	\item Exports
	\item Espace virtuel
	\stopitemize
\item S\'epare l'assemblage du linkage
\item D\'emonstration
\stopitemize

\vfill


\UnSlide{D\'esassemblage de code machine}

\startitemize
\item Puissant moteur de backtracking
	\startitemize
	\item Suit pr\'ecis\'ement le flot d'ex\'ecution
	\item Mais manque actuellement de support d'appels externes
	\item Permettra de tracer les acc\`es data
	\stopitemize
\item La partie sp\'ecifique \`a une architecture est minimale
\item D\'emonstration
\stopitemize

\vfill


\UnSlide{Gestion de fichiers ex\'ecutables}

\startitemize
\item Lecture
	\startitemize
	\item Depuis un fichier
	\item Depuis la m\'emoire
	\stopitemize
\item \'Ecriture
	\startitemize
	\item Modification
	\item G\'en\'eration from scratch
	\stopitemize
\item Support de MZ/PE/COFF et ELF
\stopitemize

\vfill


\UnSlide{Interaction avec le syst\`eme d'exploitation}

\startitemize
\item Abstraction de la m\'emoire d'un processus cible
	\startitemize
	\item Lecture/\'ecriture transparente
	\stopitemize
\item Fournit une API g\'en\'erique
\item D\'emonstration
\stopitemize

\vfill


\Slide[Applications]{Ce qui devient possible}

\startitemize
\item Modification arbitraire du processus d'assemblage/d\'esasseblage
\item Facilite \'enorm\'ement toute interaction avec du code machine
\stopitemize

\vfill


\UnSlide{Int\'egration \`a Metasploit3}

\startitemize
\item Metasploit 3 est \'ecrit en ruby
\item Mais le support du code machine est tr\`es mauvais
	\startitemize
	\item Shellcodes en hexa
	\item Bidouilles pour ``patcher'' ces shellcodes au runtime
	\item Re-bidouille pour lier diff\'erents stages
	\stopitemize
\item Avec Metasm :
	\startitemize
	\item 1 - Shellcodes sous forme de code source
	\item 2 - Linkage standard pour les relocations
	\item 3 - Linkage standard pour les stages
	\item 4 - ????
	\item 5 - Profit
	\stopitemize
\stopitemize

\vfill


\Slide[Exemples]{Exemples}

\startitemize
\item Metasm-shell
\stopitemize

\vfill


\UnSlide{Exemples}

\startitemize
\item Lecture d'un ELF MIPS
\stopitemize

\vfill


\UnSlide{Exemples}

\startitemize
\item Compilation d'un ex\'ecutable PE
\stopitemize

\vfill


\UnSlide{Exemples}

\startitemize
\item Modification d'un ex\'ecutable PE
\stopitemize

\vfill

\UnSlide{Exemples}

\startitemize
\item Hook basique Windows
\stopitemize

\vfill


\UnSlide{Exemples}

\startitemize
\item Hooks avanc\'es Windows
\stopitemize

\vfill


\UnSlide{Conclusion}

\startitemize
\item Merci de votre attention !
\item Des questions ?
\stopitemize

\vfill

\stopcolor
\stoptext

