<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="static/style.xsl"?><OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"><responseDate>2026-09-22T11:59:45Z</responseDate><request verb="GetRecord" identifier="oai:ruor.uottawa.ca:10393/39994" metadataPrefix="oai_dc">https://ruor.uottawa.ca/server/oai/request</request><GetRecord><record><header><identifier>oai:ruor.uottawa.ca:10393/39994</identifier><datestamp>2024-02-23T09:18:05Z</datestamp><setSpec>com_10393_242</setSpec><setSpec>col_10393_11105</setSpec></header><metadata><oai_dc:dc xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:doc="http://www.lyncode.com/xoai" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
   <dc:title>Formally Verified Code Obfuscation in the Coq Proof Assistant</dc:title>
   <dc:creator>Lu, Weiyun</dc:creator>
   <dc:contributor>Felty, Amy</dc:contributor>
   <dc:contributor>Scott, Philip</dc:contributor>
   <dc:subject>code obfuscation</dc:subject>
   <dc:subject>formal verification</dc:subject>
   <dc:subject>security</dc:subject>
   <dc:subject>logic</dc:subject>
   <dc:description>Code obfuscation is a software security technique where transformations are applied&#xd;
to source and/or machine code to make them more difficult to analyze and understand&#xd;
to deter reverse-engineering and tampering.  However, in many commercial tools, such&#xd;
as Irdeto&amp;apos;s Cloakware product, it is not clear why the end user should believe that&#xd;
the programs that come out the other end are still the same program&amp;quot;!&#xd;
In this thesis, we apply techniques of formal specification and verification, by&#xd;
using the Coq Proof Assistant and IMP (a simple imperative language within it), to&#xd;
formulate what it means for a program&amp;apos;s semantics to be preserved by an obfuscating&#xd;
transformation, and give formal machine-checked proofs that these properties hold.&#xd;
We describe our work on opaque predicate and control flow flattening transformations.&#xd;
Along the way, we also employ Hoare logic as an alternative to state equivalence,&#xd;
as well as augment the IMP program with Switch statements. We also define a lower-level flowchart language to wrap around IMP for modelling certain flattening&#xd;
transformations, treating blocks of codes as objects in their own right.&#xd;
We then discuss related work in the literature on formal verification of data obfuscation&#xd;
and layout obfuscation transformations in IMP, and conclude by discussing&#xd;
CompCert, a formally verified C compiler in Coq, along with work that has been done&#xd;
on obfuscation there, and muse on the possibility of implementing formal methods in&#xd;
the next generation of real-world obfuscation tools.</dc:description>
   <dc:date>2019-12-20T20:52:28Z</dc:date>
   <dc:date>2019-12-20T20:52:28Z</dc:date>
   <dc:date>2019-12-20</dc:date>
   <dc:type>Thesis</dc:type>
   <dc:identifier>http://hdl.handle.net/10393/39994</dc:identifier>
   <dc:identifier>http://dx.doi.org/10.20381/ruor-24233</dc:identifier>
   <dc:language>en</dc:language>
   <dc:format>application/pdf</dc:format>
   <dc:publisher>Université d&amp;apos;Ottawa / University of Ottawa</dc:publisher>
</oai_dc:dc></metadata></record></GetRecord></OAI-PMH>