49
Evaluating Model Checking for Cyber Threats Code Obfuscation Identification Fabio Martinelli a , Francesco Mercaldo a , Vittoria Nardone b , Antonella Santone c , Arun Kumar Sangaiah d , Aniello Cimitile b a Istituto di Informatica e Telematica, Consiglio Nazionale delle Ricerche, Pisa, Italy b Department of Engineering, University of Sannio, Benevento, Italy c Department of Bioscience and Territory, University of Molise, Pesche (IS), Italy d School of Computing Science and Engineering, VIT University, Vellore 632014, India Abstract Code obfuscation is a set of transformations that make code programs harder to understand. The goal of code obfuscation is to make reverse engineering of pro- grams infeasible, while maintaining the logic on the program. Originally, it has been used to protect intellectual property. However, recently code obfuscation has been also used by malware writers in order to make cyber threats easily able to evade antimalware scanners. As a matter of fact, metamorphic and polymor- phic viruses exhibit the ability to obfuscate their code as they propagate. In this paper we propose a model checking-based approach which is able to identify the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate the proposed method on a real-world dataset obtaining an accuracy equal to 0.9 in the identification of obfuscation techniques. Keywords: obfuscation, Android, model checking, formal methods, malware Email addresses: [email protected] (Fabio Martinelli), [email protected] (Francesco Mercaldo), [email protected] (Vittoria Nardone), [email protected] (Antonella Santone), [email protected] (Arun Kumar Sangaiah), [email protected] (Aniello Cimitile) Preprint submitted to Journal of Parallel and Distributed Computing May 9, 2018

Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

Evaluating Model Checking forCyber Threats Code Obfuscation Identification

Fabio Martinellia, Francesco Mercaldoa, Vittoria Nardoneb, AntonellaSantonec, Arun Kumar Sangaiahd, Aniello Cimitileb

aIstituto di Informatica e Telematica, Consiglio Nazionale delle Ricerche, Pisa, ItalybDepartment of Engineering, University of Sannio, Benevento, Italy

cDepartment of Bioscience and Territory, University of Molise, Pesche (IS), ItalydSchool of Computing Science and Engineering, VIT University, Vellore 632014, India

Abstract

Code obfuscation is a set of transformations that make code programs harder to

understand. The goal of code obfuscation is to make reverse engineering of pro-

grams infeasible, while maintaining the logic on the program. Originally, it has

been used to protect intellectual property. However, recently code obfuscation

has been also used by malware writers in order to make cyber threats easily able

to evade antimalware scanners. As a matter of fact, metamorphic and polymor-

phic viruses exhibit the ability to obfuscate their code as they propagate. In

this paper we propose a model checking-based approach which is able to identify

the most widespread obfuscating techniques, without making any assumptions

about the nature of the obfuscations used. We evaluate the proposed method

on a real-world dataset obtaining an accuracy equal to 0.9 in the identification

of obfuscation techniques.

Keywords: obfuscation, Android, model checking, formal methods, malware

Email addresses: [email protected] (Fabio Martinelli),[email protected] (Francesco Mercaldo), [email protected] (VittoriaNardone), [email protected] (Antonella Santone),[email protected] (Arun Kumar Sangaiah), [email protected] (AnielloCimitile)

Preprint submitted to Journal of Parallel and Distributed Computing May 9, 2018

Page 2: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

1. Introduction

Code obfuscation is a practice that makes programs hard to understand.

It consists of applying transformation techniques to convert programs in order

to hide their sensitive information while preserving their functionality. Code

obfuscation can be used for several purposes. Originally, it has been used to

protect intellectual property, i.e., to protect commercial software against reverse

engineering and user sensitive and private information [1, 2, 3]. As cited in [4],

obfuscation has been found to be the cheapest and easiest solution for protecting

software and data [5] even if other methods exist such as encryption, server-side

execution and native code. However, recently code obfuscation has been also

used by malware writers to evade antimalware scanners [6]. In fact, obfusca-

tions used by malware writers are generally utilized for the aim of changing the

signature of the code [7, 8], i.e., the sequence of instructions so that a virus

scanner will be unable to use search strings to detect the presence of a malware

[9, 10, 11]. Metamorphic and polymorphic viruses are a consequence of the ap-

plication of code obfuscation in order to alter the signature of the malware for

each different propagation [12, 13]. Metamorphic malware is rewritten with each

iteration so that each succeeding transmitted versions of the code are different

from the preceding one [14]. The code changes makes it difficult for signature-

based antimalware software in order to recognize that different propagations are

related to the same malicious program [15]. Polymorphic malware also makes

changes to code to avoid detection: it contains two parts, but one part remains

the same with each iteration, which makes the malware less difficult to detect

[16, 17].

In the end, both uses have the same basic intent: to obscure understanding

of the cyber threats [18, 19]. Of course each task involves different limiting

properties[20, 21, 22]. Malware need to deal with the fact that their obfusca-

tions must continually change, or else scanners will have a known signature to

match against [23]. This brings up time and space restrictions. Conversely,

commercial software has performance requirements, which limit the types and

2

Page 3: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

extent of obfuscation [24].

Two classes of obfuscating transformations can be distinguished [25]. The first is

called surface obfuscation and it focuses on obfuscating the syntax of a program,

as for example changing variable names. The second is called deep obfuscation

and it attempts to obfuscate the actual structure of a program, i.e., by changing

its control flow. The first one makes it harder for a human to understand the

source code, but it has no effect on algorithms used for reverse engineering. On

the other hand, deep obfuscation affects the efficacy of tools for program analy-

ses and reverse engineering, since it changes the actual structure of a program.

Model checking [26] is a useful method to automatically verify the correctness

of a system with respect to a desired behavior [7], by checking if a mathematical

model of the system satisfies a formal specification of this behavior, expressed

using a temporal logic. So far, it has been successfully used in many application

domains such as biological systems [27], business processes [28], web service or-

chestration [29] among others. Nevertheless, as far as we know, this is the first

attempt to exploit a model checking technique for mining code obfuscation. We

explore the possibility of identifying obfuscated code in platforms like Java [30]

and Android [31] using model checking and Java Bytecode. We focus on detect-

ing deep obfuscation, which requires reasoning about semantic aspects of the

program and therefore it is more difficult than detecting surface obfuscation,

which is syntactically based. Performing code obfuscation detection on Java

Bytecode and not directly on the Java code has several advantages: (a) inde-

pendence of the source programming language; (b) code obfuscation detection

without decompilation even when source code is lacking; (c) ease of parsing a

lower-level code; (d) more effectiveness than approaches at source code level

[32].

We propose a novel formal based approach to mine code obfuscation. In this

paper, we present a model checking based approach which is structured in three

main steps. The first step aims at deriving formal models starting from the

Java Bytecode. The second step aims to define the characteristic of the more

pervasive obfuscating techniques by means of the construction of the temporal

3

Page 4: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

logic properties. Finally, a formal verification environment, including a model

checker, is invoked to mine obfuscated code. Our approach has applications to

both software engineering and software security. In software engineering, we

show how formal methods can be used to enhance reverse engineering, even for

code that has been designed to be difficult to reverse engineer. For software

security, our approach can help to identify malware codes even if they are ob-

fuscated.

In order to evaluate our methodology we use a dataset of real-world Android ap-

plications, since software theft such as unauthorized duplication and plagiarism

is also increasing fast. As demonstrated in [33], with increased incentives and

low barriers to entry, plagiarists and clones have followed. To combat cloning,

mobile markets need robust techniques to identify these clones, in order to de-

fend the intellectual property of developers, that using obfuscation to try to

make less understandable their code [12, 34]. There is a need to protect users

from malicious applications [35, 36] and developers from plagiarists who wish to

benefit from a legitimate developer’s hard work. But the point is that on An-

droid, due to its open-source nature, reverse engineering is very easy and thus

obfuscating techniques can be used to protect intellectual property of software.

For this reason it is very important to develop a general approach to mine ob-

fuscating transformations also expendable in Android environment. The main

distinctive features of our approach are:

• we use model checking technique;

• we use Java Bytecode;

• we propose a static analysis, i.e., it is not required to run the code but

only to analyze the code;

• we are able to localize the code fragment in which the obfuscating tech-

nique is applied;

• we validated our results using a dataset of real-world Android applications;

4

Page 5: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

• we identify the obfuscating technique with an average accuracy equal to

0.983.

The rest of the paper is organized as follows: Section 2 describes the re-

lated work, Section 3 provides background on virtual machines, obfuscating

techniques and formal methods; Section 4 presents our methodology; Section

5 discusses the evaluation results and, finally, conclusion and future works are

given in in Section 6.

2. Related Work

In last years several researchers focused on the identification of obfuscating

techniques as we discuss below.

Authors in [32] propose an approach with the aim to measure software simi-

larity between original and obfuscated programs in order to determine if the

obfuscated version is an illegal copy of the original version. Basically they em-

pirically analyze the code obfuscation effetcs on Android application similarity

analysis. The measurements were done using five different Android applications

with the DashO obfuscator. In the evaluation they show that similarity mea-

sures at Bytecode level are more effective than those at source code level in order

to analyze software similarity from the point of view of the similarity metrics

they computed. The obfuscating techniques applied are relative to layout, data,

control and string encryption.

Xu et al. [37] performs a measurement study related to obfuscating techniques

in Javascript code. They find that JavaScript obfuscation is a common prac-

tice among malicious JavaScript code in order to evade detection, realizing that

JavaScript obfuscating techniques are dangerous threats to Web security be-

cause of the simplicity of applying such techniques on existing malicious codes

and the lack of efficient and effective detection approaches.

Likarish et al. [38] consider a method for automatic detection of obfuscated

JavaScript using a machine-learning approach. Using a dataset of regular and

obfuscated samples from a content delivery network and the Alexa top 500 web-

