Download as pdf or txt
Download as pdf or txt
You are on page 1of 66

BinCAT

Purrfecting binary static analysis

June 16th 2017 - REcon

Philippe Biondi, Raphal Rigo, Sarah Zennou, Xavier Mehrenberger


Plan

Introduction

Demo

Under the hood

Conclusion

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 2


Plan

Introduction

Demo

Under the hood

Conclusion

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 3


BinCAT (Binary Code Analysis Toolkit)
...
taint
values
analysis
extensible x86
CFG
with ...
indirect computed x86
jumps
properties ...

types

... Binary
analyzer
forward /
static
backward
analysis

IDA in- theory


tegration backed

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 4


BinCAT (Binary Code Analysis Toolkit)
...
taint
values
analysis
extensible x86
CFG
with ...
indirect computed x86
jumps
properties ...

types

... Binary
analyzer
forward /
static
backward
analysis

IDA in- theory


tegration backed

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 5


BinCAT (Binary Code Analysis Toolkit)
...
taint
values
analysis
extensible x86
CFG
with ...
indirect computed x86
jumps
properties ...

types

... Binary
analyzer
forward /
static
backward
analysis

IDA in- theory


tegration backed

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 6


BinCAT (Binary Code Analysis Toolkit)
...
taint
values
analysis
extensible x86
CFG
with ...
indirect computed x86
jumps
properties ...

types

... Binary
analyzer
forward /
static
backward
analysis

IDA in- theory


tegration backed

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 7


BinCAT (Binary Code Analysis Toolkit)
...
taint
values
analysis
extensible x86
CFG
with ...
indirect computed x86
jumps
properties ...

types

... Binary
analyzer
forward /
static
backward
analysis

IDA in- theory


tegration backed

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 8


BinCAT (Binary Code Analysis Toolkit)
...
taint
values
analysis
extensible x86
CFG
with ...
indirect computed x86
jumps
properties ...

types

... Binary
analyzer
forward /
static
backward
analysis

IDA in- theory


tegration backed

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 9


BinCAT (Binary Code Analysis Toolkit)
...
taint
values
analysis
extensible x86
CFG
with ...
indirect computed x86
jumps
properties ...

types

... Binary
analyzer
forward /
static
backward
analysis

IDA in- theory


tegration backed

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 10


BinCAT (Binary Code Analysis Toolkit)
...
taint
values
analysis
extensible x86
CFG
with ...
indirect computed x86
jumps
properties ...

types

... Binary
analyzer
forward /
static
backward
analysis

IDA in- theory


tegration backed

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 11


BinCAT (Binary Code Analysis Toolkit)
...
taint
values
analysis
extensible x86
CFG
with ... inter-
indirect computed mediate
jumps
properties language ...

types

... Binary
analyzer
forward /
static
backward
analysis

IDA in- theory


tegration backed

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 12


BinCAT (Binary Code Analysis Toolkit)
...
taint
values
analysis
extensible x86
CFG
with ... inter-
indirect computed mediate
jumps
properties language ...

types

... Binary
analyzer
forward /
static
backward
analysis

IDA in- theory


tegration backed

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 13


Plan

Introduction

Demo

Under the hood

Conclusion

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 14


Example: keygenme

$ ./get_key
Usage: ./get_key company department name licence

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 15


Example: keygenme

$ ./get_key
Usage: ./get_key company department name licence

$ ./get_key company department name wrong_serial

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 16


Example: keygenme

$ ./get_key
Usage: ./get_key company department name licence

$ ./get_key company department name wrong_serial


Licence=>[025E60CB08F00A1A23F236CC78FC819CE6590DD7]
Invalid serial wrong_serial

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 17


Example: keygenme

$ ./get_key
Usage: ./get_key company department name licence

$ ./get_key company department name wrong_serial


Licence=>[025E60CB08F00A1A23F236CC78FC819CE6590DD7]
Invalid serial wrong_serial

$ ./get_key company department name 025E60CB0[...]

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 18


Example: keygenme

$ ./get_key
Usage: ./get_key company department name licence

$ ./get_key company department name wrong_serial


Licence=>[025E60CB08F00A1A23F236CC78FC819CE6590DD7]
Invalid serial wrong_serial

$ ./get_key company department name 025E60CB0[...]


Licence=>[025E60CB08F00A1A23F236CC78FC819CE6590DD7]
Thank you for registering !

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 19


Keygenme: data flow

argv[0] department company name

CRC CRC CRC CRC

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 20


Keygenme: data flow

