<?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>Guidelines to MFC reversing</title>
                            <pubDate>Tue, 30 Dec 2008 09:48:16 -0600</pubDate>
                                        <link>https://www.openrce.org/blog/view/1333/Guidelines_to_MFC_reversing</link>
                                        <author>Pnluck &lt;email-suppressed@example.com&gt;</author>
                                                    <description>http://quequero.org/Basic_MFC_Reversing(eng)</description>
                    </item>
                <item>
            <title>Armadillo v.5 x64 Unpacking tutorial</title>
                            <pubDate>Mon, 03 Mar 2008 15:23:29 -0600</pubDate>
                                        <link>https://www.openrce.org/blog/view/1073/Armadillo_v.5_x64_Unpacking_tutorial</link>
                                        <author>Pnluck &lt;email-suppressed@example.com&gt;</author>
                                                    <description>I believe, I'm the first one who write a tutorial about x64 unpacking: &lt;a href=&quot;http://quequero.org/Armadillo5_x64_Unpacking&quot;&gt;http://quequero.org/Armadillo5_x64_Unpacking&lt;/a&gt;.&lt;br /&gt;
With the article there's a demo of my ItRebuilder x64: I'm developping it for myself (at least for the start) an ImpRec-like software for Win x64, so for PE+ files, which I should release soon.&lt;br /&gt;
&lt;br /&gt;
I hope to be useful.</description>
                    </item>
                <item>
            <title>.NET Class 0.6(beta)</title>
                            <pubDate>Wed, 05 Dec 2007 12:29:53 -0600</pubDate>
                                        <link>https://www.openrce.org/blog/view/985/.NET_Class_0.6(beta)</link>
                                        <author>Pnluck &lt;email-suppressed@example.com&gt;</author>
                                                    <description>I continue the developping of this C++ class for .NET PE:&lt;br /&gt;
I added a support for PE+ (aka PE for x64 executable) and fixed some bugs.&lt;br /&gt;
&lt;br /&gt;
http://pnluck.netsons.org/soft/NET_class.zip&lt;br /&gt;
&lt;br /&gt;
Report bugs or bad codes.&lt;br /&gt;
&lt;br /&gt;
That's all!</description>
                    </item>
                <item>
            <title>C++ class to read PE.NET</title>
                            <pubDate>Fri, 14 Sep 2007 03:48:42 -0500</pubDate>
                                        <link>https://www.openrce.org/blog/view/894/C++_class_to_read_PE.NET</link>
                                        <author>Pnluck &lt;email-suppressed@example.com&gt;</author>
                                                    <description>I'm coding a C++ Class in order to read PE.NET executables: by now, it can read some PE.NET, but it work fine. hXXp://quequero.org/uicwiki/images/NET_class.zip&lt;br /&gt;
You can use it to extract the .NET resources, or to make a tool to remove the StrongNameSignature.&lt;br /&gt;
&lt;br /&gt;
Please report to me every PE.NET which my class doesn't read.</description>
                    </item>
                <item>
            <title>How to hide dll</title>
                            <pubDate>Sun, 05 Aug 2007 07:58:36 -0500</pubDate>
                                        <link>https://www.openrce.org/blog/view/844/How_to_hide_dll</link>
                                        <author>Pnluck &lt;email-suppressed@example.com&gt;</author>
                                                    <description>Time ago I wrote a little function, which called at the DLL_PROCESS_ATTACH in the DllMain, allowed to hide the dll itself.&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