5

Page 6: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

sites, they demonstrate that it is possible to distinguish between obfuscated and

not obfuscated scripts with precision and recall around 99%.

Lu et al. [39] describe an approach to deobfuscation of JavaScript code based on

dynamic analysis and slicing. Experiments using a prototype implementation

indicate that the technique is effective even against highly obfuscated programs.

Guillot at al. [40] propose an approach based on a local semantic analysis, with

the aim to rewrite the binary code in a simpler way. Their objective is no longer

to seek and destroy known patterns, but to proceed to a complete, on-the-fly,

optimized code rewriting.

Sharif et colleagues [41] present a PC malware obfuscating technique able to

automatically conceal specific trigger-based behavior from these malware ana-

lyzers, i.e., the conditional code obfuscation. They automatically transform a

program by encrypting code that is conditionally dependent on an input value

with a key derived from the input and then removing the key from the pro-

gram. In the evaluation, they demonstrate that on existing malware samples

their method can hide a significant portion of trigger-based code.

Researchers in [42] starting from the consideration that when new malware is

encountered, such obfuscations have to be penetrated or removed in order to

understand the internal logic of the code and devise countermeasures, discuss

a method for deobfuscation of obfuscated executable code. The proposed ap-

proach uses semantics-preserving program transformations to away obfuscation

code using a Control Flow Graph (CFG) similarity algorithm. Authors in the

evaluation consider samples obfuscated with garbage code techniques and call

indirection. Our work differently consider also the widespread cyphering ob-

fuscation techniques. In the obfuscation resilience evaluation they consider the

garbage insertion transformations: our method, working at Bytecode level, ex-

ploits the optimization features of the compiler, able to eliminate the trivial

garbage code injection: this is the reason why we do not consider garbage code

injection in the techniques identifiable by our work.

BE-PUM (Binary Emulator for PUshdown Model generation), which generates

a precise CFG, under presence of typical obfuscating techniques of malware,

6

Page 7: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

e.g., indirect jump, self-modification, overlapping instructions, and structured

exception handler (SEH), which cover packers, is proposed in [43]. This model

is evaluated against 2000 real-world malware examples and the results are com-

pared with those of popular commercial disassembler: the conclusion is that

BE-PUM correctly traces CFGs whereas the commercial tools fail. Considering

manual inspection on 300 malware examples, authors observe that the starts of

these failures exactly locate the entries of obfuscation code.

Researchers in [44] provide a formal framework for code obfuscation based on

abstract interpretation and program semantics. They consider code obfuscation

through opaque predicate insertion and they show how the degree of abstraction

needed to disclose different opaque predicates. The technique is evaluated us-

ing the constant propagation obfuscating technique i.e., a transformation that,

knowing the values that are constant at a given program point on all possi-

ble executions of a program, propagates these constant values as far forward

through the program as possible. Authors do not evaluate the technique on a

real-world dataset.

Several works in the literature evaluated the effectiveness of existing mobile mal-

ware detection mechanisms through code obfuscation: following papers demon-

strate that with obfuscating techniques the malware writer is able to fool signature-

based detection i.e., malware correctly recognized as malicious after the injec-

tion of code obfuscation is not more identified by antimalware. In [45] authors

present ADAM, an automated system for evaluating the detection of Android

malware. Using ADAM, researchers apply a set of trivial obfuscating techniques

to a dataset containing 222 malware samples. For each antimalware product,

results show how each of the obfuscations can significantly reduce the detection

rate. ADAM implements only a few transformations, such as: (i) renaming

methods, (ii) introducing defunct methods, (iii) code reordering, and (iv) string

encoding, in addition to repacking and assembling/disassembling.

Fraunhofer security experts test 11 antimalware solutions using 10 malware

7

Page 8: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

samples and 10 altered ones1. In the evaluation they show that 7 out of 10 an-

timalware were able to recognize all the sample belonging to malware dataset;

while using the altered samples the malware identification decreases dramati-

cally.

Researchers in [46] evaluate 10 antimalware tools using 6 original and trans-

formed malware samples belonging to six different families. They conclude that

all the antimalware products are susceptible to common evasion techniques.

In [47] the authors demonstrated that using simple code transformations to

existing malware that is well recognized by malware detectors turns it into a

version that is no longer recognized by the most malware detectors. Several

transformations are considered: Identifier Renaming, Data Encoding, Call In-

directions, Code Reordering, Junk Code Insertion, Encrypting Payloads and

Native Exploits.

As emerges from the discussion and at the best of authors knowledge, this is the

first work with the aim to identify obfuscating techniques in Java and Android

environment using model checking.

3. Background

In this section we provide, in order to better understand our methodology,

background notions about Java and Android Virtual Machines, the code obfus-

cations considered in the work and model checking technique.

3.1. A peek under Virtual Machines

As we stated in the introduction our method is able to identify a set of

widespread obfuscating techniques on Java Bytecode. To better understand how

our method is able to identify obfuscation in Java and Android environment,

we provide details about the Virtual Machine, i.e., the execution environment

of Java and Android and about the Bytecode, i.e., the code executed by Virtual

1http://www.aisec.fraunhofer.de/content/dam/aisec/Dokumente/Publikationen/

Studien_TechReports/deutsch/042013-Technical-Report-Android-Virus-Test.pdf

8

Page 9: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

Machines [48].

Furthermore we provide details about the two main implementations of Virtual

Machines (VM): stack- and register-based.

Basically a VM is an emulation of a computer system. Virtual machines are

based on computer architectures and provide functionality of a physical com-

puter [49]. Their implementations may involve specialized hardware, software,

or a combination thereof.

The need to ensure a rapid boot and response time from the applications that

run on hardware with limited resources has prompted Google to design a soft-

ware that can make the most of limited resources available from a mobile device:

the answer was the Dalvik Virtual Machine (DVM). The DVM is a virtual ma-

chine designed by Dan Bornstein, a Google employee, and takes its name from

the fishing village whose Bornstein’s family is from.

The DVM is designed and optimized to exploit the small memory available on

mobile devices, allowing multiple instances of the virtual machine to simultane-

ously run concealing thread management and memory to the operating system

[50]: in this way it is simplified to reuse the code and to eliminate or at least to

prevent incompatibility issues.

Usually software engineers when designing a virtual machine, preferred a stack-

based architecture (as the Java Virtual Machine, JVM), piling up all instructions

within the stack.

In this way it is very simple to implement both the Virtual Machine and the

relative back-end compiler [51].

Literature demonstrated that a stack-based approach for Virtual Machine is not

efficient: as a matter of fact, comparing stack-based approach with register one

it turns out that the second requires 32.3% less time and 47% less instructions

than the first one [52].

In order to better understand this difference of performances, consider the fol-

lowing expression:

b = c + d

A stack based machine will translate this expression in the following code (com-

9

Page 10: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

posed by four different instructions) for the JVM:

ILOAD d, ILOAD c, IADD, ISTORE b

While using a register-based VM the same expression will be translated in one

instruction:

IADD a,b,c

As explained, the code used from register-based architecture is significantly re-

duced if compared to that used by a stack-based Virtual Machine although,

on average, the code involves a real machine for more than 1.07% of work for

each instruction because of a greater length; the number of instructions to be

processed, then, explains why the first turns out to be much more faster than

the second. For this reason Google decided to base the Dalvik Virtual Machine

on an register-based architecture: processing power and memory limits, in fact,

are very respected constraints by the DVM implementation[53].

In this paper we propose a method that is able to work with code targeting both

the platforms, since, as explained above, the Java Virtual Machine is able to

interpret Java Bytecode, while using well-know free available open source tools

we are able to convert the Dalvik executable file into Java Bytecode.

3.2. Obfuscation

Code obfuscation was invented in order to hide the implementation from

a non-desired analysis or reverse engineering. At the beginning, obfuscation

was used for protecting intellectual property, secrets contained in the code, or

for placing hidden functions in the code. By the late 1980s, obfuscation was

adopted by malware writers for hindering analysis and detection [54]. Polymor-

phic engines are a clear example of this usage, since they generate differently

looking versions of the same malware to evade signature-based detection.

In this paper we identify the following obfuscating techniques:

• Code reordering: the aim of this transformation is to modify the order

of instructions in the methods. A random reordering of instructions has

been accomplished by goto instructions inserting. Obviously, the trans-

10

Page 11: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

formations preserve the original runtime execution trace, i.e., the business

logic of the applications is not modified by transformations.

• Call Indirections: several detection signatures can consider the use of

the call graph application. In order to evade such signatures this transfor-

mation is able to alter the original call graph, by modifying every method

invocation in the smali2 code through a call to a new method inserted

by the transformation with the only responsibility to invoke the original

method without adding other instructions. This technique is able to alter

signatures based on the call graph of the applications making the identi-

fication of altered applications no longer possible.

• Data Encryption: The Dalvik Executable (dex) file of Android applica-

tions contains the strings and arrays used in the program. Strings can be

considered to create detection signatures with the aim to identify malware

by several antimalware. In order to elude such signatures, this transfor-

mation encodes strings with a Caesar cipher. The original string will

be restored at application run-time, with a call to a method that knows

the Caesar key, i.e., this transformation will encode each strings into the

application and will embed the code to decrypt them at run-time.

In Appendix 6 we show some examples of the above obfuscating techniques

adopted by two tools, DroidChameleon [55] and Carnival, an obfuscation engine

proposed in [47].

In order to obfuscate the code we use two obfuscating tool: DroidChameleon

[55] and Carnival, an obfuscation engine proposed in [47]. They adopt different

implementations of the obfuscating techniques discussed above. Both tools are

able to statically apply the set of transformations to the smali representation

in an automated way. To apply the transformation, the tools extract the dex

file of the application which is totally unreadable; for this reason both the tool

