随笔分类 - PE结构
摘要:Fs:[0x18]找到TEB TEB+0x30找到PEB PEB+C处是loader,值为 7747FBE0 Loader(7747FBE0)+0xC处是模块信息表的地址: 模块信息表中是双向环形链表的节点,可以看到上一个节点,下一个节点,hInstance,AddressOfEntryPoint和
阅读全文
摘要:找到资源并使用: HRSRC hSrc = FindResource(NULL, TEXT("RollName"), TEXT("Exe"));//遍历结构直到获得数据而非目录 DWORD dwSize = SizeofResource(NULL, hSrc); HGLOBAL hResLoaded
阅读全文
摘要:手动把dll映射到进程空间,需要修复导入表和重定位表,优点是遍历dll的API无法遍历到,有隐藏dll的效果。系统的GetProcAddress也无法找到地址,需要自己实现此功能。 多个dll互相调用需要递归加载。
阅读全文
摘要:一种重定位方法: g_dwVar dd ? call @F @@: pop ebx sub ebx, offset @B ;运行时的eip减去编译时的eip,算出偏移 mov eax, [ebx + offset g_dwVar] /DLL和/FIXED:NO选项都会产生重定位表,一般会多出一个.r
阅读全文
摘要:VC6中,以下文件libc.lib是静态版,带D的是Debug版,带I的是Import版,带MT的是MultiThread版,带P的是CPP版。 此函数宏的定义有些不同,MASM错把GetEnvironmentStringsA当成了函数 LPCH WINAPI GetEnvironmentStrin
阅读全文
摘要:DEF文件如下所示: EXPORTS Inject @12 MyAdd @14 MySub @17 MyMul @11 NONAME MyDiv @19 g_szInject @15 用调试器加载编译好的dll文件,查看导出信息: 用十六进制编辑器打开dll文件,定位到导出表,可以发现导出的字符串是
阅读全文
摘要:步骤: 1. 链接选项设置基地址为目标PE的基地址,例如/BASE:0x01000000 2. 从目标PE文件中分析出SizeOfImage,并在自己程序的.code段预留足够的空间,用来把目标程序的代码映射过来 2.1 汇编代码可用org 01000000h预留空间,相当于byte 0100000
阅读全文
摘要:typedef struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; // 0 for terminating null import descriptor DWORD OriginalFirstThunk; // RVA
阅读全文
摘要:typedef struct _IMAGE_SECTION_HEADER { BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; //说明性 union { DWORD PhysicalAddress; DWORD VirtualSize; //内存中节的大小,但不一定准 } M
阅读全文
摘要:Portable Executable file format 从命名上看,微软想让PE文件可移植。 注意,虽然IMAGE_OPTIONAL_HEADER结构体总大小0xE0字节,但IMAGE_OPTIONAL_HEADER结构体的最后是数组,数组中究竟有几个元素,可以手动修改。 所以是exe的中I
阅读全文

浙公网安备 33010602011771号