argv[0] department company name

CRC CRC CRC CRC

mul

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 21


Keygenme: data flow

argv[0] department company name

CRC CRC CRC CRC

mul

sprintf

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 22


Keygenme: data flow

argv[0] department company name

CRC CRC CRC CRC

mul

sprintf

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 23


Keygenme: data flow

argv[0] department company name

CRC CRC CRC CRC

mul

sprintf

SHA-1

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 24


Keygenme: data flow

argv[0] department company name

CRC CRC CRC CRC

mul

sprintf

SHA-1

hex encode

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 25


Keygenme: data flow

argv[0] department company name

CRC CRC CRC CRC

mul

sprintf

SHA-1

hex encode

license

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 26


Demo 1: BinCAT usage

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 27


Demo 2: Tainting

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 28


Plan

Introduction

Demo

Under the hood

Conclusion

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 29


Architecture

IDA

IDA plugin

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 30


Architecture

IDA

IDA plugin bincat binary

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 31


Architecture

IDA config, binary...

IDA plugin bincat binary

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 32


Architecture

local mode

IDA config, binary...

IDA plugin bincat binary

results, logs

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 33


Architecture

remote mode

IDA

IDA plugin REST Web server bincat binary

REST

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 34


Architecture

remote mode

IDA

IDA plugin REST Web server bincat binary

REST

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 35


Control flow graph reconstruction

state1
IP=0x08041236
EAX=0x00000000
EBX=0x87654321
mem[0x1000]=|323130|

state3
IP=0x0804143D state2
EAX=0x12345678
EBX=0x8765432?
mem[0x1000]=|303132|
IP=0x08041238
EAX=0x00000000
EBX=0x87654321
mem[0x1000]=|303132|

state4
IP=0x0804123A
EIP=0x0804123C
EAX=0x12345678
EAX=0x0007FFFF
EBX=0x87654321
ZF=1
mem[0x1000]=|303132|

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 36


Control flow graph reconstruction

state4
state1
IP=0x08041236
EAX=0x00000000
EBX=0x87654321
mem[0x1000]=|323130|

state3
IP=0x0804143D state2
EAX=0x12345678
EBX=0x8765432?
mem[0x1000]=|303132|
IP=0x08041238
EAX=0x00000000
EBX=0x87654321
mem[0x1000]=|303132|

state4
IP=0x0804123A
EIP=0x0804123C
EAX=0x12345678
EAX=0x0007FFFF
EBX=0x87654321
ZF=1
mem[0x1000]=|303132|

EIP=0x0804123C
IP=0x0804123A
EAX=0x12345678
EAX=0x0007FFFF
EBX=0x87654321
ZF=1
mem[0x1000]=|303132|

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 37


Control flow graph reconstruction

Decoder
ts
m en
state1
seg
t,
IP=0x08041236
EAX=0x00000000
EBX=0x87654321
mem[0x1000]=|323130|

n tex
state3 , co
IP=0x0804143D
EAX=0x12345678
EBX=0x8765432?
mem[0x1000]=|303132|
state2
IP=0x08041238 PC
EAX=0x00000000
EBX=0x87654321
mem[0x1000]=|303132|

state4
IP=0x0804123A
EIP=0x0804123C
EAX=0x12345678
EAX=0x0007FFFF
EBX=0x87654321
ZF=1
mem[0x1000]=|303132|

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 38


Control flow graph reconstruction

Decoder

state1 inc eax


IP=0x08041236
EAX=0x00000000
EBX=0x87654321
mem[0x1000]=|323130|

intermediate language eax (eax + 0x1);


zf eax=0 ? 1: 0;
sf (eax >> 0x1f)=1 ? 1: 0;
...

state3
IP=0x0804143D state2
EAX=0x12345678
EBX=0x8765432?
mem[0x1000]=|303132|
IP=0x08041238
EAX=0x00000000
EBX=0x87654321
mem[0x1000]=|303132|

state4
IP=0x0804123A
EIP=0x0804123C
EAX=0x12345678
EAX=0x0007FFFF
EBX=0x87654321
ZF=1
mem[0x1000]=|303132|

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 39


ax Control flow graph reconstruction

Decoder

state1 inc eax


IP=0x08041236
EAX=0x00000000
EBX=0x87654321
mem[0x1000]=|323130|

intermediate language eax (eax + 0x1);


zf eax=0 ? 1: 0;
sf (eax >> 0x1f)=1 ? 1: 0;
...

