首页
社区
课程
招聘
linson的eXcalibur V1.03脱壳―eXcalibur.exe 主程序
发表于: 2004-4-29 22:25 20678

linson的eXcalibur V1.03脱壳―eXcalibur.exe 主程序

fly 活跃值
85
2004-4-29 22:25
20678
linson的eXcalibur V1.03脱壳――eXcalibur.exe 主程序
        
         
      
下载页面: http://bbs.pediy.com/showthread.php?s=&postid=1130#post1130
软件大小: 20 K
   
【软件简介】:linson 的新壳

【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!

【调试环境】:WinXP、Ollydbg、PEiD、LordPE、ImportREC

―――――――――――――――――――――――――――――――――
【脱壳过程】:
         
         
        
linson喜欢吓人,eXcalibur伪装成Xtreme-Protector 1.00-1.05 -> Rafael Ahucha & Sergio Lara壳。
eXcalibur比较精悍。具有压缩效果,新增了几处反跟踪和Stolen Call,没有自校验。熟悉之后脱壳就没什么难度了。
eXcalibur对于汇编和Delphi的程序支持较好。Yjjh.mid大小:13.9K,欣赏linson提供的音乐吧。
        
―――――――――――――――――――――――――――――――――
一、EnableWindow 反跟踪
        
        
设置Ollydbg忽略所有异常选项。老规矩:用IsDebug 1.4插件去掉Ollydbg的调试器标志。
        
       
0040B000     E9 00000000             jmp eXcalibu.0040B005//进入OD后停在这
0040B005     60                      pushad
0040B006     E8 14000000             call eXcalibu.0040B01F


BP GetForegroundWindow   断下后取消断点,Alt+F9返回
   
       
003B0219     FFD0                    call eax ; USER32.GetForegroundWindow
003B021B     8985 A4394000           mov dword ptr ss:[ebp+4039A4],eax//返回这里
003B0221     E8 0D000000             call 003B0233


003B0233     56                      push esi
003B0234     FFD7                    call edi
003B0236     8985 94394000           mov dword ptr ss:[ebp+403994],eax; USER32.EnableWindow
003B023C     6A 00                   push 0//改为:push 1  ★
003B023E     FFB5 A4394000           push dword ptr ss:[ebp+4039A4]
003B0244     FFD0                    call eax ; USER32.EnableWindow
003B0246     E8 0A000000             call 003B0255

        
        
――――――――――――――――――――――――
二、避开 Stolen Call
        
        
linson 这次把程序中的不少Call都“偷走”了,呵呵,想办法让他住手!
        
BP VirtualAlloc   断下后取消断点,Alt+F9返回

003B02EB     FF15 12B44000           call dword ptr ds:[<&KERNEL32.VirtualAlloc>]
003B02F1     FC                      cld
003B02F2     8BF8                    mov edi,eax
003B02F4     8BB5 3C374000           mov esi,dword ptr ss:[ebp+40373C]
003B02FA     46                      inc esi
003B02FB     B9 10000000             mov ecx,10
003B0300     E8 5E000000             call 003B0363
003B0305     85C0                    test eax,eax//目标CALL 
003B0307     74 07                   je short 003B0310//改变标志位Z=1, 使这里JMP ★
003B0309     E8 08000000             call 003B0316//linson开始破坏 :-)  Stolen Call
003B030E     E2 F0                   loopd short 003B0300
003B0310     61                      popad
003B0311     E9 BE000000             jmp 003B03D4

        
        
――――――――――――――――――――――――
三、ZwSetInformationThread 反跟踪
        
     
   
003B03D4     8BBD 98394000           mov edi,dword ptr ss:[ebp+403998]
003B03DA     85FF                    test edi,edi
003B03DC     74 0F                   je short 003B03ED
003B03DE     FF95 78394000           call dword ptr ss:[ebp+403978]; kernel32.GetCurrentThread
003B03E4     6A 00                   push 0
003B03E6     6A 00                   push 0
003B03E8     6A 11                   push 11
003B03EA     50                      push eax
003B03EB     FFD7                    call edi; ntdll.ZwSetInformationThread//不能客气,当然是NOP掉!★
003B03ED     BE B4120000             mov esi,12B4
003B03F2     85F6                    test esi,esi
003B03F4     0F84 CA050000           je 003B09C4//记住这个地址,在003B09C4处下断

        
        
――――――――――――――――――――――――
四、避开IAT加密
        
        
快点的方法:Ctrl+B 在当前位置下搜索16进制值:61 80   找到在003B0985处
        
