<?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>Mocbot Command Decoding</title>
                            <pubDate>Wed, 23 Aug 2006 08:44:39 -0500</pubDate>
                                        <link>https://www.openrce.org/blog/view/401/Mocbot_Command_Decoding</link>
                                        <author>joestewart &lt;email-suppressed@example.com&gt;</author>
                                                    <description>I had someone ask me how I decoded the &lt;a href=&quot;http://www.lurhq.com/mocbot-spam.html&quot;&gt;Mocbot command encryption&lt;/a&gt;. I thought I'd share the answer here - its not really article-worthy but someone may get some use out of it.&lt;br /&gt;
&lt;br /&gt;
First I had to do a little RCE to figure out the command flow - in the case of an encrypted communication, I find the &amp;quot;recv&amp;quot; calls and work forward from there (and backwards from &amp;quot;send&amp;quot;, if the client uses encryption as well). Eventually I saw that at 0x403062 there is a command parser that executes the functions received from the botmaster. I checked in to the channel to get a sample of the encrypted commands, and saw that the syntax was something like:&lt;br /&gt;
&lt;br /&gt;
!Q gjcaekepejeocacdha&lt;br /&gt;
&lt;br /&gt;
So, following the command parser to the &amp;quot;Q&amp;quot; command (0x51) I landed at 0x4031d9. At that point I saw a loop right below it starting at 0x403204, which contained some &amp;quot;sub&amp;quot; and &amp;quot;shl&amp;quot; instructions which seemed to be the focus of the loop. Sounds like a trivial encryption loop. So I just went line-by-line converting the ASM into a Perl script, because I like to have a command-line tool for decrypting strings from stuff like this in the future.&lt;br /&gt;
&lt;br /&gt;
Sometimes its easy to see what is happening in the decryption loop just by looking at the code. Sometimes its a little harder, so when that happens I just step through the loop, observe registers and memory locations and comment *everywhere* so I get a grasp of what the ASM does and build up a picture of the loop's functionality. Even if I'm unfamiliar with the specific ASM instruction, observing registers and memory it is referencing can tell me what its purpose is. &lt;br /&gt;
&lt;br /&gt;
Here is the decryption ASM from Mocbot along with my comments:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
004031D9&amp;nbsp;&amp;nbsp;|&amp;gt;MOV EAX,DWORD PTR SS:[EBP+8]&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;code 51 = Q (arg)&lt;br /&gt;
004031DC&amp;nbsp;&amp;nbsp;|&amp;gt;MOVSX EAX,BYTE PTR DS:[EAX+1]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;; decrypt command and process&lt;br /&gt;
004031E0&amp;nbsp;&amp;nbsp;|&amp;gt;CMP EAX,20&lt;br /&gt;
004031E3&amp;nbsp;&amp;nbsp;|&amp;gt;JNZ exe11554.004032A9&lt;br /&gt;
004031E9&amp;nbsp;&amp;nbsp;|&amp;gt;MOV EAX,DWORD PTR SS:[EBP+8]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; command&lt;br /&gt;
004031EC&amp;nbsp;&amp;nbsp;|&amp;gt;INC 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;&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;;&amp;nbsp;&amp;nbsp;skip two chars&lt;br /&gt;
004031ED&amp;nbsp;&amp;nbsp;|&amp;gt;INC EAX&lt;br /&gt;
004031EE&amp;nbsp;&amp;nbsp;|&amp;gt;MOV DWORD PTR SS:[EBP-40C],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;40c = ptr to start&lt;br /&gt;
004031F4&amp;nbsp;&amp;nbsp;|&amp;gt;AND DWORD PTR SS:[EBP-408],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; ; offset&lt;br /&gt;
004031FB&amp;nbsp;&amp;nbsp;|&amp;gt;AND DWORD PTR SS:[EBP-404],0&lt;br /&gt;
00403202&amp;nbsp;&amp;nbsp;|&amp;gt;JMP SHORT exe11554.00403212&lt;br /&gt;
00403204&amp;nbsp;&amp;nbsp;|&amp;gt;/MOV EAX,DWORD PTR SS:[EBP-408]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;; loop start&lt;br /&gt;
0040320A&amp;nbsp;&amp;nbsp;|&amp;gt;|INC EAX&lt;br /&gt;
0040320B&amp;nbsp;&amp;nbsp;|&amp;gt;|INC EAX&lt;br /&gt;
0040320C&amp;nbsp;&amp;nbsp;|&amp;gt;|MOV DWORD PTR SS:[EBP-408],EAX&lt;br /&gt;
00403212&amp;nbsp;&amp;nbsp;|&amp;gt; MOV EAX,DWORD PTR SS:[EBP-40C]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;&amp;nbsp;&amp;nbsp;ptr to start&lt;br /&gt;
00403218&amp;nbsp;&amp;nbsp;|&amp;gt;|ADD EAX,DWORD PTR SS:[EBP-408]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;&amp;nbsp;&amp;nbsp;offset&lt;br /&gt;
0040321E&amp;nbsp;&amp;nbsp;|&amp;gt;|MOVSX EAX,BYTE PTR DS:[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; ;&amp;nbsp;&amp;nbsp;got some content?&lt;br /&gt;
00403221&amp;nbsp;&amp;nbsp;|&amp;gt;|TEST EAX,EAX&lt;br /&gt;
00403223&amp;nbsp;&amp;nbsp;|&amp;gt;|JE SHORT exe11554.0040328C&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;jump if not&lt;br /&gt;
00403225&amp;nbsp;&amp;nbsp;|&amp;gt;|MOV EAX,DWORD PTR SS:[EBP-40C]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;&amp;nbsp;&amp;nbsp;ptr&lt;br /&gt;
0040322B&amp;nbsp;&amp;nbsp;|&amp;gt;|ADD EAX,DWORD PTR SS:[EBP-408]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;&amp;nbsp;&amp;nbsp;+offset&lt;br /&gt;
00403231&amp;nbsp;&amp;nbsp;|&amp;gt;|MOVSX EAX,BYTE PTR DS:[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; ;&amp;nbsp;&amp;nbsp;first dword&lt;br /&gt;
00403234&amp;nbsp;&amp;nbsp;|&amp;gt;|SUB EAX,61&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;&amp;nbsp;&amp;nbsp;subtract 61&lt;br /&gt;
00403237&amp;nbsp;&amp;nbsp;|&amp;gt;|SHL EAX,4&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&amp;nbsp;&amp;nbsp;&amp;lt;&amp;lt; 4&lt;br /&gt;
0040323A&amp;nbsp;&amp;nbsp;|&amp;gt;|MOV ECX,DWORD PTR SS:[EBP-404]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;&amp;nbsp;&amp;nbsp;storage&lt;br /&gt;
00403240&amp;nbsp;&amp;nbsp;|&amp;gt;|MOV BYTE PTR SS:[EBP+ECX-400],AL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;&amp;nbsp;&amp;nbsp;store lower byte&lt;br /&gt;
00403247&amp;nbsp;&amp;nbsp;|&amp;gt;|MOV EAX,DWORD PTR SS:[EBP-40C]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;&amp;nbsp;&amp;nbsp;ptr&lt;br /&gt;
0040324D&amp;nbsp;&amp;nbsp;|&amp;gt;|ADD EAX,DWORD PTR SS:[EBP-408]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;&amp;nbsp;&amp;nbsp;+offset&lt;br /&gt;
00403253&amp;nbsp;&amp;nbsp;|&amp;gt;|MOVSX EAX,BYTE PTR DS:[EAX+1]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&amp;nbsp;&amp;nbsp;+1&lt;br /&gt;
00403257&amp;nbsp;&amp;nbsp;|&amp;gt;|SUB EAX,61&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;&amp;nbsp;&amp;nbsp;sub 61&lt;br /&gt;
0040325A&amp;nbsp;&amp;nbsp;|&amp;gt;|MOVSX EAX,AL&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;&amp;nbsp;&amp;nbsp;get it&lt;br /&gt;
0040325D&amp;nbsp;&amp;nbsp;|&amp;gt;|MOV ECX,DWORD PTR SS:[EBP-404]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;&amp;nbsp;&amp;nbsp;storage&lt;br /&gt;
00403263&amp;nbsp;&amp;nbsp;|&amp;gt;|MOVSX ECX,BYTE PTR SS:[EBP+ECX-400]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&amp;nbsp;&amp;nbsp;grab stored byte&lt;br /&gt;
0040326B&amp;nbsp;&amp;nbsp;|&amp;gt;|ADD ECX,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;&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;add result&lt;br /&gt;
0040326D&amp;nbsp;&amp;nbsp;|&amp;gt;|MOV EAX,DWORD PTR SS:[EBP-404]&lt;br /&gt;
00403273&amp;nbsp;&amp;nbsp;|&amp;gt;|MOV BYTE PTR SS:[EBP+EAX-400],CL&lt;br /&gt;
0040327A&amp;nbsp;&amp;nbsp;|&amp;gt;|MOV EAX,DWORD PTR SS:[EBP-404]&lt;br /&gt;
00403280&amp;nbsp;&amp;nbsp;|&amp;gt;|INC EAX&lt;br /&gt;
00403281&amp;nbsp;&amp;nbsp;|&amp;gt;|MOV DWORD PTR SS:[EBP-404],EAX&lt;br /&gt;
00403287&amp;nbsp;&amp;nbsp;|&amp;gt;\JMP exe11554.00403204&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Here is the resulting perl script:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my $crypt = $ARGV[0];&lt;br /&gt;
die &amp;quot;Usage: $0 &amp;lt;Mocbot crypted command&amp;gt;\n&amp;quot; unless $crypt =~ /^[a-z]+$/;&lt;br /&gt;
for (my $i = 0; $i &amp;lt; length($crypt); $i+=2)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print chr((ord(substr($crypt, $i, 1)) - 0x61 &amp;lt;&amp;lt; 4) +&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(ord(substr($crypt, $i+1, 1)) - 0x61));&lt;br /&gt;
}&lt;br /&gt;
print &amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Last thing to do is test against our known encrypted command:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
./decode.pl gjcaekepejeocacdha&lt;br /&gt;
&lt;b&gt;i JOIN #p&lt;/b&gt;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
So the decrypted command is &amp;quot;i&amp;quot;, a raw IRC command and the arguments tell the bot to join a second channel.&lt;br /&gt;
&lt;br /&gt;
That's about it - just a little short-duration but highly focused RCE and some scripting.&lt;br /&gt;
</description>
                    </item>
                <item>
            <title>OllyBonE at DefCon</title>
                            <pubDate>Mon, 07 Aug 2006 10:34:32 -0500</pubDate>
                                        <link>https://www.openrce.org/blog/view/382/OllyBonE_at_DefCon</link>
                                        <author>joestewart &lt;email-suppressed@example.com&gt;</author>
                                                    <description>I've uploaded the OllyBonE unpacking plugin along with my presentation slides (in OpenDocument format) to:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.joestewart.org/ollybone/&quot;&gt;http://www.joestewart.org/ollybone/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Also there is a 16-meg vcd-quality copy of the video demonstration I gave during the talk.</description>
                    </item>
                <item>
            <title>Back from ShmooCon</title>
                            <pubDate>Mon, 16 Jan 2006 05:42:23 -0600</pubDate>
                                        <link>https://www.openrce.org/blog/view/106/Back_from_ShmooCon</link>
                                        <author>joestewart &lt;email-suppressed@example.com&gt;</author>
                                                    <description>My talk on sandnets went pretty well, considering I had just finished running about a quarter-mile uphill shortly before walking into the room with three minutes to spare and a full audience waiting for me.&lt;br /&gt;
&lt;br /&gt;
Although it's not strictly RCE, I thought I'd post the URL here for anyone who wanted to take a look. &lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.lurhq.com/truman/&quot;&gt;http://www.lurhq.com/truman/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I'll be giving mostly the same talk at CodeCon 2006 in one month, so if you missed ShmooCon, you can always catch it at CodeCon.&lt;br /&gt;
&lt;br /&gt;
BTW, if you were at ShmooCon and the ShmooBalls you were given were dented (both of mine were) you can microwave them for about 20 seconds to get rid of the dents.&lt;br /&gt;
</description>
                    </item>
                <item>
            <title>OllyVBHelper</title>
                            <pubDate>Wed, 16 Nov 2005 10:28:17 -0600</pubDate>
                                        <link>https://www.openrce.org/blog/view/76/OllyVBHelper</link>
                                        <author>joestewart &lt;email-suppressed@example.com&gt;</author>
                                                    <description>Here's a plugin I've been putting off writing for a while. A lot of times when disassembling compiled VB code, it takes a lot of manual labeling to get to a readable state. For instance, DllFunctionCall stubs are not labeled, so any calls/jumps to common Win32 API code will be unlabeled as well. Also, Olly names the MSVBVM import thunks by their import name, which is often just an ordinal number. This plugin searches the import thunks and relabels them by the MSVBVM export name instead. Source code is included.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://www.openrce.org/repositories/users/joestewart/ollyvbhelper.zip&quot;&gt;https://www.openrce.org/repositories/users/joestewart/ollyvbhelper.zip&lt;/a&gt;&lt;br /&gt;
</description>
                    </item>
                <item>
            <title>Update to AttachAnyway</title>
                            <pubDate>Wed, 07 Sep 2005 11:05:56 -0500</pubDate>
                                        <link>https://www.openrce.org/blog/view/43/Update_to_AttachAnyway</link>
                                        <author>joestewart &lt;email-suppressed@example.com&gt;</author>
                                                    <description>I've updated my AttachAnyway plugin to be able to&lt;br /&gt;
attach to processes protected by Piotr's anti-debugger-attach method two.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.joestewart.org/tools/attachanyway.zip&quot;&gt;http://www.joestewart.org/tools/attachanyway.zip&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
In it, we just find the PEB_LDR_DATA pointer and VirtualProtectEx the bytes back to PAGE_READWRITE - thus the exception handler will never alert that the page has been accessed by the debugger when attaching. This is harder than it first sounds; Windows XP SP2 no longer keeps the TEB/PEB at static locations, (you can't just do FS:[0] to find the PEB because you are not running in the context of that process) you have to search for the TEB/PEB blocks by signature.&lt;br /&gt;
&lt;br /&gt;
There's probably a more elegant way (this would make a good tutorial if you have a better way to locate the TEB of another process), but it works. Once again, this is just PoC, no guarantees it'll work everywhere.&lt;br /&gt;
&lt;br /&gt;
Update: anonymouse has suggested an alternative, more elegant way to find the PEB of another process using NtQueryInformationProcess, which you can check out on his blog:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://www.openrce.org/blog/browse/anonymouse&quot;&gt;https://www.openrce.org/blog/browse/anonymouse&lt;/a&gt;&lt;br /&gt;
</description>
                    </item>
            </channel>
</rss>
