<?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>simulating memory allocation failures</title>
                            <pubDate>Mon, 05 Jan 2009 14:14:36 -0600</pubDate>
                                        <link>https://www.openrce.org/blog/view/1337/simulating_memory_allocation_failures</link>
                                        <author>xz &lt;email-suppressed@example.com&gt;</author>
                                                    <description>I've written a debugger script that tests dlls for memory allocation failures by hooking ntdll.RtlAllocateHeap&lt;br /&gt;
&lt;br /&gt;
full doc here: &lt;br /&gt;
&lt;a href=&quot;http://www.bintest.com/m/malloc.html&quot;&gt;http://www.bintest.com/m/malloc.html&lt;/a&gt;&lt;br /&gt;
</description>
                    </item>
                <item>
            <title>API Fuzzing with PaiMei</title>
                            <pubDate>Sat, 16 Dec 2006 06:54:32 -0600</pubDate>
                                        <link>https://www.openrce.org/blog/view/540/API_Fuzzing_with_PaiMei</link>
                                        <author>xz &lt;email-suppressed@example.com&gt;</author>
                                                    <description>I keep myself idle lately coding an API Fuzzer. &lt;br /&gt;
&lt;br /&gt;
The idea is simple: &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-init:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-load program&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-set hooks&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-load fuzz testcases in address space&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-fuzzing loop:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;on api call entry:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;first pass&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-save process snapshot ( thread context, memory)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-get arguments &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-monitor mem access&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;on api call return&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-restore memory&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-restore thread context (=&amp;gt; eip on api entry)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-fuzz api call arguments&lt;br /&gt;
&lt;br /&gt;
e.g.:&lt;br /&gt;
&lt;br /&gt;
main.cpp:&lt;br /&gt;
---------&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
extern &amp;quot;C&amp;quot; __declspec(dllimport) void myfun ( int * a,int b,int c);&lt;br /&gt;
&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
 int a = 6;&lt;br /&gt;
 myfun(&amp;amp;a,7,10);&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
dll.cpp:&lt;br /&gt;
--------&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
extern &amp;quot;C&amp;quot; __declspec(dllexport) void myfun(int * a,int b, int c)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;cout &amp;lt;&amp;lt; &amp;quot;a: &amp;quot; &amp;lt;&amp;lt; *a &amp;lt;&amp;lt; &amp;quot; | b: &amp;quot; &amp;lt;&amp;lt; b &amp;lt;&amp;lt; &amp;quot; | c: &amp;quot; &amp;lt;&amp;lt; c &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
compile and link:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
$ cl -LD dll.cpp &amp;amp;&amp;amp; cl main.cpp /LINK dll.lib&lt;br /&gt;
&lt;br /&gt;
$ ./main&lt;br /&gt;
a: 6 | b: 7 | c: 10&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
this is the testcase:&lt;br /&gt;
hook myfun when called from main and fuzz the arguments...&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
$ python fuzztest.py | grep a:&amp;nbsp;&amp;nbsp;# grep to ommit debug prints&lt;br /&gt;
a: 6 | b: 7 | c: 10&lt;br /&gt;
a: 6 | b: 256 | c: 32&lt;br /&gt;
a: 6 | b: 4096 | c: 0&lt;br /&gt;
a: 6 | b: 64 | c: 16&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
great... as b and c are integers they are fuzzed in the 3 fuzzing loops.&lt;br /&gt;
To get some more interesting results we have to fuzz all the arguments, i.e. pointers. This appears to be more difficult than expected: I have to monitor which memory locations are &lt;br /&gt;
accessed, then fuzz those locations. I thought putting memory breakpoints on the stack would help do the trick but pydbg doesn't support stack memory breakpoints. I'm trying to work around this by setting PAGE_NOACCESS on the stack pages and an access violation callback but this isn't finished yet. I do have a start for a wxpython gui:&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://img303.imageshack.us/img303/8839/fuzzer2xs1.jpg&quot; border=0 align=&quot;&quot;&gt;</description>
                    </item>
            </channel>
</rss>
