首页
论坛
课程
招聘
simonzh的unpackme脱壳
2005-5-18 16:41 6835

simonzh的unpackme脱壳

2005-5-18 16:41
6835
目标程序:http://bbs.pediy.com/showthread.php?s=&threadid=13753
工具: Driver Studio v3.2/IceExt v0.67,LoadPE,ImportRec

步骤:
   
: bpmb SetThreadContext x do "d (*(esp+8) + b8)"
: bpmb WaitForDebugEvent x

运行,断在WaitForDebugEvent,F12回程序空间(即注入winlogon的代码)

: bd 2(禁止WaitForDebugEvent)
: bpx xxxx076C do "d eax"  ; 对测试dwDebugEventCode处下断,xxxx0000为分
                           ; 配内存的基地址,offset=076C

壳代码引起的EXCEPTION_DEBUG_EVENT有3次:

1. 地址010204E4,代码为int 3
   然后SetThreadContext,eip->0102060A

2. 地址01020F88,代码为lock cmpxchg8b eax
   SetThreadContext,eip->01026583

3. 地址01027945代码int 3,这里明显在解码

可以看到,3次异常地址都在壳代码的section内。显然,原程序与
壳代码之间没有联系。

对ContinueDebugEvent下断:

: bpmb ContinueDebugEvent x

断下后:

: proc ->查calc的KTEB
: addr KTEB
: u 01027945

在int 3后的NOP下断,禁止除此之外的其他断点,F5
继续调试,断到子进程内。直接用esp定律:

: bpmb 23:6FFC0 w

断下2次后F8单步很快到这里:

01028ED8: jmp eax   ; eax=00550EED

stolen code:

   00550EED        push 00000070   
                jmp 00550EF4
        ->        push 01001606       
                jmp 00550EFE
                add dword ptr [ecx],-1b
        ->        push 00550F09        ; 变形的call的返回
                push 01012C18
                ret               

   00550F09        jmp 00550F0E
                _JUNKCODE
        ->        push 010128B1
                ret                ; 回原程序

  得到OEP为010128A5,stolen codes为:
  
  push 70
  push dumped.01001608
  call dumped.01012C18       
  
  Dump: Correct Imagesize,dump full,rebuild PE.
       
  
  修复IAT,可以直接用ImportRec手工完成,可看出真正的api(不仔细点
  容易认错),但数量多了点,还是跟一跟.

  iat开始: 01001000, 结束01001238, size=0x238

  在2次SetThreadContext后,可以看到iat中还未填入redirected api(实际
  iat内是加密api name的rva).

  :bpmb LoadLibraryA x
   
  F12返回到01027BDC,单步跟,很快会出现第1个iat项的地址: 01001020
  到这里:

  01027FFF call [ebp+40BAFB] -> 550000

  跳到GetProcAddress+0xF的地址。取到api地址,第1个为WaitForSingleObject
  patch下面的标记检测,即可得到干净的IAT。
  
             or ecx,ecx (此时=1)
  01028257   jz ....   -> Patch为jmp

建议:

1. 花指令过于单一,作用不大(是否源代码每行都用了,实在太多)
2. 对内核debugger防范不够,不用IceExt都可以跑
3. anti-debug不够,缺少自校验,可较轻松地设断,Hying的壳就难缠得多
4. IAT加密太容易被跳过了.
5. 被保护程序与壳代码联系不够,可加入replaced code.
6. stolen code温柔了点

个人意见,纯属信口开河。不喜欢用inject的壳,脱壳不好调试 :-)
(手伸得太长,有被列入病毒的危险吧)

请问simonzh:

我开始是用OD的,使代码注入到自己而不是winlogon,这样可以继续用OD调试.
但用WriteProcessMemory向子进程写入"\??\d:\windows\system32\winlogon.exe"
(用winlogon的路径替代calc)后,下一个调试事件是EXIT_PROCESS_DEBUG_EVENT,
即子进程退出了,能否解释一下?(我没有调试子进程,而且DebugActiveProcessStop
我用不来)。

看雪招聘平台创建简历并且简历完整度达到90%及以上可获得500看雪币~

收藏
点赞0
打赏
分享
最新回复 (10)
雪    币: 230
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
kimmal 活跃值 1 2005-5-18 16:46
2
0
支持,很久没用SICE了~!
雪    币: 60
活跃值: 活跃值 (123)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
fly 活跃值 85 2005-5-18 17:30
3
0
或许用SoftICE对付这样的程序是比较好的选择

里面有几次GetTickCount检测时间
注入之后还有一次检测“\??\”,防止你替换winlogon.exe
雪    币: 200
活跃值: 活跃值 (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
二点 活跃值 1 2005-5-18 18:28
4
0
学习。。
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
roby 活跃值 2005-5-18 19:01
5
0

有的消化了
学习ing
雪    币: 207
活跃值: 活跃值 (23)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
simonzh2000 活跃值 24 2005-5-18 21:03
6
0
softworm 兄弟强.

关于 IAT 的哪个跳转都是被 MS 给害了.
calc.exe , notepad.exe 等用了
msvcrt.dll 中一些比较特殊的 API.
为了兼容, 比较了一下.

对内核调试器检测有什么好的方法?

花指令, 我是借用 cyclotron 兄弟的, 我自己只加了一组.

至于 codereplace 等, res 压缩, 限于能力和时间, 以后再说了.

至于 OD 退出, 兄弟再分析一下子进程.
雪    币: 235
活跃值: 活跃值 (32)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
springkang[DFCG 活跃值 11 2005-5-19 12:39
7
0
弓虽人,能用softice脱壳!
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wekabc 活跃值 2005-5-20 13:29
8
0
强强强强强强强强强强强强强强强强强强强强强强!!!!!!!!!!!!
雪    币: 19
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
pendan2001 活跃值 4 2005-5-20 14:16
9
0
学习
雪    币: 508
活跃值: 活跃值 (39)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
无聊的菜鸟 活跃值 9 2005-5-20 23:37
10
0
我在试着使用OD来脱这个几乎是用上了所有检测OD手段的变态壳.不过由于时间关系,上次在某个地方被阴之后就没继续,好象壳在调用ZwQueryTreadInformation之后的某个地方会改写寄存器阴人.
雪    币: 104
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
window 活跃值 1 2005-5-21 12:09
11
0
检测od也就那几个手段,ZwSetInformationThread,ZwQueryInformationProcess,GetTickCount
还有么?

偶用od最烦的还是双进程解码... 每次一碰到这个就进度减慢到原来的1/n
游客
登录 | 注册 方可回帖
返回