首页
社区
课程
招聘
错遇 Yoda's Protector v1[1].03.2
发表于: 2005-4-29 17:50 5131

错遇 Yoda's Protector v1[1].03.2

2005-4-29 17:50
5131
昨天刚跟着二哥的脱壳教程学脱壳,里边有《手动脱壳进阶第五篇yoda's Crypter V1.2》,然后今天又在DFCG上看到 Yoda's Protector v1[1].03.2,
于是下回来看看,现在好了,实在拿不下来......

引用snk2002声明:这个Yoda's Protector v1.03.2挺绝的,暗庄若干,变形jump若干,...若干。而且当这个壳发监测到你在调试,便(也许)锁定了键盘和鼠标,并且开始菜单,任务栏,快捷栏无法点击

我不懂写文章,说主要部分吧

OD忽略所以异常,IsDebugPresent隐藏。
CALL    [EBP+EBX]   这样的形式可看到调用的API函数
CALL    01013F57    这样的形式得高度注意,一不小心就飞起来啦

SHIFT+F9    经过6次后就没有异常了

//完成函数表的载入
01013E9A    E8 03000000     CALL    01013EA2                         ; Yoda's_P.01013EA2

//找到任务栏窗口,用GetTopWindow使开始菜单,任务栏,快捷栏无法点击
01013F30    50              PUSH    EAX                              *****  指向 Shell_TrayWnd
01013F31    BB EF724200     MOV     EBX, 4272EF
01013F36    FF541D 00       CALL    [EBP+EBX]                        ; User32.FindWindowA
01013F3A    8985 50A04200   MOV     [EBP+42A050], EAX                ; Yoda's_P.010166C3
01013F40    BB F3724200     MOV     EBX, 4272F3
01013F45    FF541D 00       CALL    [EBP+EBX]                        ; User32.GetTopWindow
01013F49    8985 58A04200   MOV     [EBP+42A058], EAX                ; Yoda's_P.010166C3

//禁止鼠标
01013F8D    6A 00           PUSH    1           ****改0
01013F8F    BB DF724200     MOV     EBX, 4272DF
01013F94    FF541D 00       CALL    [EBP+EBX]                        ; User32.BlockInput

//挂起OD进程   SuperThread
010147BA    85DB            TEST    EBX, EBX
010147BC    74 11           JE      SHORT 010147CF                   *****找到OD进程后,这里一定要跳
010147BE    51              PUSH    ECX
010147BF    8BC1            MOV     EAX, ECX
010147C1    50              PUSH    EAX
010147C2    8BD5            MOV     EDX, EBP
010147C4    81C2 B3724200   ADD     EDX, 4272B3
010147CA    FF12            CALL    [EDX]                           *** SuperThread

//IsDebuggerPresent 不用理会了
010157C6    FF541D 00       CALL    [EBP+EBX]                        ; kernel32.IsDebuggerPresent
010157CA    0BC0            OR      EAX, EAX
010157CC    74 23           JE      SHORT 010157F1                   ; Yoda's_P.010157F1

//时间比较GetTickCount  
01015D81    FF5415 00       CALL    [EBP+EDX]                        ; kernel32.GetTickCount
01015D85    8B8D BCA04200   MOV     ECX, [EBP+42A0BC]
01015D8B    2BC1            SUB     EAX, ECX                         ; Yoda's_P.01007074
01015D8D    3D E02E0000     CMP     EAX, 2EE0
01015D92    78 08           JS      SHORT 01015D9C                   ***** 改跳走

好,没什么检测调试器的了
再顺利的跟一会儿后,来到这里
01014641    8B85 34A04200   MOV     EAX, [EBP+42A034]        
地址访问错误了!!!
我迷失在这里了,请各位指点一下!

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
2
继续
顺着异常走
2005-4-29 17:54
0
雪    币: 257
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
哇,我居然搞定了,耶
2005-4-29 18:40
0
雪    币: 257
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
继GetTickCount比较后,一路F8往下走,走到这里注意:
01015D6A    8B9D A8A34200   MOV     EBX, [EBP+42A3A8]
01015D70    33C3            XOR     EAX, EBX
01015D72    74 30           JE      SHORT 01015DA4                  ***** 程序流程,这里没有跳
01015D74    EB 01           JMP     SHORT 01015D77                  **** 跳到 POPAD
01015D76    C3              RETN
01015D77    61              POPAD
01015D78    EB 01           JMP     SHORT 01015D7B                  ****跳到 RETN           
01015D7A    90              NOP
01015D7B    C3              RETN
按程序的流程,就到了异常了
01014641    8B85 34A04200   MOV     EAX, [EBP+42A034]

想想,EBP堆栈的值改变的几种可能,加上函数调用都是用这个EBP+来寻址的,再想到出现这个异常之前
改变EBP,可能就是这个POPAD出的问题
于是改
01015D72    74 30           JE      SHORT 01015DA4                  ***** 改JNE跳走

继续跟踪,发现后边的代码起变化了,全部红字。
一路F8,到这里又走不去了
010161BA   /EB 01           JMP     SHORT 010161BD                   ; Yoda's_P.010161BD
010161BC   |C3              RETN
010161BD   \0000            ADD     [EAX], AL

哈哈,一个SHIFT+F9后,代码又豁然开朗了,好整齐的代码
01006AE2    68 88180001     PUSH    1001888
01006AE7    E8 BC010000     CALL    01006CA8                         ; Yoda's_P.01006CA8
01006AEC    33DB            XOR     EBX, EBX
01006AEE    53              PUSH    EBX
01006AEF    8B3D 4C110001   MOV     EDI, [100114C]                   ; kernel32.GetModuleHandleA
01006AF5    FFD7            CALL    EDI                              ; Yoda's_P.01015803
01006AF7    66:8138 4D5A    CMP     WORD PTR [EAX], 5A4D
01006AFC    75 1F           JNZ     SHORT 01006B1D                   ; Yoda's_P.01006B1D
01006AFE    8B48 3C         MOV     ECX, [EAX+3C]

这时可以用OD 来dump下来了,然后修复等等,程序还是无法运行-_-

再看看,
01006ACE  - FF25 94120001   JMP     [1001294]
01006AD4  - FF25 90120001   JMP     [1001290]
01006ADA  - FF25 98120001   JMP     [1001298]
01006AE0    6A 70           PUSH    70                             *****应该是个参数吧
01006AE2    68 88180001     PUSH    1001888                        *****Shift+F9后到这里
01006AE7    E8 BC010000     CALL    01006CA8                         ; Yoda's_P.01006CA8
01006AEC    33DB            XOR     EBX, EBX
01006AEE    53              PUSH    EBX
01006AEF    8B3D 4C110001   MOV     EDI, [100114C]                   ; kernel32.GetModuleHandleA
01006AF5    FFD7            CALL    EDI                              ; Yoda's_P.01015803
01006AF7    66:8138 4D5A    CMP     WORD PTR [EAX], 5A4D
01006AFC    75 1F           JNZ     SHORT 01006B1D                   ; Yoda's_P.01006B1D
01006AFE    8B48 3C         MOV     ECX, [EAX+3C]
01006B01    03C8            ADD     ECX, EAX
01006B03    8139 50450000   CMP     DWORD PTR [ECX], 4550
01006B09    75 12           JNZ     SHORT 01006B1D                   ; Yoda's_P.01006B1D

于是DUMP的OEP改成6AE0
Import轻松修复,脱壳OK!
2005-4-29 18:55
0
游客
登录 | 注册 方可回帖
返回
//