首页
社区
课程
招聘
使用
雪    币: 611
活跃值: (251)
能力值: ( LV12,RANK:390 )
在线值:
发帖
回帖
粉丝
AntBean 9 2010-11-18 15:17
0
雪    币: 611
活跃值: (251)
能力值: ( LV12,RANK:390 )
在线值:
发帖
回帖
粉丝
AntBean 9 2010-11-12 19:25
0
[原创]SEH之浮想联翩
直接从exploit tutorial part 3 存下来的。。。。
雪    币: 611
活跃值: (251)
能力值: ( LV12,RANK:390 )
在线值:
发帖
回帖
粉丝
AntBean 9 2010-11-12 18:45
0
[原创]SEH之浮想联翩
谈过理论,下面是应用。
二. SEH在virus中的应用
   SEH能让我们的asm代码更健壮,xfish的系列文章已经有描述了。直接看:
        http://bbs.pediy.com/showthread.php?t=86452
   同时可以用SEH去做免杀,对抗模拟器。
   前提假设是模拟器没法模拟异常。思路如下:
   call seh
   seh_handler:
            mov eax,[esp+0xc]
        mov cl,0xb8
        add dword [eax+ecx],5     ;跳过jmp语句,到virus处执行
        xor eax,eax
        ret
  seh:
        push fs:[0]
        mov fs:[0],esp
  @except:
        xor eax,eax
        mov [eax],0   
        jmp @except
  virus:
        .......
       
此处需要注意两点:
   a. 由于seh handler需要是绝对地址,故需要重定位
   b. 如果被感染文件有SEH保护,还需要修改PE文件中的SEH表。因为被感染后的可执行文件发生异常,控制权转移到系统,要调用SEH处理函数时,系统会判断该SEH处理函数有没有在PE文件的SEH表中。我感染后调试时发现异常处理函数总是未被调用才意识到该问题。

三、SEH在exploit中的应用
   在看exploit tutorial part 3 SEH Based Exploit时,我产生了很大的困惑。使用了SEH的函数栈的结构如下:
   
  图中Params下面的Address of exception handler,完整的来说,是一个EXCEPTION_REGISTRATION结构。所谓的SEH exploit就是覆EXCEPTION_REGISTRATION结构,让系统执行我们的shellcode。
exploit tutorial part 3 SEH Based Exploit 中给予的覆盖时的流程解释如下:
a. 覆盖的eip产生一个异常
b. 当前的SE Handler地址被修改成进程空间里某个dll中的pop,pop,ret的地址
c. 系统执行pop,pop,ret。在exception handler执行前,下一个SEH的地址被放在了ESP+8的位置上。通过pop.pop,ret 将这个地址放到eip中,执行在next SEH地址中的代码

a,b两步比较容易理解。c乍看之下,让人云里雾里的,尤其后面作者反复提到fake exception,我这种菜鸟就彻底晕了。其实,将c联系我们前面提到的异常处理函数原型,异常处理函数调用时栈的布局就不难理解了。
pop  ;esp+0 被弹出  
pop  ;esp+4 被弹出
ret   ;esp+8被弹出,作为eip
esp+8存储的是EXCEPTION_REGISTRATION的地址。通过pop,pop,ret ,函数将会跳转到EXCEPTION_REGISTRATION地址处执行。我们写在EXCEPTION_REGISTRATION的prev中的数据将会被当成代码执行。
于是乎,我们的seh exploit就能构造成如下的形式了:
[Junk][nSEH][SEH][Nop-Shellcode]
其中nSEH=jmp xxx的机器码
    SEH=某个dll中pop,pop,ret的地址

四、SEH在反调试中的应用
        调试器发现:
        push seh_handler
        push fs:[0]
        mov fs:[0],esp
       
        xor eax,eax
        int 3
   
        pop fs:[0]
        add esp,4
       
        test eax,eax
        je debugger_found
        ....
        ...
        seh_handler:
        mov eax,[esp+0xc]
        mov dword [eax+0xb0],0xffffffff
        inc [eax+0xb8]
        xor eax,eax
        ret
       
        硬件断点发现:
        硬件断点的原理是Dr0-Dr3寄存器存储四个断点的地址,Dr6存储哪个断点被触发,Dr7存储控制四个断点启用/禁用的标识。所以只要查看该四个寄存器就知道是否有硬件断点了。要在用户态查看寄存器的值,得触发一个异常,通过SEH handler中的PCONTEXT获得
        Push seh
        Push fs:[0]
        Mov fs:[0],esp
       
        Xor eax,eax
        Mov dword ptr [eax],0
        Pop fs:[0]
        Add esp,4
       
        Test eax,eax
        Jnz bp_found
        ....
        ...
        Seh_handler:
        Mov eax,[esp+0xc]
        cmp dword ptr[eax+0x04],0
        Jne hdbp_found
        Cmp dword ptr[eax+0x08],0
        Jne hdbp_found
        Cmp dword ptr[eax+0x0c],0
        Jne hdbp_found
        Cmp dword ptr[eax+0x10],0
        Jne hdbp_found
        Jmp seh_ret
Hdbp_found:
        Mov dword ptr[eax+0xb0],0xffffffff
Seh_ret:
        Add dword ptr[eax+0xb8],6
        Xor eax,eax
        ret
