<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Practical Reverse Engineering on soffensive blog</title><link>https://soffensive.github.io/categories/practical-reverse-engineering/</link><description>Recent content in Practical Reverse Engineering on soffensive blog</description><generator>Hugo</generator><language>en</language><lastBuildDate>Thu, 07 Dec 2017 10:29:00 -0800</lastBuildDate><atom:link href="https://soffensive.github.io/categories/practical-reverse-engineering/index.xml" rel="self" type="application/rss+xml"/><item><title>Practical Reverse Engineering Exercise Solutions: Page 79 / Exercise 11</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-07-practical-reverse-engineering-exercise-solutions-page-79-exercise-11/</link><pubDate>Thu, 07 Dec 2017 10:29:00 -0800</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-07-practical-reverse-engineering-exercise-solutions-page-79-exercise-11/</guid><description>&lt;p>Exercise 11 on page 79 of the book Practical Reverse Engineering specifies the following ARM disassembly of a function called &lt;code>mystery11&lt;/code> - the last exercise of the ARM chapter:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="err">01:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">B0&lt;/span> &lt;span class="nv">mystery11&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">02:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">B0&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="nv">D&lt;/span> &lt;span class="nv">E9&lt;/span> &lt;span class="nv">F8&lt;/span> &lt;span class="mi">4&lt;/span>&lt;span class="nv">F&lt;/span> &lt;span class="nv">PUSH.W&lt;/span> &lt;span class="err">{&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="err">–&lt;/span>&lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">LR&lt;/span>&lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">03:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">B4&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="nv">D&lt;/span> &lt;span class="nv">F2&lt;/span> &lt;span class="mi">20&lt;/span> &lt;span class="mb">0B&lt;/span> &lt;span class="nv">ADDW&lt;/span> &lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mh">0x20&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">04:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">B8&lt;/span> &lt;span class="nv">B0&lt;/span> &lt;span class="nv">F9&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">A&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="nv">LDRSH.W&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x5A&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">05:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">BC&lt;/span> &lt;span class="mi">07&lt;/span> &lt;span class="mi">46&lt;/span> &lt;span class="nv">MOV&lt;/span> &lt;span class="nv">R7&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">06:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">BE&lt;/span> &lt;span class="mi">90&lt;/span> &lt;span class="mi">46&lt;/span> &lt;span class="nv">MOV&lt;/span> &lt;span class="nv">R8&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">07:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">C0&lt;/span> &lt;span class="mi">00&lt;/span> &lt;span class="nv">EB&lt;/span> &lt;span class="mi">83&lt;/span> &lt;span class="mi">03&lt;/span> &lt;span class="nv">ADD.W&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">LSL#2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">08:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">C4&lt;/span> &lt;span class="nv">D3&lt;/span> &lt;span class="nv">F8&lt;/span> &lt;span class="mi">84&lt;/span> &lt;span class="nv">A0&lt;/span> &lt;span class="nv">LDR.W&lt;/span> &lt;span class="nv">R10&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x84&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">09:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">C8&lt;/span> &lt;span class="mi">7&lt;/span>&lt;span class="nv">B&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="nv">F&lt;/span> &lt;span class="nv">LDRH&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R7&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x3A&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">10:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">CA&lt;/span> &lt;span class="mi">89&lt;/span> &lt;span class="mi">46&lt;/span> &lt;span class="nv">MOV&lt;/span> &lt;span class="nv">R9&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">11:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">CC&lt;/span> &lt;span class="nv">CB&lt;/span> &lt;span class="nv">B9&lt;/span> &lt;span class="nv">CBNZ&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">loc_1018602&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">12:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">CE&lt;/span> &lt;span class="nv">B0&lt;/span> &lt;span class="nv">F9&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">A&lt;/span> &lt;span class="mi">40&lt;/span> &lt;span class="nv">LDRSH.W&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x5A&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">13:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">D2&lt;/span> &lt;span class="mi">17&lt;/span> &lt;span class="nv">F1&lt;/span> &lt;span class="mi">20&lt;/span> &lt;span class="mi">02&lt;/span> &lt;span class="nv">ADDS.W&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R7&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mh">0x20&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">14:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">D6&lt;/span> &lt;span class="mi">00&lt;/span> &lt;span class="nv">EB&lt;/span> &lt;span class="mi">44&lt;/span> &lt;span class="mi">03&lt;/span> &lt;span class="nv">ADD.W&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">LSL#1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">15:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">DA&lt;/span> &lt;span class="nv">B3&lt;/span> &lt;span class="nv">F8&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">C&lt;/span> &lt;span class="mi">50&lt;/span> &lt;span class="nv">LDRH.W&lt;/span> &lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x5C&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">16:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">DE&lt;/span> &lt;span class="mi">00&lt;/span> &lt;span class="nv">EB&lt;/span> &lt;span class="mi">84&lt;/span> &lt;span class="mi">03&lt;/span> &lt;span class="nv">ADD.W&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">LSL#2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">17:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">E2&lt;/span> &lt;span class="nv">D3&lt;/span> &lt;span class="nv">F8&lt;/span> &lt;span class="mi">84&lt;/span> &lt;span class="mi">00&lt;/span> &lt;span class="nv">LDR.W&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x84&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">18:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">E6&lt;/span> &lt;span class="mi">83&lt;/span> &lt;span class="mi">89&lt;/span> &lt;span class="nv">LDRH&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0xC&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">19:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">E8&lt;/span> &lt;span class="mi">06&lt;/span> &lt;span class="mi">6&lt;/span>&lt;span class="nv">C&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x40&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">20:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">EA&lt;/span> &lt;span class="mi">03&lt;/span> &lt;span class="nv">EB&lt;/span> &lt;span class="mi">45&lt;/span> &lt;span class="mi">03&lt;/span> &lt;span class="nv">ADD.W&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">LSL#1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">21:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">EE&lt;/span> &lt;span class="mi">9&lt;/span>&lt;span class="nv">B&lt;/span> &lt;span class="mi">19&lt;/span> &lt;span class="nv">ADDS&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">22:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">F0&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="nv">C&lt;/span> &lt;span class="mi">78&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">23:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">F2&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">B&lt;/span> &lt;span class="mi">78&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">24:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">F4&lt;/span> &lt;span class="mi">43&lt;/span> &lt;span class="nv">EA&lt;/span> &lt;span class="mi">04&lt;/span> &lt;span class="mi">24&lt;/span> &lt;span class="nv">ORR.W&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">LSL#8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">25:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">F8&lt;/span> &lt;span class="mi">43&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="nv">A&lt;/span> &lt;span class="nv">LDRH&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x12&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">26:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">FA&lt;/span> &lt;span class="mi">23&lt;/span> &lt;span class="mi">40&lt;/span> &lt;span class="nv">ANDS&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">27:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">FC&lt;/span> &lt;span class="mi">99&lt;/span> &lt;span class="mi">19&lt;/span> &lt;span class="nv">ADDS&lt;/span> &lt;span class="nv">R1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">28:&lt;/span> &lt;span class="err">010185&lt;/span>&lt;span class="nf">FE&lt;/span> &lt;span class="nv">FD&lt;/span> &lt;span class="nv">F7&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="nv">D&lt;/span> &lt;span class="nv">FF&lt;/span> &lt;span class="nb">BL&lt;/span> &lt;span class="nv">sub_101651C&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">29:&lt;/span> &lt;span class="err">01018602&lt;/span> &lt;span class="nf">loc_1018602&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">30:&lt;/span> &lt;span class="err">01018602&lt;/span> &lt;span class="nf">BA&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="nv">E&lt;/span> &lt;span class="nv">LDRH&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R7&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x34&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">31:&lt;/span> &lt;span class="err">01018604&lt;/span> &lt;span class="nf">BB&lt;/span> &lt;span class="mi">6&lt;/span>&lt;span class="nv">A&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R7&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x28&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">32:&lt;/span> &lt;span class="err">01018606&lt;/span> &lt;span class="nf">D0&lt;/span> &lt;span class="mi">18&lt;/span> &lt;span class="nv">ADDS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">33:&lt;/span> &lt;span class="err">01018608&lt;/span> &lt;span class="err">9&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="nv">F8&lt;/span> &lt;span class="mi">02&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="nv">LDRB.W&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R10&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">34:&lt;/span> &lt;span class="err">0101860&lt;/span>&lt;span class="nf">C&lt;/span> &lt;span class="mb">0B&lt;/span> &lt;span class="nv">B1&lt;/span> &lt;span class="nv">CBZ&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">loc_1018612&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">35:&lt;/span> &lt;span class="err">0101860&lt;/span>&lt;span class="nf">E&lt;/span> &lt;span class="mi">00&lt;/span> &lt;span class="mi">22&lt;/span> &lt;span class="nv">MOVS&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">36:&lt;/span> &lt;span class="err">01018610&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="nf">E0&lt;/span> &lt;span class="nv">B&lt;/span> &lt;span class="nv">loc_1018614&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">37:&lt;/span> &lt;span class="err">01018612&lt;/span> &lt;span class="nf">loc_1018612&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">38:&lt;/span> &lt;span class="err">01018612&lt;/span> &lt;span class="err">3&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="mi">6&lt;/span>&lt;span class="nv">A&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R7&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x20&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">39:&lt;/span> &lt;span class="err">01018614&lt;/span> &lt;span class="nf">loc_1018614&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">40:&lt;/span> &lt;span class="err">01018614&lt;/span> &lt;span class="nf">FB&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="nv">E&lt;/span> &lt;span class="nv">LDRH&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R7&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x36&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">41:&lt;/span> &lt;span class="err">01018616&lt;/span> &lt;span class="nf">B8&lt;/span> &lt;span class="nv">F1&lt;/span> &lt;span class="mi">00&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="nv">F&lt;/span> &lt;span class="nv">CMP.W&lt;/span> &lt;span class="nv">R8&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">42:&lt;/span> &lt;span class="err">0101861&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="mi">01&lt;/span> &lt;span class="nv">D0&lt;/span> &lt;span class="nv">BEQ&lt;/span> &lt;span class="nv">loc_1018620&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">43:&lt;/span> &lt;span class="err">0101861&lt;/span>&lt;span class="nf">C&lt;/span> &lt;span class="mi">80&lt;/span> &lt;span class="mi">18&lt;/span> &lt;span class="nv">ADDS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">44:&lt;/span> &lt;span class="err">0101861&lt;/span>&lt;span class="nf">E&lt;/span> &lt;span class="mi">9&lt;/span>&lt;span class="nv">B&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="nv">A&lt;/span> &lt;span class="nv">SUBS&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">45:&lt;/span> &lt;span class="err">01018620&lt;/span> &lt;span class="nf">loc_1018620&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">46:&lt;/span> &lt;span class="err">01018620&lt;/span> &lt;span class="nf">C9&lt;/span> &lt;span class="nv">F8&lt;/span> &lt;span class="mi">00&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="nv">STR.W&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R9&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">47:&lt;/span> &lt;span class="err">01018624&lt;/span> &lt;span class="nf">BD&lt;/span> &lt;span class="nv">E8&lt;/span> &lt;span class="nv">F8&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="nv">F&lt;/span> &lt;span class="nv">POP.W&lt;/span> &lt;span class="err">{&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="err">–&lt;/span>&lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">PC&lt;/span>&lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">48:&lt;/span> &lt;span class="err">01018624&lt;/span> &lt;span class="c1">; End of function mystery11&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>According to the exercise description, the called subroutine &lt;code>sub_101651C&lt;/code> in line 28 takes three arguments and does not return anything. Thus, we know the registers &lt;code>R0&lt;/code>, &lt;code>R1&lt;/code> and &lt;code>R2&lt;/code> are prepared and passed to the function.&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 79 / Exercise 10</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-06-practical-reverse-engineering-exercise-solutions-page-79-exercise-10/</link><pubDate>Wed, 06 Dec 2017 06:19:00 -0800</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-06-practical-reverse-engineering-exercise-solutions-page-79-exercise-10/</guid><description>&lt;p>Exercise 10 on page 79 of the book Practical Reverse Engineering specifies the following ARM disassembly of a function called &lt;code>mystery10&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;span class="lnt">53
&lt;/span>&lt;span class="lnt">54
&lt;/span>&lt;span class="lnt">55
&lt;/span>&lt;span class="lnt">56
&lt;/span>&lt;span class="lnt">57
&lt;/span>&lt;span class="lnt">58
&lt;/span>&lt;span class="lnt">59
&lt;/span>&lt;span class="lnt">60
&lt;/span>&lt;span class="lnt">61
&lt;/span>&lt;span class="lnt">62
&lt;/span>&lt;span class="lnt">63
&lt;/span>&lt;span class="lnt">64
&lt;/span>&lt;span class="lnt">65
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="err">01:&lt;/span> &lt;span class="nf">mystery10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">02:&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">E9&lt;/span> &lt;span class="mi">70&lt;/span> &lt;span class="mi">48&lt;/span> &lt;span class="nv">PUSH.W&lt;/span> &lt;span class="err">{&lt;/span>&lt;span class="nv">R4&lt;/span>&lt;span class="err">–&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">LR&lt;/span>&lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">03:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">F2&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="nv">C&lt;/span> &lt;span class="mb">0B&lt;/span> &lt;span class="nv">ADDW&lt;/span> &lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mh">0xC&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">04:&lt;/span> &lt;span class="err">37&lt;/span> &lt;span class="nf">F0&lt;/span> &lt;span class="nv">CC&lt;/span> &lt;span class="nv">F9&lt;/span> &lt;span class="nb">BL&lt;/span> &lt;span class="nv">__security_push_cookie&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">05:&lt;/span> &lt;span class="err">84&lt;/span> &lt;span class="nf">B0&lt;/span> &lt;span class="nv">SUB&lt;/span> &lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mh">0x10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">06:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="mi">46&lt;/span> &lt;span class="nv">MOV&lt;/span> &lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">07:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">24&lt;/span> &lt;span class="nf">MOVS&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">08:&lt;/span> &lt;span class="err">10&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mh">0x10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">09:&lt;/span> &lt;span class="err">16&lt;/span> &lt;span class="err">46&lt;/span> &lt;span class="nf">MOV&lt;/span> &lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">10:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">C&lt;/span> &lt;span class="nv">D3&lt;/span> &lt;span class="nv">BCC&lt;/span> &lt;span class="nv">loc_1010786&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">11:&lt;/span> &lt;span class="err">1&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="mi">4&lt;/span>&lt;span class="nv">B&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">=&lt;/span>&lt;span class="nv">__imp_GetSystemTime&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">12:&lt;/span> &lt;span class="err">68&lt;/span> &lt;span class="err">46&lt;/span> &lt;span class="nf">MOV&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">SP&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">13:&lt;/span> &lt;span class="err">1&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">68&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">14:&lt;/span> &lt;span class="err">98&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BLX&lt;/span> &lt;span class="nv">R3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">15:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">9&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x1C&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="nv">var_1C&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">16:&lt;/span> &lt;span class="err">10&lt;/span> &lt;span class="err">24&lt;/span> &lt;span class="nf">MOVS&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mh">0x10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">17:&lt;/span> &lt;span class="err">33&lt;/span> &lt;span class="err">60&lt;/span> &lt;span class="nf">STR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">18:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">9&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x1C&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="nv">var_18&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">19:&lt;/span> &lt;span class="err">73&lt;/span> &lt;span class="err">60&lt;/span> &lt;span class="nf">STR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">20:&lt;/span> &lt;span class="err">02&lt;/span> &lt;span class="err">9&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x1C&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="nv">var_14&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">21:&lt;/span> &lt;span class="nf">B3&lt;/span> &lt;span class="mi">60&lt;/span> &lt;span class="nv">STR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">22:&lt;/span> &lt;span class="err">03&lt;/span> &lt;span class="err">9&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x1C&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="nv">var_10&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">23:&lt;/span> &lt;span class="nf">F3&lt;/span> &lt;span class="mi">60&lt;/span> &lt;span class="nv">STR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0xC&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">24:&lt;/span> &lt;span class="nf">loc_1010786&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">25:&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mb">1B&lt;/span> &lt;span class="nv">SUBS&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">26:&lt;/span> &lt;span class="err">04&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">27:&lt;/span> &lt;span class="err">04&lt;/span> &lt;span class="nf">D3&lt;/span> &lt;span class="nv">BCC&lt;/span> &lt;span class="nv">loc_1010796&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">28:&lt;/span> &lt;span class="err">11&lt;/span> &lt;span class="err">4&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">=&lt;/span>&lt;span class="nv">__imp_GetCurrentProcessId&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">29:&lt;/span> &lt;span class="err">1&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">68&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">30:&lt;/span> &lt;span class="err">98&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BLX&lt;/span> &lt;span class="nv">R3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">31:&lt;/span> &lt;span class="err">30&lt;/span> &lt;span class="err">51&lt;/span> &lt;span class="nf">STR&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R4&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">32:&lt;/span> &lt;span class="err">04&lt;/span> &lt;span class="err">34&lt;/span> &lt;span class="nf">ADDS&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">33:&lt;/span> &lt;span class="nf">loc_1010796&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">34:&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mb">1B&lt;/span> &lt;span class="nv">SUBS&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">35:&lt;/span> &lt;span class="err">04&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">36:&lt;/span> &lt;span class="err">04&lt;/span> &lt;span class="nf">D3&lt;/span> &lt;span class="nv">BCC&lt;/span> &lt;span class="nv">loc_10107A6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">37:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">C&lt;/span> &lt;span class="mi">4&lt;/span>&lt;span class="nv">B&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">=&lt;/span>&lt;span class="nv">__imp_GetTickCount&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">38:&lt;/span> &lt;span class="err">1&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">68&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">39:&lt;/span> &lt;span class="err">98&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BLX&lt;/span> &lt;span class="nv">R3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">40:&lt;/span> &lt;span class="err">30&lt;/span> &lt;span class="err">51&lt;/span> &lt;span class="nf">STR&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R4&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">41:&lt;/span> &lt;span class="err">04&lt;/span> &lt;span class="err">34&lt;/span> &lt;span class="nf">ADDS&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">42:&lt;/span> &lt;span class="nf">loc_10107A6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">43:&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mb">1B&lt;/span> &lt;span class="nv">SUBS&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">44:&lt;/span> &lt;span class="err">08&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">45:&lt;/span> &lt;span class="err">09&lt;/span> &lt;span class="nf">D3&lt;/span> &lt;span class="nv">BCC&lt;/span> &lt;span class="nv">loc_10107C0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">46:&lt;/span> &lt;span class="err">07&lt;/span> &lt;span class="err">4&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">=&lt;/span>&lt;span class="nv">__imp_QueryPerformanceCounter&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">47:&lt;/span> &lt;span class="err">68&lt;/span> &lt;span class="err">46&lt;/span> &lt;span class="nf">MOV&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">SP&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">48:&lt;/span> &lt;span class="err">1&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">68&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">49:&lt;/span> &lt;span class="err">98&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BLX&lt;/span> &lt;span class="nv">R3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">50:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">9&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x1C&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="nv">var_1C&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">51:&lt;/span> &lt;span class="err">32&lt;/span> &lt;span class="err">19&lt;/span> &lt;span class="nf">ADDS&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">52:&lt;/span> &lt;span class="err">33&lt;/span> &lt;span class="err">51&lt;/span> &lt;span class="nf">STR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R4&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">53:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">9&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x1C&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="nv">var_18&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">54:&lt;/span> &lt;span class="err">08&lt;/span> &lt;span class="err">34&lt;/span> &lt;span class="nf">ADDS&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">55:&lt;/span> &lt;span class="err">53&lt;/span> &lt;span class="err">60&lt;/span> &lt;span class="nf">STR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">56:&lt;/span> &lt;span class="nf">loc_10107C0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">57:&lt;/span> &lt;span class="err">20&lt;/span> &lt;span class="err">46&lt;/span> &lt;span class="nf">MOV&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">58:&lt;/span> &lt;span class="err">04&lt;/span> &lt;span class="nf">B0&lt;/span> &lt;span class="nv">ADD&lt;/span> &lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mh">0x10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">59:&lt;/span> &lt;span class="err">37&lt;/span> &lt;span class="nf">F0&lt;/span> &lt;span class="nv">A4&lt;/span> &lt;span class="nv">F9&lt;/span> &lt;span class="nb">BL&lt;/span> &lt;span class="nv">__security_pop_cookie&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">60:&lt;/span> &lt;span class="nf">BD&lt;/span> &lt;span class="nv">E8&lt;/span> &lt;span class="mi">70&lt;/span> &lt;span class="mi">88&lt;/span> &lt;span class="nv">POP.W&lt;/span> &lt;span class="err">{&lt;/span>&lt;span class="nv">R4&lt;/span>&lt;span class="err">–&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">PC&lt;/span>&lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">61:&lt;/span> &lt;span class="c1">; End of function mystery10&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Although the function looks complicated at first, we notice it does not contain any kind of loops and only executes sequentially with a couple of conditionals.&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 79 / Exercise 9</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-05-practical-reverse-engineering-exercise-solutions-page-79-exercise-9/</link><pubDate>Tue, 05 Dec 2017 06:47:00 -0800</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-05-practical-reverse-engineering-exercise-solutions-page-79-exercise-9/</guid><description>&lt;p>Exercise 9 on page 79 of the book Practical Reverse Engineering specifies the following ARM disassembly of a function called &lt;code>mystery9&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="err">01:&lt;/span> &lt;span class="nf">mystery9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">02:&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">E9&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="mi">48&lt;/span> &lt;span class="nv">PUSH.W&lt;/span> &lt;span class="err">{&lt;/span>&lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">LR&lt;/span>&lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">03:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">F2&lt;/span> &lt;span class="mi">08&lt;/span> &lt;span class="mb">0B&lt;/span> &lt;span class="nv">ADDW&lt;/span> &lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">04:&lt;/span> &lt;span class="err">09&lt;/span> &lt;span class="err">4&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">=&lt;/span>&lt;span class="kt">byte&lt;/span>&lt;span class="nv">Array&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">05:&lt;/span> &lt;span class="err">06&lt;/span> &lt;span class="nf">E0&lt;/span> &lt;span class="nv">B&lt;/span> &lt;span class="nv">loc_100E312&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">06:&lt;/span> &lt;span class="nf">loc_100E304&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">07:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">78&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R1&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">08:&lt;/span> &lt;span class="err">5&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">D&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R5&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">09:&lt;/span> &lt;span class="err">63&lt;/span> &lt;span class="err">5&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R5&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">10:&lt;/span> &lt;span class="err">93&lt;/span> &lt;span class="err">42&lt;/span> &lt;span class="nf">CMP&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">11:&lt;/span> &lt;span class="err">04&lt;/span> &lt;span class="nf">D1&lt;/span> &lt;span class="nv">BNE&lt;/span> &lt;span class="nv">loc_100E318&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">12:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">30&lt;/span> &lt;span class="nf">ADDS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">13:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">31&lt;/span> &lt;span class="nf">ADDS&lt;/span> &lt;span class="nv">R1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">14:&lt;/span> &lt;span class="nf">loc_100E312&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">15:&lt;/span> &lt;span class="err">04&lt;/span> &lt;span class="err">78&lt;/span> &lt;span class="nf">LDRB&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">16:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">C&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">17:&lt;/span> &lt;span class="nf">F5&lt;/span> &lt;span class="nv">D1&lt;/span> &lt;span class="nv">BNE&lt;/span> &lt;span class="nv">loc_100E304&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">18:&lt;/span> &lt;span class="nf">loc_100E318&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">19:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">78&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R1&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">20:&lt;/span> &lt;span class="err">5&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">D&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R5&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">21:&lt;/span> &lt;span class="err">03&lt;/span> &lt;span class="err">78&lt;/span> &lt;span class="nf">LDRB&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">22:&lt;/span> &lt;span class="err">5&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">D&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R5&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">23:&lt;/span> &lt;span class="err">98&lt;/span> &lt;span class="err">1&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="nv">SUBS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">24:&lt;/span> &lt;span class="nf">BD&lt;/span> &lt;span class="nv">E8&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="mi">88&lt;/span> &lt;span class="nv">POP.W&lt;/span> &lt;span class="err">{&lt;/span>&lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">PC&lt;/span>&lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">25:&lt;/span> &lt;span class="c1">; End of function mystery9&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>First of all, &lt;code>mystery9&lt;/code> has a striking similarity to the previously decompiled function &lt;code>mystery8&lt;/code>. Its disassembly uses Thumb mode, as we can see for instance from the 16 bit instruction width.&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 79 / Exercise 8</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-05-practical-reverse-engineering-exercise-solutions-page-79-exercise-8/</link><pubDate>Tue, 05 Dec 2017 02:30:00 -0800</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-05-practical-reverse-engineering-exercise-solutions-page-79-exercise-8/</guid><description>&lt;p>Exercise 8 on page 79 of the book Practical Reverse Engineering specifies the following ARM disassembly of a function called &lt;code>mystery8&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="err">01:&lt;/span> &lt;span class="nf">mystery8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">02:&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">E9&lt;/span> &lt;span class="mi">78&lt;/span> &lt;span class="mi">48&lt;/span> &lt;span class="nv">PUSH.W&lt;/span> &lt;span class="err">{&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="err">–&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">LR&lt;/span>&lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">03:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">F2&lt;/span> &lt;span class="mi">10&lt;/span> &lt;span class="mb">0B&lt;/span> &lt;span class="nv">ADDW&lt;/span> &lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mh">0x10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">04:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">C&lt;/span> &lt;span class="mi">4&lt;/span>&lt;span class="nv">E&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">=&lt;/span>&lt;span class="kt">byte&lt;/span>&lt;span class="nv">Array&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">05:&lt;/span> &lt;span class="err">09&lt;/span> &lt;span class="nf">E0&lt;/span> &lt;span class="nv">B&lt;/span> &lt;span class="nv">loc_100E34C&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">06:&lt;/span> &lt;span class="nf">loc_100E338&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">07:&lt;/span> &lt;span class="err">05&lt;/span> &lt;span class="err">78&lt;/span> &lt;span class="nf">LDRB&lt;/span> &lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">08:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">3&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="nv">SUBS&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">09:&lt;/span> &lt;span class="err">4&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">B1&lt;/span> &lt;span class="nv">CBZ&lt;/span> &lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">loc_100E352&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">10:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">78&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R1&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">11:&lt;/span> &lt;span class="err">9&lt;/span>&lt;span class="nf">C&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">D&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">12:&lt;/span> &lt;span class="nf">AB&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">D&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R5&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">13:&lt;/span> &lt;span class="nf">A3&lt;/span> &lt;span class="mi">42&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">14:&lt;/span> &lt;span class="err">04&lt;/span> &lt;span class="nf">D1&lt;/span> &lt;span class="nv">BNE&lt;/span> &lt;span class="nv">loc_100E352&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">15:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">30&lt;/span> &lt;span class="nf">ADDS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">16:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">31&lt;/span> &lt;span class="nf">ADDS&lt;/span> &lt;span class="nv">R1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">17:&lt;/span> &lt;span class="nf">loc_100E34C&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">18:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">19:&lt;/span> &lt;span class="nf">F3&lt;/span> &lt;span class="nv">DC&lt;/span> &lt;span class="nv">BGT&lt;/span> &lt;span class="nv">loc_100E338&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">20:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">3&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="nv">SUBS&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">21:&lt;/span> &lt;span class="nf">loc_100E352&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">22:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">23:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="nf">DA&lt;/span> &lt;span class="nv">BGE&lt;/span> &lt;span class="nv">loc_100E35A&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">24:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">20&lt;/span> &lt;span class="nf">MOVS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">25:&lt;/span> &lt;span class="err">04&lt;/span> &lt;span class="nf">E0&lt;/span> &lt;span class="nv">B&lt;/span> &lt;span class="nv">locret_100E364&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">26:&lt;/span> &lt;span class="nf">loc_100E35A&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">27:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">78&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R1&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">28:&lt;/span> &lt;span class="err">9&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">D&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">29:&lt;/span> &lt;span class="err">03&lt;/span> &lt;span class="err">78&lt;/span> &lt;span class="nf">LDRB&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">30:&lt;/span> &lt;span class="err">9&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">D&lt;/span> &lt;span class="nv">LDRB&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">31:&lt;/span> &lt;span class="err">98&lt;/span> &lt;span class="err">1&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="nv">SUBS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">32:&lt;/span> &lt;span class="nf">locret_100E364&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">33:&lt;/span> &lt;span class="nf">BD&lt;/span> &lt;span class="nv">E8&lt;/span> &lt;span class="mi">78&lt;/span> &lt;span class="mi">88&lt;/span> &lt;span class="nv">POP.W&lt;/span> &lt;span class="err">{&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="err">–&lt;/span>&lt;span class="nv">R6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">PC&lt;/span>&lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">34:&lt;/span> &lt;span class="c1">; End of function mystery8&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>The function was compiled in Thumb mode, as we can see from the presence of 16 bit instructions, &lt;code>PUSH&lt;/code> and &lt;code>POP&lt;/code> instructions and Thumb-specific instructions, e.g. &lt;code>CBZ&lt;/code> and instructions with the &lt;code>.W&lt;/code> suffix.&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 79 / Exercise 7</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-04-practical-reverse-engineering-exercise-solutions-page-79-exercise-7/</link><pubDate>Mon, 04 Dec 2017 06:14:00 -0800</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-04-practical-reverse-engineering-exercise-solutions-page-79-exercise-7/</guid><description>&lt;p>Exercise 7 on page 79 of the book Practical Reverse Engineering specifies the following ARM disassembly of a function called &lt;code>mystery7&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="err">01:&lt;/span> &lt;span class="nf">mystery7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">02:&lt;/span> &lt;span class="err">02&lt;/span> &lt;span class="err">46&lt;/span> &lt;span class="nf">MOV&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">03:&lt;/span> &lt;span class="err">08&lt;/span> &lt;span class="nf">B9&lt;/span> &lt;span class="nv">CBNZ&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">loc_100E1D8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">04:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">20&lt;/span> &lt;span class="nf">MOVS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">05:&lt;/span> &lt;span class="err">70&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BX&lt;/span> &lt;span class="nv">LR&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">06:&lt;/span> &lt;span class="nf">loc_100E1D8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">07:&lt;/span> &lt;span class="err">90&lt;/span> &lt;span class="nf">F9&lt;/span> &lt;span class="mi">00&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="nv">LDRSB.W&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">08:&lt;/span> &lt;span class="err">02&lt;/span> &lt;span class="nf">E0&lt;/span> &lt;span class="nv">B&lt;/span> &lt;span class="nv">loc_100E1E4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">09:&lt;/span> &lt;span class="nf">loc_100E1DE&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">10:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">32&lt;/span> &lt;span class="nf">ADDS&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">11:&lt;/span> &lt;span class="err">92&lt;/span> &lt;span class="nf">F9&lt;/span> &lt;span class="mi">00&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="nv">LDRSB.W&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R2&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">12:&lt;/span> &lt;span class="nf">loc_100E1E4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">13:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">14:&lt;/span> &lt;span class="nf">FA&lt;/span> &lt;span class="nv">D1&lt;/span> &lt;span class="nv">BNE&lt;/span> &lt;span class="nv">loc_100E1DE&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">15:&lt;/span> &lt;span class="err">10&lt;/span> &lt;span class="err">1&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="nv">SUBS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">16:&lt;/span> &lt;span class="err">6&lt;/span>&lt;span class="nf">F&lt;/span> &lt;span class="nv">F3&lt;/span> &lt;span class="mi">9&lt;/span>&lt;span class="nv">F&lt;/span> &lt;span class="mi">70&lt;/span> &lt;span class="nv">BFC.W&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mh">0x1E&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">17:&lt;/span> &lt;span class="err">70&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BX&lt;/span> &lt;span class="nv">LR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">18:&lt;/span> &lt;span class="c1">; End of function mystery7&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Again, the function provided is executed in Thumb mode, due to several 16 bit instructions and instructions specific to Thumb mode such as &lt;code>CBNZ&lt;/code> and the &lt;code>.W&lt;/code> suffix such as in line 7, 11 and 16.&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 79 / Exercise 6</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-04-practical-reverse-engineering-exercise-solutions-page-79-exercise-6/</link><pubDate>Mon, 04 Dec 2017 03:17:00 -0800</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-04-practical-reverse-engineering-exercise-solutions-page-79-exercise-6/</guid><description>&lt;p>Exercise 6 on page 79 of the book Practical Reverse Engineering specifies the following ARM disassembly of a function called &lt;code>mystery6&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="err">01:&lt;/span> &lt;span class="nf">mystery6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">02:&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">E9&lt;/span> &lt;span class="mi">18&lt;/span> &lt;span class="mi">48&lt;/span> &lt;span class="nv">PUSH.W&lt;/span> &lt;span class="err">{&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">LR&lt;/span>&lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">03:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">F2&lt;/span> &lt;span class="mi">08&lt;/span> &lt;span class="mb">0B&lt;/span> &lt;span class="nv">ADDW&lt;/span> &lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">SP&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">04:&lt;/span> &lt;span class="err">04&lt;/span> &lt;span class="err">68&lt;/span> &lt;span class="nf">LDR&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">05:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">22&lt;/span> &lt;span class="nf">MOVS&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">06:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">C&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">07:&lt;/span> &lt;span class="err">06&lt;/span> &lt;span class="kd">DD&lt;/span> &lt;span class="nb">BL&lt;/span>&lt;span class="nv">E&lt;/span> &lt;span class="nv">loc_103B3B6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">08:&lt;/span> &lt;span class="nf">loc_103B3A8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">09:&lt;/span> &lt;span class="err">50&lt;/span> &lt;span class="nf">F8&lt;/span> &lt;span class="mi">04&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="nv">F&lt;/span> &lt;span class="nv">LDR.W&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="err">!&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">10:&lt;/span> &lt;span class="err">8&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">42&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">11:&lt;/span> &lt;span class="err">06&lt;/span> &lt;span class="nf">D0&lt;/span> &lt;span class="nv">BEQ&lt;/span> &lt;span class="nv">loc_103B3BE&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">12:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">32&lt;/span> &lt;span class="nf">ADDS&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">13:&lt;/span> &lt;span class="nf">A2&lt;/span> &lt;span class="mi">42&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">14:&lt;/span> &lt;span class="nf">F8&lt;/span> &lt;span class="nv">DB&lt;/span> &lt;span class="nb">BL&lt;/span>&lt;span class="nv">T&lt;/span> &lt;span class="nv">loc_103B3A8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">15:&lt;/span> &lt;span class="nf">loc_103B3B6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">16:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">20&lt;/span> &lt;span class="nf">MOVS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">17:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">21&lt;/span> &lt;span class="nf">MOVS&lt;/span> &lt;span class="nv">R1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">18:&lt;/span> &lt;span class="nf">locret_103B3BA&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">19:&lt;/span> &lt;span class="nf">BD&lt;/span> &lt;span class="nv">E8&lt;/span> &lt;span class="mi">18&lt;/span> &lt;span class="mi">88&lt;/span> &lt;span class="nv">POP.W&lt;/span> &lt;span class="err">{&lt;/span>&lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R4&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">R11&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nv">PC&lt;/span>&lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">20:&lt;/span> &lt;span class="nf">loc_103B3BE&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">21:&lt;/span> &lt;span class="nf">B2&lt;/span> &lt;span class="nv">F1&lt;/span> &lt;span class="mi">20&lt;/span> &lt;span class="mi">03&lt;/span> &lt;span class="nv">SUBS.W&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mh">0X20&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">22:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">21&lt;/span> &lt;span class="nf">MOVS&lt;/span> &lt;span class="nv">R1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">23:&lt;/span> &lt;span class="err">99&lt;/span> &lt;span class="err">40&lt;/span> &lt;span class="nf">LSLS&lt;/span> &lt;span class="nv">R1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">24:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">23&lt;/span> &lt;span class="nf">MOVS&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">25:&lt;/span> &lt;span class="err">13&lt;/span> &lt;span class="nf">FA&lt;/span> &lt;span class="mi">02&lt;/span> &lt;span class="nv">F0&lt;/span> &lt;span class="nv">LSLS.W&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">26:&lt;/span> &lt;span class="nf">F5&lt;/span> &lt;span class="nv">E7&lt;/span> &lt;span class="nv">B&lt;/span> &lt;span class="nv">locret_103B3BA&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">27:&lt;/span> &lt;span class="c1">; End of function mystery6&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Due to the presence of 16 bit instructions, instructions having the &lt;code>.W&lt;/code> suffix and function prologue and epilogue with &lt;code>PUSH&lt;/code> and &lt;code>POP&lt;/code> respectively, we are dealing with code in Thumb state.&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 79 / Exercise 5</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-03-practical-reverse-engineering-exercise-solutions-page-79-exercise-5/</link><pubDate>Sun, 03 Dec 2017 00:01:00 -0800</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-03-practical-reverse-engineering-exercise-solutions-page-79-exercise-5/</guid><description>&lt;p>Exercise 5 on page 79 of the book Practical Reverse Engineering specifies the following ARM disassembly of a function called &lt;code>mystery5&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="err">01:&lt;/span> &lt;span class="nf">mystery5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">02:&lt;/span> &lt;span class="err">03&lt;/span> &lt;span class="err">46&lt;/span> &lt;span class="nf">MOV&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">R0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">03:&lt;/span> &lt;span class="err">06&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">04:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">D&lt;/span> &lt;span class="nv">D0&lt;/span> &lt;span class="nv">BEQ&lt;/span> &lt;span class="nv">loc_1032596&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">05:&lt;/span> &lt;span class="err">07&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">06:&lt;/span> &lt;span class="err">09&lt;/span> &lt;span class="nf">D0&lt;/span> &lt;span class="nv">BEQ&lt;/span> &lt;span class="nv">loc_1032592&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">07:&lt;/span> &lt;span class="err">08&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">08:&lt;/span> &lt;span class="err">05&lt;/span> &lt;span class="nf">D0&lt;/span> &lt;span class="nv">BEQ&lt;/span> &lt;span class="nv">loc_103258E&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">09:&lt;/span> &lt;span class="err">09&lt;/span> &lt;span class="err">2&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="nv">CMP&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">10:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="nf">D0&lt;/span> &lt;span class="nv">BEQ&lt;/span> &lt;span class="nv">loc_103258A&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">11:&lt;/span> &lt;span class="err">09&lt;/span> &lt;span class="err">48&lt;/span> &lt;span class="nf">LDR&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">=&lt;/span>&lt;span class="nv">aA&lt;/span> &lt;span class="c1">; &amp;#34;A&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">12:&lt;/span> &lt;span class="err">70&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BX&lt;/span> &lt;span class="nv">LR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">13:&lt;/span> &lt;span class="nf">loc_103258A&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">14:&lt;/span> &lt;span class="err">07&lt;/span> &lt;span class="err">48&lt;/span> &lt;span class="nf">LDR&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">=&lt;/span>&lt;span class="nv">aB&lt;/span> &lt;span class="c1">; &amp;#34;B&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">15:&lt;/span> &lt;span class="err">70&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BX&lt;/span> &lt;span class="nv">LR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">16:&lt;/span> &lt;span class="nf">loc_103258E&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">17:&lt;/span> &lt;span class="err">05&lt;/span> &lt;span class="err">48&lt;/span> &lt;span class="nf">LDR&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">=&lt;/span>&lt;span class="nv">ac&lt;/span> &lt;span class="c1">; &amp;#34;C&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">18:&lt;/span> &lt;span class="err">70&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BX&lt;/span> &lt;span class="nv">LR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">19:&lt;/span> &lt;span class="nf">loc_1032592&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">20:&lt;/span> &lt;span class="err">03&lt;/span> &lt;span class="err">48&lt;/span> &lt;span class="nf">LDR&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">=&lt;/span>&lt;span class="nv">aD&lt;/span> &lt;span class="c1">; &amp;#34;D&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">21:&lt;/span> &lt;span class="err">70&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BX&lt;/span> &lt;span class="nv">LR&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">22:&lt;/span> &lt;span class="nf">loc_1032596&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">23:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">48&lt;/span> &lt;span class="nf">LDR&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">=&lt;/span>&lt;span class="nv">aE&lt;/span> &lt;span class="c1">; &amp;#34;E&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">24:&lt;/span> &lt;span class="err">70&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BX&lt;/span> &lt;span class="nv">LR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">25:&lt;/span> &lt;span class="c1">; End of function mystery5&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>All instructions have a width of 16 bits, so we are dealing with code in Thumb state.&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 79 / Exercise 4</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-02-practical-reverse-engineering-exercise-solutions-page-79-exercise-4/</link><pubDate>Sat, 02 Dec 2017 05:21:00 -0800</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-02-practical-reverse-engineering-exercise-solutions-page-79-exercise-4/</guid><description>&lt;p>Exercise 4 on page 79 of the book Practical Reverse Engineering specifies the following ARM disassembly of a function &lt;code>mystery4&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="err">01:&lt;/span> &lt;span class="nf">mystery4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">02:&lt;/span> &lt;span class="err">08&lt;/span> &lt;span class="nf">B9&lt;/span> &lt;span class="nv">CBNZ&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">loc_100C3DA&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">03:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">20&lt;/span> &lt;span class="nf">MOVS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">04:&lt;/span> &lt;span class="err">70&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BX&lt;/span> &lt;span class="nv">LR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">05:&lt;/span> &lt;span class="nf">loc_100C3DA&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">06:&lt;/span> &lt;span class="err">50&lt;/span> &lt;span class="nf">F8&lt;/span> &lt;span class="mi">08&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="nv">C&lt;/span> &lt;span class="nv">LDR.W&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#–&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="p">]&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">07:&lt;/span> &lt;span class="err">70&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BX&lt;/span> &lt;span class="nv">LR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">08:&lt;/span> &lt;span class="c1">; End of function mystery4&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>The disassembly is in Thumb mode, as there are instructions having a width of 16 bits and some instructions specific to this mode (e.g. &lt;code>CBNZ&lt;/code> and the &lt;code>.W&lt;/code> suffix).&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 79 / Exercise 3</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-02-practical-reverse-engineering-exercise-solutions-page-79-exercise-3/</link><pubDate>Sat, 02 Dec 2017 05:20:00 -0800</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-02-practical-reverse-engineering-exercise-solutions-page-79-exercise-3/</guid><description>&lt;p>Exercise 3 on page 79 of the book Practical Reverse Engineering specifies the following ARM disassembly of a function &lt;code>mystery3&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="err">01:&lt;/span> &lt;span class="nf">mystery3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">02:&lt;/span> &lt;span class="err">83&lt;/span> &lt;span class="err">68&lt;/span> &lt;span class="nf">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">03:&lt;/span> &lt;span class="err">0&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">60&lt;/span> &lt;span class="nv">STR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R1&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">04:&lt;/span> &lt;span class="nf">C3&lt;/span> &lt;span class="mi">68&lt;/span> &lt;span class="nv">LDR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0xC&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">05:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">20&lt;/span> &lt;span class="nf">MOVS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">06:&lt;/span> &lt;span class="err">4&lt;/span>&lt;span class="nf">B&lt;/span> &lt;span class="mi">60&lt;/span> &lt;span class="nv">STR&lt;/span> &lt;span class="nv">R3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">07:&lt;/span> &lt;span class="err">70&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BX&lt;/span> &lt;span class="nv">LR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">08:&lt;/span> &lt;span class="c1">; End of function mystery3&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>It is provided in Thumb mode, as we can see from the instruction width, which is consistently 16 bits. Furthermore, the decompilation is greatly facilitated thanks to the lack of any conditional statements. Any kind of NULL-checks, for instance, are omitted.&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 78 / Exercise 2</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-02-practical-reverse-engineering-exercise-solutions-page-78-exercise-2/</link><pubDate>Sat, 02 Dec 2017 04:40:00 -0800</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-02-practical-reverse-engineering-exercise-solutions-page-78-exercise-2/</guid><description>&lt;p>Exercise 2 of the ARM chapter has a rather short disassembly compared to the first exercise. Again, we are tasked with the decompilation of the provided function &lt;code>mystery2&lt;/code>.&lt;/p>
&lt;p>The disassembly is as follows:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="err">01:&lt;/span> &lt;span class="nf">mystery2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">02:&lt;/span> &lt;span class="err">28&lt;/span> &lt;span class="nf">B1&lt;/span> &lt;span class="nv">CBZ&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">loc_C672&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">03:&lt;/span> &lt;span class="err">90&lt;/span> &lt;span class="nf">F8&lt;/span> &lt;span class="mi">63&lt;/span> &lt;span class="mi">00&lt;/span> &lt;span class="nv">LDRB.W&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">#&lt;/span>&lt;span class="mh">0x63&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">04:&lt;/span> &lt;span class="err">00&lt;/span> &lt;span class="err">38&lt;/span> &lt;span class="nf">SUBS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">05:&lt;/span> &lt;span class="err">18&lt;/span> &lt;span class="nf">BF&lt;/span> &lt;span class="nv">IT&lt;/span> &lt;span class="nv">NE&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">06:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">20&lt;/span> &lt;span class="nf">MOVNE&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">07:&lt;/span> &lt;span class="err">70&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BX&lt;/span> &lt;span class="nv">LR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">08:&lt;/span> &lt;span class="nf">loc_C672&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">09:&lt;/span> &lt;span class="err">01&lt;/span> &lt;span class="err">20&lt;/span> &lt;span class="nf">MOVS&lt;/span> &lt;span class="nv">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">10:&lt;/span> &lt;span class="err">70&lt;/span> &lt;span class="err">47&lt;/span> &lt;span class="nf">BX&lt;/span> &lt;span class="nv">LR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">11:&lt;/span> &lt;span class="c1">; End of function mystery2&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>First of all, we notice that the function has been compiled in Thumb mode, as there are several instructions having a width of 16 bits, which is not possible in ARM mode. Furthermore, the instructions &lt;code>CBZ&lt;/code> and &lt;code>IT&lt;/code> are specific to Thumb mode and not available in ARM mode.&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 78 / Exercise 1</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-01-practical-reverse-engineering-exercise-solutions-page-78-exercise-1/</link><pubDate>Fri, 01 Dec 2017 04:59:00 -0800</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-12-01-practical-reverse-engineering-exercise-solutions-page-78-exercise-1/</guid><description>&lt;p>This is the first blog post to a series of ARM challenges from the book Practical Reverse Engineering. In addition to the official ARM manual, the following web page turned out to be very helpful when solving the exercises, as it describes the different ARM instructions in great detail.&lt;/p>
&lt;p>&lt;a href="https://www.heyrick.co.uk/armwiki/Main_Page" target="_blank" rel="noopener noreffer ">https://www.heyrick.co.uk/armwiki/Main_Page&lt;/a>&lt;/p>
&lt;p>Without further ado, let us explore the first function. The extract below shows the ARM disassembly of a function named mystery1, which we are supposed to decompile into C code.&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 35 / Exercise 11</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-09-20-practical-reverse-engineering-exercise-solutions-page-35-exercise-11/</link><pubDate>Wed, 20 Sep 2017 02:37:00 -0700</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-09-20-practical-reverse-engineering-exercise-solutions-page-35-exercise-11/</guid><description>&lt;blockquote>
&lt;p>Read the Virtual Memory chapter in Intel Software Developer Manual, Volume 3 and AMD64 Architecture Programmer’s Manual, Volume 2: System Programming. Perform a few virtual address to physical address translations yourself and verify the result with a kernel debugger. Explain how data execution prevention (DEP) works.&lt;/p>&lt;/blockquote>
&lt;p>For this exercise, we first have to set up a remote kernel debugging session. (see &lt;a href="https://codemetrix.net/windows-kernel-debugging-setup/" target="_blank" rel="noopener noreffer ">https://codemetrix.net/windows-kernel-debugging-setup/&lt;/a>, &lt;a href="https://securityblog.gr/3253/debug-user-mode-processes-using-a-kernel-debugger/" target="_blank" rel="noopener noreffer ">https://securityblog.gr/3253/debug-user-mode-processes-using-a-kernel-debugger/&lt;/a> and
&lt;a href="http://securityblog.gr/3023/windows-kernel-debugging/" target="_blank" rel="noopener noreffer ">http://securityblog.gr/3023/windows-kernel-debugging/&lt;/a> for excellent explanations)&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 35 / Exercise 10</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-09-17-practical-reverse-engineering-exercise-solutions-page-35-exercise-10/</link><pubDate>Sun, 17 Sep 2017 05:34:00 -0700</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-09-17-practical-reverse-engineering-exercise-solutions-page-35-exercise-10/</guid><description>&lt;p>Our task:&lt;/p>
&lt;blockquote>
&lt;p>If the current privilege level is encoded in CS, which is modifiable by user-mode code, why can’t user-mode code modify CS to change CPL?&lt;/p>&lt;/blockquote>
&lt;p>For a change, this is now a more theoretical than hands-on challenge. In order to address the exercise appropriately, we have to make sure we understood it correctly.&lt;/p>
&lt;p>&lt;code>CS&lt;/code> (code segment) is the CPU segment register that contains the current ring level in bits 0 and 1. This encoded level is also commonly referred to as CPL (current privilege level).&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 35 / Exercise 9</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-09-15-practical-reverse-engineering-exercise-solutions-page-35-exercise-9/</link><pubDate>Fri, 15 Sep 2017 02:49:00 -0700</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-09-15-practical-reverse-engineering-exercise-solutions-page-35-exercise-9/</guid><description>&lt;p>Our task:&lt;/p>
&lt;blockquote>
&lt;p>Sample L. Explain what function &lt;code>sub_1000CEA0&lt;/code> does and then decompile it back to C.&lt;/p>&lt;/blockquote>
&lt;p>Here we have the function&amp;rsquo;s disassembly:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">push&lt;/span> &lt;span class="nb">ebp&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">mov&lt;/span> &lt;span class="nb">ebp&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">esp&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">push&lt;/span> &lt;span class="nb">edi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">mov&lt;/span> &lt;span class="nb">edi&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">ebp&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">xor&lt;/span> &lt;span class="nb">eax&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">eax&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">or&lt;/span> &lt;span class="nb">ecx&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0FFFFFFFFh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">repne&lt;/span> &lt;span class="nv">scasb&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">add&lt;/span> &lt;span class="nb">ecx&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">neg&lt;/span> &lt;span class="nb">ecx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">sub&lt;/span> &lt;span class="nb">edi&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">mov&lt;/span> &lt;span class="nb">al&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">ebp&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">0Ch&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">std&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">repne&lt;/span> &lt;span class="nv">scasb&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">add&lt;/span> &lt;span class="nb">edi&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">cmp&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">edi&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="nb">al&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">jz&lt;/span> &lt;span class="nv">short&lt;/span> &lt;span class="nv">loc_1000CEC7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">xor&lt;/span> &lt;span class="nb">eax&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">eax&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">jmp&lt;/span> &lt;span class="nv">short&lt;/span> &lt;span class="nv">loc_1000CEC9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">loc_1000CEC7:&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">mov&lt;/span> &lt;span class="nb">eax&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">edi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">loc_1000CEC9:&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">cld&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">pop&lt;/span> &lt;span class="nb">edi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">leave&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">retn&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">endp&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Firstly, the function takes two arguments, at &lt;code>ebp+0x8&lt;/code> (arg1) and &lt;code>ebp+0x0C&lt;/code> (arg2) respectively. It follows the &lt;strong>stdcall&lt;/strong> convention that arguments are pushed from right to left on the stack and the callee cleaning up the stack.&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 35 / Exercise 8</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-09-14-practical-reverse-engineering-exercise-solutions-page-35-exercise-8/</link><pubDate>Thu, 14 Sep 2017 05:12:00 -0700</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-09-14-practical-reverse-engineering-exercise-solutions-page-35-exercise-8/</guid><description>&lt;p>Our task as formulated in exercise 8:&lt;/p>
&lt;blockquote>
&lt;p>Sample H. Decompile &lt;code>sub_11732&lt;/code> and explain the most likely programming construct used in the original code.&lt;/p>&lt;/blockquote>
&lt;p>The function&amp;rsquo;s disassembly:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="nl">sub_1172E:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">push&lt;/span> &lt;span class="nb">esi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">mov&lt;/span> &lt;span class="nb">esi&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">esp&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">dec&lt;/span> &lt;span class="nb">esi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">jz&lt;/span> &lt;span class="nv">short&lt;/span> &lt;span class="nv">loc_1175F&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">dec&lt;/span> &lt;span class="nb">esi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">jz&lt;/span> &lt;span class="nv">short&lt;/span> &lt;span class="nv">loc_11755&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">dec&lt;/span> &lt;span class="nb">esi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">jz&lt;/span> &lt;span class="nv">short&lt;/span> &lt;span class="nv">loc_1174B&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">sub&lt;/span> &lt;span class="nb">esi&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">jnz&lt;/span> &lt;span class="nv">short&lt;/span> &lt;span class="nv">loc_1176B&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">mov&lt;/span> &lt;span class="nb">esi&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">eax&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">shr&lt;/span> &lt;span class="nb">esi&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">add&lt;/span> &lt;span class="nb">eax&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0Ch&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">jmp&lt;/span> &lt;span class="nv">short&lt;/span> &lt;span class="nv">loc_11767&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">; ---------------------------------------------------------------------------&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">loc_1174B:&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">mov&lt;/span> &lt;span class="nb">esi&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">eax&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">3Ch&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">shr&lt;/span> &lt;span class="nb">esi&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">add&lt;/span> &lt;span class="nb">eax&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">5Eh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">jmp&lt;/span> &lt;span class="nv">short&lt;/span> &lt;span class="nv">loc_11767&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">; ---------------------------------------------------------------------------&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">loc_11755:&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">mov&lt;/span> &lt;span class="nb">esi&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">eax&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">3Ch&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">shr&lt;/span> &lt;span class="nb">esi&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">add&lt;/span> &lt;span class="nb">eax&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">44h&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">jmp&lt;/span> &lt;span class="nv">short&lt;/span> &lt;span class="nv">loc_11767&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">; ---------------------------------------------------------------------------&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">loc_1175F:&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">mov&lt;/span> &lt;span class="nb">esi&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">eax&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">3Ch&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">shr&lt;/span> &lt;span class="nb">esi&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">add&lt;/span> &lt;span class="nb">eax&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">40h&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">loc_11767:&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">mov&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">ecx&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="nb">esi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">mov&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">edx&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="nb">eax&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">loc_1176B:&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">pop&lt;/span> &lt;span class="nb">esi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">retn&lt;/span> &lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Obviously, the sought-after programming construct in this case is a &lt;code>switch...case&lt;/code> statement.&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 35 / Exercise 7</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-07-30-practical-reverse-engineering-exercise-solutions-page-35-exercise-7/</link><pubDate>Sun, 30 Jul 2017 03:55:00 -0700</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-07-30-practical-reverse-engineering-exercise-solutions-page-35-exercise-7/</guid><description>&lt;p>Exercise 7 on page 35:&lt;/p>
&lt;blockquote>
&lt;p>Sample H. The function &lt;code>sub_10BB6&lt;/code> has a loop searching for something. First recover the function prototype and then infer the types based on the context. Hint: You should probably have a copy of the PE specification nearby.&lt;/p>&lt;/blockquote>
&lt;p>Due to alignment issues, our routine is located at &lt;code>10BB2&lt;/code> and has the following disassembly:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="nl">sub_10BB2:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">mov&lt;/span> &lt;span class="nb">eax&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">esp&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">]&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">push&lt;/span> &lt;span class="nb">ebx&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">push&lt;/span> &lt;span class="nb">esi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">mov&lt;/span> &lt;span class="nb">esi&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">eax&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">3Ch&lt;/span>&lt;span class="p">]&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">add&lt;/span> &lt;span class="nb">esi&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">eax&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">movzx&lt;/span> &lt;span class="nb">eax&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">word&lt;/span> &lt;span class="nv">ptr&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">esi&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">14h&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">xor&lt;/span> &lt;span class="nb">ebx&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">ebx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">cmp&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">esi&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="nb">bx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">push&lt;/span> &lt;span class="nb">edi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">lea&lt;/span> &lt;span class="nb">edi&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">eax&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="nb">esi&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">18h&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">jbe&lt;/span> &lt;span class="nv">short&lt;/span> &lt;span class="nv">loc_10BEB&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">loc_10BCE:&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">push&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">esp&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">0Ch&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="nv">arg_4&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">push&lt;/span> &lt;span class="nb">edi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">call&lt;/span> &lt;span class="nb">ds&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="kt">dword&lt;/span>&lt;span class="nv">_169A4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">test&lt;/span> &lt;span class="nb">eax&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">eax&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">pop&lt;/span> &lt;span class="nb">ecx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">pop&lt;/span> &lt;span class="nb">ecx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">jz&lt;/span> &lt;span class="nv">short&lt;/span> &lt;span class="nv">loc_10BF3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">movzx&lt;/span> &lt;span class="nb">eax&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">word&lt;/span> &lt;span class="nv">ptr&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">esi&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">add&lt;/span> &lt;span class="nb">edi&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">28h&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">inc&lt;/span> &lt;span class="nb">ebx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">cmp&lt;/span> &lt;span class="nb">ebx&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">eax&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">jb&lt;/span> &lt;span class="nv">short&lt;/span> &lt;span class="nv">loc_10BCE&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">loc_10BEB:&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">xor&lt;/span> &lt;span class="nb">eax&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">eax&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">loc_10BED:&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">pop&lt;/span> &lt;span class="nb">edi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">pop&lt;/span> &lt;span class="nb">esi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">pop&lt;/span> &lt;span class="nb">ebx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">retn&lt;/span> &lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">loc_10BF3:&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">mov&lt;/span> &lt;span class="nb">eax&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">edi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">jmp&lt;/span> &lt;span class="nv">short&lt;/span> &lt;span class="nv">loc_10BED&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>The PE file format and offsets have been described in detail here: &lt;a href="http://www.sunshine2k.de/reversing/tuts/tut_pe.htm" target="_blank" rel="noopener noreffer ">http://www.sunshine2k.de/reversing/tuts/tut_pe.htm&lt;/a>&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Page 35 / Exercise 6</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-07-22-practical-reverse-engineering-exercise-solutions-page-35-exercise-6/</link><pubDate>Sat, 22 Jul 2017 23:49:00 -0700</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-07-22-practical-reverse-engineering-exercise-solutions-page-35-exercise-6/</guid><description>&lt;p>Exercise 6 on page 35 of the book Practical Reverse Engineering presents us with a malware samples.&lt;/p>
&lt;p>These can be downloaded at the following page:&lt;/p>
&lt;p>&lt;a href="https://grsecurity.net/malware_research/" target="_blank" rel="noopener noreffer ">https://grsecurity.net/malware_research/&lt;/a>&lt;/p>
&lt;p>In this exercise, we are expected to have a look at the following routine &lt;code>sub_13842&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="nl">.text:&lt;/span>&lt;span class="err">00013842&lt;/span> &lt;span class="nf">sub_13842&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">.text:&lt;/span>&lt;span class="err">00013842&lt;/span> &lt;span class="nf">mov&lt;/span> &lt;span class="nb">eax&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">ecx&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">60h&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">.text:&lt;/span>&lt;span class="err">00013845&lt;/span> &lt;span class="nf">push&lt;/span> &lt;span class="nb">esi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">.text:&lt;/span>&lt;span class="err">00013846&lt;/span> &lt;span class="nf">mov&lt;/span> &lt;span class="nb">esi&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">edx&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">.text:&lt;/span>&lt;span class="err">00013849&lt;/span> &lt;span class="nf">dec&lt;/span> &lt;span class="kt">byte&lt;/span> &lt;span class="nv">ptr&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">ecx&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">23h&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">.text:&lt;/span>&lt;span class="err">0001384&lt;/span>&lt;span class="nf">C&lt;/span> &lt;span class="nv">sub&lt;/span> &lt;span class="nb">eax&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">24h&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">.text:&lt;/span>&lt;span class="err">0001384&lt;/span>&lt;span class="nf">F&lt;/span> &lt;span class="nv">mov&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">ecx&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">60h&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="nb">eax&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">.text:&lt;/span>&lt;span class="err">00013852&lt;/span> &lt;span class="nf">mov&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">eax&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">14h&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="nb">edx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">.text:&lt;/span>&lt;span class="err">00013855&lt;/span> &lt;span class="nf">movzx&lt;/span> &lt;span class="nb">eax&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">byte&lt;/span> &lt;span class="nv">ptr&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">eax&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">.text:&lt;/span>&lt;span class="err">00013858&lt;/span> &lt;span class="nf">push&lt;/span> &lt;span class="nb">ecx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">.text:&lt;/span>&lt;span class="err">00013859&lt;/span> &lt;span class="nf">push&lt;/span> &lt;span class="nb">edx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">.text:&lt;/span>&lt;span class="err">0001385&lt;/span>&lt;span class="nf">A&lt;/span> &lt;span class="nv">call&lt;/span> &lt;span class="kt">dword&lt;/span> &lt;span class="nv">ptr&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">esi&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="nb">eax&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">38h&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">.text:&lt;/span>&lt;span class="err">0001385&lt;/span>&lt;span class="nf">E&lt;/span> &lt;span class="nv">pop&lt;/span> &lt;span class="nb">esi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">.text:&lt;/span>&lt;span class="err">0001385&lt;/span>&lt;span class="nf">F&lt;/span> &lt;span class="nv">retn&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Firstly, we see that the function prototype takes two parameters, which are not saved on the stack but in the two registers &lt;code>ecx&lt;/code> and &lt;code>edx&lt;/code>. This can be deducted from the fact that these two registers are immediately referenced without prior initialization.&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: RtlValidateUnicodeString</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-07-16-practical-reverse-engineering-exercise-solutions-rtlvalidateunicodestring/</link><pubDate>Sun, 16 Jul 2017 12:50:00 -0700</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-07-16-practical-reverse-engineering-exercise-solutions-rtlvalidateunicodestring/</guid><description>&lt;p>This blog post contains my solution for the decompilation exercise of the &lt;code>RtlValidateUnicodeString&lt;/code> function in the Windows Kernel. The following contains the disassembly without annotations:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="nf">kd&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="nv">uf&lt;/span> &lt;span class="nv">rtlvalidateunicodestring&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">ntdll&lt;/span>&lt;span class="err">!&lt;/span>&lt;span class="nv">RtlValidateUnicodeString&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">77686&lt;/span>&lt;span class="nf">f6c&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="nv">bff&lt;/span> &lt;span class="nv">mov&lt;/span> &lt;span class="nb">edi&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nb">edi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">77686&lt;/span>&lt;span class="nf">f6e&lt;/span> &lt;span class="mi">55&lt;/span> &lt;span class="nv">push&lt;/span> &lt;span class="nb">ebp&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">77686&lt;/span>&lt;span class="nf">f6f&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="nv">bec&lt;/span> &lt;span class="nv">mov&lt;/span> &lt;span class="nb">ebp&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nb">esp&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">77686&lt;/span>&lt;span class="nf">f71&lt;/span> &lt;span class="mi">837&lt;/span>&lt;span class="nv">d0800&lt;/span> &lt;span class="nv">cmp&lt;/span> &lt;span class="kt">dword&lt;/span> &lt;span class="nv">ptr&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">ebp&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="p">],&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">77686&lt;/span>&lt;span class="nf">f75&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="nv">f85fc380300&lt;/span> &lt;span class="nv">jne&lt;/span> &lt;span class="nv">ntdll&lt;/span>&lt;span class="err">!&lt;/span>&lt;span class="nv">RtlValidateUnicodeString&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">0xb&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">776&lt;/span>&lt;span class="nv">ba877&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">ntdll&lt;/span>&lt;span class="err">!&lt;/span>&lt;span class="nv">RtlValidateUnicodeString&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">0x12&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">77686&lt;/span>&lt;span class="nf">f7b&lt;/span> &lt;span class="mi">6800010000&lt;/span> &lt;span class="nv">push&lt;/span> &lt;span class="mh">100h&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">77686&lt;/span>&lt;span class="nf">f80&lt;/span> &lt;span class="nv">ff750c&lt;/span> &lt;span class="nv">push&lt;/span> &lt;span class="kt">dword&lt;/span> &lt;span class="nv">ptr&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">ebp&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">0Ch&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">77686&lt;/span>&lt;span class="nf">f83&lt;/span> &lt;span class="nv">e809000000&lt;/span> &lt;span class="nv">call&lt;/span> &lt;span class="nv">ntdll&lt;/span>&lt;span class="err">!&lt;/span>&lt;span class="nv">RtlUnicodeStringValidateEx&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">77686&lt;/span>&lt;span class="nv">f91&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">ntdll&lt;/span>&lt;span class="err">!&lt;/span>&lt;span class="nv">RtlValidateUnicodeString&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">0x1f&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">77686&lt;/span>&lt;span class="nf">f88&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">d&lt;/span> &lt;span class="nv">pop&lt;/span> &lt;span class="nb">ebp&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">77686&lt;/span>&lt;span class="nf">f89&lt;/span> &lt;span class="nv">c20800&lt;/span> &lt;span class="nv">ret&lt;/span> &lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">ntdll&lt;/span>&lt;span class="err">!&lt;/span>&lt;span class="nv">RtlValidateUnicodeString&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">0xb&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">776&lt;/span>&lt;span class="nf">ba877&lt;/span> &lt;span class="nv">b80d0000c0&lt;/span> &lt;span class="nv">mov&lt;/span> &lt;span class="nb">eax&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0C000000Dh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">776&lt;/span>&lt;span class="nf">ba87c&lt;/span> &lt;span class="nv">e907c7fcff&lt;/span> &lt;span class="nv">jmp&lt;/span> &lt;span class="nv">ntdll&lt;/span>&lt;span class="err">!&lt;/span>&lt;span class="nv">RtlValidateUnicodeString&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">0x1f&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">77686&lt;/span>&lt;span class="nv">f88&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>The function prototype is given &lt;a href="https://github.com/CaledoniaProject/kekeo-with-asn-vs2013/blob/d926de6096d6f6d797e38ced1b5cbdf56d1734b9/modules/kull_m_string.h" target="_blank" rel="noopener noreffer ">here&lt;/a>:&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: LiveKd / WinDbg Cheat Sheet</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-07-16-practical-reverse-engineering-exercise-solutions-livekd-windbg-cheat-sheet/</link><pubDate>Sun, 16 Jul 2017 05:45:00 -0700</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-07-16-practical-reverse-engineering-exercise-solutions-livekd-windbg-cheat-sheet/</guid><description>&lt;p>Here are a couple of commands I regularly use for reverse engineering:&lt;/p>
&lt;ul>
&lt;li>&lt;code>uf &amp;lt;function&amp;gt;&lt;/code>: Unassemble function&lt;/li>
&lt;li>&lt;code>dt nt!_ktss&lt;/code>: Show the definition of the data structure &lt;code>_ktss&lt;/code>&lt;/li>
&lt;li>&lt;code>?? sizeof(_ktss)&lt;/code>: Show the size the data structure &lt;code>_ktss&lt;/code> occupies in memory&lt;/li>
&lt;li>&lt;code>.hh uf&lt;/code>: Show help for the function &lt;code>uf&lt;/code>&lt;/li>
&lt;li>&lt;code>x nt!*createfile*&lt;/code>: Search all functions having the string &lt;code>createfile&lt;/code> in its name&lt;/li>
&lt;li>&lt;code>!vtop &amp;lt;PDPT-pointer&amp;gt; &amp;lt;virtualAddress&amp;gt;&lt;/code>: Compute physical address of given virtual address and the pointer to the page directory pointer table&lt;/li>
&lt;/ul></description></item><item><title>Practical Reverse Engineering Exercise Solutions: KiInitializeTSS</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-07-16-practical-reverse-engineering-exercise-solutions-kiinitializetss/</link><pubDate>Sun, 16 Jul 2017 05:33:00 -0700</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-07-16-practical-reverse-engineering-exercise-solutions-kiinitializetss/</guid><description>&lt;p>Another exercise for us is the decompilation of the &lt;code>KiInitializeTSS&lt;/code> function:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="nf">nt&lt;/span>&lt;span class="err">!&lt;/span>&lt;span class="nv">KiInitializeTSS&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">82847359&lt;/span> &lt;span class="err">8&lt;/span>&lt;span class="nf">bff&lt;/span> &lt;span class="nv">mov&lt;/span> &lt;span class="nb">edi&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nb">edi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">8284735&lt;/span>&lt;span class="nf">b&lt;/span> &lt;span class="mi">55&lt;/span> &lt;span class="nv">push&lt;/span> &lt;span class="nb">ebp&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">8284735&lt;/span>&lt;span class="nf">c&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="nv">bec&lt;/span> &lt;span class="nv">mov&lt;/span> &lt;span class="nb">ebp&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nb">esp&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">8284735&lt;/span>&lt;span class="nf">e&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="nv">b4508&lt;/span> &lt;span class="nv">mov&lt;/span> &lt;span class="nb">eax&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="kt">dword&lt;/span> &lt;span class="nv">ptr&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">ebp&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">82847361&lt;/span> &lt;span class="nf">b9ac200000&lt;/span> &lt;span class="nv">mov&lt;/span> &lt;span class="nb">ecx&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">20ACh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">82847366&lt;/span> &lt;span class="err">66894866&lt;/span> &lt;span class="nf">mov&lt;/span> &lt;span class="kt">word&lt;/span> &lt;span class="nv">ptr&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">eax&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">66h&lt;/span>&lt;span class="p">],&lt;/span>&lt;span class="nb">cx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">8284736&lt;/span>&lt;span class="nf">a&lt;/span> &lt;span class="mi">33&lt;/span>&lt;span class="nv">c9&lt;/span> &lt;span class="nv">xor&lt;/span> &lt;span class="nb">ecx&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nb">ecx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">8284736&lt;/span>&lt;span class="nf">c&lt;/span> &lt;span class="mi">6&lt;/span>&lt;span class="nv">a10&lt;/span> &lt;span class="nv">push&lt;/span> &lt;span class="mh">10h&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">8284736&lt;/span>&lt;span class="nf">e&lt;/span> &lt;span class="mi">66894864&lt;/span> &lt;span class="nv">mov&lt;/span> &lt;span class="kt">word&lt;/span> &lt;span class="nv">ptr&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">eax&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">64h&lt;/span>&lt;span class="p">],&lt;/span>&lt;span class="nb">cx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">82847372&lt;/span> &lt;span class="err">66894860&lt;/span> &lt;span class="nf">mov&lt;/span> &lt;span class="kt">word&lt;/span> &lt;span class="nv">ptr&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">eax&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">60h&lt;/span>&lt;span class="p">],&lt;/span>&lt;span class="nb">cx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">82847376&lt;/span> &lt;span class="err">59&lt;/span> &lt;span class="nf">pop&lt;/span> &lt;span class="nb">ecx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">82847377&lt;/span> &lt;span class="err">66894808&lt;/span> &lt;span class="nf">mov&lt;/span> &lt;span class="kt">word&lt;/span> &lt;span class="nv">ptr&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">eax&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="p">],&lt;/span>&lt;span class="nb">cx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">8284737&lt;/span>&lt;span class="nf">b&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">d&lt;/span> &lt;span class="nv">pop&lt;/span> &lt;span class="nb">ebp&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">8284737&lt;/span>&lt;span class="nf">c&lt;/span> &lt;span class="nv">c20400&lt;/span> &lt;span class="nv">ret&lt;/span> &lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>We obtain the function prototype: (&lt;a href="https://github.com/hoangduit/reactos/blob/63682957b86d77c7d82e7b887797ef82ea92d271/reactos/ntoskrnl/ke/powerpc/cpu.c" target="_blank" rel="noopener noreffer ">source&lt;/a>)&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="n">VOID&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">NTAPI&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">KiInitializeTSS&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">IN&lt;/span> &lt;span class="n">PKTSS&lt;/span> &lt;span class="n">Tss&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Structure of &lt;code>_KTSS&lt;/code>:&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: KeReadyThread</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-07-16-practical-reverse-engineering-exercise-solutions-kereadythread/</link><pubDate>Sun, 16 Jul 2017 03:44:00 -0700</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-07-16-practical-reverse-engineering-exercise-solutions-kereadythread/</guid><description>&lt;p>Unfortunately I had no time in the past days to continue with the exercises. We continue with the decompilation of the KeReadyThread function in Windows 7.&lt;/p>
&lt;p>The following listing shows the disassembly:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-nasm" data-lang="nasm">&lt;span class="line">&lt;span class="cl">&lt;span class="nf">nt&lt;/span>&lt;span class="err">!&lt;/span>&lt;span class="nv">KeReadyThread&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">828&lt;/span>&lt;span class="nf">a8125&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="nv">bff&lt;/span> &lt;span class="nv">mov&lt;/span> &lt;span class="nb">edi&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nb">edi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">828&lt;/span>&lt;span class="nf">a8127&lt;/span> &lt;span class="mi">56&lt;/span> &lt;span class="nv">push&lt;/span> &lt;span class="nb">esi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">828&lt;/span>&lt;span class="nf">a8128&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="nv">bf0&lt;/span> &lt;span class="nv">mov&lt;/span> &lt;span class="nb">esi&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nb">eax&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">828&lt;/span>&lt;span class="nf">a812a&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="nv">b4650&lt;/span> &lt;span class="nv">mov&lt;/span> &lt;span class="nb">eax&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="kt">dword&lt;/span> &lt;span class="nv">ptr&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">esi&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">50h&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">828&lt;/span>&lt;span class="nf">a812d&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="nv">b4874&lt;/span> &lt;span class="nv">mov&lt;/span> &lt;span class="nb">ecx&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="kt">dword&lt;/span> &lt;span class="nv">ptr&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">eax&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">74h&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">828&lt;/span>&lt;span class="nf">a8130&lt;/span> &lt;span class="nv">f6c107&lt;/span> &lt;span class="nv">test&lt;/span> &lt;span class="nb">cl&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">828&lt;/span>&lt;span class="nf">a8133&lt;/span> &lt;span class="mi">7409&lt;/span> &lt;span class="nv">je&lt;/span> &lt;span class="nv">nt&lt;/span>&lt;span class="err">!&lt;/span>&lt;span class="nv">KeReadyThread&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">0x19&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">828&lt;/span>&lt;span class="nv">a813e&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">nt&lt;/span>&lt;span class="err">!&lt;/span>&lt;span class="nv">KeReadyThread&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">0x10&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">828&lt;/span>&lt;span class="nf">a8135&lt;/span> &lt;span class="nv">e8b74af8ff&lt;/span> &lt;span class="nv">call&lt;/span> &lt;span class="nv">nt&lt;/span>&lt;span class="err">!&lt;/span>&lt;span class="nv">KiInSwapSingleProcess&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">8282&lt;/span>&lt;span class="nv">cbf1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">828&lt;/span>&lt;span class="nf">a813a&lt;/span> &lt;span class="mi">84&lt;/span>&lt;span class="nv">c0&lt;/span> &lt;span class="nv">test&lt;/span> &lt;span class="nb">al&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nb">al&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">828&lt;/span>&lt;span class="nf">a813c&lt;/span> &lt;span class="mi">7505&lt;/span> &lt;span class="nv">jne&lt;/span> &lt;span class="nv">nt&lt;/span>&lt;span class="err">!&lt;/span>&lt;span class="nv">KeReadyThread&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">0x1e&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">828&lt;/span>&lt;span class="nv">a8143&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">nt&lt;/span>&lt;span class="err">!&lt;/span>&lt;span class="nv">KeReadyThread&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">0x19&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">828&lt;/span>&lt;span class="nf">a813e&lt;/span> &lt;span class="nv">e892ef0000&lt;/span> &lt;span class="nv">call&lt;/span> &lt;span class="nv">nt&lt;/span>&lt;span class="err">!&lt;/span>&lt;span class="nv">KiFastReadyThread&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">828&lt;/span>&lt;span class="nv">b70d5&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">nt&lt;/span>&lt;span class="err">!&lt;/span>&lt;span class="nv">KeReadyThread&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">0x1e&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">828&lt;/span>&lt;span class="nf">a8143&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="nv">e&lt;/span> &lt;span class="nv">pop&lt;/span> &lt;span class="nb">esi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">828&lt;/span>&lt;span class="nf">a8144&lt;/span> &lt;span class="nv">c3&lt;/span> &lt;span class="nv">ret&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>According to &lt;a href="https://github.com/Zer0Mem0ry/ntoskrnl/blob/1ba25701dc670d5f63610b75b593c5841d291e7f/Ke/thredobj.c" target="_blank" rel="noopener noreffer ">this source&lt;/a>, it has the following prototype:&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: KeInitializeQueue</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-07-01-practical-reverse-engineering-exercise-solutions-keinitializequeue/</link><pubDate>Sat, 01 Jul 2017 05:39:00 -0700</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-07-01-practical-reverse-engineering-exercise-solutions-keinitializequeue/</guid><description>&lt;p>We are tasked with decompiling the Windows Kernel routine
KeInitializeQueue.&lt;/p>
&lt;p>Firstly, we obtain its disassembly:&lt;/p>
&lt;p>&lt;a href="../images/2017-07-01-practical-reverse-engineering-exercise-solutions-keinitializequeue-001.png" rel="">&lt;img
 class="lazyload"
 src="https://soffensive.github.io/svg/loading.min.svg"
 data-src="../images/thumbnails/2017-07-01-practical-reverse-engineering-exercise-solutions-keinitializequeue-001.png"
 data-srcset="../images/thumbnails/2017-07-01-practical-reverse-engineering-exercise-solutions-keinitializequeue-001.png, ../images/thumbnails/2017-07-01-practical-reverse-engineering-exercise-solutions-keinitializequeue-001.png 1.5x, ../images/thumbnails/2017-07-01-practical-reverse-engineering-exercise-solutions-keinitializequeue-001.png 2x"
 data-sizes="auto"
 alt="../images/thumbnails/2017-07-01-practical-reverse-engineering-exercise-solutions-keinitializequeue-001.png"
 title="../images/thumbnails/2017-07-01-practical-reverse-engineering-exercise-solutions-keinitializequeue-001.png" />&lt;/a> &lt;/p>
&lt;p>Secondly, we consult &lt;a href="https://msdn.microsoft.com/en-us/library/windows/hardware/ff549547%28v=vs.85%29.aspx" target="_blank" rel="noopener noreffer ">MSDN&lt;/a> for its signature:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="n">VOID&lt;/span> &lt;span class="nf">KeInitializeQueue&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">_Out_&lt;/span> &lt;span class="n">PRKQUEUE&lt;/span> &lt;span class="n">Queue&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">_In_&lt;/span> &lt;span class="n">ULONG&lt;/span> &lt;span class="n">Count&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>The routine itself does not return anything. &lt;/p>
&lt;p>We learn it takes two parameters and as the assembly contains the &lt;code>ret 8&lt;/code> instruction, the &lt;code>KeInitializeQueue&lt;/code> function cleans up the stack and thus, it uses the &lt;strong>stdcall&lt;/strong> convention.&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: ObFastDereferenceObject</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-06-29-practical-reverse-engineering-exercise-solutions-obfastdereferenceobject/</link><pubDate>Thu, 29 Jun 2017 09:46:00 -0700</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-06-29-practical-reverse-engineering-exercise-solutions-obfastdereferenceobject/</guid><description>&lt;p>First of all a quick reminder: This series of blog posts relates to exercises from the book Practical Reverse Engineering by Dang et al. Although it is called reverse engineering in general, it actually is mostly relevant to Microsoft Windows operating systems. This is simply due to the fact that Microsoft Windows is closed source in contrast to the Linux/Unix families, which means its source code is publicly available and so no reverse engineering endeavours are necessary.&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: KeInitializeApc Routine</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-06-19-practical-reverse-engineering-exercise-solutions-keinitializeapc-routine/</link><pubDate>Mon, 19 Jun 2017 02:36:00 -0700</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-06-19-practical-reverse-engineering-exercise-solutions-keinitializeapc-routine/</guid><description>&lt;p>To keep me motivated and document my progress, I will create a series of
blog posts with answers to some of the exercises from the book
&amp;ldquo;Practical Reverse Engineering&amp;rdquo; by Dang, Gazet and Bachaalany.&lt;/p>
&lt;p>In the last post, we introduced the Windows Kernel Debugger (KD) and some of the functions. I have learned that rather than using KD directly, we can use WinDbg&amp;rsquo;s interface which is more user-friendly. When calling livekd, simply append the &amp;ldquo;-w&amp;rdquo; parameter and WinDbg will start up:&lt;/p></description></item><item><title>Practical Reverse Engineering Exercise Solutions: Windows Kernel Routines</title><link>https://soffensive.github.io/posts/practical-reverse-engineering/2017-06-17-practical-reverse-engineering-exercise-solutions-windows-kernel-routines/</link><pubDate>Sat, 17 Jun 2017 00:01:00 -0700</pubDate><guid>https://soffensive.github.io/posts/practical-reverse-engineering/2017-06-17-practical-reverse-engineering-exercise-solutions-windows-kernel-routines/</guid><description>&lt;p>I am currently developing my reverse engineering skills and want to keep
some important parts of this journey as well in this blog.&lt;/p>
&lt;p>The first step of this series relates to disassembling Windows kernel
routines, in my case Windows 7.&lt;/p>
&lt;p>What are the prerequisites for this exercise?&lt;/p>
&lt;ul>
&lt;li>Ideally, install Windows inside a virtual machine&lt;/li>
&lt;li>From Windows Vista onwards, the Kernel debugging mode has to be enabled with: &lt;code>bcdedit /debug on&lt;/code>&lt;/li>
&lt;li>Install Debugging Tools for Windows (for example, as part of the Windows SDK - &lt;a href="https://www.microsoft.com/en-us/download/details.aspx?id=3138" target="_blank" rel="noopener noreffer ">https://www.microsoft.com/en-us/download/details.aspx?id=3138&lt;/a> for Windows 7, which contains the Kernel Debugger (KD))&lt;/li>
&lt;li>Install LiveKD from the SysInternals Suite 
&lt;ul>
&lt;li>&lt;strong>IMPORTANT: the livekd.exe file should be placed in the system32
folder&lt;/strong>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Notice that since we use LiveKD, we are essentially debugging the Kernel
locally without a second system. With this approach, functions cannot be
debugged as LiveKD uses a Kernel read-only memory dump as a basis.&lt;/p></description></item></channel></rss>