convert this dex files to a more understandable form represented by the smali

2http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html

11

Page 12: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

language. The smali syntax is loosely based on Jasmin’s/dedexer’s syntax3, and

supports the full functionality of the dex format (annotations, debug info, line

info) and Dalvik opcodes.

3.3. Model checking

The basic concepts of the model checking are introduced. To apply model

checking methods, we need:

1. A Formal Specification Language;

2. A Temporal Logic;

3. A Formal Verification Environment.

A Formal Specification Language

A detailed notation for specify systems is necessary. For this purpose, the

Milner’s Calculus of Communicating Systems (CCS) [56] is used. CCS is one

of the best-known process algebras. Process algebras have proposed as formal

descriptions of complex software systems, with particular emphasis to parallel

and distributed systems The algebraic structure of the concurrent processes is

one of the most important issue in the definition of a Process Algebra. This uses

a labelled transitions approach, where states (resp. transitions) correspond to

processes (resp. actions). In the following, a brief overview of the main features

of CCS is reported. Readers unfamiliar with CCS are referred to [57, 56] for

further details. The syntax of processes is the following:

p ::= nil nil

| α.p prefix

| p+ p summation

| p|p composition

| p\L restriction

| p[f ] relabeling

| x constant

3http://jasmin.sourceforge.net/

12

Page 13: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

where

• α ranges over a finite set of actions A = {τ, a, a, b, b, ...}. Input actions

are labelled with “non-barred” names, i.e., a, while output actions are

“barred”, i.e., a. The action τ ∈ A is called internal action. τ actions

represent some level of abstraction in the characterization of the processes,

since they can hide an arbitrarily complex sequence of actions whose de-

tails are kept private. The set V = A − {τ} is the set of visible actions.

Each action l ∈ V (resp. l ∈ V) has a complementary action l (resp.

l). Processes may communicate when a process is ready to execute some

action l and the other on is ready to execute the complementary action l.

• In processes like p\L, the set L is a set of actions such that L ⊆ V.

• In processes like p[f ], the relabelling function f is a total function, f :

A → A, where the constraint f(τ) = τ is satisfied.

• Every constant is defined by a constant definition. For example, xdef= p,

where x ranges over a set of constant names and p is called the body of x.

The standard operational semantics [56] is given by a relation −→ ⊆ P×A×P,

where P represents the set of processes. We give the semantics for CCS by

induction over the structure of processes.

• Nil. nil represents a process that can do nothing. nil cannot evolve, thus

no rule exists for nil.

• Prefix. The process α.p can perform the action α and then become the

process p. This is encoded by the rule Act:

Act

α.pα−→ p

• Summation. The process p + q is a process that non-deterministically

behaves either as p or as q. This is expressed by the rules Sum1 and

13

Page 14: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

Sum2:

Sum1

pα−→ p′

p+ qα−→ p′

Sum2

qα−→ q′

p+ qα−→ q′

• Composition. The parallel composition is encoded by the operator |. p

and q may run independently: if the process p can execute the action α

and become p′, then p|q can execute the action α and become p′|q. The

same holds for q. This is stated by the rules Par1 and Par2:

Par1

pα−→ p′

p|q α−→ p′|qPar2

qα−→ q′

p|q α−→ p|q′

Furthermore, p and q may also be involved in a communication when

a handshake occurs, i.e., both processes are simultaneously able to exe-

cute the complementary actions. Handshake corresponds to an internal

communication by means of the action τ ; in this way the two processes

exchange information between them. More precisely, if p can execute an

input visible action l and become p′, and q can execute the complementary

output action l and become q′, then p|q communicate performing τ and

become p′|q′. This is encoded by the rule Com:

Com

pl−→ p′, q

l−→ q′

p|q τ−→ p′|q′

• Restriction. Suppose L ⊆ V , p\L is a process that behaves as p except

that it cannot execute externally any of the actions belonging to L (as well

as the corresponding complementary actions), even if each pair of these

complementary actions can internally be executed for the communication.

This is encoded by the rule Res:

Res

pα−→ p′

p\L α−→ p′\Lα, α 6∈ L

14

Page 15: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

• Relabelling. The operator [f ] represents the relabelling of actions. If p can

execute α and become p′, then p[f ] can execute f(α) and become p′[f ].

This is encoded by the rule Rel:

Rel

pα−→ p′

p[f ]f(α)−→ p′[f ]

• Constant definition. Suppose xdef= p. The behavior of the constant x is

the same of the behavior of the process p as encoded by the rule Con:

Con

pα−→ p′

xα−→ p′

xdef= p

A (labeled) transition system is a quadruple T = (S,A,−→, s), where S is a

set of states, A is a set of transition labels (actions), s ∈ S is the initial state,

and −→ ⊆ S × A × S is the transition relation. If (s, α, s′) ∈ −→, we write

sα−→ s′. If δ ∈ A∗ and δ = α1 . . . αn, n ≥ 1, s

δ−→ s′ means sα1−→· · · αn−→ s′.

Furthermore, sλ−→ s, where λ is the empty sequence. Suppose s ∈ S, the set of

the states reachable from s by −→ is denoted by R(p) = {s′ | s δ−→ s′}. The

standard transition system for a CCS process p is S(p) = (R(p),A,−→, p). It

is worth noting that, with abuse of notation, −→ is used for denoting both

the operational semantics and the transition relation among the states of the

transition system.

A Temporal Logic

A detailed notation for defining properties is necessary A temporal logic [58]

solves this need. A Temporal logic allows to state in a formal way that, for

instance, all scenarios will satisfied some property at every step, or that some

particular action will eventually happen, and so on. The most considerable

examples are:

• Safety properties. A safety property states that nothing bad happens.

15

Page 16: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

• Liveness properties. A liveness property states that something good even-

tually happens.

The mu-calculus logic [58] is used in this paper. The syntax of the mu-calculus

is reported below, where we suppose that Z ranges over a set of variables, K

and R range over sets of actions.

φ ::= tt | ff | Z | φ ∨ φ | φ ∧ φ | [K] φ | 〈K〉 φ |

νZ.φ | µZ.φ

The satisfaction of a formula φ by a state s of a transition system, denoted by

s |= φ, is so defined:

• each state satisfies tt and no state satisfies ff;

• a state satisfies φ1 ∨ φ2 (φ1 ∧ φ2) if it satisfies φ1 or (and) φ2.

• [K] φ and 〈K〉 φ are the modal operators:

[K] φ is satisfied by a state which, for every performance of an action

in K, evolves in a state obeying φ.

〈K〉 φ is satisfied by a state which can evolve to a state obeying φ by

performing an action in K.

In Table 1 is reported the precise definition of the satisfaction of a closed formula

ϕ by a state s (denoted s |= ϕ). µZ.φ and νZ.φ are the fixed point formulae,

where µZ (νZ) binds free occurrences of Z in φ. An occurrence of Z is free if it

is not within the scope of a binder µZ (νZ). A formula is closed if it contains no

free variables. µZ.φ is the least fix-point of the recursive equation Z = φ, while

νZ.φ is the greatest one. A transition system T satisfies a formula φ, denoted

T |= φ, if and only if q |= φ, where q is the initial state of T . A CCS process p

satisfies φ if S(p) |= φ.

A Formal Verification Environment

Finally, an algorithm to verify if a complex system satisfies a property is

necessary. Formal verification is a mathematical based process able to verify if

16

Page 17: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

p 6|= ff

p |= tt

p |= ϕ ∧ ψ iff p |= ϕ and p |= ψ

p |= ϕ ∨ ψ iff p |= ϕ or p |= ψ

p |= [K] ϕ iff ∀p′.∀α ∈ K.p α−→ p′ implies p′ |= ϕ

p |= 〈K〉 ϕ iff ∃p′.∃α ∈ K.p α−→ p′ and p′ |= ϕ

p |= νZ.ϕ iff p |= νZn.ϕ for all n

p |= µZ.ϕ iff p |= µZn.ϕ for some n

where:

• for each n, νZn.ϕ and µZn.ϕ are defined as:

νZ0.ϕ = tt µZ0.ϕ = ff

νZn+1.ϕ = ϕ[νZn.ϕ/Z] µZn+1.ϕ = ϕ[µZn.ϕ/Z]

where the notation ϕ[ψ/Z] indicates the substitution of ψ for every free

occurrence of the variable Z in ϕ.

Table 1: Satisfaction of a closed formula by a state

17

Page 18: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

Figure 1: Model Checker

a design satisfies some requirements. Many techniques for verification are pro-

vided, among them model checking. In the model checking the approach [59]

the requirements are encoded using a temporal logic formula. Each formula is

validated on the system modeled as transition systems. The inputs of a model

checker tool are both a transition system and a temporal formula. The output is

equal to true if the system satisfies the formula and false otherwise (see Figure

1). An exhaustive state space search is performed by the node checker tool.

The termination is guaranteed since the model is finite. The research challenge

in model checking is in developing algorithms allowing the management of big

search spaces.

One of the most popular environments for verifying concurrent systems is the

Concurrency Workbench, Aalborg Edition (Caal) [60], which supports several

different specification languages, CCS among them. In the Caal, the verifica-

tion of temporal logic formulae is model checking based [59]. We have chosen the

Caal workbench since it provides a unique combination of features that no other

tool presently offers, such that: (i) Caal supports not only model-checking but

18

Page 19: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

also equivalence checking, which plays a crucial role for component-based sys-

tems and compositional verification; (ii) many methodologies [61, 62, 63] have

been developed by one of the author of this paper, to reduce the state explo-

sion problem (typical of the model checking technique) using the CCS language

supported by Caal; (iii) Caal supports concurrency.

4. Methodology

Our model-checking-based methodology to identify obfuscating transforma-

tions is presented in this section. It is based on two main processes:

