<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title><![CDATA[RCE Messageboard's Regroupment]]></title>
		<link>http://www.woodmann.com/forum/</link>
		<description>Serious reversing, cracking and programming discussions</description>
		<language>en</language>
		<lastBuildDate>Wed, 08 Sep 2010 21:35:13 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>60</ttl>
		<image>
			<url>http://www.woodmann.com/forum/images/misc/rss.png</url>
			<title><![CDATA[RCE Messageboard's Regroupment]]></title>
			<link>http://www.woodmann.com/forum/</link>
		</image>
		<item>
			<title>PAPER: JIT spraying and mitigations</title>
			<link>http://www.woodmann.com/forum/showthread.php?13829-PAPER-JIT-spraying-and-mitigations&amp;goto=newpost</link>
			<pubDate>Mon, 06 Sep 2010 11:17:26 GMT</pubDate>
			<description>*ABSTRACT*: 
With the discovery of new exploit techniques, novel protection mechanisms are needed as well. Mitigations like DEP (Data Execution Prevention) or ASLR (Address Space Layout Randomization) created a significantly more difficult environment for exploitation. Attackers, however, have...</description>
			<content:encoded><![CDATA[<!-- BEGIN TEMPLATE: postbit_external -->
<div><b>ABSTRACT</b>:<br />
With the discovery of new exploit techniques, novel protection mechanisms are needed as well. Mitigations like DEP (Data Execution Prevention) or ASLR (Address Space Layout Randomization) created a significantly more difficult environment for exploitation. Attackers, however, have recently researched new exploitation methods which are capable of bypassing the operating system&#8217;s memory mitigations. One of the newest and most popular exploitation techniques to bypass both of the aforementioned security protections is JIT memory spraying, introduced by Dion Blazakis. In this article we will present a short overview of the JIT spraying technique and also novel mitigation methods against this innovative class of attacks. An anti-JIT spraying library was created as part of our shellcode execution prevention system.<br />
<br />
<i><u>DOWNLOAD HERE</u></i><br />
<br />
MIRROR:<br />
<i><u>LOCAL MIRROR</u></i><br />
<br />
PS. You can catch me on twitter (<i><u>http://twitter.com/PiotrBania</u></i>) -- however i'm mostly tweeting only about midget car racing.<br />
<br />
<i><u>http://blog.piotrbania.com/2010/09/paper-jit-spraying-and-mitigations.html</u></i></div>

 
<!-- END TEMPLATE: postbit_external -->]]></content:encoded>
			<category domain="http://www.woodmann.com/forum/forumdisplay.php?46-Blogs-Forum">Blogs Forum</category>
			<dc:creator>Piotr Bania Chronicles</dc:creator>
			<guid isPermaLink="true">http://www.woodmann.com/forum/showthread.php?13829-PAPER-JIT-spraying-and-mitigations</guid>
		</item>
		<item>
			<title>How to find code generating known data?</title>
			<link>http://www.woodmann.com/forum/showthread.php?13828-How-to-find-code-generating-known-data&amp;goto=newpost</link>
			<pubDate>Mon, 06 Sep 2010 05:17:00 GMT</pubDate>
			<description><![CDATA[From debugging the program I only know that before clicking a link a set of known data isn't in memory (confirmed by memory search) and after clicking it the data is in memory (all the time a different location). 
 
How can I find the code that generates this data? 
 
One of the major problems...]]></description>
			<content:encoded><![CDATA[<!-- BEGIN TEMPLATE: postbit_external -->
<div>From debugging the program I only know that before clicking a link a set of known data isn't in memory (confirmed by memory search) and after clicking it the data is in memory (all the time a different location).<br />
<br />
How can I find the code that generates this data?<br />
<br />
One of the major problems (which might be important to know) is that it is a .net-Program (which I can't analyze with Reflector because it is obfuscated). So I'm analyzing the assembly generated by .NET (in Olly / Immunity / IDA).<br />
<br />
Instruction Tracing or stepping through the code after the click isn't possible because .NET generates to much code to do it in acceptable time.</div>

 
<!-- END TEMPLATE: postbit_external -->]]></content:encoded>
			<category domain="http://www.woodmann.com/forum/forumdisplay.php?2-Advanced-reversing-and-programming">Advanced reversing and programming</category>
			<dc:creator>nomatter</dc:creator>
			<guid isPermaLink="true">http://www.woodmann.com/forum/showthread.php?13828-How-to-find-code-generating-known-data</guid>
		</item>
		<item>
			<title>Kernel exploitation  r0 to r3 transitions via KeUserModeCallback</title>
			<link>http://www.woodmann.com/forum/showthread.php?13827-Kernel-exploitation--r0-to-r3-transitions-via-KeUserModeCallback&amp;goto=newpost</link>
			<pubDate>Sun, 05 Sep 2010 23:56:31 GMT</pubDate>
			<description>Hey there! 
 
I have recently came across (well, not entirely by myself... cheers Nahuel!) a fairly (un)common problem related to performing ring0-to-ring3 transitions, after a successful kernel vulnerability exploitation. As I have managed to come up with a bunch of possible solutions, and even...</description>
			<content:encoded><![CDATA[<!-- BEGIN TEMPLATE: postbit_external -->
<div>Hey there!<br />
<br />
I have recently came across (well, not entirely by myself... cheers Nahuel!) a fairly (un)common problem related to performing ring0-to-ring3 transitions, after a successful kernel vulnerability exploitation. As I have managed to come up with a bunch of possible solutions, and even write exemplary code for some of these, today I would like to present my thoughts, together with some brief explanation.<br />
<br />
<br />
<br />
<b>Introduction</b><br />
<br />
Before trying to find a reliable solution to the problem, it should be clearly stated first. And so, we are considering a 32-bit Windows NT-family version (one of the supported ones), suffering from a stack-based buffer overflow inside one of the system call handler functions. The attacker is able to overwrite memory placed <i>after</i> a fixed-size buffer, including the stack frame, return address, syscall arguments and anything else reachable from this point. As opposed to the reality, we assume that there is no stack protection (i.e. a cookie) implemented, so the security flaw can lead straight into malicious code execution and system compromise. Furthermore, the overflow is triggered right inside the <i>syscall handler</i>, not a nested function of any kind.<br />
<br />
The following ascii picture, presenting the stack layout at the time of the overflow, should give you a better insight of the described scenario:<br />
<br />
<!-- BEGIN TEMPLATE: bbcode_code_printable -->
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">+-----------------------+<br />
|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  |<br />
|&nbsp; local variables (1)&nbsp; |<br />
|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  |<br />
+-----------------------+<br />
|&nbsp; &nbsp; &nbsp; CHAR buf[32]&nbsp; &nbsp;  | -+<br />
+-----------------------+&nbsp; |<br />
|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  |&nbsp; |<br />
|&nbsp; local variables (2)&nbsp; |&nbsp; | overflow<br />
|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  |&nbsp; | direction<br />
+-----------------------+&nbsp; |<br />
|&nbsp; &nbsp;  stack frame&nbsp; &nbsp; &nbsp;  |&nbsp; |<br />
+-----------------------+&nbsp; v<br />
|&nbsp; &nbsp; return address&nbsp; &nbsp;  |<br />
+-----------------------+<br />
|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  |<br />
|&nbsp;  syscall parameters&nbsp; |<br />
|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  |<br />
+-----------------------+<br />
|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  |<br />
| KiFastCallEntry stack |<br />
|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  |<br />
|&nbsp; &nbsp; &nbsp; &nbsp;  (...)&nbsp; &nbsp; &nbsp; &nbsp;  |</code><hr />
</div> 
<!-- END TEMPLATE: bbcode_code_printable -->So, here we are; able to control roughly any value, which could lead us into code execution... a perfect dream for every vulnerability researcher. There is one more requirement, however - we must, by any means, return to user-mode, in order to exit the exploit process in a legitimate way (such as using <i><u>ExitProcess</u></i>). So, how do we achieve it, assuming that the original values of the return address, and possibly some of the syscall arguments are lost (due to being overwritten by attacker-supplied data)? Let's find out, what the options are.<br />
<br />
<b>KiFastCallEntry and KiServiceExit</b><br />
<br />
Under normal system execution (i.e. when its stability and security don't collapse), each system call handler - such as NtOpenFile - returns to its original caller, the <i>KiFastCallEntry</i> function. This routine, in turn, is a dispatcher most often used upon the <i><u><i>sysenter</i></u></i> instruction being utilized by ring-3 code (however, it is also used by kernel modules, when taking advantage of system services). After calling an adequate handler from <i>KeServiceDescriptorTable</i>, the dispatcher is supposed to lower the processor privilege level, by returning to where the <i>syscall</i> instruction was triggered.<br />
<br />
The latter part of the job is implemented by the <i>KiServiceExit</i> routine, responsible for coming back to the service caller, whatever it is. Interestingly enough, <i>KiFastCallEntry</i> doesn't need to call the exit function, thanks to a specific assembly code layout, designed by the system developers:<br />
<br />
<!-- BEGIN TEMPLATE: bbcode_code_printable -->
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">+-----------------------+<br />
| nt!KiFastCallEntry&nbsp; &nbsp; |<br />
|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  | --+<br />
|&nbsp; &nbsp; &nbsp; /* code */&nbsp; &nbsp; &nbsp;  |&nbsp;  |<br />
|&nbsp; &nbsp; &nbsp;  CALL EBX&nbsp; &nbsp; &nbsp; &nbsp; | &lt;-|-- EBX = syscall handler address<br />
|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  |&nbsp;  |<br />
|-----------------------|&nbsp;  |<br />
| nt!KiServiceExit&nbsp; &nbsp; &nbsp; |&nbsp;  |<br />
|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  |&nbsp;  | code execution direction<br />
|&nbsp; &nbsp; &nbsp; /* code */&nbsp; &nbsp; &nbsp;  |&nbsp;  v<br />
|&nbsp; &nbsp; &nbsp;  SYSEXIT&nbsp; &nbsp; &nbsp; &nbsp;  |<br />
|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  |</code><hr />
</div> 
<!-- END TEMPLATE: bbcode_code_printable -->As the <i>KiServiceExit</i> implementation directly follows the &quot;end&quot; of <i>KiFastCallEntry</i>, the code execution automatically moves from one routine, into another. This way, no actual <i>call</i> instruction is required, as the smart layout causes <i>KiServiceExit</i> to always execute after returning from the syscall handler. Due to the fact, that by exchanging the original return address with the one pointing at our shellcode, we do not land inside <i>KiServiceExit</i> automatically, anymore. What makes the situation even worse, is the fact that the exit routine is an internal symbol, not publicly exported to other, ring-0 modules.<br />
<br />
Considering the above conditions, finding a reliable way of returning into user-mode might appear to be somewhat problematic. The next couple of sections aim to show the bright and dark sides of some possible solutions, which I have been able to think of - if there is something I have apparently missed, please let me know - I will be glad to extend the article with additional material <img src="http://j00ru.vexillium.org/wp-includes/images/smilies/icon_wink.gif" border="0" alt="" /> <br />
<br />
<b>Obtaining internal kernel symbols</b><br />
<br />
The first, and probably most straight-forward solution one could think of, requires the attacker to recognize the precise version of the kernel image being used, and take advantage of symbols' packages, publicly available on Microsoft servers. An adequate package could be either downloaded at run-time (provided that the attacked machine is connected to internet at the time of the exploitation), or distributed together with the malicious application. A <i>lighter</i> version of the latter option could rely on hard-coding the KiServiceExit function addresses, for every single kernel image version possible.<br />
<br />
<b>Advantages</b>: If the exploit was taking advantage of legitimate, Microsoft-supplied symbols or using a static table of supported Windows editions together with the desired kernel addresses, it could achieve a decent level of reliability. If one knows the KiServiceExit memory placement, there isn't much left to be done - just aligning the stack as it would be upon a normal syscall return, and jumping to the routine after the payload completes.<br />
<br />
<b>Disadvantages</b>: In case the attacker decided to download a complete <i>ntosknrl.exe</i> symbol file from the web, he could probably put the entire operation at risk, as the the .pdb file being retrieved can be as large as 5MB (or more). The exploit could obviously employ various DKOM-style techniques, in order to hide the connection; this would only work for the local machine, though - how about other computers in the network, and/or devices along the way to the global net? The attacker could be either caught in the first place, or leave significant amounts of proof for the forensics researchers.<br />
If, in turn, the attacker went towards using hardcoded-values, he would be forced to keep his exploit up-to-date, in the context of new system patches being released along the way.<br />
<br />
Problems of the above nature are, obviously, not an issue, if the attacker has a relatively small number of targets, and is able to figure out the computers' kernel versions by other means (i.e. having a local account on a given machine would usually help a lot).<br />
<br />
<b>Signature scan</b><br />
<br />
Another, well-known way of retrieving the address-of-whatever relies on performing a quick &amp; dirty signature scan of the memory. In this particular case, one would have to scan the entire <i>ntoskrnl.exe</i> image memory area, in search of a previously-extracted signature, unique for the KiServiceExit routine. The signature could (or probably: <i>should</i>) be constructed so that it would work for every operating system out there, or be kept inside a hard-coded table of supported kernel versions (as mentioned in the previous section).<br />
<br />
<b>Advantages</b>: The exploit doesn't have to establish any outgoing connections. In fact, it doesn't make use of the internet, at all. Depending on the length and quality of the signature, as well as the numbers of kernel modifications applied by Microsoft, this technique could turn out to be either reliable, or the very opposite. According to the author, it is usually best to consider signature-scanning unreliable, regardless of the conditions. If, however, the attacker proved that the KiServiceExit address can be easily obtained, using a signature valid for all existing systems and is unlikely to change - I would claim such solution to be a relatively good one.<br />
<br />
<b>Disadvantages</b>: As far as my experience goes, using constant signatures is rarely a good idea, especially if there are other options to pick. The exploit developer can be never certain that Microsoft doesn't unexpectedly change the kernel code, stack layout, or anything affecting the function assembly being relied on. What is worse, the problem is not only about changing the KiServiceExit contents itself - it is enough that a new byte sequence, matching the existing pattern appears <i>anywhere</i> in the kernel image; and the exploit is fooled. Concluding - not a recommended technique, when it comes to my opinion.<br />
<br />
<b>Own <i>KiServiceExit</i> implementation</b><br />
<br />
The next solution to be considered, would require the exploit developer to create his own implementation of the exit routine, rather than keep trying to (non-deterministically) find it's virtual address in memory. This is possible because of the fact that we're executing with the same rights as the kernel itself, and are able to use any privileged instruction it uses. The only problem here could be potentially caused by the complexity of the function - fortunately, it is not the case for KiServiceExit.<br />
<br />
<b>Advantages</b>: The major upside of this method, resides in the fact that we are not dependent on virtual addresses of any kind (apart from the actual payload, which might require these). In other words, it is possible to implement one payload <i>epilogue</i>, and use it across numerous system versions, as long as the stack layout (most importantly - the trap frame) doesn't change. According to my observations, the KiServiceExit routine either doesn't change at all, or is changed in minor parts (i.e. single instructions). Even though there might be a few differences between Windows 2000 and Windows Vista; such low-level parts of the system aren't modified in one day. And so, carefully preparing one, separate implementation of the function for each Windows NT-family release (2000, XP, Vista, 7) should be sufficient to keep the reliability on a very high level.<br />
<br />
<b>Disadvantages</b>: One actual drawback, which could be pointed out is that the solution is still not as elegant, as it could possibly be. That's due to the fact that the kernel-to-user transition is being performed, using highly undocumented (except for the \ntos\ke\i386\trap.asm file, present inside the <i><u>Windows Research Kernel</u></i> package) system behavior and internal offsets. As a consequence, even though it is very likely that someone's implementation of the exit routine will work on any build of a specific Windows version, there is no certainty about it - especially in the context of future Windows versions.<br />
<br />
<b>The <i>KeUserModeCallback</i> technique</b><br />
<br />
Last, but not least - the technique that was my first thought, when I started reflecting on the problem. Since the mechanism taken advantage of, in this method, has been already described numerous times (such as the &quot;<i><u>KeUserModeCallback utilization</u></i>&quot; section of <i><u>mxatone's article</u></i>, or <i><u>Nynaeve's post</u></i>), I will only give a brief explanation of its concept.<br />
<br />
Under normal conditions, ring-3 code can only interact with the kernel modules via <i>system calls</i> (regular interrupts are mostly deprecated, while call-gates are not used, at all). This basic scheme relies on the fact, that user applications send specific requests, asking the kernel either to perform operations, which require higher processor privileges, or to be supplied with necessary information. A request is made (via theINT 2E or sysenter instruction), kernel dispatches the requests and possibly returns some information - then comes back to user mode (via either iretd or sysexit). Following the above scheme, one could consider system calls to be a specific type of callback functions - whenever an application wants to interact with the system, it <i>calls back</i> an adequate function from the kernel.<br />
<br />
As it turns out, the kernel might want to <i>call back</i> into user-mode, as well! More precisely, the standard graphical driver (win32k.sys), needs to use ring-3 routines in numerous situations; in order to send notifications about graphical events going on, or to request some information. In order to meet the requirements, a special interface called <i>user-mode callbacks</i> was developed inside the NT kernel. The interface actually consists of one public, and a few internal kernel routines:<br />
<br />
<!-- BEGIN TEMPLATE: bbcode_code_printable -->
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">NTSTATUS KeUserModeCallback (<br />
&nbsp; &nbsp; IN ULONG ApiNumber,<br />
&nbsp; &nbsp; IN PVOID InputBuffer,<br />
&nbsp; &nbsp; IN ULONG InputLength,<br />
&nbsp; &nbsp; OUT PVOID *OutputBuffer,<br />
&nbsp; &nbsp; IN PULONG OutputLength<br />
&nbsp; &nbsp; );</code><hr />
</div> 
<!-- END TEMPLATE: bbcode_code_printable -->By using the above function, exported by ntoskrnl.exe, the graphical module is able to perform a legitimate ring-0 into ring-3 transition. What happens next, is that some basic information regarding the execution state is stored on the kernel stack, and the execution is passed to the user-mode <u>ntdll.KiUserCallbackDispatcher</u> function, of the following prototype:<br />
<br />
<!-- BEGIN TEMPLATE: bbcode_code_printable -->
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">VOID KiUserCallbackDispatcher(<br />
&nbsp; &nbsp; IN ULONG ApiNumber,<br />
&nbsp; &nbsp; IN PVOID InputBuffer,<br />
&nbsp; &nbsp; IN ULONG InputLength<br />
&nbsp; &nbsp; );</code><hr />
</div> 
<!-- END TEMPLATE: bbcode_code_printable -->The dispatcher is then responsible for forwarding the execution into one of the callback routines (the EDX register contains the ApiNumber parameter):<br />
<br />
<!-- BEGIN TEMPLATE: bbcode_code_printable -->
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">mov eax, large fs:18h<br />
mov eax, [eax+30h]<br />
mov eax, [eax+2Ch]<br />
call dword ptr [eax+edx*4]</code><hr />
</div> 
<!-- END TEMPLATE: bbcode_code_printable -->Seemingly, the user-side dispatch table is pointed to by one of the PEB (<i><u>Process Environment Block</u></i>) fields. After the given callback completes its task, it resumes the win32k.sys execution by either using a dedicated interrupt (INT 2D, internally <i>called KiCallbackReturn</i>), or triggering the <i>NtCallbackReturn</i> system call. The question is - how does the above information help us achieve the desired exploitation effect?<br />
<br />
Thanks to the fact that KeUserModeCallback is a public symbol, any active module running in kernel-mode can call the function in a fully reliable manner. What is more, we can also hook the KiUserCallbackDispatcher function, or better yet - redirect the dispatch table pointer, residing inside PEB. If we perform the above steps, we become able to trigger our own, fully controlled, kernel-to-user transitions. Thanks to the clever NT kernel, we don't really have to care about what is left on the kernel stack, as it will be gracefully cleaned up, upon the process termination. Below, you can find exemplary code snippets, responsible for accomplishing each stage of the safe kernel-to-user transition:<br />
<ol class="decimal"><li>Loading the graphical library - before we decide to touch any of the win32-related PEB fields, we should make sure that the user32.dll library has been previously loaded. This way, we are guaranteed, that both the user- and kernel- parts of the system graphics are correctly initialized for our process.<br />
<br />
<!-- BEGIN TEMPLATE: bbcode_code_printable -->
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">LoadLibraryA(&quot;user32.dll&quot;);</code><hr />
</div> 
<!-- END TEMPLATE: bbcode_code_printable --></li>
<li>Replace the original dispatch table pointer, with the one controlled by us.<br />
<br />
<!-- BEGIN TEMPLATE: bbcode_code_printable -->
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">LPVOID GetFSBase(void)<br />
{<br />
&nbsp; LDT_ENTRY ldt;<br />
&nbsp; GetThreadSelectorEntry(GetCurrentThread(), GetFS(), &amp;ldt);<br />
&nbsp; return (LPVOID)(ldt.BaseLow | (ldt.HighWord.Bytes.BaseMid &lt;&lt; 16) | (ldt.HighWord.Bytes.BaseHi &lt;&lt; 24));<br />
}<br />
<br />
(...)<br />
<br />
&nbsp;for( i=0;i&lt;DISPATCH_TABLE_SIZE;i++ )<br />
&nbsp;  DispatchTable[i] = CallbackHandler;<br />
<br />
&nbsp;BYTE* Teb = GetFSBase();<br />
&nbsp;Teb = *(DWORD*)(Teb+0x18);<br />
&nbsp;Teb = *(DWORD*)(Teb+0x30);<br />
&nbsp;*(DWORD*)(Teb+0x2C) = DispatchTable;</code><hr />
</div> 
<!-- END TEMPLATE: bbcode_code_printable --></li>
<li>Retrieve the nt!KeUserModeCallback address. This step can be achieved, by taking advantage of the PSAPI interface (to retrieve the ImageBase of the kernel image; <i><u>EnumDeviceDrivers</u></i> and <i><u>GetDeviceDriverBaseNameA</u></i> are of much use), loading the very same image in the context of our application, and performing some simple maths. I have made use of my personal <i>GetKernelProcAddress</i> function this time - implementing this one is left as an exercise to the reader <img src="http://j00ru.vexillium.org/wp-includes/images/smilies/icon_wink.gif" border="0" alt="" /><br />
<br />
<!-- BEGIN TEMPLATE: bbcode_code_printable -->
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">KeUserModeCallback = (typeof(KeUserModeCallback))GetKernelProcAddress(&quot;ntoskrnl.exe&quot;,&quot;KeUserModeCallback&quot;);</code><hr />
</div> 
<!-- END TEMPLATE: bbcode_code_printable --></li>
<li>Trigger the buffer overflow, leading to the Payload() function being executed. <i>Shellcode</i> represents the actual code for elevating user privileges, starting up a reverse shell, or whatever else you can think of.<br />
<br />
<!-- BEGIN TEMPLATE: bbcode_code_printable -->
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">VOID Payload()<br />
{<br />
&nbsp; ((VOID(*)())Shellcode)();<br />
&nbsp; KeUserModeCallback(0,0,0,0,0);<br />
}</code><hr />
</div> 
<!-- END TEMPLATE: bbcode_code_printable --></li>
<li>Catch the user-mode callback inside CallbackHandler(), and gracefully terminate the process.<br />
<br />
<!-- BEGIN TEMPLATE: bbcode_code_printable -->
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">DWORD CallbackHandler()<br />
{<br />
&nbsp; if(b0f_triggered) ExitProcess();<br />
<br />
&nbsp; NtCallbackReturn(0,0,ERROR_SUCCESS);<br />
&nbsp; return ERROR_SUCCESS;<br />
}</code><hr />
</div> 
<!-- END TEMPLATE: bbcode_code_printable --></li>
<li>That's it, we're done!</li>
</ol>What should be eventually noted, is that the KeUserModeCallback leads to the KiServiceExit function in the end, as the following call chain shows:<br />
<br />
<!-- BEGIN TEMPLATE: bbcode_code_printable -->
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">| nt!KeUserModeCallback<br />
| nt!KiCallUserMode<br />
v nt!KiServiceExit</code><hr />
</div> 
<!-- END TEMPLATE: bbcode_code_printable -->Let's take a closer look at the actual pros and cons of the presented technique.<br />
<br />
<b>Advantages</b>: The entire solution basically relies on two steps: calling a <u>public</u> nt!KeUserModeCallback routine after successful exploitation, and &quot;catching&quot; the execution flow at the <u>public</u> ntdll!KiUserCallbackDispatcher function, or at one of the callback handlers, pointed to by the PEB. Seemingly, both steps can be accomplished in a fully reliable way, as long as Microsoft decides to either completely remove one of the utilized functions, or make it an internal symbol. Since such a scenario is highly unlikely, we can safely assume that the technique is, and will be perfect for returning into user-code from difficult situations (such as a seriously damaged stack).<br />
<br />
<b>Disadvantages</b>: One, possible disadvantage that comes into my mind, is that replacing the PEB pointer, containing the dispatch table might not be as easy as one might suppose. Due to the fact that high PEB offsets are likely to change between different Windows versions, the attacker should take this fact into consideration when planning a world-wide, cross-version attack. This downside doesn't change anything though, as it is possible to disrupt the execution yet inside the exported KiUserCallbackDispatcher, as mentioned before. If you know about any other drawbacks I am not aware of, please let me know.<br />
<br />
<b>Why so serious (about ring-3)?</b><br />
<br />
Looking at the above text, one might wonder, why the problem is stated so that the kernel-to-user transition <u>must</u> take place, when it doesn't have to under normal circumstances. The answer is - because. When it comes to kernel-mode, there are bunches of bunches of possible scenarios, machine states, and other factors which sometimes can be predicted, and sometimes not; returning to user-mode <i>might</i> be the best choice, at times. One should keep in mind, however, that there are ways to terminate the current process from within ring-0 (such as <i><u>nt!ZwTerminateProcess</u></i>). Or better yet - once code execution is achieved, the process could simply load a regular rootkit driver (hiding the existence of the process), and remain in the idle state until machine reboot, by infinitely calling nt!ZwYieldExecution.<br />
<br />
<b>Conclusion</b><br />
<br />
In this post, I aimed at presenting yet another, interesting scenario related to the kernel exploitation field, with a couple of possible solutions. Even thought situations of the described nature don't tend to happen very often, they do. Besides that, all four techniques are directed towards universality, so they can be used not only when a stack-based buffer overflow takes place, but whatever kind of situation when it is hard, or impossible to resume the original track of kernel code execution. So, that's it... comments are welcome, as always! <img src="http://j00ru.vexillium.org/wp-includes/images/smilies/icon_wink.gif" border="0" alt="" /> <br />
<br />
Have fun.<br />
<br />
<br />
<br />
<i><u>http://j00ru.vexillium.org/?p=614</u></i></div>

 
<!-- END TEMPLATE: postbit_external -->]]></content:encoded>
			<category domain="http://www.woodmann.com/forum/forumdisplay.php?46-Blogs-Forum">Blogs Forum</category>
			<dc:creator>j00ru vx tech blog</dc:creator>
			<guid isPermaLink="true">http://www.woodmann.com/forum/showthread.php?13827-Kernel-exploitation--r0-to-r3-transitions-via-KeUserModeCallback</guid>
		</item>
		<item>
			<title>Virtob.si yet ready to infect you..</title>
			<link>http://www.woodmann.com/forum/showthread.php?13825-Virtob.si-yet-ready-to-infect-you..&amp;goto=newpost</link>
			<pubDate>Sun, 05 Sep 2010 20:37:16 GMT</pubDate>
			<description>damn, today i did browse some old (jan 2010) downloaded samples..  
 
789981e352460461755325a3c109ee95a7c81c51 *Virtob.si 
 
cmon, they are ready to infect you at high level.. 
so there is not any normal anti-malware control over net.. :stunned: 
 
http://ad.ghura.pl/rus.php...</description>
			<content:encoded><![CDATA[<!-- BEGIN TEMPLATE: postbit_external -->
<div>damn, today i did browse some old (jan 2010) downloaded samples.. <br />
<br />
789981e352460461755325a3c109ee95a7c81c51 *Virtob.si<br />
<br />
cmon, they are ready to infect you at high level..<br />
so there is not any normal anti-malware control over net.. :stunned:<br />
<br />
http://ad.ghura.pl/rus.php<br />
http://kdert.com/kb2.txt<br />
http://kdert.com/wmp/dmq4.txt<br />
<br />
pass: <font color="Red">MALWARE</font></div>


	<div style="padding:10px">

	

	

	

	
		<fieldset class="fieldset">
			<legend>Attached Files</legend>
			<ul>
			<!-- BEGIN TEMPLATE: postbit_attachment -->
<li>
	<img class="inlineimg" src="/zip.gif" alt="File Type: zip" />
	<a href="http://www.woodmann.com/forum/attachment.php?attachmentid=2338&amp;d=1283718269">virtob_si_DLDS.zip</a> 
(508.5 KB)
</li> 
<!-- END TEMPLATE: postbit_attachment -->
			</ul>
		</fieldset>
	

	</div>
 
<!-- END TEMPLATE: postbit_external -->]]></content:encoded>
			<category domain="http://www.woodmann.com/forum/forumdisplay.php?4-Malware-Analysis-and-Unpacking-Forum">Malware Analysis and Unpacking Forum</category>
			<dc:creator>evaluator</dc:creator>
			<guid isPermaLink="true">http://www.woodmann.com/forum/showthread.php?13825-Virtob.si-yet-ready-to-infect-you..</guid>
		</item>
		<item>
			<title>OllyDBG and a VB exe</title>
			<link>http://www.woodmann.com/forum/showthread.php?13824-OllyDBG-and-a-VB-exe&amp;goto=newpost</link>
			<pubDate>Sun, 05 Sep 2010 18:42:42 GMT</pubDate>
			<description>I have a VB exe. I used peid to check any encryption and told Microsoft Visual Basic 5.0 / 6.0 encrypt. Now I used many other files on VB and all is working perfect on ollydb the code appears right, I canīt run the exes but i was able to see the code nice and is sufficient to me but now in this new...</description>
			<content:encoded><![CDATA[<!-- BEGIN TEMPLATE: postbit_external -->
<div>I have a VB exe. I used peid to check any encryption and told Microsoft Visual Basic 5.0 / 6.0 encrypt. Now I used many other files on VB and all is working perfect on ollydb the code appears right, I canīt run the exes but i was able to see the code nice and is sufficient to me but now in this new exe is strange appears code like this:<br />
<br />
Private Sub OKButton_Click() '11CBBEC<br />
  'Data Table: 43454C<br />
  Dim  As Timer<br />
  loc_11CA3A8: LargeBos loc_11CA3AA 'Ignore this<br />
  loc_11CA3AA: LargeBos loc_11CA3AF 'Ignore this<br />
  loc_11CA3AC: On Error Resume Next<br />
  loc_11CA3AF: LargeBos loc_11CA3B7 'Ignore this<br />
  loc_11CA3B1: ImpAdLdI2 MemVar_140689C<br />
  loc_11CA3B4: BranchF loc_11CAC6E<br />
  loc_11CA3B7: LargeBos loc_11CA3C8 'Ignore this<br />
  loc_11CA3B9: FLdPr Me<br />
  loc_11CA3BC: MemLdI2 global_52<br />
  loc_11CA3BF: LitI2_Byte 1<br />
  loc_11CA3C1: AddI2<br />
  loc_11CA3C2: FLdPr Me<br />
  loc_11CA3C5: MemStI2 global_52<br />
  loc_11CA3C8: LargeBos loc_11CA405 'Ignore this<br />
  loc_11CA3CA: FLdRfVar var_8C<br />
  loc_11CA3CD: LitI2_Byte 0<br />
  loc_11CA3CF: FLdPrThis<br />
  loc_11CA3D0: VCallAd namepassword<br />
  loc_11CA49C: NewIfNullPr<br />
  loc_11CA49F: = Global.App 'Ignore this<br />
  loc_11CA4A4: FLdPr var_88<br />
  loc_11CA4A7: = App.Title<br />
  loc_11CA4AC: LitVar_Missing var_100<br />
  loc_11CA4AF: LitVar_Missing var_C<br />
<br />
The code at the top is on VBDecompiler because the procedure i made on other exes where i had success and a perfect code was:<br />
<br />
1.-Use Vb decompiler to decode exaclty like VB code is.<br />
2.-Study the code and find what i need to change.<br />
3.-Use ollydbg to write the exe looking the memory positions VB decompiler gave me.<br />
<br />
Like i said I used this steps on other exes and all worked for me perfect because vbdecompiler produce me results like this:<br />
<br />
  loc_00707826: Set var_4C = var_4C<br />
  loc_0070782C: var_E0 = var_4C<br />
  loc_00707847: 00000000h = namepassword<br />
  loc_0070784C: var_E4 = var_4C<br />
  loc_00707876: var_15C = var_4C<br />
  loc_0070787C: GoTo loc_00707888<br />
<br />
How you see the code is pretty perfect an able to understand and ollydbg no problem is paired with vb decompiler 100%. <br />
But on the code at the begin of this page (the strange code)  of vb decompiler i canīt find strings nothing and off course ollydb the same. I used the ollydbg 2.0 and OLLY PARCHEADO PARA BUSCAR OEPs and nothing the code is strange like you see too.<br />
How can i decompile that exe? or at least how can i see the real code like the other ones? What kind of code produce the exe i canīt see code like the other ones?.<br />
Thank you</div>

 
<!-- END TEMPLATE: postbit_external -->]]></content:encoded>
			<category domain="http://www.woodmann.com/forum/forumdisplay.php?37-OllyDbg-Support-Forums">OllyDbg Support Forums</category>
			<dc:creator>field3d</dc:creator>
			<guid isPermaLink="true">http://www.woodmann.com/forum/showthread.php?13824-OllyDBG-and-a-VB-exe</guid>
		</item>
		<item>
			<title>Restore Themida/Winlicense VM codes to original x86</title>
			<link>http://www.woodmann.com/forum/showthread.php?13823-Restore-Themida-Winlicense-VM-codes-to-original-x86&amp;goto=newpost</link>
			<pubDate>Fri, 03 Sep 2010 01:28:31 GMT</pubDate>
			<description>Hi, all  
After a long time to reverse oreans vm codes, *Now we can restore the oreans VM codes to original x86.* 
You just need send us the dump file or the original file protected by code virtualizer which comes from oreans VM product. And tell us the address that you want to get the real x86...</description>
			<content:encoded><![CDATA[<!-- BEGIN TEMPLATE: postbit_external -->
<div>Hi, all <br />
After a long time to reverse oreans vm codes, <b>Now we can restore the oreans VM codes to original x86.</b><br />
You just need send us the dump file or the original file protected by code virtualizer which comes from oreans VM product. And tell us the address that you want to get the real x86 codes. W<b>e can provide you the original x86 codes' hex data and asm info in a few hours.</b><br />
You can paste the hex data into OllyDBG in oreder to debug it. Also can use IDA pro to analyze it. <b>Analyze VM codes become the same to original x86 instrs.</b><br />
<br />
If you have any question or need help just connect with us.<br />
<b>MsnID: ***********<br />
Email: <br />
blog 1:<br />
blog 2: </b><br />
<br />
And Now we <b>support the test to get your trust</b>.You can complier a vc programm in console module. <b>And must print out &quot;restorevm test&quot; together with other codes</b> <br />
that you want to test.VM the original x86 codes with CV. Send us the VM file, And we will send you the original x86 asm data. <br />
<br />
If you have any question pls connect with us  <br />
Thanks All.</div>

 
<!-- END TEMPLATE: postbit_external -->]]></content:encoded>
			<category domain="http://www.woodmann.com/forum/forumdisplay.php?4-Malware-Analysis-and-Unpacking-Forum">Malware Analysis and Unpacking Forum</category>
			<dc:creator>restorevm</dc:creator>
			<guid isPermaLink="true">http://www.woodmann.com/forum/showthread.php?13823-Restore-Themida-Winlicense-VM-codes-to-original-x86</guid>
		</item>
		<item>
			<title>Is this bug exploitable?</title>
			<link>http://www.woodmann.com/forum/showthread.php?13821-Is-this-bug-exploitable&amp;goto=newpost</link>
			<pubDate>Thu, 02 Sep 2010 05:51:54 GMT</pubDate>
			<description><![CDATA[Hi  
i have found a bug during my reversing and i'm not sure it is exploitable i converted the ASM to C code so it would be easier to understand: 
  
memcpy(*DstData, Msg->data, Msg->dataLength); 
  
Msg->data acctual size is only 4 bytes 
DstData is maximum size of 256 bytes 
  
what i can control...]]></description>
			<content:encoded><![CDATA[<!-- BEGIN TEMPLATE: postbit_external -->
<div>Hi <br />
i have found a bug during my reversing and i'm not sure it is exploitable i converted the ASM to C code so it would be easier to understand:<br />
 <br />
memcpy(*DstData, Msg-&gt;data, Msg-&gt;dataLength);<br />
 <br />
Msg-&gt;data acctual size is only 4 bytes<br />
DstData is maximum size of 256 bytes<br />
 <br />
what i can control is the Msg-&gt;dataLength <br />
i can set a larger value the the Msg-&gt;data size.<br />
 <br />
the exception i get is : &quot;..access to invalid memory..&quot;<br />
 <br />
is this bug can be somehow exploited via maybe Heap ?<br />
 <br />
Thanks,<br />
LaBBa.</div>

 
<!-- END TEMPLATE: postbit_external -->]]></content:encoded>
			<category domain="http://www.woodmann.com/forum/forumdisplay.php?2-Advanced-reversing-and-programming">Advanced reversing and programming</category>
			<dc:creator>LaBBa</dc:creator>
			<guid isPermaLink="true">http://www.woodmann.com/forum/showthread.php?13821-Is-this-bug-exploitable</guid>
		</item>
		<item>
			<title>Debugging and unpacking NsPack</title>
			<link>http://www.woodmann.com/forum/showthread.php?13820-Debugging-and-unpacking-NsPack&amp;goto=newpost</link>
			<pubDate>Thu, 02 Sep 2010 03:26:18 GMT</pubDate>
			<description>Some new reading for the unpacker freaks enthusiasts ;) 
 
 
Packer Analysis Report-Debugging and unpacking the NsPack 3.4 and 3.7 packer 
 
http://www.sans.org/reading_room/whitepapers/malicious/packer-analysis-report-debugging-unpacking-nspack-34-37-packer_33428 
 
Kayaker</description>
			<content:encoded><![CDATA[<!-- BEGIN TEMPLATE: postbit_external -->
<div>Some new reading for the unpacker <s>freaks</s> enthusiasts ;)<br />
<br />
<br />
Packer Analysis Report-Debugging and unpacking the NsPack 3.4 and 3.7 packer<br />
<br />
<i><u>http://www.sans.org/reading_room/whitepapers/malicious/packer-analysis-report-debugging-unpacking-nspack-34-37-packer_33428</u></i><br />
<br />
Kayaker</div>

 
<!-- END TEMPLATE: postbit_external -->]]></content:encoded>
			<category domain="http://www.woodmann.com/forum/forumdisplay.php?4-Malware-Analysis-and-Unpacking-Forum">Malware Analysis and Unpacking Forum</category>
			<dc:creator>Kayaker</dc:creator>
			<guid isPermaLink="true">http://www.woodmann.com/forum/showthread.php?13820-Debugging-and-unpacking-NsPack</guid>
		</item>
		<item>
			<title>IDA Pro and Adobe Acrobat/Reader 5/6/7 breakpoints problems ...</title>
			<link>http://www.woodmann.com/forum/showthread.php?13819-IDA-Pro-and-Adobe-Acrobat-Reader-5-6-7-breakpoints-problems-...&amp;goto=newpost</link>
			<pubDate>Tue, 31 Aug 2010 17:12:07 GMT</pubDate>
			<description><![CDATA[I'm checking out an Adobe Reader/Acrobat plugin (foo.api) and I get the problem that neither normal breakpoints nor hardware breakpoints are working. 
 
I've attached the debugger exception output. 
 
On Adobe Acrobat 9.x IDA Pro breakpoints (hardware and non-hardware) work fine if I pass...]]></description>
			<content:encoded><![CDATA[<!-- BEGIN TEMPLATE: postbit_external -->
<div>I'm checking out an Adobe Reader/Acrobat plugin (foo.api) and I get the problem that neither normal breakpoints nor hardware breakpoints are working.<br />
<br />
I've attached the debugger exception output.<br />
<br />
On Adobe Acrobat 9.x IDA Pro breakpoints (hardware and non-hardware) work fine if I pass DBG_CONTROL_* to the application. The unlucky thing is that the plugin doesn't support any Adobe (Reader) higher than 7.<br />
<br />
Adobe seems to overwrite the BREAKPOINT exception - any ideas/suggestions how to handle the older Adobe Reader/Acrobat?</div>


	<div style="padding:10px">

	

	
		<fieldset class="fieldset">
			<legend>Attached Images</legend>
			<div style="padding:10pxpx">
			<!-- BEGIN TEMPLATE: postbit_attachmentimage -->
<img class="attach" src="http://www.woodmann.com/forum/attachment.php?attachmentid=2337&amp;stc=1&amp;d=1283274536" alt="" />&nbsp; 
<!-- END TEMPLATE: postbit_attachmentimage -->
			</div>
		</fieldset>
	

	

	

	</div>
 
<!-- END TEMPLATE: postbit_external -->]]></content:encoded>
			<category domain="http://www.woodmann.com/forum/forumdisplay.php?3-Tools-of-our-Trade-(TOT)-Messageboard">Tools of our Trade (TOT) Messageboard</category>
			<dc:creator>joblack</dc:creator>
			<guid isPermaLink="true">http://www.woodmann.com/forum/showthread.php?13819-IDA-Pro-and-Adobe-Acrobat-Reader-5-6-7-breakpoints-problems-...</guid>
		</item>
		<item>
			<title><![CDATA[Old game graphics enhancement ways & questions]]></title>
			<link>http://www.woodmann.com/forum/showthread.php?13818-Old-game-graphics-enhancement-ways-amp-questions&amp;goto=newpost</link>
			<pubDate>Sat, 28 Aug 2010 18:33:14 GMT</pubDate>
			<description>Hi 
 
I have some questions about what is actually possible to enhance in the graphics of an old directx 8 game. 
 
I know enb series does that. From what I understand it replaces the original calls to directx with its own so the game uses custom rendering settings...Am I right ? 
 
I wonder how to...</description>
			<content:encoded><![CDATA[<!-- BEGIN TEMPLATE: postbit_external -->
<div>Hi<br />
<br />
I have some questions about what is actually possible to enhance in the graphics of an old directx 8 game.<br />
<br />
I know enb series does that. From what I understand it replaces the original calls to directx with its own so the game uses custom rendering settings...Am I right ?<br />
<br />
I wonder how to do it myself so here is a tut I found : <i><u>http://forum.cheatengine.org/viewtopic.php?t=161045</u></i> What do you think about it ?<br />
<br />
What are the limitations of such a method ?<br />
How far is it possible to enhance the graphics of an old game using it ?<br />
How related are the old directx 8 and directx 10 and even directx 11? Is it possible to translate the old classes and functions to the new one so that if you replace the old models and textures of the game by new ones the game engine would handle them the way a directx 11 game would ?<br />
<br />
Please explain what is CERTAINLY doable and what is CERTAINLY not.<br />
<br />
NB: My knowledge of c++ and directx is null. I only have experience in 3D modelling and web development stuff like PHP so be fair thx</div>

 
<!-- END TEMPLATE: postbit_external -->]]></content:encoded>
			<category domain="http://www.woodmann.com/forum/forumdisplay.php?16-The-Newbie-Forum">The Newbie Forum</category>
			<dc:creator>settoken</dc:creator>
			<guid isPermaLink="true">http://www.woodmann.com/forum/showthread.php?13818-Old-game-graphics-enhancement-ways-amp-questions</guid>
		</item>
		<item>
			<title>peeking into a dotnet application sourcecode</title>
			<link>http://www.woodmann.com/forum/showthread.php?13817-peeking-into-a-dotnet-application-sourcecode&amp;goto=newpost</link>
			<pubDate>Fri, 27 Aug 2010 19:59:27 GMT</pubDate>
			<description><![CDATA[hello all .  
im a noob and i would appreciate any help regarding the topic .  
as the name states im looking for information on reversing dotnet applications .  
i've already found reflector which is a cool application , but there are some hassles which make it hard to see the sourcecode , one is...]]></description>
			<content:encoded><![CDATA[<!-- BEGIN TEMPLATE: postbit_external -->
<div>hello all . <br />
im a noob and i would appreciate any help regarding the topic . <br />
as the name states im looking for information on reversing dotnet applications . <br />
i've already found reflector which is a cool application , but there are some hassles which make it hard to see the sourcecode , one is obfuscation . <br />
can anyone provide me or guide me how i can gain some info on de obfuscating an app? <br />
i would be grateful . <br />
and Thank you all in advance .<br />
---------<br />
and by the way i searched couple of times , but couldnt find anything , ( i googled though and found a thread in this forum , but i lost it , couldnt find it again , so thats why i made a new thread for it).</div>

 
<!-- END TEMPLATE: postbit_external -->]]></content:encoded>
			<category domain="http://www.woodmann.com/forum/forumdisplay.php?16-The-Newbie-Forum">The Newbie Forum</category>
			<dc:creator>Masterx</dc:creator>
			<guid isPermaLink="true">http://www.woodmann.com/forum/showthread.php?13817-peeking-into-a-dotnet-application-sourcecode</guid>
		</item>
		<item>
			<title>Recon 2010: Intro to Embedded Reverse Engineering for PC reversers</title>
			<link>http://www.woodmann.com/forum/showthread.php?13811-Recon-2010-Intro-to-Embedded-Reverse-Engineering-for-PC-reversers&amp;goto=newpost</link>
			<pubDate>Tue, 24 Aug 2010 14:17:53 GMT</pubDate>
			<description><![CDATA[In July I had the honor to speak at the Recon conference in Montreal, Canada. It was my first conference but I really liked the experience. I hope I'll be able to attend it in future. 
The presentations were recorded and hopefully will appear on the Recon site soon but for now you can check out the...]]></description>
			<content:encoded><![CDATA[<!-- BEGIN TEMPLATE: postbit_external -->
<div>In July I had the honor to speak at the Recon conference in Montreal, Canada. It was my first conference but I really liked the experience. I hope I'll be able to attend it in future.<br />
The presentations were recorded and hopefully will appear on the Recon site soon but for now you can check out the slides (<i><u>ODP</u></i>, <i><u>PDF</u></i>). I have also uploaded some of the tools I mentioned, most notably various filesystem extractors compiled for Win32 (<i><u>download</u></i>).<br />
<br />
            <br />
<br />
<i><u>http://hexblog.com/2010/08/recon_2010_slides.html</u></i></div>

 
<!-- END TEMPLATE: postbit_external -->]]></content:encoded>
			<category domain="http://www.woodmann.com/forum/forumdisplay.php?46-Blogs-Forum">Blogs Forum</category>
			<dc:creator>Hex Blog</dc:creator>
			<guid isPermaLink="true">http://www.woodmann.com/forum/showthread.php?13811-Recon-2010-Intro-to-Embedded-Reverse-Engineering-for-PC-reversers</guid>
		</item>
		<item>
			<title>WinAppDbg 1.4 is out!</title>
			<link>http://www.woodmann.com/forum/showthread.php?13810-WinAppDbg-1.4-is-out!&amp;goto=newpost</link>
			<pubDate>Tue, 24 Aug 2010 13:09:47 GMT</pubDate>
			<description>What is WinAppDbg? 
================== 
 
The WinAppDbg python module allows developers to quickly code instrumentation 
scripts in Python under a Windows environment. 
 
It uses ctypes to wrap many Win32 API calls related to debugging, and provides 
an object-oriented abstraction layer to...</description>
			<content:encoded><![CDATA[<!-- BEGIN TEMPLATE: postbit_external -->
<div><font face="Courier New">What is WinAppDbg?<br />
==================<br />
<br />
The WinAppDbg python module allows developers to quickly code instrumentation<br />
scripts in Python under a Windows environment.<br />
<br />
It uses ctypes to wrap many Win32 API calls related to debugging, and provides<br />
an object-oriented abstraction layer to manipulate threads, libraries and<br />
processes, attach your script as a debugger, trace execution, hook API calls,<br />
handle events in your debugee and set breakpoints of different kinds (code,<br />
hardware and memory). Additionally it has no native code at all, making it<br />
easier to maintain or modify than other debuggers on Windows.<br />
<br />
The intended audience are QA engineers and software security auditors wishing to<br />
test / fuzz Windows applications with quickly coded Python scripts. Several<br />
ready to use utilities are shipped and can be used for this purposes.<br />
<br />
Current features also include disassembling x86 native code (using the open<br />
source diStorm project, see http://ragestorm.net/distorm/), debugging multiple<br />
processes simultaneously and produce a detailed log of application crashes,<br />
useful for fuzzing and automated testing.<br />
<br />
<br />
What's new in this version?<br />
===========================<br />
<br />
In a nutshell...<br />
<br />
 * fully supports Python 2.4 through 2.7<br />
 * fully supports Windows XP through Windows 7, 32 and 64 bit editions<br />
 * crash report tool now supports MSSQL (requires pyodbc)<br />
 * now supports downloading debugging symbols from Microsoft (thanks Neitsa!)<br />
 * new tool: sehtest.py (Windows SEH buffer overflow jump address bruteforcer,<br />
   inspired by the same tool by Nicolas Economou)<br />
 * the tutorial is now available in chm and pdf formats<br />
 * now with only one MSI installer for all supported Python versions<br />
 * added support for diStorm 3 (falls back to the old version if not found)<br />
 * now using cerealizer instead of pickle whenever possible<br />
 * added new command to the command line debugger to show the SEH chain<br />
 * a few more anti-anti-debug tricks were added, still more to go!<br />
 * several improvements to the Window instrumentation classes<br />
 * more code examples<br />
 * more Win32 API wrappers<br />
 * lots of miscellaneous improvements, more documentation and bugfixes as usual!<br />
<br />
Entire changelog for all versions (slow!):<br />
<br />
  <i><u>http://p.sf.net/winappdbg/changelog</u></i><br />
<br />
<br />
Where can I find WinAppDbg?<br />
===========================<br />
<br />
Project homepage:<br />
-----------------<br />
<br />
    http://tinyurl.com/winappdbg<br />
<br />
Download links:<br />
---------------<br />
<br />
  Windows installer (32 bits)<br />
    <i><u>winappdbg-1.4.win32.exe</u></i><br />
    <i><u>winappdbg-1.4.win-amd64.exe</u></i><br />
    <i><u>winappdbg-1.4.win-amd64.msi</u></i><br />
<br />
  Source code<br />
    <i><u>winappdbg-1.4.zip</u></i><br />
    <i><u>winappdbg-1.4.tar.bz2</u></i><br />
<br />
Documentation:<br />
--------------<br />
<br />
  Online<br />
    <i><u>http://winappdbg.sourceforge.net/doc/v1.4/tutorial</u></i><br />
    <i><u>http://winappdbg.sourceforge.net/doc/v1.4/reference</u></i><br />
<br />
  For download<br />
    <i><u>winappdbg-tutorial-1.4.chm</u></i><br />
    <i><u>winappdbg-reference-1.4.chm</u></i><br />
    <i><u>winappdbg-tutorial-1.4.pdf</u></i><br />
    <i><u>winappdbg-reference-1.4.pdf</u></i></font></div>

 
<!-- END TEMPLATE: postbit_external -->]]></content:encoded>
			<category domain="http://www.woodmann.com/forum/forumdisplay.php?3-Tools-of-our-Trade-(TOT)-Messageboard">Tools of our Trade (TOT) Messageboard</category>
			<dc:creator>QvasiModo</dc:creator>
			<guid isPermaLink="true">http://www.woodmann.com/forum/showthread.php?13810-WinAppDbg-1.4-is-out!</guid>
		</item>
		<item>
			<title>Looking for information about ProtectDisc</title>
			<link>http://www.woodmann.com/forum/showthread.php?13809-Looking-for-information-about-ProtectDisc&amp;goto=newpost</link>
			<pubDate>Mon, 23 Aug 2010 21:22:03 GMT</pubDate>
			<description><![CDATA[Hi, 
as mentioned in the topic, I'm currently looking for some information about ProtectDisc. I did a search here, at Exetools, at Arteam's site and at BiW - nothing. I also asked aunt Google - still nothing. Only crappy Warez and such. 
When trying to deal with a protected exe or with the...]]></description>
			<content:encoded><![CDATA[<!-- BEGIN TEMPLATE: postbit_external -->
<div>Hi,<br />
as mentioned in the topic, I'm currently looking for some information about ProtectDisc. I did a search here, at Exetools, at Arteam's site and at BiW - nothing. I also asked aunt Google - still nothing. Only crappy Warez and such.<br />
When trying to deal with a protected exe or with the ProtecDisc .dll itself, Olly denies to work. So if anyone has any information about this protection...<br />
Thanks a lot in advance.<br />
<br />
Regards<br />
darkelf</div>

 
<!-- END TEMPLATE: postbit_external -->]]></content:encoded>
			<category domain="http://www.woodmann.com/forum/forumdisplay.php?2-Advanced-reversing-and-programming">Advanced reversing and programming</category>
			<dc:creator>Darkelf</dc:creator>
			<guid isPermaLink="true">http://www.woodmann.com/forum/showthread.php?13809-Looking-for-information-about-ProtectDisc</guid>
		</item>
		<item>
			<title>PAPER: Security Mitigations for Return-Oriented Programming Attacks</title>
			<link>http://www.woodmann.com/forum/showthread.php?13808-PAPER-Security-Mitigations-for-Return-Oriented-Programming-Attacks&amp;goto=newpost</link>
			<pubDate>Mon, 23 Aug 2010 06:21:04 GMT</pubDate>
			<description>*ABSTRACT* 
 
With the discovery of new exploit techniques, new protection mechanisms are needed as well. Mitigations like DEP (Data Execution Prevention) or ASLR (Address Space Layout Randomization) created a significantly more difficult environment for vulnerability exploitation. Attackers,...</description>
			<content:encoded><![CDATA[<!-- BEGIN TEMPLATE: postbit_external -->
<div><b>ABSTRACT</b><br />
<br />
With the discovery of new exploit techniques, new protection mechanisms are needed as well. Mitigations like DEP (Data Execution Prevention) or ASLR (Address Space Layout Randomization) created a significantly more difficult environment for vulnerability exploitation. Attackers, however, have recently developed new exploitation methods which are capable of bypassing the operating system&#8217;s security protection mechanisms. In this paper we present a short summary of novel and known mitigation techniques against return-oriented programming (ROP) attacks. The techniques described in this article are related mostly to x86-32 processors and Microsoft Windows operating systems.<br />
<br />
<b>PAPER LINK</b>: <i><u>DOWNLOAD HERE</u></i><img src="https://blogger.googleusercontent.com/tracker/54982665&lt;8&lt;43777458-598553280&lt;597849429?l=blog.piotrbania.com" border="0" alt="" /><br />
<br />
<br />
<i><u>http://blog.piotrbania.com/2010/08/paper-security-mitigations-for-return.html</u></i></div>

 
<!-- END TEMPLATE: postbit_external -->]]></content:encoded>
			<category domain="http://www.woodmann.com/forum/forumdisplay.php?46-Blogs-Forum">Blogs Forum</category>
			<dc:creator>Piotr Bania Chronicles</dc:creator>
			<guid isPermaLink="true">http://www.woodmann.com/forum/showthread.php?13808-PAPER-Security-Mitigations-for-Return-Oriented-Programming-Attacks</guid>
		</item>
	</channel>
</rss>
