首页
社区
课程
招聘
Thinstall V2.501脱壳――Win98的Notepad
发表于: 2004-12-8 17:54 20117

Thinstall V2.501脱壳――Win98的Notepad

fly 活跃值
85
2004-12-8 17:54
20117

.                        

软件类别:  国外软件 / 共享版 / 安装制作
应用平台:  Win9x/NT/2000/XP
推荐等级:  ****
开 发 商:  http://thinstall.com/
软件介绍:  它可以把程序所需要的DLL和OCX都打到一个EXE中,然后在运行的时候自动将DLL、OCX释放出来。这个工具看起来不错,比较方便,但损失了一些性能,而且做成的EXE体积很大。只有当你的用户希望运行你的程序,而又不希望安装它(例如编写一个演示程序),你可以考虑这个工具。
               
【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
            
【调试环境】:WinXP、Ollydbg V1.10、PEiD、LordPE、WinHex
            
―――――――――――――――――――――――――――――――――
【脱壳过程】:
         
         
Thinstall其实是捆绑壳,但是比PEBundle之类要强。Thinstall可以包装.NET、Java、VB等程序。
新版的Thinstall不对外提供公开下载,运行时需要连接License Server或者使用USB Key。
用Thinstall加壳Win98的Notepad作为试炼品吧。

放个PEiD的sign:
[Thinstall V2.4X-2.5X -> Jitit]
signature = 55 8B EC B8 ?? ?? ?? ?? BB ?? ?? ?? ?? 50 E8 00 00 00 00 58 2D ?? ?? ?? ?? B9 ?? ?? ?? ?? BA ?? ?? ?? ?? BE ?? ?? ?? ?? BF ?? ?? ?? ?? BD ?? ?? ?? ?? 03 E8
ep_only = true
―――――――――――――――――――――――――――――――――
一、前奏
            
     
设置Ollydbg忽略所有异常选项。老规矩:用IsDebug V1.4插件去掉Ollydbg的调试器标志。

00401A95     55                push ebp
//进入Ollydbg后暂停在这
00401A96     8BEC              mov ebp,esp
00401A98     B8 3C1A4A7D       mov eax,7D4A1A3C
00401A9D     BB ED08B7F0       mov ebx,F0B708ED
00401AA2     50                push eax
00401AA3     E8 00000000       call Notepad.00401AA8

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

00401A66     FF15 E4534000     call dword ptr ds:[<&KERNEL32.GetModuleHandleA>]
//返回这里
00401A6C     50                push eax ; Notepad.00400000

Ctrl+F搜索命令:jmp eax

00401A8B     8B45 FC           mov eax,dword ptr ss:[ebp-4]
00401A8E     FFE0              jmp eax ; 7FF79E04
//找到这里,F4过来

现在来到Thinstall的核心处理段:

7FF79E04     55                push ebp
7FF79E05     8BEC              mov ebp,esp
7FF79E07     6A FF             push -1
7FF79E09     68 70BEF87F       push 7FF8BE70
7FF79E0E     68 A09BF77F       push 7FF79BA0
7FF79E13     64:A1 00000000    mov eax,dword ptr fs:[0]
7FF79E19     50                push eax
7FF79E1A     64:8925 00000000  mov dword ptr fs:[0],esp
7FF79E21     83EC 10           sub esp,10
7FF79E24     53                push ebx
7FF79E25     56                push esi
7FF79E26     57                push edi
7FF79E27     8965 E8           mov dword ptr ss:[ebp-18],esp
7FF79E2A     FF15 7062F87F     call dword ptr ds:[7FF86270] ; kernel32.GetVersion

―――――――――――――――――――――――――――――――――
二、获取加壳前程序的PE Header等数据

Ctrl+S 搜索命令序列:
mov eax,dword ptr ds:[eax+3C]
mov ecx,dword ptr ss:[ebp-118]
找到在7FF427BA处,直接F4过去

7FF427A5     8B85 D4FDFFFF     mov eax,dword ptr ss:[ebp-22C]
7FF427AB     8B40 18           mov eax,dword ptr ds:[eax+18]
7FF427AE     8985 E8FEFFFF     mov dword ptr ss:[ebp-118],eax
7FF427B4     8B85 E8FEFFFF     mov eax,dword ptr ss:[ebp-118]
7FF427BA     8B40 3C           mov eax,dword ptr ds:[eax+3C]
//F4到这里
7FF427BD     8B8D E8FEFFFF     mov ecx,dword ptr ss:[ebp-118]
7FF427C3     8D4401 18         lea eax,dword ptr ds:[ecx+eax+18]
7FF427C7     8985 D0FDFFFF     mov dword ptr ss:[ebp-230],eax  ; Notepad.004000E8
//在这里可以得到PE Header和The Section Table数据 ★
7FF427CD     C705 D05DF97F 020>mov dword ptr ds:[7FF95DD0],2