1. Creation of a formal model of Java Bytecode.

2. Translation of obfuscating transformations into temporal logic formulae.

The first process uses Milner’s Calculus of Communicating Systems (CCS) [56]

language specification to the construction of the model. Starting from .class

files written in Java Bytecode we generate a CCS specification. Thus, if the

code has n .class files, we obtain n CCS processes. The transformation from

Java Bytecode to CCS is performed defining a translation function T . It is de-

fined for each Java Bytecode instruction. This translation has been completely

automated and all the methods are analyzed separately. We use a model simi-

lar to the one described in [64, 65], even if we do not use the model to identify

malware families as done previously, but now we try to identify the most com-

mon obfuscating techniques. Obviously, now the CCS model has to consider

features of the new context. Below we show the translation of some Java Byte-

code instructions to give the reader the flavour of the approach followed. A

Java Bytecode program P can be represented as a sequence c of instructions,

numbered starting from address 0; ∀i ∈ {0, . . . , ]c}, and c[i] is the instruction

at address i, where ]c denotes the length of c.

Instruction: c[i] = goto j

T (i) = xidef= gotoj.xj

19

Page 20: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

The instruction c[i] = goto j is encoded as CCS process xi that executes the

action gotoj and then jumps to the instruction j, corresponding to the CCS

process xj .

Instruction: c[i] = tstore z

T (i) = xidef= store.xi+1

Each tstorez instruction is encoded as store followed by the constant process

xi+1 representing the CCS translation of the successive instruction. This trans-

lation is obtained without tacking into account the type t and the name of the

variable z.

Instruction: c[i] = if cond j

T (i) = xidef= if condff.xi+1 + if condtt.xj

Conditional jumps are instead specified as non-deterministic choices. The true

(resp. false) condition is represented by the CCS action if condtt (resp. if condff),

while cond belongs in the following set:

{ ne, eq, icmeq, icmpne, ...}.

Thus, if the condition is true, the CCS process xi performs the action if condtt

and the execution branches to the process xj corresponding to the process at

the address j. If the condition is false, the execution continues at the successive

instruction at address i+ 1 (process xi+1).

An example of the Java Bytecode to CCS transformation T is reported in

Figure 2. In the right side of the Figure 2 the corresponding automaton of the

CCS fragment is depicted. The CCS process and the corresponding automaton

are related to the Listing 2 of Appendix 6.

Another example refers to the code in Listing 4 of Appendix 6 which has

been obfuscated with the code reordering technique. Figure 3 shows a fragment

of an automaton corresponding to a CCS process obtained by applying our Java

Bytecode to CCS transformation to the code snippet of Listing 4.

20

Page 21: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

Figure 2: Fragment of a CCS process and the corresponding automaton.

The second process aims to investigate if a Java Bytecode is obfuscated. The

main aim of our methodology is to verify if a code is obfuscated with specific

techniques. Thus, we use mu-calculus logic, [58] as a branching temporal logic,

to express code reordering, call indirection and data encryption characteristics,

the most widespread obfuscating techniques.

The CCS model obtained by the first process is used to verify properties. In our

approach, we invoke the Concurrency Workbench, Aalborg Edition (Caal) [60]

as formal verification environment to establish when the code under analysis is

obfuscated (also indicating the specific technique). Let code be the analyzed

Java Bytecode and let ϕt be the formula expressing the specific obfuscating

technique t. The approach we have defined consists in counting the number of

CCS processes obtained by analyzing code which satisfy the formula ϕt, Suppose

that this number is n. Note that we generate a CCS process for each .class file

of a code. In order to establish if code is obfuscated with t, we have to define a

threshold such that, whenever n is greater than this threshold, we can establish

that code could be obfuscated with t. The introduction of the threshold stems

21

Page 22: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

Figure 3: Obfuscated Automaton with Code Reordering Technique.

from the need to differentiate a normal programming code from an obfuscated

one. As known from literature [66], programmers should avoid the creation of

“spaghetti code”, i.e., unstructured programming with goto statement even if

they could use it. Furthermore, a Java programmer could implement a method

whose only task is to call another method, even if, as stated in [67], those

methods are considered as code smells and they are denoted as lazy methods.

These are the reasons why we introduce a threshold in our methodology. A

low value of n is not representative of an obfuscated code, but it surely is

representative of a bad programming practice, on the other hand a big value of

n could mean that the code has been obfuscated.

22

Page 23: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

Figure 4: The compilation steps of an Android application, the steps Java Source code,

Java compiler and Bytecode, are verified also for Java application.

Some considerations

We highlight that our methodology is able to localize the code fragment

in which the obfuscating technique is applied, since we know the CCS process

(and therefore the .class) that satisfies the formula representing the obfuscating

technique.

The logic formulae we stated are able to identify obfuscating techniques both

on Java and on Android environments: this is possible because we analyze the

Bytecode of the application under analysis.

Considering the Bytecode, a common element to Android and to Java program-

ming languages, we are able to provide the model and the formulae working for

both programming languages.

Figure 4 shows the steps of the compilation of an Android (and Java) applica-

tion. The steps related to Java source code, Java compiler and Bytecode are the

same involved in the compilation of a Java application. The difference is in the

execution environment: in the case of Java, the Bytecode is directly executed

in the JVM (a stack-based virtual machine), while in the case of Android, the

Bytecode needs to be transformed into Dalvik Bytecode in order to be run on

DVM (a register-based virtual machine).

This is done in order to ensure the compatibility (when possible) between Java

23

Page 24: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

and Android, and considering the multiplicity of mobile applications developed

in Java, it was necessary for Google to create a conversion system able to en-

sure portability for applications running different versions of Android operating

system.

For this reason, by analyzing the Bytecode, we are able to identify obfuscating

techniques in both programming languages.

As discussed in the background section, the JVM is stack-based, thus it is nec-

essary to convert the Bytecode able to run on JVM in dex file (i.e., Dalvik

Executable file able to run on DVM). To perform this operation, it is neces-

sary to invoke the dex compiler, a tool able to transform the Java Bytecode in

the Dalvik Bytecode able to execute on the register-based DVM with limited

resources.

4.1. Logic formulae expressing obfuscating transformations

In this section we express code obfuscating transformation techniques in the

mu-calculus logic.

Code reordering: code reordering modifies the order of the instructions in

the methods of a program. This transformation is performed by reordering the

instructions and inserting goto instructions. The behavior of the program is

preserved.

The logic formula expressing code reordering is:

ϕ1 = µX. 〈goto〉 〈goto〉 tt ∨ 〈−goto〉X

More formally, the meaning of ϕ1 is: “it is possible to reach a state where 2

goto actions are consecutively performed, i.e., without performing other actions

in between them”.

Formula ϕ1 is true on the automaton shown in Figure 3. In fact, starting from

state L12 in Figure 3 and following the path, the reader can find at least 2 goto

instructions consecutively. The number near every goto indicates the number

of consecutive goto instructions encountered along a path.

24

Page 25: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

On the other hand the formula ϕ1 is false on the CCS process shown in Figure

2, since no two consecutive goto instructions exist. As explained above the

automaton in Figure 2 (resp. Figure 3) is the automaton obtained from the

original code c (resp. from the code c obfuscated with the code reordering

technique).

Call Indirections: this transformation acts on the call graph with trivial

modifications. More precisely, if the method x calls another method, namely

y, this invocation is substituted with the invocation of a non-existing method z

that only performs the original invocation of y.

The logic formula expressing call indirections is:

ϕ2 = µX. 〈load〉 〈invoke〉 〈return〉 tt ∨ 〈−load〉X

More formally, the meaning of ϕ2 is: “it is possible to reach a state where the

actions: load, invoke and return are consecutively performed, i.e., without per-

forming other actions in between them”. This means that after an invoke only a

return is performed meaning that the method invokes a previously non-existing

method that then calls the method in the original call, without doing anything.

Data Encryption: the dex files contain all the strings and array data that

have been used in the code. These strings and arrays may be used to develop

signatures against malware. These can be kept in encrypted form.

The logic formula expressing data encryption is:

ϕ3 = µX. 〈invokeapplyCaesar〉 tt ∨

〈−invokeapplyCaesar〉X

More formally, the meaning of ϕ3 is: “it is possible to reach a state where

invokeapplyCaesar is performed.

We consider in the evaluation the logic formula ϕ3 able to catch the Caesar

cipher with a key equal to three: each letter in the plain text is replaced by a

letter some fixed number of positions (i.e., the key) down the alphabet that in

our evaluation is equal to three.

25

Page 26: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

Table 2: Number of applications transformed for the item (I) of the dataset.

Tool Code Reordering Call Indirection Data Encryption

DroidChameleon 200 200 200

Carnival 200 200 200

The tools we employ to obfuscate Android applications are able only to inject

the Caesar cypher with a key equal to three, but our method is generic, for this

reason it is able to catch all substitution cipher algorithms involved to perform

code obfuscations.

5. Evaluation

In this section we present the result of our method on a real-world dataset

of Android applications. We measure the performance of our method using the

metrics of Precision, Recall, F-measure and Accuracy.

5.1. Dataset

In our evaluation we use two tools implementing the obfuscating techniques,

as discussed in Section 3.2: DroidChameleon and Carnival.

We evaluated obfuscated and not obfuscated applications in order to demon-

strate the effectiveness of our methodology. We composed the dataset as fol-

lowing:

1. we retrieved 200 real-world Android applications and we applied to each

application of the dataset a single obfuscating technique, as Table 2 shows.

Since we use two tools and three obfuscating techniques, we obtain a total

of 1400 applications, including the original ones;

2. we retrieved 300 real-world Android applications and we applied to each

application of the dataset simultaneously all three obfuscating techniques

provided by the two tools, for a total of 600 applications.

26

Page 27: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

Table 3: Available categories on GooglePlay.