state3
IP=0x0804143D state2
EAX=0x12345678
EBX=0x8765432?
mem[0x1000]=|303132|
IP=0x08041238
EAX=0x00000000
EBX=0x87654321
mem[0x1000]=|303132|

age
state4
IP=0x0804123A
EIP=0x0804123C
EAX=0x12345678
EAX=0x0007FFFF
EBX=0x87654321
ZF=1
mem[0x1000]=|303132|

eax (eax + 0x1);


zf eax=0 ? 1: 0;
sf (eax >> 0x1f)=1 ? 1: 0;
...

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 40


Control flow graph reconstruction

Decoder

state1
IP=0x08041236
EAX=0x00000000
EBX=0x87654321
mem[0x1000]=|323130|

intermediate language eax (eax + 0x1);


zf eax=0 ? 1: 0;
sf (eax >> 0x1f)=1 ? 1: 0;
...

state3
IP=0x0804143D state2
EAX=0x12345678
EBX=0x8765432?
mem[0x1000]=|303132|
IP=0x08041238
EAX=0x00000000
EBX=0x87654321
mem[0x1000]=|303132|

State generator
state4
IP=0x0804123A
EIP=0x0804123C
EAX=0x12345678
EAX=0x0007FFFF
EBX=0x87654321
ZF=1
mem[0x1000]=|303132|

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 41


Control flow graph reconstruction

Decoder

state1
IP=0x08041236
EAX=0x00000000
EBX=0x87654321
mem[0x1000]=|323130|

state3
IP=0x0804143D state2
EAX=0x12345678
EBX=0x8765432?
mem[0x1000]=|303132|
IP=0x08041238
EAX=0x00000000
EBX=0x87654321
mem[0x1000]=|303132|

State generator
state4
IP=0x0804123A
EIP=0x0804123C
EAX=0x12345678
EAX=0x0007FFFF
EBX=0x87654321
ZF=1
mem[0x1000]=|303132|

state5
EIP=0x0804123D
EAX=0x00080000
ZF=0
mem[0x1000]=|303132|

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 42


Control flow graph reconstruction

Decoder

state
state1
IP=0x08041236
EAX=0x00000000
EBX=0x87654321
mem[0x1000]=|323130|

state5
4
state3
IP=0x0804143D state2
EAX=0x12345678
EBX=0x8765432?
mem[0x1000]=|303132|
IP=0x08041238
EAX=0x00000000
EBX=0x87654321
mem[0x1000]=|303132|

State generator
state4
IP=0x0804123A
EIP=0x0804123C
EAX=0x12345678
EAX=0x0007FFFF
EBX=0x87654321
ZF=1
mem[0x1000]=|303132|

state5
EIP=0x0804123C
IP=0x0804123A EIP=0x0804123D
EAX=0x00080000
ZF=0
mem[0x1000]=|303132|

EAX=0x12345678
EAX=0x0007FFFF
EBX=0x87654321
ZF=1
mem[0x1000]=|303132| EIP=0x0804123D
EAX=0x00080000
ZF=0
mem[0x1000]=|303132|

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 43


Control flow graph reconstruction

Decoder

state1
IP=0x08041236
EAX=0x00000000
EBX=0x87654321
mem[0x1000]=|323130|

state3
IP=0x0804143D state2
EAX=0x12345678
EBX=0x8765432?
mem[0x1000]=|303132|
IP=0x08041238
EAX=0x00000000
EBX=0x87654321
mem[0x1000]=|303132|

State generator
state4
IP=0x0804123A
EIP=0x0804123C
EAX=0x12345678
EAX=0x0007FFFF
EBX=0x87654321
ZF=1
mem[0x1000]=|303132|

state5
state5
EIP=0x0804123D
EAX=0x00080000

if new
ZF=0
mem[0x1000]=|303132|

EIP=0x0804123D
EAX=0x00800000
ZF=0
mem[0x1000]=|303132|

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 44


Formal correctness: static analysis by abstract interpretation
operations on values/taint/types are done on abstract objects which
represent sets of values/taint/types
ex: 0 {0}, ? {integers}, Struct {C structs}
abstract computations are always an overapproximation of actual ones
approximation example: loop widening ()

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 45


Formal correctness: static analysis by abstract interpretation
operations on values/taint/types are done on abstract objects which
represent sets of values/taint/types
ex: 0 {0}, ? {integers}, Struct {C structs}
abstract computations are always an overapproximation of actual ones
approximation example: loop widening ()

s1 : esi = 0x1000, uint32* while esi < 0x8000


esi = esi + 4

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 46