BOOL APIENTRY DllMain( HMODULE hModule, DWORD&amp;nbsp;&amp;nbsp;ul_reason_for_call, LPVOID lpReserved )&lt;br /&gt;
{&lt;br /&gt;
if(ul_reason_for_call == DLL_PROCESS_ATTACH)&lt;br /&gt;
{&lt;br /&gt;
	HideDll((ULONG_PTR)hModule);&lt;br /&gt;
}&lt;br /&gt;
 return TRUE;&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
The function hooks the LDR_MODULE structure (it is accessible from PEB), as you can see:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
bool HideDll(ULONG_PTR DllHandle)&lt;br /&gt;
{&lt;br /&gt;
	ULONG_PTR ldr_addr;&lt;br /&gt;
	PEB_LDR_DATA* ldr_data;&lt;br /&gt;
	LDR_MODULE&amp;nbsp;&amp;nbsp;*modulo, *prec, *next;&lt;br /&gt;
&lt;br /&gt;
 __try&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
	/*&lt;br /&gt;
	typedef struct _PEB {&lt;br /&gt;
	BOOLEAN InheritedAddressSpace; &lt;br /&gt;
	BOOLEAN ReadImageFileExecOptions; &lt;br /&gt;
	BOOLEAN BeingDebugged; &lt;br /&gt;
	BOOLEAN Spare; &lt;br /&gt;
	HANDLE Mutant; &lt;br /&gt;
	PVOID ImageBaseAddress; &lt;br /&gt;
	PPEB_LDR_DATA LoaderData;&lt;br /&gt;
	...&lt;br /&gt;
	} PEB&lt;br /&gt;
	*/&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//The asm code is only for IA-32 architecture&lt;br /&gt;
	__asm mov eax, fs:[0x30]&amp;nbsp;&amp;nbsp;//get il PEB ADDR&lt;br /&gt;
	__asm add eax, 0xc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__asm mov eax,[eax]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//get LoaderData ADDR&lt;br /&gt;
	__asm mov ldr_addr, eax&lt;br /&gt;
&lt;br /&gt;
	ldr_data = (PEB_LDR_DATA*)ldr_addr ;&amp;nbsp;&amp;nbsp;//init PEB_LDR_DATA struct.&lt;br /&gt;
&lt;br /&gt;
	modulo = (LDR_MODULE*)ldr_data-&amp;gt;InLoadOrderModuleList.Flink;&lt;br /&gt;
&lt;br /&gt;
	while(modulo-&amp;gt;BaseAddress != 0)&lt;br /&gt;
	{&lt;br /&gt;
		if( (ULONG_PTR)modulo-&amp;gt;BaseAddress == DllHandle)&lt;br /&gt;
		{&lt;br /&gt;
			if(modulo-&amp;gt;InInitializationOrderModuleList.Blink == NULL) return false;&lt;br /&gt;
			&lt;br /&gt;
			//Get the precedent and the successive struct according to the initialization order&lt;br /&gt;
			prec = (LDR_MODULE*)(ULONG_PTR)((ULONG_PTR)modulo-&amp;gt;InInitializationOrderModuleList.Blink - 16);&lt;br /&gt;
			next = (LDR_MODULE*)(ULONG_PTR)((ULONG_PTR)modulo-&amp;gt;InInitializationOrderModuleList.Flink - 16);&lt;br /&gt;
&lt;br /&gt;
			//And change values &lt;br /&gt;
			prec-&amp;gt;InInitializationOrderModuleList.Flink = modulo-&amp;gt;InInitializationOrderModuleList.Flink;&lt;br /&gt;
			next-&amp;gt;InInitializationOrderModuleList.Blink = modulo-&amp;gt;InInitializationOrderModuleList.Blink;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp; &lt;br /&gt;
		&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Now change&amp;nbsp;&amp;nbsp;InLoad e InMem normally&lt;br /&gt;
			prec = (LDR_MODULE*)modulo-&amp;gt;InLoadOrderModuleList.Blink;&lt;br /&gt;
			next = (LDR_MODULE*)modulo-&amp;gt;InLoadOrderModuleList.Flink;&lt;br /&gt;
			&lt;br /&gt;
			//Precedent struct&lt;br /&gt;
			prec-&amp;gt;InLoadOrderModuleList.Flink = modulo-&amp;gt;InLoadOrderModuleList.Flink;&lt;br /&gt;
			prec-&amp;gt;InMemoryOrderModuleList.Flink = modulo-&amp;gt;InMemoryOrderModuleList.Flink;&lt;br /&gt;
			&lt;br /&gt;
			//Successive struct&lt;br /&gt;
			next-&amp;gt;InLoadOrderModuleList.Blink = modulo-&amp;gt;InLoadOrderModuleList.Blink;&lt;br /&gt;
			next-&amp;gt;InMemoryOrderModuleList.Blink = modulo-&amp;gt;InMemoryOrderModuleList.Blink;&lt;br /&gt;
&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Now if you want: memset(modulo,0,sizeof(LDR_MODULE));&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;&lt;br /&gt;
			return true;&lt;br /&gt;
		}&lt;br /&gt;
		modulo = (LDR_MODULE*)modulo-&amp;gt;InLoadOrderModuleList.Flink;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
 __except(EXCEPTION_EXECUTE_HANDLER)&lt;br /&gt;
 {&lt;br /&gt;
	 return false;&lt;br /&gt;
 }&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Structures used are:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
#ifndef UNICODE_STRING&lt;br /&gt;
typedef struct _UNICODE_STRING {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;USHORT&amp;nbsp;&amp;nbsp;Length;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;USHORT&amp;nbsp;&amp;nbsp;MaximumLength;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;PWSTR&amp;nbsp;&amp;nbsp;Buffer;&lt;br /&gt;
} UNICODE_STRING, *PUNICODE_STRING;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#ifndef LDR_MODULE&lt;br /&gt;
typedef struct _LDR_MODULE {&lt;br /&gt;
	LIST_ENTRY InLoadOrderModuleList;&amp;nbsp;&amp;nbsp;//&amp;lt;-- InLoad points here&lt;br /&gt;
	LIST_ENTRY InMemoryOrderModuleList; //&amp;lt;-- PInMem points here&lt;br /&gt;
	LIST_ENTRY InInitializationOrderModuleList;&amp;nbsp;&amp;nbsp;//&amp;lt;-- InInitia points here&lt;br /&gt;
	PVOID BaseAddress; &lt;br /&gt;
	PVOID EntryPoint; &lt;br /&gt;
	ULONG SizeOfImage; &lt;br /&gt;
	UNICODE_STRING FullDllName; &lt;br /&gt;
	UNICODE_STRING BaseDllName; &lt;br /&gt;
	ULONG Flags; &lt;br /&gt;
	SHORT LoadCount; &lt;br /&gt;
	SHORT TlsIndex; &lt;br /&gt;
	LIST_ENTRY HashTableEntry; &lt;br /&gt;
	ULONG TimeDateStamp;&lt;br /&gt;
} LDR_MODULE, *PLDR_MODULE;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#ifndef PEB_LDR_DATA&lt;br /&gt;
typedef struct _PEB_LDR_DATA&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ULONG Length;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCHAR Initialized;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PVOID SsHandle;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIST_ENTRY InLoadOrderModuleList;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIST_ENTRY InMemoryOrderModuleList;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIST_ENTRY InInitializationOrderModuleList;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PVOID EntryInProgress;&lt;br /&gt;
} PEB_LDR_DATA, *PPEB_LDR_DATA;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
That's all!</description>
                    </item>
            </channel>
</rss>