Category Category

Books & Reference Lifestyle

Business Live Wallpaper

Comics Media & Video

Communication Medical

Education Music & Audio

Finance News & Magazines

Games Personalization

Health & Fitness Photography

Libraries & Demo Productivity

Shopping Social

Sport Tools

Travel & Local Transportation

Weather Widgets

The total number of evaluated applications is 2000.

Note that the obfuscation is employed in both legitimate and malware applica-

tions. In fact, we examine, regarding the item (1), 100 malware and 100 trusted

applications, while regarding the item (2) we consider 150 malware and 150

trusted applications.

The malware real-world samples used in the evaluation were gathered from the

Drebin project’s dataset [68, 69]: a very well-known collection of malware used

in many scientific works, which includes the most widespread Android families.

The malware dataset is also partitioned according to the malware family : each

family contains samples which have in common several characteristics, like pay-

load installation, the kind of attack and events that trigger malicious payload

[70].

In order to download trusted applications we crawled Google’s official app store4

using an open-source crawler5. The obtained trusted dataset includes samples

belonging to all the different categories available on the market. Table 3 shows

the belonging categories of the legitimate samples we downloaded. The legiti-

4https://play.google.com/store5https://github.com/liato/android-market-api-py

27

Page 28: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

mate applications were collected between January 2016 and April 2016.

We analyzed the dataset with the VirusTotal service6, a service able to run

57 different antimalware software (e.g., Symantec, Avast, Kasperky, McAfee,

Panda, and others): the analysis confirmed that the legitimate applications did

not contain malicious payload while the malware ones were really malicious.

5.2. Threshold

As stated in Section 4, our methodology is based on the introduction of a

threshold to distinguish a not obfuscated code from an obfuscated one. In or-

der to define the threshold we have used 20 not obfuscated applications. These

applications have been identified as not obfuscated through a manual inspec-

tion process. The process to determine the threshold and to establish if an

application is to be considered obfuscated is has been carried out as follows:

1. Let us consider the above 20 applications. For each obfuscating technique

t examined in the paper, we calculate the rate between the number of the

CCS processes resulting obfuscated, i.e., that verify ϕt, the formula rep-

resenting t, and the total number of the CCS processes of the application.

We call this value index.

2. For each t, we set the threshold as the maximum value of the index

obtained in the previous step. Clearly, we have 3 different thresholds, one

for every obfuscating technique.

3. We produce an obfuscated version of these applications.

4. We test the obfuscated applications and we compute again the new indexes

for the obfuscated applications.

5. We compare the computed indexes with the thresholds defined at point 2.

Whenever the computed index was greater than the threshold, then the

analyzed application is considered obfuscated.

6https://www.virustotal.com/

28

Page 29: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

Table 4: Threshold for each Obfuscating Technique.

Code Reordering Call Indirection Data Encryption

Threshold 2% 13% 0%

Table 5: Performance Evaluation

Formula ϕ Tool Original Samples Obfuscated with: TP FP FN TN PR RC Fm Acc

CR CI DE All

CRChameleon

200200 200 200 300 499 0 1 600 0.99 0.99 0.99 0.99

Carnival 200 200 200 300 488 4 12 596 0.99 0.97 0.97 0.98

CIChameleon

200200 200 200 300 495 8 5 592 0.98 0.99 0.98 0.98

Carnival 200 200 200 300 491 8 9 592 0.98 0.98 0.98 0.98

DEChameleon

200200 200 200 300 495 0 5 600 1 0.98 0.99 0.99

Carnival 200 200 200 300 483 0 17 600 1 0.96 0.98 0.98

Note: CR, CI and DE indicate Code Reordering, Call Indirection and Data

Encryption obfuscating techniques, respectively.

Table 4 shows the thresholds resulting from the above process. They have been

used in our methodology to verify if an application is obfuscated.

5.3. Results

Table 5 shows the results of the experiment applying our methodology using

both DroidChameleon and Carnival. It is organized as follow:

• Column Formula ϕ: It indicates the formula ϕ tested on the samples.

There are three different formulae ϕ, one for each obfuscation technique.

• Column Original: It contains the number of not obfuscated samples used

in our evaluation.

• Column Sample Obfuscated with: It contains the number of obfuscated

samples which are obfuscated as follows:

– Sub-Column CR: It contains the number of samples that are obfus-

cated with the Code Reordering technique.

– Sub-Column CI: It contains the number of samples that are obfus-

cated with the Call Indirection technique.

29

Page 30: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

– Sub-Column DE: It contains the number of samples that are obfus-

cated with the Data Encryption technique.

– Sub-Column All: It contains the number of samples that are obfus-

cated with all the three obfuscating techniques.

Clearly, all the samples are tested with the three formulae that compare

in the row of the table.

• Column TP: It indicates the number of True Positive. A sample is con-

sidered as a TP if it is obfuscated with a particular technique and our

methodology correctly identifies the applied obfuscating technique. We

recall that for our methodology a sample is obfuscated with a particu-

lar obfuscating technique if the number of files that verify the formula is

greater than a threshold as explained in Section 4.

• Column FP: It indicates the number of False Positive. A sample is con-

sidered as a FP if our methodology identifies the sample as obfuscated

with a particular obfuscating technique but it is not obfuscated with that

technique, i.e., a sample without any obfuscation or a sample obfuscated

with other obfuscating techniques.

• Column FN: It indicates the number of False Negative. A sample is con-

sidered as a FN if our methodology not identifies the sample as obfuscated

with a particular obfuscating technique but it is obfuscated with that tech-

nique, i.e., a sample obfuscated with the same technique indicated by the

formula.

• Column TN: It indicates the number of True Negative. A sample is con-

sidered as a TN if our methodology not identifies the sample as obfuscated

with a particular obfuscating technique and it is not obfuscated with that

technique, i.e., a sample without any obfuscation or a sample obfuscated

with other obfuscating techniques.

30

Page 31: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

Table 6: apk size, dex size, jar size, uncompressed classed extracted by the jar file

(identified by the PRJ column), States, Transitions and Execution Time for six appli-

cations with size ranging between 3.0 MB and 34.6 MB.

App Size States Transitions Execution Time

apk dex jar PRJ

APP-1 3.0 MB 4.5 MB 446.0 kB 890.2 kB 87758 92348 0.822 s

APP-2 5.1 MB 6.9 MB 35.8 kB 76.3 kB 2355 2488 0.017 s

APP-3 7.3 MB 2.6 MB 331.2 kB 778.6 kB 71574 75033 0.696 s

APP-4 9.9 MB 174.6 kB 127.7 kB 261.3 kB 25747 26570 0.266 s

APP-5 14.1 MB 6.2 MB 178.4 kB 350.1 kB 31272 32901 0.299 s

APP-6 34.6 MB 9.2 MB 37.4 kB 69.2 kB 1235 1288 0.010 s

• Columns PR, RC, Fm and Acc indicate the values of Precision, Recall,

F-measure and Accuracy respectively, as defined in the following:

PR = TPTP+FP ; RC = TP

TP+FN ;

Fm = 2PR RCPR+RC ; Acc = TP+TN

TP+FN+FP+TN

(1)

Results in Table 5 seem to be very promising: we obtain an Accuracy, Precision,

Recall and F-Measure never less than 96%. Our logic rules correctly identify the

applied obfuscating technique. The results show that we are able to identify the

precise obfuscating technique also when the sample under exam is obfuscated

with all the considered techniques simultaneously. In order to evaluate the time

performances we conduct a deep analysis with the aim to understand whether

some factor app-related can affect the execution time. We chose different size

applications (from 3.0 MB to 34.6 MB) in order to highlight how the execution

time varies when application of different size are considered.

Table 6 shows the size in MegaBytes (MB) related to the apk, the dex (expressed

in MegaBytes), the jar the size of the uncompressed jar expressed in KiloByte

(KB) (i.e., the application classes), the states, the transitions and the execution

time (expressed in seconds) related to six different applications we analyzed in

the evaluation. Analyzing the table we point out, as expected, that there

is a correlation among the execution time, states and transitions in the PRJ

analysis (i.e., the classes extracted from the jar file). The extraction of the jar

31

Page 32: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

0 2 4 6 8·104

0

0.2

0.4

0.6

0.8

APP-6APP-2

APP-4APP-5

APP-3

APP-1

States

Tim

e(s

)

Figure 5: Model states and execution time (expressed in seconds) related to the model

verification.

0 2 4 6 8·105

0

2

4

6

8

·104

APP-6APP-2

APP-4APP-5

APP-3

APP-1

PRJ folders size

Sta

tes

Figure 6: PRJ folder sizes and model states related to the model verification.

32

Page 33: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

from the dex file has been obtained using the dex2jar tool (employed also in

our methodology as previously explained) in order to obtain the classes in an

uncompressed format. For this reason we report in the Table 6 also the jar files

size and the sizes of the folder extracted by the jar folder containing the classes

(reported in the PRJ column). As a matter of fact, when the classes size is

equal to 446.0 KB the execution time is equal to 0.822 s with 87758 states and

92348 transitions, while in case the jar file is equal to 37.4 KB our tool employs

0.010 s to perform the analysis with 1235 states and 1288 transitions. The same

consideration can be deducted for the other apks considered in our evaluation.

Figure 5 shows the relationship between the model states and the execution time

in order to verify the model, while Figure 6 shows the model states with the PRJ

folders. As Figure 5 exhibits, the time to verify the model is increasing when the

model states are growing, while Figure 6 shows the states trend when the classes

file of the application under analysis in increasing: the formal models obtained

applied our methodology grow linearly with the dimension of the extracted

jar. From this analysis we conclude that the dimension of the classes of the

application to evaluate (i.e., the classes of the application) influences the number

of the states of the model, and the increasing number of states will affect the

execution time related to model verification.