PE Header:
004000D0  50 45 00 00 4C 01 01 00 D6 57 5A 35 00 00 00 00  PE..L.肿Z5....
004000E0  00 00 00 00 E0 00 0E 01 0B 01 03 0A 00 40 00 00  ....?..@..
004000F0  00 70 00 00 00 00 00 00 CC 10 00 00 00 10 00 00  .p......?.....
00400100  00 50 00 00 00 00 40 00 00 10 00 00 00 10 00 00  .P....@.......
00400110  04 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00  ..............
00400120  C6 CA 00 00 00 04 00 00 00 00 00 00 02 00 00 00  剖............
00400130  00 00 10 00 00 10 00 00 00 00 10 00 00 10 00 00  ............
00400140  00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00  ...............
00400150  00 60 00 00 8C 00 00 00 00 70 00 00 C8 42 00 00  .`..?...p..嚷..
…… ……

毕竟只是捆绑壳,此时代码已经解压,现在dump则IAT等信息都是未加密的,正是脱壳的最佳时机!

―――――――――――――――――――――――――――――――――
三、Dump、PE修正

如果你用LordPE来dump,会发现得到的dumped.exe连图标也没有了,别急,用WinHex把上面得到的PE Header和The Section Table等数据写入相应部分,这样就可以运行啦。你也可以用插件OllyDump先生去掉“重建输入表”选项来直接抓取,修改OEP,把BoundImport清0。

但是依旧只显示一个.text区段, 看看NumberOfSections:01,把PE头+06H处修改为05,所有的区段就露面了。
只保留LordPE的“Validate PE”选项,重建PE。   
这次脱的算是稍微有点完美了。

―――――――――――――――――――――――――――――――――
四、飞向光明之巅

还想看看是怎样跳OEP的?
Ctrl+F搜索命令:call dword ptr ss:[ebp-3B8]

7FF4289C     FF95 48FCFFFF     call dword ptr ss:[ebp-3B8]; Notepad.004010CC
//飞向光明之巅! ^O^

―――――――――――――――――――――――――――――――――   
                                
         ,     _/
        /| _.-~/            \_     ,        青春都一晌
       ( /~   /              \~-._ |\
       `\\  _/                \   ~\ )          忍把浮名
   _-~~~-.)  )__/;;,.          \_  //'
  /'_,\   --~   \ ~~~-  ,;;\___(  (.-~~~-.        换了破解轻狂
`~ _( ,_..--\ (     ,;'' /    ~--   /._`\
  /~~//'   /' `~\         ) /--.._, )_  `~
  "  `~"  "      `"      /~'`\    `\\~~\   
                         "     "   "~'  ""
   
              UnPacked By :   fly
               2004-12-08 14:00
                        


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (44)
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
2
压缩包含有文件:

Notepad.exe
Thinstall V2.501脱壳――Win98的Notepad.txt
UnPacked.exe


:D

附件:Try.rar
2004-12-8 17:57
0
雪    币: 97697
活跃值: (200734)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
3
学习!!!
2004-12-8 17:57
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
4
应该是lordpe问题,用文件的header就...
2004-12-8 18:01
0
雪    币: 213
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
fly版主
Steel Box那个也写一个吧.
2004-12-8 19:18
0
雪    币: 319
活跃值: (2439)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
6
但是依旧只显示一个.text区段, 看看NumberOfSections:01,把PE头+06H处修改为05,所有的区段就露面了。
只保留LordPE的“Validate PE”选项,重建PE。   
这次脱的算是稍微有点完美了。

难怪我只看到一个段:)
2004-12-8 19:40
0
雪    币: 319
活跃值: (2439)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
7
请问fly大侠:为什么要把BoundImport清0?你是怎么想到要清零了?
2004-12-8 21:15
0
雪    币: 392
活跃值: (909)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
8
支持:D
2004-12-8 21:58
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
9
否则运行时会弹出某某dll找不到

