<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>研究心得</title><link>http://blog.vckbase.com/jozu/category/183.html</link><description>研究心得</description><managingEditor>Coder Jozu</managingEditor><dc:language>af</dc:language><generator>.Text Version 0.958.2004.214</generator><item><dc:creator>Coder Jozu</dc:creator><title>Delete myself (exe file version)</title><link>http://blog.vckbase.com/jozu/articles/1097.html</link><pubDate>Tue, 26 Oct 2004 21:36:00 GMT</pubDate><guid>http://blog.vckbase.com/jozu/articles/1097.html</guid><wfw:comment>http://blog.vckbase.com/jozu/comments/1097.html</wfw:comment><comments>http://blog.vckbase.com/jozu/articles/1097.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://blog.vckbase.com/jozu/comments/commentRss/1097.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/jozu/services/trackbacks/1097.html</trackback:ping><description>&lt;P&gt;// Delself.cpp: 删除正在运行的程序&lt;BR&gt;//&lt;BR&gt;// Coder Jozu&lt;/P&gt;
&lt;P&gt;#include &amp;lt;windows.h&amp;gt;&lt;BR&gt;#include &amp;lt;tchar.h&amp;gt;&lt;BR&gt;#include &amp;lt;shlobj.h&amp;gt;&lt;/P&gt;
&lt;P&gt;#pragma comment(lib, "Shell32.lib")&lt;/P&gt;
&lt;P&gt;#define ERROR_RET&amp;nbsp;&amp;nbsp;1&lt;BR&gt;#define ERROR_SUC&amp;nbsp;&amp;nbsp;0&lt;/P&gt;
&lt;P&gt;#define COMSPEC&amp;nbsp;&amp;nbsp;&amp;nbsp;TEXT("COMSPEC")&lt;BR&gt;#define ARGS_PREX&amp;nbsp;&amp;nbsp;TEXT(" /c del ")&lt;BR&gt;#define ARGS_ERR_REDIR&amp;nbsp;TEXT(" &amp;gt;NUL")&lt;/P&gt;
&lt;P&gt;int main(int argc, char** argv)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;TCHAR&amp;nbsp;szModuleName[MAX_PATH] = { 0 };&lt;BR&gt;&amp;nbsp;TCHAR&amp;nbsp;szCommand[MAX_PATH] = { 0 };&lt;BR&gt;&amp;nbsp;TCHAR&amp;nbsp;szParams[MAX_PATH] = { 0 };&lt;/P&gt;
&lt;P&gt;&amp;nbsp;STARTUPINFO&amp;nbsp;si = { sizeof(STARTUPINFO) };&lt;BR&gt;&amp;nbsp;PROCESS_INFORMATION&amp;nbsp;pi;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;if(!GetModuleFileName(NULL, szModuleName, MAX_PATH))&lt;BR&gt;&amp;nbsp;&amp;nbsp;return ERROR_RET;&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;if(!GetShortPathName(szModuleName, szModuleName, MAX_PATH))&lt;BR&gt;&amp;nbsp;&amp;nbsp;return ERROR_RET;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;if(!GetEnvironmentVariable(COMSPEC, szCommand, MAX_PATH))&lt;BR&gt;&amp;nbsp;&amp;nbsp;return ERROR_RET;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;_tcscat(szCommand, ARGS_PREX);&lt;BR&gt;&amp;nbsp;_tcscat(szCommand, szModuleName);&lt;BR&gt;&amp;nbsp;_tcscat(szCommand, ARGS_ERR_REDIR);&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;if(SetPriorityClass(GetCurrentProcess(),&lt;BR&gt;&amp;nbsp;&amp;nbsp;REALTIME_PRIORITY_CLASS))&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;if(SetThreadPriority(GetCurrentThread(),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;THREAD_PRIORITY_TIME_CRITICAL))&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(CreateProcess(NULL,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;szCommand,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NULL,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NULL,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FALSE,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NULL,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NULL,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;si,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;pi))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SetPriorityClass(pi.hProcess,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IDLE_PRIORITY_CLASS);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SetProcessPriorityBoost(pi.hProcess,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TRUE);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SHChangeNotify(SHCNE_DELETE,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SHCNF_PATH,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;szModuleName,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NULL);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return TRUE;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;else&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;SetPriorityClass(GetCurrentProcess(),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NORMAL_PRIORITY_CLASS);&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;return ERROR_RET;&lt;BR&gt;}&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/jozu/aggbug/1097.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Coder Jozu</dc:creator><title>Delete myself （memory version）</title><link>http://blog.vckbase.com/jozu/articles/1038.html</link><pubDate>Mon, 25 Oct 2004 19:49:00 GMT</pubDate><guid>http://blog.vckbase.com/jozu/articles/1038.html</guid><wfw:comment>http://blog.vckbase.com/jozu/comments/1038.html</wfw:comment><comments>http://blog.vckbase.com/jozu/articles/1038.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.vckbase.com/jozu/comments/commentRss/1038.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/jozu/services/trackbacks/1038.html</trackback:ping><description>// MmSlfDel.cpp : Defines the entry point for the console application. &lt;BR&gt;// &lt;BR&gt;// Coder Jozu &lt;BR&gt;&lt;BR&gt;#include "stdafx.h" &lt;BR&gt;#include &lt;WINDOWS.H&gt;&lt;BR&gt;&lt;BR&gt;int main(int argc, char* argv[]) &lt;BR&gt;{ &lt;BR&gt;unsigned char* p = NULL, *pHeap; &lt;BR&gt;unsigned char pMem[] = &lt;BR&gt;{ &lt;BR&gt;0xE8, 0x00, 0x00, 0x00, 0x00, // call $ + 5 &lt;BR&gt;0x5B, // pop ebx &lt;BR&gt;0x83, 0xEB, 0x05, // sub ebx, offset next - offset start &lt;BR&gt;0x8B, 0xC3, // mov eax, ebx &lt;BR&gt;0x81, 0xEB, 0x00, 0x10, 0x40, 0x00, // sub ebx, offset start &lt;BR&gt;0x89, 0x83, 0x35, 0x10, 0x40, 0x00, // mov dword ptr [ebx + membase], eax &lt;BR&gt;0x58, // pop eax &lt;BR&gt;0x68, 0x00, 0x80, 0x00, 0x00, // push 8000h &lt;BR&gt;0xFF, 0xB3, 0x39, 0x10, 0x40, 0x00, // push dword ptr [ebx + memsize] &lt;BR&gt;0xFF, 0xB3, 0x35, 0x10, 0x40, 0x00, // push dword ptr [ebx + membase] &lt;BR&gt;0x50, // push eax &lt;BR&gt;0xFF, 0xB3, 0x31, 0x10, 0x40, 0x00, // push dword ptr [ebx + fnVadFree] &lt;BR&gt;0xC3 // ret &lt;BR&gt;}; &lt;BR&gt;&lt;BR&gt;p = (unsigned char*)VirtualAlloc(NULL, 0x1000, MEM_COMMIT, PAGE_EXECUTE_READWRITE); &lt;BR&gt;if(!p) &lt;BR&gt;{ &lt;BR&gt;printf("memalloc error.\n"); &lt;BR&gt;return 1; &lt;BR&gt;} &lt;BR&gt;&lt;BR&gt;__try &lt;BR&gt;{ &lt;BR&gt;*p = 0; &lt;BR&gt;} &lt;BR&gt;__except(puts("in filter1"), 1) &lt;BR&gt;{ &lt;BR&gt;puts("in except1"); &lt;BR&gt;} &lt;BR&gt;&lt;BR&gt;memcpy(p, pMem, sizeof(pMem)); &lt;BR&gt;&lt;BR&gt;pHeap = p + sizeof(pMem); &lt;BR&gt;*(ULONG*)&amp;pHeap[0] = (ULONG)VirtualFree; &lt;BR&gt;*(ULONG*)&amp;pHeap[8] = 0x00000000; &lt;BR&gt;&lt;BR&gt;((FARPROC)p)(); &lt;BR&gt;&lt;BR&gt;__try &lt;BR&gt;{ &lt;BR&gt;*p = 0; &lt;BR&gt;} &lt;BR&gt;__except(puts("in filter1"), 1) &lt;BR&gt;{ &lt;BR&gt;puts("in except2"); &lt;BR&gt;} &lt;BR&gt;&lt;BR&gt;return 0; &lt;BR&gt;} &lt;BR&gt;&lt;img src ="http://blog.vckbase.com/jozu/aggbug/1038.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Coder Jozu</dc:creator><title>自己写一个GetProcAddr，来熟悉PE格式</title><link>http://blog.vckbase.com/jozu/articles/1037.html</link><pubDate>Mon, 25 Oct 2004 19:47:00 GMT</pubDate><guid>http://blog.vckbase.com/jozu/articles/1037.html</guid><wfw:comment>http://blog.vckbase.com/jozu/comments/1037.html</wfw:comment><comments>http://blog.vckbase.com/jozu/articles/1037.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/jozu/comments/commentRss/1037.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/jozu/services/trackbacks/1037.html</trackback:ping><description>// GetProcAddr.cpp : redo function GetProcAddress &lt;BR&gt;// &lt;BR&gt;// Coder Jozu &lt;BR&gt;&lt;BR&gt;#include &lt;stdio.h&gt; &lt;BR&gt;#include &lt;windows.h&gt; &lt;BR&gt;#include &lt;stdlib.h&gt; &lt;BR&gt;&lt;BR&gt;// generic macro &lt;BR&gt;#define MakePtr( cast, ptr, addValue ) (cast)( (DWORD)(ptr) + (DWORD)(addValue)) &lt;BR&gt;&lt;BR&gt;PVOID &lt;BR&gt;GetFuncAddr( &lt;BR&gt;IN PVOID Base, ? &lt;BR&gt;IN PULONG FuncTableBase, &lt;BR&gt;IN USHORT Index) &lt;BR&gt;{ &lt;BR&gt;return MakePtr(PVOID, Base, FuncTableBase[Index]); &lt;BR&gt;} &lt;BR&gt;&lt;BR&gt;USHORT &lt;BR&gt;NameToOrdinal ( &lt;BR&gt;IN PCSTR Name, &lt;BR&gt;IN ULONG NumberOfNames, &lt;BR&gt;IN PVOID DllBase, &lt;BR&gt;IN PULONG NameTableBase, &lt;BR&gt;IN PUSHORT NameOrdinalTableBase &lt;BR&gt;???) &lt;BR&gt;{ &lt;BR&gt;LONG High; &lt;BR&gt;LONG Low; &lt;BR&gt;LONG Middle; &lt;BR&gt;LONG Result; &lt;BR&gt;&lt;BR&gt;Low = 0; &lt;BR&gt;High = NumberOfNames - 1; &lt;BR&gt;while (High &gt;= Low) &lt;BR&gt;{ &lt;BR&gt;Middle = (Low + High) &gt;&gt; 1; &lt;BR&gt;Result = strcmp(Name, (PCHAR)((ULONG_PTR)DllBase + NameTableBase[Middle])); &lt;BR&gt;&lt;BR&gt;if (Result &lt; 0) &lt;BR&gt;High = Middle - 1; &lt;BR&gt;else if(Result &gt; 0) &lt;BR&gt;Low = Middle + 1; &lt;BR&gt;else &lt;BR&gt;break; &lt;BR&gt;} &lt;BR&gt;&lt;BR&gt;if (High &lt; Low) &lt;BR&gt;return (USHORT)-1; &lt;BR&gt;else &lt;BR&gt;return NameOrdinalTableBase[Middle]; &lt;BR&gt;} &lt;BR&gt;&lt;BR&gt;////////////////////////////////////////////////////////////////////////// &lt;BR&gt;&lt;BR&gt;PVOID &lt;BR&gt;GetFuncAddrByIndex( &lt;BR&gt;IN PVOID Base, ? &lt;BR&gt;IN PIMAGE_EXPORT_DIRECTORY pied, &lt;BR&gt;IN USHORT ulIndex) &lt;BR&gt;{ &lt;BR&gt;PULONG FuncTableBase; &lt;BR&gt;&lt;BR&gt;ulIndex -= (USHORT)pied-&gt;Base; &lt;BR&gt;&lt;BR&gt;if(ulIndex &gt;= pied-&gt;NumberOfFunctions) &lt;BR&gt;return NULL; &lt;BR&gt;&lt;BR&gt;FuncTableBase = MakePtr(PULONG, Base, pied-&gt;AddressOfFunctions); &lt;BR&gt;return GetFuncAddr(Base, FuncTableBase, ulIndex); &lt;BR&gt;} &lt;BR&gt;&lt;BR&gt;////////////////////////////////////////////////////////////////////////// &lt;BR&gt;&lt;BR&gt;PVOID &lt;BR&gt;GetFuncAddrByName( &lt;BR&gt;IN PVOID Base, ? &lt;BR&gt;IN PIMAGE_EXPORT_DIRECTORY pied, &lt;BR&gt;IN PCSTR Name) &lt;BR&gt;{ &lt;BR&gt;USHORT OrdinalNumber; &lt;BR&gt;PULONG NameTableBase; &lt;BR&gt;PULONG FuncTableBase; &lt;BR&gt;PUSHORT NameOrdinalTableBase; &lt;BR&gt;&lt;BR&gt;NameTableBase = MakePtr(PULONG, Base, pied-&gt;AddressOfNames); &lt;BR&gt;NameOrdinalTableBase = MakePtr(PUSHORT, Base, pied-&gt;AddressOfNameOrdinals); &lt;BR&gt;FuncTableBase = MakePtr(PULONG, Base, pied-&gt;AddressOfFunctions); &lt;BR&gt;&lt;BR&gt;OrdinalNumber = NameToOrdinal(Name, &lt;BR&gt;pied-&gt;NumberOfNames, &lt;BR&gt;Base, &lt;BR&gt;NameTableBase, &lt;BR&gt;NameOrdinalTableBase); &lt;BR&gt;&lt;BR&gt;return GetFuncAddr(Base, FuncTableBase, OrdinalNumber); &lt;BR&gt;} &lt;BR&gt;&lt;BR&gt;////////////////////////////////////////////////////////////////////////// &lt;BR&gt;&lt;BR&gt;PVOID &lt;BR&gt;FindFunc( &lt;BR&gt;IN PVOID Base, &lt;BR&gt;IN PCSTR Name &lt;BR&gt;) &lt;BR&gt;{ &lt;BR&gt;#define MAX_FUNC_ID 0xFFFF &lt;BR&gt;PIMAGE_DOS_HEADER pidh; &lt;BR&gt;PIMAGE_NT_HEADERS pinh; &lt;BR&gt;PIMAGE_EXPORT_DIRECTORY pied; &lt;BR&gt;PVOID pFuncAddr = NULL; &lt;BR&gt;BOOLEAN bUseIndex = FALSE; &lt;BR&gt;&lt;BR&gt;if((ULONG)Name &lt; MAX_FUNC_ID) &lt;BR&gt;{ &lt;BR&gt;bUseIndex = TRUE; &lt;BR&gt;} &lt;BR&gt;&lt;BR&gt;pidh = MakePtr(PIMAGE_DOS_HEADER, Base, 0); &lt;BR&gt;do &lt;BR&gt;{ &lt;BR&gt;if(pidh-&gt;e_magic != IMAGE_DOS_SIGNATURE) &lt;BR&gt;break; &lt;BR&gt;&lt;BR&gt;pinh = MakePtr(PIMAGE_NT_HEADERS, Base, pidh-&gt;e_lfanew); &lt;BR&gt;if(pinh-&gt;Signature != IMAGE_NT_SIGNATURE) &lt;BR&gt;break; &lt;BR&gt;&lt;BR&gt;pied = MakePtr(PIMAGE_EXPORT_DIRECTORY, &lt;BR&gt;Base, &lt;BR&gt;pinh-&gt;OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress); &lt;BR&gt;&lt;BR&gt;if(bUseIndex) &lt;BR&gt;pFuncAddr = GetFuncAddrByIndex(Base, pied, (USHORT)Name); &lt;BR&gt;else &lt;BR&gt;pFuncAddr = GetFuncAddrByName(Base, pied, Name); &lt;BR&gt;&lt;BR&gt;} while(FALSE); &lt;BR&gt;&lt;BR&gt;return pFuncAddr; &lt;BR&gt;} &lt;BR&gt;&lt;BR&gt;int main(int argc, char* argv[]) &lt;BR&gt;{ &lt;BR&gt;PVOID pFunc; &lt;BR&gt;HMODULE hNtdll; &lt;BR&gt;&lt;BR&gt;hNtdll = LoadLibrary("ntdll.dll"); &lt;BR&gt;pFunc = GetProcAddress(hNtdll, "KiUserExceptionDispatcher"); &lt;BR&gt;&lt;BR&gt;printf("KiUserExceptionDispatcher: pFunc = %08X\n", pFunc); &lt;BR&gt;&lt;BR&gt;pFunc = FindFunc(hNtdll, "KiUserExceptionDispatcher"); &lt;BR&gt;printf("KiUserExceptionDispatcher: pFunc = %08X\n", pFunc); &lt;BR&gt;&lt;BR&gt;pFunc = FindFunc(hNtdll, (LPCSTR)0x4f); &lt;BR&gt;printf("KiUserExceptionDispatcher: pFunc = %08X\n", pFunc); &lt;BR&gt;&lt;BR&gt;return 0; &lt;BR&gt;} &lt;BR&gt;&lt;img src ="http://blog.vckbase.com/jozu/aggbug/1037.html" width = "1" height = "1" /&gt;</description></item></channel></rss>