件默认有加载基址由于 exe 文,候会起首测验考试加载到默认地址上去一般环境下在运转 exe 的时,e加载到内存后的大小:SizeOfImage)来分派内因而就要按照 exe 的默认加载基址和映像大小(ex存
king):这种体例是指在编译之前并不晓得将会挪用哪些DLL函数(2) 运转时动态链接(Run-time Dynamic Lin,需要决定应挪用哪个函数完满是在运转过程中按照,加载挪用的函数进内存)将其加载到内存中(只,内存地址并标识,以利用该法式其他法式也可,Address动态获得DLL函数的入口地址并用LoadLibrary和GetProc。存中只具有一份(dll在内,行阶段处在运)
理解和回忆为了便利,文件格局不具有问题默认读取的 PE ,误处置不做错。
OMMITMEM_RESERVE这里是一个小小的延迟分派的学问点分派内存时的 VirtualAlloc指定的页类型为 MEM_C,存进行内存操作时才会被真正Load进入物理内存中若是是 MEM_RESERVE的话只要当对该段内。ECUTE_READWRITE页权限利用的是PAGE_EX,是一个很欠好的习惯这在现实编码过程中,e 内存加载的焦点流程为了更清晰的理解 ex,on来确定内存权限的步调就省略了按照secti。
到了导入表既然曾经找,元从来加载对应的dll就需要按照导入表内的,函数地址了获取分歧的,IMPORT_DEOR 布局了此时就需要用到 IMAGE_,细内容如下该布局的详:
ng):这种用法的前提是在编译之前曾经明白晓得要挪用DLL中的哪几个函数(1) 装载时动态链接(Load-time Dynamic Linki,只保留需要的链接消息编译时在方针文件中,L函数的代码而不含DL;施行时当法式,中将其链接入挪用法式的施行空间中(全数函数加载进内存)挪用函数的时候操纵链接消息加载DLL函数代码并在内存,便于代码共享其次要目标是。加载法式(动态,载阶段处在加,共享代码次要为了,码内存共享代)
k指向的INT表表项以4字节为单元OriginalFirstChun,结尾全0,则代表是函数序号若是最高位为1,一个RVA反之则是,RT_BY_NAME布局指向IMAGE_IMPO,是获取要导入的函数名INT表示实上的功能。高位为1的环境目前没有碰到最。
存加载的第一个环节点拷贝区段这部门是内,本来的文件区段进行处置要按照内存页的大小来将。常以 0x200 进行对齐在文件中Section通,为 0x1000内存中页大小单元,为 0x1000因而内存对齐单元,需要对Section进行变换所以当PE文件加载到内存中后。
能够说条条亨衢通罗马文件读取步调根基上,取到内存中可供后续处置即可只需将 PE 文件完整的读,进行读取以外还有良多种体例除了把一个文件放在目次中,将shellcode进行简单xor后在内存xor回来再加载好比将要加载的 exe 转换成shellcode进行加载、。。。
平安菜鸟作为一名,方面是并不及格的纯真的领会某一个,门言语、某一个OS平安并不只限于某一,术栈要求的更深、更广现现在平安研究的技。加载曾经是多年前的手艺虽说 PE 文件内存,新、有用就行可是招不在,常普遍的使用(躲藏本身内存加载手艺仍然有非,要躲藏本身至于为什么,dd)dd,E相关的学问仅逗留在晓得的境界因为笔者之前认知的误差导致对P,去当真阐发进修并没有静下心来,足一下手艺点借此机遇补,码阐发的进修之旅开个头同时趁便为本人的恶意代。
第三方法式中导入API导入表是PE文件从其它,制(与导出表对应)以供本法式挪用的机,行起来的时在exe运,遍历导入表加载器会,l 都加载到历程中将导入表中所有dl,lMain就会被挪用被加载的DLL的Dl,法式利用了哪些函数通过导入表能够晓得,一个数组导入表是,零结尾以全为。
eader 拷贝到响应的地址空间去分派内存完毕后起首要将 PE h,作均需要用到由于后续的操。
于其可移植性较强静态链接劣势在,ll(本人全打包好了)根基上不依赖于系统的d,在于法式主体较小动态链接的劣势,资本不多占用系统。
供给的消息按照微软,ORY 的第二项指向的就是导入表了IMAGE_DATA_DIRECT。
要某个系统函数时当法式运转起来需,加载到内存里之后地址是不确定的哪个dll包含该函数?dll,位到所需的函数地址若何按照从内存中定。
行之前完成所有的拆卸工作静态链接体例:在法式执,标文件(EXE文件)生成一个可施行的目。
数均在一个exe文件里相较于静态链接所有函,按照写死的偏移进行挪用要挪用某个函数时只需要,一个找函数的问题动态链接就具有:
加载就曾经竣事了至此exe的内存,忆起之前看过的几篇APT相关的阐发文章诱发我写下这篇文章的一个次要缘由是回,前内存加载曾经是标配涉及到主机的远控目,匹敌体例品种繁多杀软动态检测的,以内存加载为王静态匹敌的方式。
l的内存加载相较于dl,加载简化了良多exe的内存,步调就是导出表的修复此中省略掉的一个大。
表中的 IMAGE_IMPORT_DEOR布局上述修复导入表的代码现实完成的工作就是遍历导入,的dll加载到内存中按照dll名称将对应,Address来获取该函数在内存中的现实地址填充到FirstThunk字段指向的空间中并按照OriginalFirstThunk字段来获取所需的函数名进而利用GetProc。
的对齐体例与在内存中的对齐体例不尽不异由于exe以文件形式存储的时候区段间,文件格局的 exe 间接拷贝到内存中因而在手动加载exe时不克不及纯真的将, size)的对齐体例做对齐处置而是该当按照内存区段(page。
施行被装入内存之后完成链接工作动态链接体例:在法式曾经为了,留该编译单位的一份拷贝而且在内存中一般只保。
eBase分派了内存由于曾经按照Imag,的ImageBase字段按照现实内存地址进行更新所以需要将拷贝后的OptionalHeader中,际的内存地址更新ImageBase若是开启了aslr的话需要按照实,上的话没有需要分派到默认基址。
|