On the other hand, we do not rightly find any correlation analyzing the apk

size and the execution time. In fact, the execution time is ranging between

0.010 and 0.822 seconds and it is not affected by the apk size (that is ranging

between 3.0 MB and 34.6 MB), see for example APP-6 which is the bigger app

but it exhibits the lower execution time. These results are expected, considering

that the apk file contains not only the classes of the application but also the

resources, as images and sounds useful to enjoy the mobile application from an

user experience point of view. Moreover, also no correlation is find between the

dex files (containing the classes of the application) and the execution time: the

dex file is an optimized format targeting the Dalvik virtual machine.

33

Page 34: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

6. Conclusion and Future Work

In this paper a model checking based approach able to identify the most

widespread obfuscating techniques has been proposed. Usually, code obfuscation

has been used to protect intellectual property, however recently, it has been also

used to evade antivirus scanners. Nowadays Android malware detectors are

able to identify a malware using its signature, typically extracted from manual

inspection. The signature is based on code structure. It is very easy to evade

the mechanism of signature recognition by trivial alteration of code structure,

i.e., code obfuscation. Thus, we test our method on a real-world dataset of

Android applications for three reasons: (1) Android application development is

very close to Java; (2) to the best of our knowledge, no experimentation has

been made on Android; (3) code obfuscation detection is very important to

make the current anti-malware technologies able to recognize malware variants

to limit the diffusion of zero-day attacks. The main distinctive features of our

approach are: (i) we use model checking technique; (ii) we use Java Bytecode;

(iii) we propose a static analysis, i.e., it is not required to run the code but only

to analyze the code; (iv) we are able to localize the code fragment in which the

obfuscating technique is applied; (v) we identify the obfuscating technique with

an average accuracy equal to 0.983.

As future work we plan to extend the proposed method also to the iden-

tification of obfuscation techniques at native code and JavaScript code level.

Moreover, we are able to identify whether the reflection API is invoked but,

since our method is purely static, we are not able to identify the target of the

refection. To manage this situation, as future work we plan to integrate our

method with a dynamic one.

Acknowledgements

