如题所说,我现在已经使用python中的lief在pe文件末尾增加了新节
bin = lief.parse(INPUT_PE) bin.add_section(section_my)#大致是这样
我现在已经可以在一个.cpp程序中增加一个自己的handle函数。在触发异常时可以解决返回继续执行。如何在exe文件自己嵌入的节中插入handle函数并安装到seh中,对异常进行利用。萌新最好能有可以用来模仿的代码,我好知道如何开始[笑哭]。[新增]我已经解决了这个问题,通过汇编写handler函数和装载到seh中,并将入口点改到这,装载handler后再跳回原地址,为什么原地址的一些地址会发生改变,如下图:
_shcode proc nop nop nop call @@0 DD xx xx xx xx ;RVAof_shcode + 8-AddressOfEntryPoint @@0: mov eax,[esp] mov edx,[eax] sub [esp],edx mov ebx,[esp] ;------------ ; your shell code here ;在这安装seh ;------------ push ebx ret _shcode endp
添加seh前: 添加seh后: 0x1001790中的内容也会发生变化(我最不解的地方):添加前: 添加后:
我最不解的地方
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
Ratin 1. 在PE文件末尾加入新区段,注意设置区段属性至少包括读取和执行 2. 将PE文件入口点设置到你新加的区段,写入你的代码到这个区段里,并且添加跳转回原入口点的指令 至于你提到的,扩展原有.tex ...
是的,但对于EXE来说重定位表这种东西不可强求。你只能在VA对齐的范围内扩充.text,见4楼所说。你得确定一下,是给哪个线程添加SEH,以及你要添加的是SEH还是UEF。给已存在的远端线程添加SEH,手动通过内存读写函数去修改它FS中的SEH链、指向你注入你的SEH代码。还有,你这添加SEH的方式只能用于x86。为整个进程添加异常处理则是UEF,调用相应函数注册你的异常处理过程为UEF即可。
我加的seh处理函数如下,再pe新节中,就在_shcode后边:
```
;断点中断异常处理函数Int3_handler2 proc C uses ebx esi edi pExcept,pFrame,pContext,pDispatch PUSHAD ;是否为断点异常 Assume esi:ptr EXCEPTION_RECORD Assume edi:ptr CONTEXT mov esi,[pExcept] mov edi,pContext test [esi].ExceptionFlags,7 jnz @ContiSearch cmp [esi].ExceptionCode,STATUS_BREAKPOINT jnz @ContiSearch
;你要做的事
@ContiSearch: POPAD mov eax,ExceptionContinueSearch retInt3_handler2 endp