Formal correctness: static analysis by abstract interpretation
operations on values/taint/types are done on abstract objects which
represent sets of values/taint/types
ex: 0 {0}, ? {integers}, Struct {C structs}
abstract computations are always an overapproximation of actual ones
approximation example: loop widening ()

s1 : esi = 0x1000, uint32* while esi < 0x8000


esi = esi + 4

Idea:
s2 : esi = 0x1004, uint32*
what is stable is kept
s20 = s1 s2
Ex: type
esi = 0x????????, uint32* what changes is
overapproximated
Ex: value

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 47


Formal correctness: static analysis by abstract interpretation
operations on values/taint/types are done on abstract objects which
represent sets of values/taint/types
ex: 0 {0}, ? {integers}, Struct {C structs}
abstract computations are always an overapproximation of actual ones
approximation example: loop widening ()

s1 : esi = 0x1000, uint32* while esi < 0x8000


esi = esi + 4

Idea:
s2 : esi = 0x1004, uint32*
what is stable is kept
s20 = s1 s2
Ex: type
esi = 0x????????, uint32* what changes is
overapproximated
Ex: value
s3 : esi = 0x????????, uint32*
s30 = s20 s3
esi = 0x????????, uint32*

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 48


Formal correctness: static analysis by abstract interpretation
operations on values/taint/types are done on abstract objects which
represent sets of values/taint/types
ex: 0 {0}, ? {integers}, Struct {C structs}
abstract computations are always an overapproximation of actual ones
approximation example: loop widening ()

s1 : esi = 0x1000, uint32* while esi < 0x8000


esi = esi + 4

Idea:
s2 : esi = 0x1004, uint32*
what is stable is kept
s2 s20 = s1 s2
Ex: type
esi = 0x????????, uint32* what changes is
v overapproximated
Ex: value
s3 : esi = 0x????????, uint32* Theorem 1: (si0 ) sequence is
s3 s30 = s20 s3 ultimately stationary
v
esi = 0x????????, uint32*
Theorem 2: fixpoint sf0 is an
overapproximation of the real
execution trace
sn
v

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 49


Formal correctness: static analysis by abstract interpretation
operations on values/taint/types are done on abstract objects which
represent sets of values/taint/types
ex: 0 {0}, ? {integers}, Struct {C structs}
abstract computations are always an overapproximation of actual ones
approximation example: loop widening ()

s1 : esi = 0x1000, uint32* while esi < 0x8000


esi = esi + 4

Idea:
s2 : esi = 0x1004, uint32*
what is stable is kept
s2 s20 = s1 s2
Ex: type
esi = 0x????????, uint32* what changes is
v overapproximated
Ex: value
s3 : esi = 0x????????, uint32* Theorem 1: (si0 ) sequence is
s3 s30 = s20 s3 ultimately stationary
v
esi = 0x????????, uint32*
Theorem 2: fixpoint sf0 is an
overapproximation of the real
execution trace
sn
v some techniques allow for precision
recovery
Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 50
Empirical testing

Theory is correct.

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 51


Empirical testing

Theory is correct.
In theory, the implementation too.

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 52


Empirical testing

Theory is correct.
In theory, the implementation too.
In practice, a lot of things are complex and bug prone: the decoder,
abstract operations, etc.

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 53


Empirical testing

Theory is correct.
In theory, the implementation too.
In practice, a lot of things are complex and bug prone: the decoder,
abstract operations, etc.
= lots of unit tests

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 54


Empirical testing

Theory is correct.
In theory, the implementation too.
In practice, a lot of things are complex and bug prone: the decoder,
abstract operations, etc.
= lots of unit tests
BinCAT vs CPU: > 67.000 tests for ' 55 instructions

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 55


Empirical testing

Theory is correct.
In theory, the implementation too.
In practice, a lot of things are complex and bug prone: the decoder,
abstract operations, etc.
= lots of unit tests
BinCAT vs CPU: > 67.000 tests for ' 55 instructions
BinCAT vs QEMU test-i386: 87% test coverage over ' 105 instructions

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 56


Empirical testing

Theory is correct.
In theory, the implementation too.
In practice, a lot of things are complex and bug prone: the decoder,
abstract operations, etc.
= lots of unit tests
BinCAT vs CPU: > 67.000 tests for ' 55 instructions
BinCAT vs QEMU test-i386: 87% test coverage over ' 105 instructions

P
A
W
SO
ME
!!!

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 57


Analyzers performance

Example: keygenme
6407 instructions analyzed
RAM usage: 90 MiB
running time: 6s
average: ' 1060 insn/s