BTW:csjwaman 兄直接喊fly就行了,没必要客气呀  :o
2004-12-8 21:59
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
lihai!!! 学习!
2004-12-8 23:59
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
精彩~~~
2004-12-9 00:03
0
雪    币: 690
活跃值: (1826)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
12
fly现在哪里工作呀!
2004-12-9 09:26
0
雪    币: 154
活跃值: (216)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
据内部知情人士透露,FLY正在为国家干革命
2004-12-9 10:40
0
雪    币: 159
活跃值: (339)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
14
最初由 stephenteh 发布
lihai!!! 学习!

难得~居然用Chinese!:D :D
2004-12-9 11:44
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
15
thanks !!!!
2004-12-9 12:39
0
雪    币: 159
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
请问一下:如何把BoundImport清0。
2004-12-9 21:34
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
17
最初由 lihai3330 发布
请问一下:如何把BoundImport清0。


LordPE打开

2004-12-9 21:58
0
雪    币: 159
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
前面的一样,

看看NumberOfSections:01,把PE头+06H处修改为05,所有的区段就露面了。
只保留LordPE的“Validate PE”选项,重建PE。

我是用fly大侠的第二种方法,,按照这样作了,为什么还是不能运行呢???

附件:111.rar
2004-12-9 22:12
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
19
可能你dump时机不妥
import table处丢失了数据
2004-12-9 22:24
0
雪    币: 159
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
我是到oep 时dump的呀,正确的是这样吗?
2004-12-9 22:34
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
21
在文中提到的地方dump
2004-12-9 22:43
0
雪    币: 229
活跃值: (143)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
22
一天没上,又看到fly大哥的好文了~!
2004-12-9 23:42
0
雪    币: 282
活跃值: (233)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
23
我是这样脱的,下bp VirtualAlloc断点,中断8次后,(可以看见它在申请壳空间和解压代码!!!)

0012F8C8    7FF617A2  /CALL 到 VirtualAlloc 来自 7FF6179C
0012F8CC    0040C000  |Address = Notepad.0040C000
0012F8D0    00001000  |Size = 1000 (4096.)
0012F8D4    00001000  |AllocationType = MEM_COMMIT
0012F8D8    00000040  \Protect = PAGE_EXECUTE_READWRITE
0012F8DC    004053C0  <&KERNEL32.GetModuleFileNameA>
0012F8E0    004053C0  <&KERNEL32.GetModuleFileNameA>

alt+f9,回到壳空间,如下:
7FF6179C     FF15 4860F87F               call dword ptr ds:[7FF86048]                 ; kernel32.VirtualAlloc
7FF617A2     8B45 A0                     mov eax,dword ptr ss:[ebp-60]
7FF617A5     6BC0 28                     imul eax,eax,28
7FF617A8     8B4D D0                     mov ecx,dword ptr ss:[ebp-30]
7FF617AB     8B4401 24                   mov eax,dword ptr ds:[ecx+eax+24]
7FF617AF     25 80000000                 and eax,80
7FF617B4     85C0                        test eax,eax
7FF617B6     75 4E                       jnz short 7FF61806
7FF617B8     6A 00                       push 0
7FF617BA     8D45 F0                     lea eax,dword ptr ss:[ebp-10]
7FF617BD     50                          push eax
7FF617BE     FFB5 28FEFFFF               push dword ptr ss:[ebp-1D8]
7FF617C4     FFB5 1CFEFFFF               push dword ptr ss:[ebp-1E4]
7FF617CA     FF75 DC                     push dword ptr ss:[ebp-24]
7FF617CD     E8 FA1AFFFF                 call 7FF532CC   //
经过这个call后,就可以用插件OllyDump,Dump出.txet段,在按照fly大侠的方法修改NumberOfSections:01,把PE头+06H处修改为05,把BoundImport清0,再改一下修正后的.text段的虚拟和物理尺寸大小,就ok了。

不知有什么错误之处清大家指正!!!
2004-12-10 00:29
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
24
wangli_com 兄弟有空可以看一下那个new protection system
一个捆绑的杂烩

http://bbs.pediy.com/showthread.php?threadid=7926
2004-12-10 09:04
0
雪    币: 303
活跃值: (466)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
最初由 wangli_com 发布
我是这样脱的,下bp VirtualAlloc断点,中断8次后,(可以看见它在申请壳空间和解压代码!!!)


0012F8C8 7FF617A2 /CALL 到 VirtualAlloc 来自 7FF6179C
0012F8CC 0040C000 |Address = Notepad.0040C000
........

实际就是“以壳解壳”:D
2004-12-10 09:49
0
游客
登录 | 注册 方可回帖
返回
//