This work was partially supported by the H2020 EU funded project NeCS [GA

#675320], by the H2020 EU funded project C3ISP [GA #700294].

34

Page 35: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

References

[1] S. Cuomo, P. De Michele, F. Piccialli, A. K. Sangaiah, Reproducing dynam-

ics related to an internet of things framework: A numerical and statistical

approach, Journal of Parallel and Distributed Computing.

[2] S. Kumar, D. Datta, S. K. Singh, A. K. Sangaiah, An intelligent decision

computing paradigm for crowd monitoring in the smart city, Journal of

Parallel and Distributed Computing.

[3] D. V. Medhane, A. K. Sangaiah, Escape: Effective scalable clustering ap-

proach for parallel execution of continuous position-based queries in posi-

tion monitoring applications, IEEE Transactions on Sustainable Comput-

ing.

[4] C. S. Collberg, C. D. Thomborson, Watermarking, tamper-proofing, and

obfuscation-tools for software protection, IEEE Trans. Software Eng. 28 (8)

(2002) 735–746.

[5] A. C. Myers, B. Liskov, Protecting privacy using the decentralized la-

bel model, ACM Transactions on Software Engineering and Methodology

(TOSEM) 9 (4) (2000) 410–442.

[6] A. Cimitile, F. Martinelli, F. Mercaldo, V. Nardone, A. Santone, Formal

methods meet mobile code obfuscation identification of code reordering

technique, in: Enabling Technologies: Infrastructure for Collaborative En-

terprises (WETICE), 2017 IEEE 26th International Conference on, IEEE,

2017, pp. 263–268.

[7] F. Martinelli, F. Mercaldo, V. Nardone, A. Santone, Malware and formal

methods: Rigorous approaches for detecting malicious behaviour, in: Pro-

ceedings of the 12th International Conference on Availability, Reliability

and Security, ACM, 2017, p. 76.

[8] A. Bacci, A. Bartoli, F. Martinelli, E. Medvet, F. Mercaldo, C. A. Visaggio,

Impact of code obfuscation on android malware detection based on static

35

Page 36: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

and dynamic analysis, in: 4th International Conference on Information

Systems Security and Privacy, Scitepress, 2018, pp. 379–385.

[9] F. Mercaldo, V. Nardone, A. Santone, C. A. Visaggio, Hey malware, i can

find you!, in: Enabling Technologies: Infrastructure for Collaborative En-

terprises (WETICE), 2016 IEEE 25th International Conference on, IEEE,

2016, pp. 261–262.

[10] J. Jiang, S. Wen, S. Yu, Y. Xiang, W. Zhou, Identifying propagation sources

in networks: State-of-the-art and comparative studies, IEEE Communica-

tions Surveys & Tutorials 19 (1) (2017) 465–481.

[11] Y. Wang, S. Wen, Y. Xiang, W. Zhou, Modeling the propagation of worms

in networks: A survey, IEEE Communications Surveys & Tutorials 16 (2)

(2014) 942–960.

[12] G. Canfora, F. Mercaldo, C. A. Visaggio, P. Di Notte, Metamorphic mal-

ware detection using code metrics, Information Security Journal: A Global

Perspective 23 (3) (2014) 57–67.

[13] S. Wen, W. Zhou, J. Zhang, Y. Xiang, W. Zhou, W. Jia, Modeling prop-

agation dynamics of social network worms, IEEE Transactions on Parallel

and Distributed Systems 24 (8) (2013) 1633–1643.

[14] W. Wong, M. Stamp, Hunting for metamorphic engines, Journal in Com-

puter Virology 2 (3) (2006) 211–229.

[15] N. Runwal, R. M. Low, M. Stamp, Opcode graph similarity and metamor-

phic detection, Journal in Computer Virology 8 (1-2) (2012) 37–52.

[16] D. Lin, M. Stamp, Hunting for undetectable metamorphic viruses, Journal

in computer virology 7 (3) (2011) 201–214.

[17] H. Han, R. Li, J. Tang, Identify and inspect libraries in android applica-

tions, Wireless Personal Communications (2018) 1–13.

36

Page 37: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

[18] H.-V. Nguyen, T. Touili, Caret model checking for malware detection, in:

Proceedings of the 24th ACM SIGSOFT International SPIN Symposium

on Model Checking of Software, ACM, 2017, pp. 152–161.

[19] N. M. Hai, Q. T. Tho, et al., Multi-threaded on-the-fly model generation

of malware with hash compaction, in: International Conference on Formal

Engineering Methods, Springer, 2016, pp. 159–174.

[20] F. Song, T. Touili, Model-checking for android malware detection, in: Asian

Symposium on Programming Languages and Systems, Springer, 2014, pp.

216–235.

[21] S. Alam, R. N. Horspool, I. Traore, I. Sogukpinar, A framework for meta-

morphic malware analysis and real-time detection, computers & security

48 (2015) 212–233.

[22] S. Alam, I. Sogukpinar, I. Traore, R. N. Horspool, Sliding window and con-

trol flow weight for metamorphic malware detection, Journal of Computer

Virology and Hacking Techniques 11 (2) (2015) 75–88.

[23] F. Mercaldo, V. Nardone, A. Santone, Ransomware inside out, in: Avail-

ability, Reliability and Security (ARES), 2016 11th International Confer-

ence on, IEEE, 2016, pp. 628–637.

[24] A. Balakrishnan, C. Schulze, Code obfuscation literature survey, CS701

Construction of compilers 19.

[25] S. K. Udupa, S. K. Debray, M. Madou, Deobfuscation: Reverse engineering

obfuscated code, in: 12th Working Conference on Reverse Engineering,

WCRE 2005, Pittsburgh, PA, USA, November 7-11, 2005, IEEE Computer

Society, 2005, pp. 45–54.

[26] E. M. Clarke, E. A. Emerson, Design and synthesis of synchronization

skeletons using branching time temporal logic, in: O. Grumberg, H. Veith

(Eds.), 25 Years of Model Checking, Vol. 5000 of Lecture Notes in Computer

Science, Springer, 2008, pp. 196–215.

37

Page 38: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

[27] M. Ceccarelli, L. Cerulo, G. D. Ruvo, V. Nardone, A. Santone, Infer gene

regulatory networks from time series data with probabilistic model check-

ing, IEEE Computer Society, 2015, pp. 26–32.

[28] V. Nardone, D. Raucci, A. Santone, Model checking to support action

controls in the purchasing process, IEEE Computer Society, 2016, pp. 199–

204.

[29] H. Foster, W. Emmerich, J. Kramer, J. Magee, D. Rosenblum, S. Uchitel,

Model checking service compositions under resource constraints, in: Pro-

ceedings of the the 6th joint meeting of the European software engineering

conference and the ACM SIGSOFT symposium on The foundations of soft-

ware engineering, ACM, 2007, pp. 225–234.

[30] J. Gosling, The Java language specification, Addison-Wesley Professional,

2000.

[31] K. Purdy, The complete Android Guide, 3ones Inc, 2011.

[32] J. Park, H. Kim, Y. Jeong, S.-j. Cho, S. Han, M. Park, Effects of code

obfuscation on android app similarity analysis, Journal of Wireless Mobile

Networks, Ubiquitous Computing, and Dependable Applications (JoWUA)

6 (4) (2015) 86–98.

[33] J. Crussell, C. Gibler, H. Chen, Attack of the clones: Detecting cloned

applications on android markets, in: European Symposium on Research in

Computer Security, Springer, 2012, pp. 37–54.

[34] X. Xiao, S. Zhang, F. Mercaldo, G. Hu, A. K. Sangaiah, Android malware

detection based on system call sequences and lstm, Multimedia Tools and

Applications (2017) 1–21.

[35] G. Canfora, E. Medvet, F. Mercaldo, C. A. Visaggio, Detection of malicious

web pages using system calls sequences, in: International Conference on

Availability, Reliability, and Security, Springer, 2014, pp. 226–238.

38

Page 39: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

[36] G. Canfora, F. Mercaldo, C. A. Visaggio, Malicious javascript detection by

features extraction, e-Informatica Software Engineering Journal 8 (1).

[37] W. Xu, F. Zhang, S. Zhu, The power of obfuscation techniques in malicious

javascript code: A measurement study, in: Malicious and Unwanted Soft-

ware (MALWARE), 2012 7th International Conference on, IEEE, 2012, pp.

9–16.

[38] P. Likarish, E. Jung, I. Jo, Obfuscated malicious javascript detection using

classification techniques., in: MALWARE, Citeseer, 2009, pp. 47–54.

[39] G. Lu, S. Debray, Automatic simplification of obfuscated javascript code:

A semantics-based approach, in: Software Security and Reliability (SERE),

2012 IEEE Sixth International Conference on, IEEE, 2012, pp. 31–40.

[40] Y. Guillot, A. Gazet, Automatic binary deobfuscation, Journal in computer

virology 6 (3) (2010) 261–276.

[41] M. I. Sharif, A. Lanzi, J. T. Giffin, W. Lee, Impeding malware analysis

using conditional code obfuscation., in: NDSS, 2008.

[42] B. Yadegari, B. Johannesmeyer, B. Whitely, S. Debray, A generic approach

to automatic deobfuscation of executable code, in: 2015 IEEE Symposium

on Security and Privacy, IEEE, 2015, pp. 674–691.

[43] N. M. Hai, M. Ogawa, Q. T. Tho, Obfuscation code localization based on

cfg generation of malware, in: International Symposium on Foundations

and Practice of Security, Springer, 2015, pp. 229–247.

[44] M. Dalla Preda, R. Giacobazzi, Semantics-based code obfuscation by ab-

stract interpretation, Journal of Computer Security 17 (6) (2009) 855–908.

[45] M. Zheng, P. P. C. Lee, J. C. S. Lui, Adam: An automatic and extensible

platform to stress test android anti-virus systems, in: Proceedings of the

9th International Conference on Detection of Intrusions and Malware, and

Vulnerability Assessment, DIMVA’12, 2013, pp. 82–101.

39

Page 40: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

[46] V. Rastogi, Y. Chen, X. Jiang, Catch me if you can: Evaluating android

anti-malware against transformation attacks, Information Forensics and

Security, IEEE Transactions on 9 (1) (2014) 99–108. doi:10.1109/TIFS.

2013.2290431.

[47] G. Canfora, A. Di Sorbo, F. Mercaldo, C. A. Visaggio, Obfuscation tech-

niques against signature-based detection: a case study, in: Proeceedings

of 1st Workshop on Mobile System Technologies (MST), May 22, 2015,

Milano, Italy, 2015, p. To appear.

[48] M. Dahm, Byte code engineering, in: JIT99, Springer, 1999, pp. 267–277.

[49] B. Venners, Inside the Java virtual machine, McGraw-Hill, Inc., 1996.

[50] E.-R. Latifa, et al., Android: Deep look into dalvik vm, in: Information

and Communication Technologies (WICT), 2015 5th World Congress on,

IEEE, 2015, pp. 35–40.

[51] S. Brunthaler, Virtual-machine abstraction and optimization techniques,

Electronic Notes in Theoretical Computer Science 253 (5) (2009) 3–14.

[52] D. Ehringer, The dalvik virtual machine architecture, Techn. report (March

2010) 4 (2010) 8.

[53] Y. Shi, K. Casey, M. A. Ertl, D. Gregg, Virtual machine showdown: Stack

versus registers, ACM Transactions on Architecture and Code Optimization

(TACO) 4 (4) (2008) 2.

[54] S. Schrittwieser, S. Katzenbeisser, J. Kinder, G. Merzdovnik, E. Weippl,

Protecting software through obfuscation: Can it keep pace with progress

in code analysis?, ACM Computing Surveys (CSUR) 49 (1) (2016) 4.

[55] V. Rastogi, Y. Chen, X. Jiang, Droidchameleon:evaluating android anti-

malware against transformation attacks, in: ACM Symposium on Informa-

tion, Computer and Communications Security, ACM, 2013.

40

Page 41: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

[56] R. Milner, Communication and concurrency, PHI Series in computer sci-

ence, Prentice Hall, 1989.

[57] G. Bruns, Distributed Systems Analysis with CCS, Prentice-Hall, 1997.

[58] C. Stirling, An introduction to modal and temporal logics for ccs, in:

A. Yonezawa, T. Ito (Eds.), Concurrency: Theory, Language, And Ar-

chitecture, LNCS, Springer, 1989, pp. 2–20.

[59] E. M. Clarke, O. Grumberg, D. Peled, Model checking, MIT Press, 2001.

[60] J. R. Andersen, N. Andersen, S. Enevoldsen, M. M. Hansen, K. G. Larsen,

S. R. Olesen, J. Srba, J. K. Wortmann, CAAL: concurrency workbench,

aalborg edition, in: M. Leucker, C. Rueda, F. D. Valencia (Eds.), Theoret-

ical Aspects of Computing - ICTAC 2015 - 12th International Colloquium

Cali, Colombia, October 29-31, 2015, Proceedings, Vol. 9399 of Lecture

Notes in Computer Science, Springer, 2015, pp. 573–582.

[61] A. Santone, G. Vaglini, M. L. Villani, Incremental construction of systems:

An efficient characterization of the lacking sub-system, Sci. Comput. Pro-

gram. 78 (9) (2013) 1346–1367. doi:10.1016/j.scico.2012.07.015.

URL https://doi.org/10.1016/j.scico.2012.07.015

[62] R. Barbuti, N. D. Francesco, A. Santone, G. Vaglini, Reduced models for

efficient CCS verification, Formal Methods in System Design 26 (3) (2005)

319–350. doi:10.1007/s10703-005-1634-6.

URL https://doi.org/10.1007/s10703-005-1634-6

[63] N. D. Francesco, A. Santone, L. Tesei, Abstract interpretation and model

checking for checking secure information flow in concurrent systems,

Fundam. Inform. 54 (2-3) (2003) 195–211.

URL http://content.iospress.com/articles/

fundamenta-informaticae/fi54-2-3-07

[64] F. Mercaldo, V. Nardone, A. Santone, C. A. Visaggio, Download malware?

No, thanks: how formal methods can block update attacks, in: Proceedings

41

Page 42: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

of the 4th FME Workshop on Formal Methods in Software Engineering,

ACM, 2016, pp. 22–28.

[65] F. Mercaldo, V. Nardone, A. Santone, C. A. Visaggio, Ransomware steals

your phone. Formal methods rescue it, in: International Conference on

Formal Techniques for Distributed Objects, Components, and Systems,

Springer, 2016, pp. 212–221.

[66] E. W. Dijkstra, Letters to the editor: Go to statement considered harmful,

Commun. ACM 11 (3) (1968) 147–148. doi:10.1145/362929.362947.

URL http://doi.acm.org/10.1145/362929.362947

[67] P. A. Laplante, What Every Engineer Should Know about Software Engi-

neering, CRC Press, 2007.

[68] D. Arp, M. Spreitzenbarth, M. Huebner, H. Gascon, K. Rieck, Drebin:

Efficient and explainable detection of android malware in your pocket, in:

Proceedings of 21th Annual Network and Distributed System Security Sym-

posium (NDSS), IEEE, 2014.

[69] M. Spreitzenbarth, F. Echtler, T. Schreck, F. C. Freling, J. Hoffmann,

Mobilesandbox: Looking deeper into android applications, in: 28th Inter-

national ACM Symposium on Applied Computing (SAC), ACM, 2013.

[70] Y. Zhou, X. Jiang, Dissecting android malware: Characterization and evo-

lution, in: Proceedings of 33rd IEEE Symposium on Security and Privacy

(Oakland 2012), IEEE, 2012.

42

Page 43: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

Appendix

Examples of Code Obfuscations

In this section we show the resulting code after the application of some ob-

fuscating techniques. For further information about the techniques we applied

the reader can refer to Section 3.2.

As we previously explained, the evaluation was conducted on real-world Android

samples, and the code snippet we show in this section belongs to a real appli-

cation. Listing 1 shows the Java source code related to the createShortcut

method. In addition, we show the corresponding Java Bytecode, because our

method, through the BCEL7 library, extracts Bytecode from the compiled ap-

plication that is used to produce the formal CCS model. The Bytecode corre-

sponding to the Java source code of Listing 1 is shown in Listing 2.

Listing 4 reports the obfuscated Java Bytecode obtained by applying the Code

Reordering technique. It is worth noting that in the obfuscated Java Bytecode

there are many goto instructions. Although the normal flow of the code is pre-

served, there exist a lot of unconditional jumps that make the reconstruction

of the normal flow of the code difficult. The newly inserted goto instructions

produce “spaghetti code”, i.e., understandable code. Thus, modifying the con-

trol flow graph is important to evade the signature provided by antimalware.

Listing 3 shows the Java source code related to Java Bytecode in Listing 4. This

source code is obtained using a Java/Android reverse engineering environment.

We highlight that the reconstruction of the source code, in the case of Code

Reordering obfuscation, is difficult and in many cases is not a correct recon-

struction.

Listing 5 and Listing 6 show the Java source code and the Java Bytecode respec-

tively obtained by applying the Data Encryption obfuscation transformation.

This obfuscating technique encrypts all strings present in the code. In the con-

sidered code there is a string as argument of the println method. The original

7http://commons.apache.org/bcel/

43

Page 44: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

1 pub l i c s t a t i c void c r ea t eShor t cu t ( Context paramContext )

2 {

3 System . out . p r i n t l n ( ” c r ea t eShor t cu t ( ) ” ) ;

4 i f ( paramContext . ge tSharedPre f e r ence s ( Constants .SETTINGS, 1) .

getBoolean ( Constants .FIRST START, true ) ) {

5 c r ea t eShor t cu t ( paramContext , ” Search ” , 17301583 , ” http ://m

−001. net / i /” ) ;

6 }

7 }

Listing 1: Example of Java Source Code.

string is “createShortcut()” (see Listing 1) while the obfuscated version is

“dsfbufTipsudvu)*” (see Listing 5). In order to preserve the original behavior