雪    币: 611
活跃值: (251)
能力值: ( LV12,RANK:390 )
在线值:
发帖
回帖
粉丝
AntBean 9 2010-11-12 12:13
0
雪    币: 611
活跃值: (251)
能力值: ( LV12,RANK:390 )
在线值:
发帖
回帖
粉丝
AntBean 9 2010-11-10 17:39
0
[讨论]《Automatic Reverse Engineering of Malware Emulators》感兴趣的可交流
感谢楼主分享,很有兴趣。。下下来看了。。。
雪    币: 611
活跃值: (251)
能力值: ( LV12,RANK:390 )
在线值:
发帖
回帖
粉丝
AntBean 9 2010-10-29 20:29
0
PE病毒学习(一、二、三、四、五、六、七、八)
这里需要重定位API不是因为没有自己的输入表吧?
在你写好的病毒中,如果你让它有输入表也可以。这样编译后的可执行文件所有api的调用都变成硬编码的地址。当病毒试图把自己copy到宿主文件时,宿主文件中写入的是原始病毒文件中的函数地址。跟宿主文件自身内存空间中各个函数地址可能不一样。故需要重新定位各个函数的地址。
这个的原理就跟病毒中的变量要重定位一样。
雪    币: 611
活跃值: (251)
能力值: ( LV12,RANK:390 )
在线值:
发帖
回帖
粉丝
AntBean 9 2010-10-29 20:19
0
[讨论]我对病毒EPO技术的理解
这么强力?求样本,求源码。。。。
雪    币: 611
活跃值: (251)
能力值: ( LV12,RANK:390 )
在线值:
发帖
回帖
粉丝
AntBean 9 2010-10-29 20:16
0
[原创]基于启发式技术检测复杂病毒Anunnaki
额,除了EPO还能怎么调病毒代码?求解。。。。
雪    币: 611
活跃值: (251)
能力值: ( LV12,RANK:390 )
在线值:
发帖
回帖
粉丝
AntBean 9 2010-10-29 19:34
0
[讨论]我对病毒EPO技术的理解
我没说清楚。。。是先在IAT中找到某个函数的地址,然后在整个程序中搜索对该函数的调用,patch掉。。。不是直接修改IAT。。。。
杀软仅搜索常用的patch。。。和程序中最前面的函数调用。。。
我现在写代码试试。。。。
雪    币: 611
活跃值: (251)
能力值: ( LV12,RANK:390 )
在线值:
发帖
回帖
粉丝
AntBean 9 2010-10-29 18:03
0
[讨论]我对病毒EPO技术的理解
个人觉得在代码段中跳到其他段去执行,应该不大正常吧?误杀率我还不大清楚。。。
X门有试过么?
雪    币: 611
活跃值: (251)
能力值: ( LV12,RANK:390 )
在线值:
发帖
回帖
粉丝
AntBean 9 2010-10-29 18:00
0
[讨论]我对病毒EPO技术的理解
看到一个程序用EPO,在感染计算器时不会被查,但在感染画图程序时,被360和小红伞报了。我觉得可能原因是画图程序中patch的是第一个调用的地方。杀毒软件对patch的检查一个是ExitProcess()这种常用的应该会查,还有应该就是如果你patch的是一开始的调用。
至于可能patch的程序压根没执行到,这的确是个问题。个人想法是根据IAT,patch某个函数。对该程序所有调用到该函数的地方都做相应的patch。这样大多数情况下应该都可以被执行到的。为了避免多次执行,在patch的code中做相应处理应该就好了。
我现在还没有写过相应的代码,显然ExitProcess()这种patch应该是比较稳妥的。但不知道杀软查杀的情况。感谢pencil兄的讨论
雪    币: 611
活跃值: (251)
能力值: ( LV12,RANK:390 )
在线值:
发帖
回帖
粉丝
AntBean 9 2010-10-29 14:12
0
雪    币: 611
活跃值: (251)
能力值: ( LV12,RANK:390 )
在线值:
发帖
回帖
粉丝
AntBean 9 2010-10-29 14:11
0
[求助]Word漏洞利用遇到的困惑(已解决)
MARK一下,下次学这个时候参考楼主的帖子。。。。
雪    币: 611
活跃值: (251)
能力值: ( LV12,RANK:390 )
在线值:
发帖
回帖
粉丝
AntBean 9 2010-10-29 00:14
0
[原创]基于启发式技术检测复杂病毒Anunnaki
我又问愚蠢问题了。。。ff25是绝对Jmp的机器码 ff15是绝对call的机器码。。。
雪    币: 611
活跃值: (251)
能力值: ( LV12,RANK:390 )
在线值:
发帖
回帖
粉丝
AntBean 9 2010-10-28 23:33
0
[原创]基于启发式技术检测复杂病毒Anunnaki
菜鸟提问!!!!
为啥patch ExitProcess()的调用时 在整个代码里搜索 ff 15/ff 25?不是应该搜索0xE8么?

希望大牛讲解一下,我初学,这个地方看了好长时间没看懂。。。。
雪    币: 611
活跃值: (251)
能力值: ( LV12,RANK:390 )
在线值:
发帖
回帖
粉丝
AntBean 9 2010-10-28 22:14
0
啥是病毒的bpx检测?
莫非bpx指的是病毒对调试器下的中断的检测?。。。困惑啊。。。。
雪    币: 611
活跃值: (251)
能力值: ( LV12,RANK:390 )
在线值:
发帖
回帖
粉丝
AntBean 9 2010-10-22 15:16
0
[招聘]奇诺科技诚聘英才
支持一下,顶上去。。。
精华数
RANk
611
雪币
251
活跃值
关注数
粉丝数
0
课程经验
0
学习收益
0
学习时长
基本信息
  能力排名: No.192
  等    级: LV12
活跃值  活跃值:活跃值
  在线值:
  浏览人数:287
  最近活跃:2021-7-27 15:18
  注册时间:2009-02-20
勋章
能力值

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册