003B0975     61                      popad//这里下断,F9运行断下
003B0976     3385 E0394000           xor eax,dword ptr ss:[ebp+4039E0]
003B097C     8907                    mov dword ptr ds:[edi],eax//修改
003B097E     8385 E4394000 04        add dword ptr ss:[ebp+4039E4],4
003B0985     61                      popad//找到这里
003B0986     80BD EC394000 00        cmp byte ptr ss:[ebp+4039EC],0
003B098D     75 1C                   jnz short 003B09AB

      
003B097C处改为:
      
 
003B097C     61                      popad//呵呵,先来个POPAD  ★
003B097D     8907                    mov dword ptr ds:[edi],eax//正确的函数写入地址
003B097F     8385 E4394000 04        add dword ptr ss:[ebp+4039E4],4
003B0986     80BD EC394000 00        cmp byte ptr ss:[ebp+4039EC],0
003B098D     75 1C                   jnz short 003B09AB
      
        
               
――――――――――――――――――――――――
五、走至OEP、DUMP、完成脱壳
        
        
还记得在003B09C4处下断吧?避开IAT加密后F9运行断在003B09C4处
003B09C4     E8 23020000             call 003B0BEC//中断。断下后取消断点


下断:BP VirtualFree   断下后取消断点,Alt+F9返回
     
   
0040B001     FF15 16B44000           call dword ptr ds:[<&KERNEL32.VirtualFree>]
0040B007     9C                      pushfd//返回这里

        
花指令晃眼。Ctrl+B 在当前位置下搜索16进制值:9D EB   找到在0040B030处
        
0040B02D     83C4 04                 add esp,4
0040B030     9D                      popfd//下断,F9断下
0040B031     EB 01                   jmp short eXcalibu.0040B034

0040B034     33C0                    xor eax,eax
0040B036     64:8F00                 pop dword ptr fs:[eax]
0040B039     83C4 0C                 add esp,0C
0040B03C     E8 01000000             call eXcalibu.0040B042

0040B042     58                      pop eax
0040B043     9D                      popfd
0040B044     61                      popad
0040B045     E8 15000000             call eXcalibu.0040B05F

0040B057     68 203A4000             push eXcalibu.00403A20
0040B05C     EB 01                   jmp short eXcalibu.0040B05F


在0040B062处中断几次就走到OEP啦

0040B05F     58                      pop eax
0040B060     40                      inc eax
0040B061     50                      push eax ; eXcalibu.00403A21
0040B062     C3                      retn
//返回00403A21   飞向光明之巅!:-)

        
                
00403A21     6A 00                 push 0//在这儿用LordPE纠正ImageSize后完全DUMP这个进程
00403A23     E8 8A000000           call eXcalibu.00403AB2 ; GetModuleHandleA
00403A28     A3 9C504000           mov dword ptr ds:[40509C],eax
00403A2D     E8 3A010000           call eXcalibu.00403B6C ; InitCommonControls


☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
下面可以看见linson或者说forgot给大家的留言:

