首页
社区
课程
招聘
未解决 [求助]创建新节,添加异常处理函数到seh中,会对pe文件造成什么影响 200.00雪花
发表于: 2020-7-25 13:57 3649

未解决 [求助]创建新节,添加异常处理函数到seh中,会对pe文件造成什么影响 200.00雪花

2020-7-25 13:57
3649

当在新节中嵌入异常handler函数,并将其装载在seh中,为什么原来的节中的一些地址会改变,是因为fs段改变导致的嘛

1.section

如题所说,我现在已经使用python中的lief在pe文件末尾增加了新节

bin = lief.parse(INPUT_PE)
bin.add_section(section_my)#大致是这样

2.seh的安装问题

我现在已经可以在一个.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前
添加seh后:
添加seh后
0x1001790中的内容也会发生变化(我最不解的地方):
添加前: 添加seh前1790
添加后: 添加seh后1790


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2020-8-22 16:18 被atlanta_zhao编辑 ,原因: 有了新的进展
收藏
免费 1
支持
分享
最新回复 (8)
雪    币: 15
活跃值: (3571)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
滴水逆向,PE这一块讲了这些知识。
2020-7-25 15:12
0
雪    币: 1787
活跃值: (2055)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
1. 在PE文件末尾加入新区段,注意设置区段属性至少包括读取和执行
2. 将PE文件入口点设置到你新加的区段,写入你的代码到这个区段里,并且添加跳转回原入口点的指令
至于你提到的,扩展原有.text区段,不能改变各个区段VA,否则将导致后面的寻址都会出错
2020-7-25 15:30
0
雪    币: 559
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
PE中大多都是RVA,代码中大多都是VA,只要.text节不扩大到大于内存中映射的大小,都不影响程序执行。比如.text节按文件对其0x400,按内存对齐0x1000,那么就可以把.text扩展到0x1000这么大,依次修改其他节的FOA即可
2020-7-25 15:38
0
雪    币:
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
Ratin 1. 在PE文件末尾加入新区段,注意设置区段属性至少包括读取和执行 2. 将PE文件入口点设置到你新加的区段,写入你的代码到这个区段里,并且添加跳转回原入口点的指令 至于你提到的,扩展原有.tex ...
.text节应该也是可以改的,只要修改所有后边的节,重定向一些地址,还要修改重定位表的好像~
https://bbs.pediy.com/thread-84932.htm这位老哥做过这个,有些许bug但是。
我现在的主要问题是想利用seh,不知道怎么修改线程seh了。不知注入exe或者shellcode可不可以实现。利用seh似乎是要LoadLibrary的吧,单纯的将代码放到新节中应该不行
2020-7-25 17:26
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
留个qq加你 我最近也在看这些  一起学习
2020-7-25 19:19
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
比如.text扩展100字节后  那你要重建PE了,把.text后边的都要往后挪动100字节,至于安装seh,你给那个线程安装?
2020-7-25 19:26
0
雪    币: 1787
活跃值: (2055)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8

是的,但对于EXE来说重定位表这种东西不可强求。你只能在VA对齐的范围内扩充.text,见4楼所说。你得确定一下,是给哪个线程添加SEH,以及你要添加的是SEH还是UEF。给已存在的远端线程添加SEH,手动通过内存读写函数去修改它FS中的SEH链、指向你注入你的SEH代码。还有,你这添加SEH的方式只能用于x86。为整个进程添加异常处理则是UEF,调用相应函数注册你的异常处理过程为UEF即可。

最后于 2020-7-25 21:15 被Ratin编辑 ,原因: 勘误
2020-7-25 21:14
0
雪    币:
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9

我加的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
     ret
Int3_handler2 endp

```

2020-8-22 16:24
0
游客
登录 | 注册 方可回帖
返回
//