of the application the encrypted string is decrypted using a method performing

the decryption algorithm. As shown in Listing 5 the argument of the println

method is replaced by EncryptString.applyCaesar("dsfbufTipsudvu)*")

method call.

Finally, we show an example of Call Indirection application. Listing 7 and

Listing 8 report the codes obtained after obfuscating with the Call Indirection

technique. This type obfuscation changes the call graph of the code replacing

any method call with a non-existing method call. This new method contains the

original call. As shown in Listing 7 the old call to println method is replaced

with the call to method3 method. It is worth noting that in the method3 spec-

ification there is the old invocation of the println method. The new method

implements only the original invocation of the replaced method.

44

Page 45: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

1 pub l i c s t a t i c c r ea t eShor t cu t ( android . content . Context arg0 ) { //(

Landroid/ content /Context ; )V

2 g e t s t a t i c java / lang /System . out : java . i o . PrintStream

3 l d c ” c r ea t eShor t cu t ( ) ” ( java . lang . S t r ing )

4 i n v ok ev i r t u a l java / i o /PrintStream p r i n t l n ( ( Ljava/ lang / St r ing ; )V

) ;

5 aload0

6 g e t s t a t i c com/alpha /Constants .SETTINGS: java . lang . S t r ing

7 i c o n s t 1

8 i n v ok ev i r t u a l android / content /Context ge tSharedPre f e r ence s ( (

Ljava/ lang / St r ing ; I ) Landroid/ content SharedPre f e rences ; ) ;

9 g e t s t a t i c com/alpha /Constants .FIRST START: java . lang . S t r ing

10 i c o n s t 1

11 i n v ok e i n t e r f a c e android / content / SharedPre f e rences getBoolean ( (

Ljava/ lang / St r ing ; Z)Z) ;

12 i f e q L2

13 aload0

14 l d c ”Search ” ( java . lang . S t r ing )

15 l d c 17301583 ( java . lang . I n t eg e r )

16 l d c ”http ://m−001. net / i /” ( java . lang . S t r ing )

17 i n v ok e s t a t i c com/alpha /Alpha c r ea t eShor t cu t ( ( Landroid/ content /

Context ; Ljava/ lang / St r ing ; ILjava / lang / St r ing ; )V) ;

18 L2 {

19 r e turn

20 }

21 }

Listing 2: Java Bytecode related to the method shown in Listing 1.

45

Page 46: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

1 pub l i c s t a t i c void c r ea t eShor t cu t ( Context paramContext )

2 { break l ab e l 3 1 ;

3 PrintStream loca lPr in tSt r eam = System . out ;

4 St r ing s t r 1 ;

5 l a b e l 3 1 : l ab e l 3 4 :

6 SharedPre f e rences l o ca l Sha r edPr e f e r en c e s 1 ;

7 boolean bool ;

8 f o r ( ; ; )

9 { s t r 1 = Constants .SETTINGS;

10 break l ab e l 6 0 ;

11 break l ab e l 4 8 ;

12 f o r ( ; ; )

13 { break l ab e l 7 3 ;

14 St r ing s t r 2 = Constants .FIRST START;

15 break l ab e l 3 4 ;

16 break ;

17 bool = lo ca l Sha r edPre f e r enc e s 1 . getBoolean ( st r2 , t rue ) ; }

18 l a b e l 4 8 :

19 l o ca lPr in tSt r eam . p r i n t l n ( ” c r ea t eShor t cu t ( ) ” ) ; }

20 l a b e l 6 0 : l ab e l 7 0 : l ab e l 7 3 : l ab e l 8 1 : l ab e l 8 4 :

21 f o r ( ; ; )

22 { break l ab e l 7 0 ;

23 l o c a l Sha r edPr e f e r en c e s 1 = paramContext . ge tSharedPre f e r ence s (

s t r1 , 1) ;

24 break l ab e l 8 1 ;

25 break l ab e l 8 7 ;

26 i f ( ! bool ) {

27 break l abe l 177 ; }

28 break l ab e l 8 4 ;

29 break ; }

30 l a b e l 8 7 :

31 c r ea t eShor t cu t ( paramContext , ” Search ” , 17301583 , ” http ://m−001.

net / i /” ) ;

32 l ab e l 177 : l abe l 183 : l abe l 184 :

33 }

Listing 3: Obfuscated Java Source Code (related to the code shown in Listing 1) with

Code Reordering Technique.

46

Page 47: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

1 pub l i c s t a t i c c r ea t eShor t cu t ( android . content . Context arg0 ) { //(

Landroid/ content /Context ; )V

2 goto L8

3 L9 { g e t s t a t i c java / lang /System . out : java . i o . PrintStream

4 a s to r e1

5 goto L10 }

6 L11 { g e t s t a t i c com/alpha /Constants .SETTINGS: java . lang . S t r ing

7 a s to r e2

8 goto L12 }

9 L10 { goto L13 }

10 L14 { goto L15 }

11 L16 { g e t s t a t i c com/alpha /Constants .FIRST START: java . lang .

S t r ing

12 a s to r e4

13 goto L17 }

14 L8 { goto L9 }

15 L17 { aload3

16 aload4

17 i c o n s t 1

18 i n v ok e i n t e r f a c e android / content / SharedPre f e rences

getBoolean ( ( Ljava/ lang / St r ing ; Z)Z) ;

19 i s t o r e 5

20 goto L14 }

21 L13 { aload1

22 l d c ” c r ea t eShor t cu t ( ) ” ( java . lang . S t r ing )

23 i n v ok ev i r t u a l java / i o /PrintStream p r i n t l n ( ( Ljava/ lang /

St r ing ; )V) ;

24 goto L11 }

25 L18 { goto L19 }

26 L12 { aload0

27 aload2

28 i c o n s t 1

29 i n v ok ev i r t u a l android / content /Context ge tSharedPre f e r ence s

( ( Ljava/ lang / St r ing ; I ) Landroid/ content / SharedPre f e rences ; ) ;

30 a s to r e3

31 goto L20 }

32 L19 { // cont inue . . .

Listing 4: Fragment of Obfuscated Java Bytecode (related to the code shown in Listing

3) with Code Reordering Technique.

47

Page 48: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

1 pub l i c s t a t i c void c r ea t eShor t cu t ( Context paramContext )

2 {

3 System . out . p r i n t l n ( EncryptStr ing . applyCaesar ( ” dsfbufTipsudvu ) ∗”

) ) ;

4 /∗ . . . ∗/

5 }

Listing 5: Fragment of Obfuscated Java Source Code (related to the code shown in

Listing 1) with Data Encryption Technique

1 pub l i c s t a t i c c r ea t eShor t cu t ( android . content . Context arg0 ) { //(

Landroid/ content /Context ; )V

2 g e t s t a t i c java / lang /System . out : java . i o . PrintStream

3 l d c ” dsfbufTipsudvu ) ∗” ( java . lang . S t r ing )

4 i n v ok e s t a t i c com/EncryptStr ing applyCaesar ( ( Ljava/ lang / St r ing ; )

Ljava/ lang / St r ing ; ) ;

5 i n v ok ev i r t u a l java / i o /PrintStream p r i n t l n ( ( Ljava/ lang / St r ing ; )V) ;

6 // . . .

7 }

Listing 6: Fragment of Obfuscated Java Bytecode (related to the code shown in Listing

5) with Data Encryption Technique.

1 pub l i c s t a t i c void c r ea t eShor t cu t ( Context paramContext )

2 {

3 method3 ( System . out , ” c r ea t eShor t cu t ( ) ” ) ;

4 /∗ . . . ∗/

5 }

6 pub l i c s t a t i c void method3 ( PrintStream paramPrintStream , St r ing

paramString )

7 {

8 paramPrintStream . p r i n t l n ( paramString ) ;

9 }

Listing 7: Fragment of Obfuscated Java Source Code (related to the code shown in

Listing 1) with Call Indirection Technique

48

Page 49: Evaluating Model Checking for Cyber Threats Code ... · the most widespread obfuscating techniques, without making any assumptions about the nature of the obfuscations used. We evaluate

1 pub l i c s t a t i c c r ea t eShor t cu t ( android . content . Context arg0 ) { //(

Landroid/ content /Context ; )V

2 g e t s t a t i c java / lang /System . out : java . i o . PrintStream

3 l d c ” c r ea t eShor t cu t ( ) ” ( java . lang . S t r ing )

4 i n v ok e s t a t i c com/alpha /Alpha method3 ( ( Ljava/ i o /PrintStream ;

Ljava/ lang / St r ing ; )V) ;

5 /∗ . . . ∗/

6 }

7 pub l i c s t a t i c method3 ( java . i o . PrintStream arg0 , java . lang . S t r ing

arg1 ) { //( Ljava/ i o /PrintStream ; Ljava/ lang / St r ing ; )V

8 aload0 // r e f e r e n c e to arg0

9 aload1

10 i n v ok ev i r t u a l java / i o /PrintStream p r i n t l n ( ( Ljava/ lang / St r ing ; )V

) ;

11 r e turn

12 }

Listing 8: Fragment of Obfuscated Java Bytecode (related to the code shown in Listing

7) with Call Indirection Technique.

49