QEMU tests:
209 120 instructions analyzed
RAM usage: 2.3 GiB
running time: 23 min 30 s
average: ' 150 insn/s

Intel Core i7-6700K CPU @ 4,00GHz

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 58


Plan

Introduction

Demo

Under the hood

Conclusion

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 59


Conclusion
x86
values
extensible

taint
analysis computed intermediate
properties language

CFG
with
indirect
jumsp
types Binary
analyzer
forward /
static
backward
analysis

IDA in- theory


tegration backed

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 60


Current features improvements (planned)

x86
valeurs
extensible

better type reconstruction


taint inter-
computed mediate new types from heuristics. Ex:
properties language structures detection on stack
several distinct taint sources
types reconstruction
du CFG more precise computations in
avec
sauts BinCAT backward analysis
indirects
forwardrsolus
/ more standard library functions
statique
backward models
analysis
type and value override in IDA
memory definition directly in IDA

IDA in- base


tegration thorique

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 61


Future features
object
recon- x86
taint struc-
analysis tion extensible x86-64
(C++)

values intermediate
computed
properties language
ARM

reconstruction
reconstruction
de types
du CFG
avec
sauts BinCAT
indirects
analyses
rsolus statique
avan-
t/arrire

intgr base
finer approximations in values
IDA computation by using intervals
thorique
complex objects reconstruction (C++)
x86-64 and ARM decoders

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 62


Thanks!

Full paper (link in README):


https://www.sstic.org/media/SSTIC2017/SSTIC-actes/bincat_purrfecting_
binary_static_analysis/SSTIC2017-Article-bincat_purrfecting_binary_
static_analysis-biondi_rigo_zennou_mehrenberger.pdf

project was partially financed by DGA-MI


Get it! (AGPL licence)

https://github.com/airbus-seclab/bincat

docker run -p 5000:5000 airbusseclab/bincat

tutorial in doc/tutorial.md

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 63


x86 coverage
ADD PUSHES POPES OR PUSHCS 2bytes
ADC PUSHSS POPSS SBB PUSHDS POPDS
AND ES: DAA SUB CS: DAS
XOR SS: AAA CMP DS: AAS
INC DEC
PUSH POP
PUSHA POPA BOUND ARPL FS: GS: OPSIZE: ADSIZE: PUSH IMUL PUSH IMUL INSB INSW OUTSB OUTSW
JNO JNO JB JNB JZ JNZ JBE JA JS JNS JP JNP JL JNL JLE JNLE
Grp1 Grp1 Grp1 TEST XCHG MOV LEA MOV POP
NOP XCHG EAX CWD CDQ CALL WAIT PUSHF POPF SAHF LAHF
MOV EAX MOVS CMPS TEST STOS LODS SCAS
MOV
SHIFT RETN LES LDS MOV ENTER LEAVE RETF INT3 INT INTO IRETD
Grp2 AAM AAD SALC XLAT FPU
LOOPNZ LOOPZ LOOP JCXZ IN OUT CALL JMP JMPF JMPS IN OUT
LOCK: INT1 REPNE: REP: HLT CMC Grp3 CLC STC CLI STI CLD STD Grp4 Grp5
Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 64
x86 coverage - Second table
Grp6 Grp7 LAR LSL CLTS INVD WBINVD UD2 NOP
SSE Prefetch S E1 HINT NOP
MOV CR DR SSE
WRMSR RDTSC RDMSR RDPMC SYSENTER SYSEXIT GETSEC SMX MOVBE SSE
CMOV
SSE
MMX SSE
MMX SSE VMX MMX SSE
JNO JNO JB JNB JZ JNZ JBE JA JS JNS JP JNP JL JNL JLE JNLE
SETNO SETNO SETB SETNB SETZ SETNZ SETBE SETA SETS SETNS SETP SETNP SETL SETNL SETLE SETNLE
PUSHFS POPFS CPUID BT SHLD PUSHGS POPGS RSM BTS SHRD FENCE IMUL
CMPXCHG LSS BTR LFS LGS MOVZX POPCNT UD BTx BTC BSF BSR MOVSX
XADD SSE CMPXCHG BSWAP
MMX SSE
MMX SSE
MMX SSE
Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 65
Currently implemented lattices

less precise >


>

v ... -4 ... 7 . . . untainted tainted

very precise

less precise >

... int struct ...

v
int32 uint32

very precise

Biondi, Mehrenberger, Rigo, Zennou :: BinCAT 66

You might also like