00403A4A  68 69 20 2C 20 69 20 61 6D 20 66 6F 72 67 6F 74  hi , i am forgot
00403A5A  2C 20 64 69 64 20 79 6F 75 20 75 6E 70 61 63 6B  , did you unpack
00403A6A  20 74 68 69 73 20 70 61 63 6B 65 72 3F 20 3A 44   this packer? :D
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
               
        
运行ImportREC,选择这个进程。把OEP改为00003A21,改RVA=00001408,大小=000000C8,点“Get Import”。
所有的函数都是有效的,当然是FixDump,正常运行啦!
        
        
―――――――――――――――――――――――――――――――――   
                                
         ,     _/ 
        /| _.-~/            \_     ,        青春都一晌
       ( /~   /              \~-._ |\
       `\\  _/                \   ~\ )          忍把浮名 
   _-~~~-.)  )__/;;,.          \_  //'
  /'_,\   --~   \ ~~~-  ,;;\___(  (.-~~~-.        换了破解轻狂
 `~ _( ,_..--\ (     ,;'' /    ~--   /._`\ 
  /~~//'   /' `~\         ) /--.._, )_  `~
  "  `~"  "      `"      /~'`\    `\\~~\   
                         "     "   "~'  ""

   

     Cracked By 巢水工作坊――fly [OCN][FCG][NUKE][DCM]

                2004-04-29 21:35

                        

[课程]Linux pwn 探索篇!

收藏
免费 11
支持
分享
最新回复 (21)
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
2
2004-4-29 22:26
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
3
从哪里捡来了……
2004-4-29 23:21
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
4
最初由 forgot 发布
从哪里捡来了……


你自己发的   ;)

http://tongtian.net/pediybbs/download.php?id=2394
2004-4-29 23:27
0
雪    币: 291
活跃值: (400)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
5
最初由 fly 发布
linson的eXcalibur V1.03脱壳――eXcalibur.exe 主程序

――――――――――――――――――――――――
五、走至OEP、DUMP、完成脱壳


下断:BP VirtualFree 断下后取消断点,Alt+F9返回

   
0040B001 FF15 16B44000 call dword ptr ds:[<&KERNEL32.VirtualFree>]
0040B007 9C pushfd//返回这里




我返回后怎么到其他地方了,要搜索的二进制数也没找到?
2004-5-1 13:47
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
6
8成下的不是时候:)
2004-5-1 13:48
0
雪    币: 291
活跃值: (400)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
7
我返回后来到这里:

0500D08C    68 00800000             PUSH 8000
0500D091    6A 00                   PUSH 0
0500D093    FF36                    PUSH DWORD PTR DS:[ESI]
0500D095    FFD7                    CALL EDI
0500D097    FF76 04                 PUSH DWORD PTR DS:[ESI+4]
0500D09A    6A 00                   PUSH 0
2004-5-1 14:09
0
雪    币: 291
活跃值: (400)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
8
居然还会遇到什么LOCK什么的指令,说和处理器冲突,我干脆NOP掉他,然后强行Dump,然后把fly脱出来的程序的输入表粘上,再修正OEP,居然也运行了~~~~~~~~~~~~~~~~~~

最可恶的是,ImportREC居然会连fly脱出来的文件的输入表都追错,kernel32那块的全部认不出来
2004-5-1 14:31
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
9
最初由 草原猎豹 发布
居然还会遇到什么LOCK什么的指令,说和处理器冲突,我干脆NOP掉他,然后强行Dump,然后把fly脱出来的程序的输入表粘上,再修正OEP,居然也运行了~~~~~~~~~~~~~~~~~~

最可恶的是,ImportREC居然会连fly脱出来的文件的输入表都追错,kernel32那块的全部认不出来


可能你下断BP VirtualFree的时机不妥  
处理完IAT后在003B09C4处中断后再下断

ImportREC修复输入表时手动填入
OEP=00003A21,RVA=00001408,大小=000000C8


BTW:发现Ollydbg最新的1.10C版在调试中某些时候使用右键菜单会出错
2004-5-1 17:27
0
雪    币: 291
活跃值: (400)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
10
最初由 fly 发布




可能你下断BP VirtualFree的时机不妥
处理完IAT后在003B09C4处中断后再下断

ImportREC修复输入表时手动填入
OEP=00003A21,RVA=00001408,大小=000000C8



BTW:发现Ollydbg最新的1.10C版在调试中某些时候使用右键菜单会出错


1、olly1.10c确有此BUG,害我抓狂
2、我跟踪的地址不一样,但代码一样
3、003B09C4处对应我的地址,断不下,遇到异常说指令和硬件冲突???????
2004-5-1 17:39
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
11
最初由 草原猎豹 发布


1、olly1.10c确有此BUG,害我抓狂
2、我跟踪的地址不一样,但代码一样
3、003B09C4处对应我的地址,断不下,遇到异常说指令和硬件冲突???????


用修改版的OD,增加忽略C000001E异常看看

0040B001     FF15 16B44000           call dword ptr ds:[<&KERNEL32.VirtualFree>]
0040B007     9C                      pushfd//返回这里


应该是返回这个地址的
2004-5-1 19:27
0
雪    币: 398
活跃值: (1078)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
12
CPU 窗口里的地址不在 PE SECTION 范围内,
如动态申请的内存时, 不能用右键.
2004-5-1 19:37
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
13
最初由 simonzh2000 发布
CPU 窗口里的地址不在 PE SECTION 范围内,
如动态申请的内存时, 不能用右键.


Ollydbg 1.10B 应该没有这个问题
2004-5-1 20:10
0
雪    币: 234
活跃值: (160)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
一、EnableWindow 反跟踪
代码:--------------------------------------------------------------------------------
003B0233     56                      push esi
003B0234     FFD7                    call edi
003B0236     8985 94394000           mov dword ptr ss:[ebp+403994],eax; USER32.EnableWindow
003B023C     6A 00                   push 0//改为:push 1  ★
003B023E     FFB5 A4394000           push dword ptr ss:[ebp+4039A4]
003B0244     FFD0                    call eax ; USER32.EnableWindow
003B0246     E8 0A000000             call 003B0255
--------------------------------------------------------------------------------

EnableWindow这函数为何会成为反跟踪,不解?有请fly道明。。。

我这里也是XP和OD1.1b,按你的步骤一一顺序照做,到了这里出问题(出问题的地方强行Dump还是可以的):

花指令晃眼。Ctrl+B 在当前位置下搜索16进制值:9D EB 找到在0040B030处

代码:--------------------------------------------------------------------------------
0040B02D     83C4 04                 add esp,4
0040B030     9D                      popfd//下断,F9断下        [这个偶也能到达,接着就单步F7往下走。]
0040B031     EB 01                   jmp short eXcalibu.0040B034

0040B034     33C0                    xor eax,eax
0040B036     64:8F00                 pop dword ptr fs:[eax]
0040B039     83C4 0C                 add esp,0C
0040B03C     E8 01000000             call eXcalibu.0040B042

0040B042     58                      pop eax
0040B043     9D                      popfd
0040B044     61                      popad
0040B045     E8 15000000             call eXcalibu.0040B05F        [到这就出问题了,光标停在这行指令,OD说无法调试,当然下面的就无法进行下去了!]

0040B057     68 203A4000             push eXcalibu.00403A20
0040B05C     EB 01                   jmp short eXcalibu.0040B05F
--------------------------------------------------------------------------------

在0040B062处中断几次就走到OEP啦                [奇怪:fly请问你没有在0040B062处下断,为何来个“中断几次就走到OEP”?上面偶已经不能动了,在此处下断也没用]

代码:--------------------------------------------------------------------------------
0040B05F     58                      pop eax
0040B060     40                      inc eax
0040B061     50                      push eax ; eXcalibu.00403A21
0040B062     C3                      retn
//返回00403A21   飞向光明之巅!:-)
--------------------------------------------------------------------------------
2004-5-5 10:46
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
15
linson 跑哪去了?来解释一下你的 EnableWindow 反跟踪  :D


0040B045 E8 15000000 call eXcalibu.0040B05F [到这就出问题了,光标停在这行指令,OD说无法调试,当然下面的就无法进行下去了!]


都是linson惹的祸,呵呵。应该是可以的,F7走进去


在0040B062处中断几次就走到OEP啦 [奇怪:fly请问你没有在0040B062处下断,为何来个“中断几次就走到OEP”?上面偶已经不能动了,在此处下断也没用]


F7走到底循环几次就从0040B062处返回OEP了
2004-5-5 19:06
0
雪    币: 233
活跃值: (160)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
最初由 fly 发布

F7走到底循环几次就从0040B062处返回OEP了


0040B045 E8 15000000 call eXcalibu.0040B05F [到这就出问题了,光标停在这行指令,OD说无法调试,当然下面的就无法进行下去了!]
F7步进去程序就终止了.

另外,运行eXcalibur.exe 主程序经常死机...不能叫死机吧,死一个窗..呵呵,不知道这个什么问题?
2004-8-7 10:23
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
17
最初由 shaitan 发布




另外,运行eXcalibur.exe 主程序经常死机...不能叫死机吧,死一个窗..呵呵,不知道这个什么问题?

大概播放midi有问题
2004-8-7 10:30
0
雪    币: 233
活跃值: (160)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
最初由 forgot 发布

大概播放midi有问题


脱壳的程序不会有这种情况!
2004-8-7 10:47
0
雪    币: 227
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
:D 好厉害啊,学习的日子长着呢,知其然不知其所以然啊。
试了一下还真行。
2004-8-7 12:59
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
20
根据fly的脱文写的脚本,仅对主程序试用成功

msg "忽略所有异常,取消所有断点"
msg "code by skylly"
dbh
bpmc
var stop1
var stop2
var stop3
var stop4
var stop5
var stop6

gpa "GetForegroundWindow", "user32.dll"
bp $RESULT
run
bc $RESULT
rtu
mov stop1,eip
add stop1,21
mov [stop1],#6A01# //窗口前置

gpa "VirtualAlloc", "kernel32.dll"
bp $RESULT
run
bc $RESULT
rtu
mov stop2,eip
add stop2,16
go stop2
mov !ZF,1//保住stolen call
mov stop3,eip
add stop3,E4
go stop3
mov [eip],#9090# //消灭反跟踪
mov stop4,eip
add stop4,5D9
mov stop5,eip
add stop5,591
bp stop5
run
bc stop5
mov [eip],#6189078385E439400004#//保住函数地址
bp stop4
run
bc stop4
gpa "VirtualFree", "kernel32.dll"
bp $RESULT
run
bc $RESULT
rtu
mov stop6,eip
add stop6,29
bp stop6
run
bc stop6
sto
sto
sto
sto
sto
sti
sto
sto
sto
sti
sto
sto
sto
sto
sti
sto
sto
sto
sto
sti
sto
sto
sto
sto
sto
sto
sto
sto
sto
sto
cmt eip,"oep,full dump!"
ret
2005-12-7 17:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
FLY的那个写代码的程序是那里来的.能不能发布一下,就是那个出现了传说中的分割线的问题
2006-9-4 15:05
0
雪    币: 44229
活跃值: (19950)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
22
最初由 LucIfer 发布



在你的代码中用论坛标签:
[CODE] ……  [/CODE]

另:如与主题无十分有必要的问题,请勿翻老帖。
2006-9-4 15:30
0
游客
登录 | 注册 方可回帖
返回
//