<?xml version="1.0"?>
<rss version="2.0">
    <channel>
        <title>OpenRCE: Blog</title>
        <link>http://www.openrce.org/rss/feeds/blog</link>
        <description>OpenRCE: The Open Reverse Code Engineering Community</description>
                <item>
            <title>Using CreatePipe to detect and thwart Emulating Sandboxes and AV emulators</title>
                            <pubDate>Fri, 08 May 2009 21:23:00 -0500</pubDate>
                                        <link>https://www.openrce.org/blog/view/1451/Using_CreatePipe_to_detect_and_thwart_Emulating_Sandboxes_and_AV_emulators</link>
                                        <author>Paolo &lt;email-suppressed@example.com&gt;</author>
                                                    <description>&lt;div align=&quot;justify&quot;&gt;While analyzing a Tdss-packed sample, I stumbled across an interesting use of the CreatePipe API function for Anti-Emulation purposes. The idea is very simple: detecting and thwarting Emulating Sandboxes without valid implementation of the pipe subsystem.&lt;br /&gt;&lt;br /&gt;How does it work? Well, the very first thing the malware did was to create an unnamed pipe using the CreatePipe function:&lt;br /&gt;&lt;blockquote&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;.text:004014CA&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;br /&gt;.text:004014CC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;br /&gt;.text:004014CE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lea&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax, [ebp-18h]&lt;br /&gt;.text:004014D1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;eax&lt;br /&gt;.text:004014D2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lea&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax, [ebp-14h]&lt;br /&gt;.text:004014D5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;eax&lt;br /&gt;.text:004014D6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;call&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ds:CreatePipe&lt;br /&gt;.text:004014D6&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div align=&quot;justify&quot;&gt;Now that the pipe has been created, the malware will proceed in writing to it:&lt;br /&gt;&lt;blockquote align=&quot;justify&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;.text:004013F1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; [0x12fe78] = 0x00000000&lt;br /&gt;.text:004013F3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lea&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax, [ebp-1Ch]&lt;br /&gt;.text:004013F6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;eax&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; [0x12fe74] = 0x0012FFA0&lt;br /&gt;.text:004013F7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0Ch&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; [0x12fe70] = &lt;strong&gt;0x0000000C&lt;/strong&gt;&lt;br /&gt;.text:004013F9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lea&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax, [ebp-10h]&lt;br /&gt;.text:004013FC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;eax&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; [0x12fe6c] = 0x0012FFAC&nbsp;&lt;br /&gt;.text:004013FD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dword ptr [ebp-18h] ; [0x12fe68] = 0x00012000&lt;br /&gt;.text:00401400&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;call&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ds:WriteFile&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;; WriteFile&lt;br /&gt;.text:00401400&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div align=&quot;justify&quot;&gt;If we look closely, we see that the malware wrote 0xC bytes to the pipe:&lt;br /&gt;&lt;blockquote&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;WriteBuffer:&lt;br /&gt;.stack:0012FFAC&amp;nbsp;&amp;nbsp; dd 0FC7E251Eh [WriteBuffer + 0x0]&lt;br /&gt;.stack:0012FFB0&amp;nbsp;&amp;nbsp; dd 0A6B546CBh [WriteBuffer + 0x4]&lt;br /&gt;.stack:0012FFB4&amp;nbsp;&amp;nbsp; dd 401599h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&nbsp; &nbsp;[WriteBuffer + 0x8]&lt;br /&gt;.stack:0012FFB8&amp;nbsp;&amp;nbsp; dd 4015A0h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&nbsp; &nbsp;[WriteBuffer + 0xC]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div align=&quot;justify&quot;&gt;Now comes the interesting part: after some junk operations, the malware will read again from the pipe, and will store the read data at offset +4 from the beginning of the buffer that was initially written to the pipe:&lt;br /&gt;&lt;blockquote&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;.text:00401509&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; [0x12fe78] = 0x00000000&lt;br /&gt;.text:0040150B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lea&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax, [ebp-1Ch]&lt;br /&gt;.text:0040150E&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;eax&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; [0x12fe74] = 0x0012FFA0&lt;br /&gt;.text:0040150F&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; [0x12fe70] = 0x00000019&lt;br /&gt;.text:00401511&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lea&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax, [ebp-0Ch]&lt;br /&gt;.text:00401514&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;eax&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; [0x12fe6c] = &lt;strong&gt;0x0012FFB0&lt;/strong&gt;&lt;br /&gt;.text:00401515&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dword ptr [ebp-14h] ; [0x12fe68] = 0x00011000&lt;br /&gt;.text:00401518&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;call&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ds:ReadFile&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ReadFile&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div align=&quot;justify&quot;&gt;The outcome of this write-read combination from the pipe is rather obvious: part of the content of WriteBuffer gets shifted of 4 bytes, overwriting the initial content.&lt;br /&gt;&lt;br /&gt;Why does the malware does these kinds of operations? Well, we discover it very quickly: after another bunch of useless instructions, the malware uses the offset stored at WriteBuffer + 0xC to continue the execution:&lt;br /&gt;&lt;blockquote&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;.text:00401487&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;call&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dword ptr [ebp-4] ; [0x12FFB8] WriteBuffer + 0xC&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div align=&quot;justify&quot;&gt;and, if we focus on the called address, we see that it is exactly one of the locations that gets overwritten by the shifted content. In fact:&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[WriteBuffer + 0xC]:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;.stack:0012FFB8&amp;nbsp;&amp;nbsp; dd 4015A0h --&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;stack:0012FFB8&amp;nbsp;&amp;nbsp; dd 401599h&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;div align=&quot;justify&quot;&gt;So the calls destination address has been changed from 0x4015A0 to 0x401599. If we quickly inspect the two locations, we immediately notice that the overwritten offset points to garbage:&lt;br /&gt;&lt;blockquote&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;.text:004015A0&amp;nbsp;&amp;nbsp; jl&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;short near ptr loc_40152E+5&lt;br /&gt;.text:004015A2&amp;nbsp;&amp;nbsp; inc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; edx&lt;br /&gt;.text:004015A3&amp;nbsp;&amp;nbsp; int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Trap to Debugger&lt;br /&gt;.text:004015A4&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ch, 9Dh&lt;br /&gt;.text:004015A6&amp;nbsp;&amp;nbsp; inc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; edx&lt;br /&gt;.text:004015A7&amp;nbsp;&amp;nbsp; int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Trap to Debugger&lt;br /&gt;.text:004015A8&amp;nbsp;&amp;nbsp; adc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [edi+536FCC42h], esp&lt;br /&gt;.text:004015AE&amp;nbsp;&amp;nbsp; pop&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; edi&lt;br /&gt;.text:004015AF&amp;nbsp;&amp;nbsp; pusha&lt;br /&gt;.text:004015B0&amp;nbsp;&amp;nbsp; dec&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ebp&lt;br /&gt;.text:004015B1&amp;nbsp;&amp;nbsp; rcl&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dword ptr [ebp+5E895EA6h], 0BAh&lt;br /&gt;.text:004015B8&amp;nbsp;&amp;nbsp; outsd&lt;br /&gt;.text:004015B9&amp;nbsp;&amp;nbsp; xchg&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;eax, ebx&lt;br /&gt;.text:004015BA&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; al, ss:0ACAE1BF0h&lt;br /&gt;.text:004015C0&amp;nbsp;&amp;nbsp; ...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div align=&quot;justify&quot;&gt;while the overwriting one points to the valid code that will allow us to continue the execution:&lt;br /&gt;&lt;blockquote&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;.text:00401599&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xor&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; edx, edi&lt;br /&gt;.text:0040159B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;jmp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; loc_401057&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;p align=&quot;justify&quot;&gt;The description above can be visually explained by the following diagram:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_Iq20R_ym4vY/SgSG50tSndI/AAAAAAAAAFg/D_JZz5M0CKo/s1600-h/Diagramma.png&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_Iq20R_ym4vY/SgSG50tSndI/AAAAAAAAAFg/D_JZz5M0CKo/s400/Diagramma.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5333536186672782802&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;It is obvious how such a trick can cause problems even to Emulating Sandboxes that do feature extensive re-implementation of Windows APIs. In fact, unless you have a solid implementation of the pipe subsystem in an Emulating Sandbox, this code cannot be emulated, as the original wrong offset wont be overwritten and the execution would break right after the call.&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;It is also interesting to note that using Pipes is somewhat more effective than using other equivalent mechanisms (for example, the same trick could be used with files). The main reason for this is that implementation of pipe-related functions is not usually a priority for emulator developers, and such implementation may even be neglected given the huge amount of other APIs that need implementation.&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;http://blogger.googleusercontent.com/tracker/22644432-1981812359639341771?l=reversingitout.blogspot.com&quot; /&gt;</description>
                    </item>
                <item>
            <title>VbPython 1.2a</title>
                            <pubDate>Mon, 06 Oct 2008 22:31:00 -0500</pubDate>
                                        <link>https://www.openrce.org/blog/view/1278/VbPython_1.2a</link>
                                        <author>Paolo &lt;email-suppressed@example.com&gt;</author>
                                                    <description>After quite a while, VbPython has just been updated to version 1.2a. This new release does not offer much new, beside being much more stable and supporting latest IDA Python. In detail, the new version fixes the following bugs:&lt;ul&gt;&lt;li&gt;an endless loop when trying to undefining stuff&lt;/li&gt;&lt;li&gt;several crashes due to unchecked incoming parameters&lt;/li&gt;&lt;/ul&gt;and will run on IDA Python &gt; 0.9.55, which at some point started requiring to have the idaapi module explicitly loaded (thanks to loopss7 for reporting!).&lt;br /&gt;For anyone interested, script can be fetched from &lt;a href=&quot;https://www.openrce.org/repositories/users/Paolo/vbpython.py&quot;&gt;OpenRCE&lt;/a&gt;.&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;http://blogger.googleusercontent.com/tracker/22644432-3725070237169882072?l=reversingitout.blogspot.com&quot; /&gt;</description>
                    </item>
                <item>
            <title>Again on Visual Basic</title>
                            <pubDate>Fri, 18 Jan 2008 14:03:00 -0600</pubDate>
                                        <link>https://www.openrce.org/blog/view/1031/Again_on_Visual_Basic</link>
                                        <author>Paolo &lt;email-suppressed@example.com&gt;</author>
                                                    <description>For IDAPython users, I have created a complete python script that handles Visual Basic written programs. Features are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;original code from Reginald Wongs IDC script, translated to python&lt;/li&gt;&lt;li&gt;my previous script for handling DllFunctionCall&lt;/li&gt;&lt;li&gt;type analysis helper: provides function prototypes for known visual basic functions. Although the list of this functions is pretty limited at this moment, it is very easy to add your own&lt;/li&gt;&lt;li&gt;no return helper: marks specific functions as &quot;non-returning&quot;, to improve ida analysis. Again, so far the list of non returning functions is limited, but&amp;nbsp;&amp;nbsp;its easy to add your own&lt;/li&gt;&lt;/ul&gt;Download is, as usual, available from my &lt;a href=&quot;https://www.openrce.org/repositories/users/Paolo/vbpython.py&quot;&gt;repository&lt;/a&gt;, and will soon be committed to openrce-snippets. Again as usual, comments and feedback are welcome.&lt;br /&gt;&lt;br /&gt;Enjoy :)&lt;br /&gt;&lt;br /&gt;PS: In order to use this script you need the latest IDAPython (0.9.55 and up), due to use of *aflags functions.&nbsp;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;http://blogger.googleusercontent.com/tracker/22644432-1705140033099476548?l=reversingitout.blogspot.com&quot; /&gt;</description>
                    </item>
                <item>
            <title>Experimenting with IDA 5.2s scriptable debugger</title>
                            <pubDate>Sat, 01 Dec 2007 20:27:00 -0600</pubDate>
                                        <link>https://www.openrce.org/blog/view/982/Experimenting_with_IDA_5.2s_scriptable_debugger</link>
                                        <author>Paolo &lt;email-suppressed@example.com&gt;</author>
                                                    <description>Recently, IDA 5.2 has been released, bearing as usual a lot of cool features and bugfixes. One of the most interesting additions was the so-called scriptable debugger. Today, I had a bit of free time, and decided to experiment with that.&lt;br /&gt;&lt;br /&gt;In a very limited time, I coded a simple API monitor to spy over file-write operations on executable files (for example done by some malware). For the curious ones, I have uploaded the script to my &lt;a href=&quot;https://www.openrce.org/repositories/users/Paolo/IdcDebuggerTest.idc&quot;&gt;repository&lt;/a&gt;: the code is just an experiment and is not all that useful - but it shows anyway how easy it is to use the new IDC commands.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_Iq20R_ym4vY/R1G3DWKqKgI/AAAAAAAAABo/2bYhXX0_6U8/s1600-R/SpyOutput.PNG&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_Iq20R_ym4vY/R1G3DWKqKgI/AAAAAAAAABo/xa5E1tuZsuI/s320/SpyOutput.PNG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5139089917924223490&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;http://blogger.googleusercontent.com/tracker/22644432-3646534878868945129?l=reversingitout.blogspot.com&quot; /&gt;</description>
                    </item>
                <item>
            <title>Interesting primer on Virtualization from VMware</title>
                            <pubDate>Mon, 19 Nov 2007 11:28:00 -0600</pubDate>
                                        <link>https://www.openrce.org/blog/view/962/Interesting_primer_on_Virtualization_from_VMware</link>
                                        <author>Paolo &lt;email-suppressed@example.com&gt;</author>
                                                    <description>A couple of days ago, VMware released an interesting primer on virtualization, that gives a good introduction on a topic that is kinda &quot;foggy&quot; for most non-deeply-technical people. In the paper is given a nice overview of virtualization techniques for intel x86 architecture, along with an high level survey of the state of virtualization technology.&lt;br /&gt;&lt;br /&gt;Definetely a recommended reading for anyone willing to know more about virtualization, but not only... Fetch it &lt;a href=&quot;http://www.vmware.com/resources/techresources/1008&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;a href=&quot;http://ivory.vnunet.com/images/company-logos/vmware-logo/medium.jpg&quot;&gt;&lt;img src=&quot;http://ivory.vnunet.com/images/company-logos/vmware-logo/medium.jpg&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;http://blogger.googleusercontent.com/tracker/22644432-8477980902531838330?l=reversingitout.blogspot.com&quot; /&gt;</description>
                    </item>
            </channel>
</rss>
