⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 747.html

📁 里面收集的是发表在www.xfocus.org上的文章
💻 HTML
📖 第 1 页 / 共 3 页
字号:
&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;&nbsp; *pMap;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 0x2a4 ptr to MemoryMap array */<br />
&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp; dwInDebugger;&nbsp;&nbsp; /* 0x2a8 !0 when in debugger */<br />
&nbsp;&nbsp;&nbsp;&nbsp;PTHREAD pCurFPUOwner;&nbsp;&nbsp; /* 0x2ac current FPU owner */<br />
&nbsp;&nbsp;&nbsp;&nbsp;PPROCESS pCpuASIDPrc;&nbsp;&nbsp; /* 0x2b0 current ASID proc */<br />
&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;&nbsp;&nbsp;&nbsp;nMemForPT;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 0x2b4 - Memory used for PageTables */<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;&nbsp;&nbsp;&nbsp;alPad[18];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 0x2b8 - padding */<br />
&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp; aInfo[32];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 0x300 - misc. kernel info */<br />
&nbsp;&nbsp;&nbsp;&nbsp;// PUBLIC/COMMON/OAK/INC/pkfuncs.h<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x300&nbsp;&nbsp;KINX_PROCARRAY&nbsp;&nbsp;&nbsp;&nbsp; address of process array<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x304&nbsp;&nbsp;KINX_PAGESIZE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system page size<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x308&nbsp;&nbsp;KINX_PFN_SHIFT&nbsp;&nbsp;&nbsp;&nbsp; shift for page # in PTE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x30c&nbsp;&nbsp;KINX_PFN_MASK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mask for page # in PTE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x310&nbsp;&nbsp;KINX_PAGEFREE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# of free physical pages<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x314&nbsp;&nbsp;KINX_SYSPAGES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# of pages used by kernel<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x318&nbsp;&nbsp;KINX_KHEAP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptr to kernel heap array<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x31c&nbsp;&nbsp;KINX_SECTIONS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptr to SectionTable array<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x320&nbsp;&nbsp;KINX_MEMINFO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptr to system MemoryInfo struct<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x324&nbsp;&nbsp;KINX_MODULES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptr to module list<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x328&nbsp;&nbsp;KINX_DLL_LOW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lower bound of DLL shared space<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x32c&nbsp;&nbsp;KINX_NUMPAGES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;total # of RAM pages<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x330&nbsp;&nbsp;KINX_PTOC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptr to ROM table of contents<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x334&nbsp;&nbsp;KINX_KDATA_ADDR&nbsp;&nbsp;&nbsp;&nbsp;kernel mode version of KData<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x338&nbsp;&nbsp;KINX_GWESHEAPINFO&nbsp;&nbsp;Current amount of gwes heap in use<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x33c&nbsp;&nbsp;KINX_TIMEZONEBIAS&nbsp;&nbsp;Fast timezone bias info<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x340&nbsp;&nbsp;KINX_PENDEVENTS&nbsp;&nbsp;&nbsp;&nbsp;bit mask for pending interrupt events<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x344&nbsp;&nbsp;KINX_KERNRESERVE&nbsp;&nbsp; number of kernel reserved pages<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x348&nbsp;&nbsp;KINX_API_MASK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bit mask for registered api sets<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x34c&nbsp;&nbsp;KINX_NLS_CP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hiword OEM code page, loword ANSI code page<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x350&nbsp;&nbsp;KINX_NLS_SYSLOC&nbsp;&nbsp;&nbsp;&nbsp;Default System locale<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x354&nbsp;&nbsp;KINX_NLS_USERLOC&nbsp;&nbsp; Default User locale<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x358&nbsp;&nbsp;KINX_HEAP_WASTE&nbsp;&nbsp;&nbsp;&nbsp;Kernel heap wasted space<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x35c&nbsp;&nbsp;KINX_DEBUGGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For use by debugger for protocol communication<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x360&nbsp;&nbsp;KINX_APISETS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; APIset pointers<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x364&nbsp;&nbsp;KINX_MINPAGEFREE&nbsp;&nbsp; water mark of the minimum number of free pages<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x368&nbsp;&nbsp;KINX_CELOGSTATUS&nbsp;&nbsp; CeLog status flags<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x36c&nbsp;&nbsp;KINX_NKSECTION&nbsp;&nbsp;&nbsp;&nbsp; Address of NKSection<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x370&nbsp;&nbsp;KINX_PWR_EVTS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Events to be set after power on<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x37c&nbsp;&nbsp;KINX_NKSIG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; last entry of KINFO -- signature when NK is ready<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 0x380 - interlocked api code */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 0x400 - end */<br />
}<br />
<br />
Win32下可以通过PEB结构定位kernel32.dll的基址,然后通过PE文件结构查找Windows API。在Windows CE下,coredll.dll的作用相当于Win32的kernel32.dll,由于KDataStruct结构开始于0xFFFFC800,偏移0x324的aInfo[KINX_MODULES]是一个指向模块链表的指针,通过这个链表能否找到coredll.dll模块呢?让我们来看一下模块的结构:<br />
<br />
// PRIVATE/WINCEOS/COREOS/NK/INC/kernel.h<br />
typedef struct Module {<br />
&nbsp;&nbsp;&nbsp;&nbsp;LPVOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpSelf;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 0x00 Self pointer for validation */<br />
&nbsp;&nbsp;&nbsp;&nbsp;PMODULE&nbsp;&nbsp;&nbsp;&nbsp; pMod;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 0x04 Next module in chain */<br />
&nbsp;&nbsp;&nbsp;&nbsp;LPWSTR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpszModName;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 0x08 Module name */<br />
&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inuse;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 0x0c Bit vector of use */<br />
&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; calledfunc;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 0x10 Called entry but not exit */<br />
&nbsp;&nbsp;&nbsp;&nbsp;WORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refcnt[MAX_PROCESSES];&nbsp;&nbsp;/* 0x14 Reference count per process*/<br />
&nbsp;&nbsp;&nbsp;&nbsp;LPVOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BasePtr;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 0x54 Base pointer of dll load (not 0 based) */<br />
&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DbgFlags;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 0x58 Debug flags */<br />
&nbsp;&nbsp;&nbsp;&nbsp;LPDBGPARAM&nbsp;&nbsp;ZonePtr;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 0x5c Debug zone pointer */<br />
&nbsp;&nbsp;&nbsp;&nbsp;ulong&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; startip;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 0x60 0 based entrypoint */<br />
&nbsp;&nbsp;&nbsp;&nbsp;openexe_t&nbsp;&nbsp; oe;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 0x64 Pointer to executable file handle */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef struct openexe_t {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; union {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int hppfs;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // ppfs handle<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HANDLE hf;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // object store handle<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TOCentry *tocptr;&nbsp;&nbsp;&nbsp;&nbsp;// rom entry pointer<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 0x64<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BYTE filetype;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 0x68<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BYTE bIsOID;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 0x69<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WORD pagemode;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 0x6a<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; union {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD offset;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD dwExtRomAttrib;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 0x6c<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; union {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name *lpName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CEOID ceOid;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 0x70<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} openexe_t;<br />
&nbsp;&nbsp;&nbsp;&nbsp;e32_lite&nbsp;&nbsp;&nbsp;&nbsp;e32;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 0x74 E32 header */<br />
&nbsp;&nbsp;&nbsp;&nbsp;// PUBLIC/COMMON/OAK/INC/pehdr.h<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef struct e32_lite {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* PE 32-bit .EXE header&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned short&nbsp;&nbsp;e32_objcnt;&nbsp;&nbsp;&nbsp;&nbsp; /* 0x74 Number of memory objects&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BYTE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e32_cevermajor; /* 0x76 version of CE built for&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BYTE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e32_ceverminor; /* 0x77 version of CE built for&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned long&nbsp;&nbsp; e32_stackmax;&nbsp;&nbsp; /* 0x78 Maximum stack size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned long&nbsp;&nbsp; e32_vbase;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 0x7c Virtual base address of module&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned long&nbsp;&nbsp; e32_vsize;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 0x80 Virtual size of the entire image&nbsp;&nbsp;&nbsp;&nbsp;*/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned long e32_sect14rva;&nbsp;&nbsp;&nbsp;&nbsp;/* 0x84 section 14 rva */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned long e32_sect14size;&nbsp;&nbsp; /* 0x88 section 14 size */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct info e32_unit[LITE_EXTRA]; /* 0x8c&nbsp;&nbsp;Array of extra info units&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct info {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Extra information header block&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned long&nbsp;&nbsp; rva;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* Virtual relative address of info&nbsp;&nbsp;&nbsp;&nbsp;*/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned long&nbsp;&nbsp; size;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Size of information block&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x8c&nbsp;&nbsp; EXP Export table position&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x94&nbsp;&nbsp; IMP Import table position&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x9c&nbsp;&nbsp; RES Resource table position&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xa4&nbsp;&nbsp; EXC Exception table position <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xac&nbsp;&nbsp; SEC Security table position&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xb4&nbsp;&nbsp; FIX Fixup table position&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} e32_lite, *LPe32_list;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;o32_lite&nbsp;&nbsp;&nbsp;&nbsp;*o32_ptr;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 0xbc&nbsp;&nbsp;O32 chain ptr */<br />
&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dwNoNotify;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 0xc0&nbsp;&nbsp;1 bit per process, set if notifications disabled */<br />
&nbsp;&nbsp;&nbsp;&nbsp;WORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wFlags;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 0xc4<br />
&nbsp;&nbsp;&nbsp;&nbsp;BYTE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bTrustLevel;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 0xc6<br />
&nbsp;&nbsp;&nbsp;&nbsp;BYTE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bPadding;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 0xc7<br />
&nbsp;&nbsp;&nbsp;&nbsp;PMODULE&nbsp;&nbsp;&nbsp;&nbsp; pmodResource;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 0xc8 module that contains the resources */<br />
&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rwLow;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 0xcc base address of RW section for ROM DLL */<br />
&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rwHigh;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 0xd0 high address RW section for ROM DLL */<br />
&nbsp;&nbsp;&nbsp;&nbsp;PGPOOL_Q&nbsp;&nbsp;&nbsp;&nbsp;pgqueue;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 0xcc list of the page owned by the module */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef struct _PGPOOL_Q {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WORD&nbsp;&nbsp;&nbsp;&nbsp;idxHead;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* head of the queue */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WORD&nbsp;&nbsp;&nbsp;&nbsp;idxTail;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* tail of the queue */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} PGPOOL_Q, *PPGPOOL_Q;<br />
} Module;<br />
<br />
模块结构偏移0x08是指向模块名字的指针,偏移0x04指向链表里的下一个模块,通过这个模块名字可以在模块链表里找到我们需要的coredll.dll。而偏移0x7c就是该模块的虚拟基址,偏移0x8c是导出表的相对地址。Windows CE使用的PE结构和Win32是一样,那么有写Win32 shellcode经验的朋友自然会想着从coredll.dll的基址按照PE结构顺藤摸瓜来搜索函数地址。但是我们用EVC实际调试时发现coredll.dll找到的基址是0x01F60000,而这个地址的内存是没有分配的(调试器里都是问号),可以访问的地址是从0x01F61000,这和IDAPro反汇编coredll.dll(从rom文件中dump出来,wince下系统在使用的文件连读的权限都没有)出的起始地址一样。Windows CE可能为了节省内存,没有加载文件最开始的0x1000字节头结构。不过没有关系,因为我们已经从模块结构得到该模块的导出表相对地址,直接从导出表就可以查找函数地址了。<br />
<br />
--[ 3. Windows CE演示实例<br />
<br />
Ratter/29A的WinCE4.Dust代码可能是为了减少体积,他给出的方法是把要搜索函数的序数索引硬编码到程序里,然后根据导出表的地址定位导出地址表,再用硬编码的序数索引来算出函数地址。这种方法让人感觉挺别扭的,虽然代码减少了,可是通用性可能会打折扣,象编写Win32 shellcode一样通过函数名来搜索的方法可能更通用一些。下面的代码就是实现这样的功能。<br />
<br />
; armasm test.asm<br />
; link /MACHINE:ARM /SUBSYSTEM:WINDOWSCE test.obj&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;CODE32<br />
<br />
&nbsp;&nbsp; EXPORT&nbsp;&nbsp;WinMainCRTStartup<br />
<br />
&nbsp;&nbsp; AREA .text, CODE, ARM<br />
<br />
test_start<br />
<br />
; r11 - base pointer<br />
test_code_start&nbsp;&nbsp; PROC<br />
&nbsp;&nbsp; stmdb&nbsp;&nbsp; sp!, {r0 - r12, lr, pc}<br />
<br />
&nbsp;&nbsp; bl&nbsp;&nbsp;&nbsp;&nbsp;get_export_section<br />
&nbsp;&nbsp; adr&nbsp;&nbsp; r2, mb<br />
&nbsp;&nbsp; bl&nbsp;&nbsp;&nbsp;&nbsp;lookup_imports<br />
<br />
&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;r0, #0<br />
&nbsp;&nbsp; adr&nbsp;&nbsp;&nbsp;&nbsp;r1, text<br />
&nbsp;&nbsp; adr&nbsp;&nbsp;&nbsp;&nbsp;r2, text<br />
&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;r3, #0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; MB_OK<br />
&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;lr, pc<br />
&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;pc, r9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; MessageBoxW<br />
<br />
&nbsp;&nbsp; bl&nbsp;&nbsp;&nbsp;&nbsp;get_export_section<br />
&nbsp;&nbsp; adr&nbsp;&nbsp; r2, tp<br />
&nbsp;&nbsp; bl&nbsp;&nbsp;&nbsp;&nbsp;lookup_imports<br />
<br />
&nbsp;&nbsp; mov&nbsp;&nbsp; r0, #-1<br />
&nbsp;&nbsp; mov&nbsp;&nbsp; r1, #0<br />
&nbsp;&nbsp; mov&nbsp;&nbsp; lr, pc<br />
&nbsp;&nbsp; mov&nbsp;&nbsp; pc, r9<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; ; basic wide string compare<br />
wstrcmp&nbsp;&nbsp; PROC<br />
wstrcmp_iterate<br />
&nbsp;&nbsp; ldrh&nbsp;&nbsp;&nbsp;&nbsp;r2, [r0], #2<br />
&nbsp;&nbsp; ldrh&nbsp;&nbsp;&nbsp;&nbsp;r3, [r1], #2<br />
<br />
&nbsp;&nbsp; cmp&nbsp;&nbsp;&nbsp;&nbsp; r2, #0<br />

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -