找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1716|回复: 2

内存断点原理4

[复制链接]
  • TA的每日心情
    难过
    2017-11-14 11:03
  • 签到天数: 43 天

    [LV.5]常住居民I

    19

    主题

    167

    回帖

    1830

    积分

    高级会员

    积分
    1830
    命运舞姬 发表于 2015-6-25 08:50:51 | 显示全部楼层 |阅读模式
    vi.下面来讨论一下内存断点的局限性问题。
    是不是什么壳都可以用内存中断啊?
    不是每个都可以的,一些像UPXASPACK就不行。
    为什么?
    呵呵~follew me
    情况1.
    我们来看看UPX的壳

    首先,他的壳代码在UPX1段。

    这里是他要跳到OEP的地方



    CODE:


    0040ED4F /77 11    ja short NOTEPAD_.0040ED62   
    0040ED51 |01C3    add ebx,eax
    0040ED53 |8B03    mov eax,dword ptr ds:[ebx]
    0040ED55 |86C4    xchg ah,al
    0040ED57 |C1C0 10    rol eax,10      //
    在解码
    0040ED5A |86C4    xchg ah,al
    0040ED5C |01F0    add eax,esi
    0040ED5E |8903    mov dword ptr ds:[ebx],eax
    0040ED60 ^|EB E2    jmp short NOTEPAD_.0040ED44
    0040ED62 \24 0F    and al,0F
    0040ED64 C1E0 10    shl eax,10
    0040ED67 66:8B07    mov ax,word ptr ds:[edi]
    0040ED6A 83C7 02    add edi,2
    0040ED6D ^ EB E2    jmp short NOTEPAD_.0040ED51 //
    回跳解码
    0040ED6F 61    popad
    0040ED70 - E9 5723FFFF jmp NOTEPAD_.004010CC    //
    跳到OEP


    [Copy to clipboard]


    我们看到他在对code段解压完毕的时候马上就JMPOEP去了,那么我们根本就来不及使用内存断点的办法。

    你可能说,我可以在

    0040ED6F 61    popad //
    这一句下段然后使用啊

    呵呵~~当然可以,不过你把花在下内存断点的时间,多按下几次F8不更好?!

    也就是说当一个壳如果他在JMP OEP前的一行代码仍在都在对code段解压,那么我们就不能再使用这种办法了!

    或者说我们没必要使用内存断点更贴切一点!

    情况2.
    对于一些在OEP处有stolen code的代码
    我们来看看一个OEP



    CODE:


    0049E2F4 u> 55    push ebp       //OEP
    0049E2F5 8BEC    mov ebp,esp
    0049E2F7 83C4 F4    add esp,-0C
    0049E2FA B8 BCE04900 mov eax,unpack.0049E0BC
    0049E2FF E8 048CF6FF call unpack.00406F08     //
    这里调用子程序
    0049E304 A1 B8FE4900 mov eax,dword ptr ds:[49FEB8]
    0049E309 50    push eax
    0049E30A 6A 00    push 0
    0049E30C 68 1F000F00 push 0F001F
    0049E311 E8 E68EF6FF call <jmp.&kernel32.OpenFileMappingA> //API
    0049E316 A3 60194A00 mov dword ptr ds:[4A1960],eax
    0049E31B 833D 60194A00 00 cmp dword ptr ds:[4A1960],0


    [Copy to clipboard]
    这个软件在被PESPIN加壳了以后这些全被偷掉了!

    也就是说,壳在模拟OEP代码的时候必然会执行



    QUOTE:


    0049E2FF E8 048CF6FF call unpack.00406F08 //
    这一步


    而这个地方是callcode段的。如果我们使用内存访问断点,那么就停在这个子程序的地方



    CODE:


    00406F08 50    push eax        //
    会停在这里
    00406F09 6A 00    push 0
    00406F0B E8 F8FEFFFF call <jmp.&kernel32.GetModuleHandleA>
    00406F10 BA 04F14900 mov edx,unpack.0049F104
    00406F15 52    push edx


    [Copy to clipboard]


    这里既不是处理stolen code的地方,也不是FOEP的地方。这就会对我们的判断产生误导。

    当然你可以alt+F9返回到壳处理stolen的地方,然后用内存断点,或者按几下F8到达FOEP处,但试问如果你拿到一个未知的壳的时候又怎么知道应该这么处理呢?

    还有其他一些情况留给大家总结吧!
    在下的砖已抛出,各位的玉不久矣。

    3.
    总结:
    好了说了很多,大家应该对内存断点的办法有了全面的了解,如果了解了内存断点的原理就不难明白他的使用方法,不难明白为什么有写壳不能使用内存断点的办法,其实任何的一种办法都需要经验的积累。相信如果大家在回答开篇的3个问题,已经不难了。
  • TA的每日心情
    难过
    2017-11-4 19:40
  • 签到天数: 2 天

    [LV.1]初来乍到

    60

    主题

    508

    回帖

    5470

    积分

    钻石会员

    学无止境

    积分
    5470

    卓越会员

    QQ
    海潮 发表于 2015-6-25 13:38:05 来自手机 | 显示全部楼层
    沙发~学习
    回复

    使用道具 举报

  • TA的每日心情

    2017-12-22 11:24
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    2

    主题

    43

    回帖

    60

    积分

    注册会员

    积分
    60
    332936 发表于 2017-12-15 11:32:33 | 显示全部楼层
    每天坚持学习,慢慢进步,加油!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|虫虫联盟 ( 备案号:蜀ICP备15018121号-1 )

    GMT+8, 2024-11-21 23:41 , Processed in 0.382041 second(s), 27 queries .

    Powered by Discuz! X3.5 Licensed

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表