首页
社区
课程
招聘
对《XXX查询大全 8.0 大众版》主程序OVERLAY的处理
发表于: 2006-1-10 09:18 4555

对《XXX查询大全 8.0 大众版》主程序OVERLAY的处理

cyto 活跃值
31
2006-1-10 09:18
4555
对《XXX查询大全 8.0 大众版》主程序OVERLAY的处理

说明:本文对该软件的OVERLAY数据的处理,纯属菜鸟学习技术,与该软件的破解基本无关。
程序安装完毕后有两个版本,其中一个是大众版。
分析如下:

1.查壳脱壳:
PEID:UPX 0.89.6 - 1.02 / 1.05 - 1.24 (Delphi) stub -> Markus & Laszlo [Overlay]
OD载入:
00464F80 h>  60             pushad                        入口点
00464F81     BE 00104400    mov esi,herbs1.00441000
...
004650DA     61             popad
004650DB   ^ E9 147EFEFF    jmp herbs1.0044CEF4
dump,PEID:Borland Delphi 3.0
运行提示:VFP&Exe1.32以下版本,无法运行,请升级。。。
参考文章:应该是OVERLAY的问题。

2.对Overlay的处理:
2.1 OD载入未脱壳程序,下断CreateFileA & SetFilePointer :
0012F5C8    00407147   /CALL 到 CreateFileA 来自 herbs1.00407142
0012F5CC    00D0485C   |FileName = "E:\herbs1.exe"
F9,第一个SetFilePointer:
0012F5DC    004071D2   /CALL 到 SetFilePointer 来自 herbs1.004071CD
0012F5E0    00000080   |hFile = 00000080 (window)
0012F5E4    FFFFFFF8   |OffsetLo = FFFFFFF8 (-8.)
0012F5E8    00000000   |pOffsetHi = NULL
0012F5EC    00000002   \Origin = FILE_END
F9一下,第二个SetFilePointer :
0012F5DC    004071D2   /CALL 到 SetFilePointer 来自 herbs1.004071CD
0012F5E0    00000080   |hFile = 00000080 (window)
0012F5E4    00025A00   |OffsetLo = 25A00 (154112.)
0012F5E8    00000000   |pOffsetHi = NULL
0012F5EC    00000000   \Origin = FILE_BEGIN
F9又一下,第三个SetFilePointer :
0012F5DC    004071D2   /CALL 到 SetFilePointer 来自 herbs1.004071CD
0012F5E0    00000080   |hFile = 00000080 (window)
0012F5E4    00025E00   |OffsetLo = 25E00 (155136.)
0012F5E8    00000000   |pOffsetHi = NULL
0012F5EC    00000000   \Origin = FILE_BEGIN
都是由下面代码入栈参数产生的:
004071C8     51               push ecx
004071C9     6A 00            push 0
004071CB     52               push edx
004071CC     50               push eax
004071CD     E8 12E8FFFF      call herbs1.004059E4             ; jmp to KERNEL32.SetFilePointer
004071D2     C3               retn
OffsetLo 是由push edx入栈参数决定的,好,找源头。
返回到:0044B340    .  E8 83BEFBFF  call upherbs1.004071C8
往上翻,看到都是SetFilePointer的指针调用:
0044B308    > \B9 02000000    mov ecx,2
0044B30D    .  BA F8FFFFFF    mov edx,-8
0044B312    .  8BC6           mov eax,esi
0044B314    .  E8 AFBEFBFF    call upherbs1.004071C8                第一个SetFilePointer
0044B319    .  BA E4F74400    mov edx,upherbs1.0044F7E4
0044B31E    .  B9 04000000    mov ecx,4
0044B323    .  8BC6           mov eax,esi
0044B325    .  E8 46BEFBFF    call upherbs1.00407170
0044B32A    .  8D55 F4        lea edx,dword ptr ss:[ebp-C]       
0044B32D    .  B9 04000000    mov ecx,4
0044B332    .  8BC6           mov eax,esi
0044B334    .  E8 37BEFBFF    call upherbs1.00407170                赋值指针位置
        0012F5C8    00407189   /CALL 到 ReadFile 来自 herbs1.00407184
        0012F5CC    00000080   |hFile = 00000080 (window)
        0012F5D0    0012FE3C   |Buffer = 0012FE3C
        0012F5D4    00000004   |BytesToRead = 4
        0012F5D8    0012F5E0   |pBytesRead = 0012F5E0
        0012F5DC    00000000   \pOverlapped = NULL
0044B339    .  33C9           xor ecx,ecx
0044B33B    .  8B55 F4        mov edx,dword ptr ss:[ebp-C]        0012FE3C  00 5A 02 00   
0044B33E    .  8BC6           mov eax,esi
0044B340    .  E8 83BEFBFF    call upherbs1.004071C8                第二个SetFilePointer
0044B345    .  8B55 F4        mov edx,dword ptr ss:[ebp-C]
0044B348    .  81C2 00040000  add edx,400
0044B34E    .  33C9           xor ecx,ecx
0044B350    .  8BC6           mov eax,esi
0044B352    .  E8 71BEFBFF    call upherbs1.004071C8                 第三个SetFilePointer

2.2 OD载入脱壳后程序,下断 CreateFileA & SetFilePointer :
第1个SetFilePointer:
0012F5DC    004071D2   /CALL 到 SetFilePointer 来自 up.004071CD
0012F5E0    00000080   |hFile = 00000080 (window)
0012F5E4    FFFFFFF8   |OffsetLo = FFFFFFF8 (-8.)
0012F5E8    00000000   |pOffsetHi = NULL
0012F5EC    00000002   \Origin = FILE_END
第二个SetFilePointer:
0012F5DC    004071D2   /CALL 到 SetFilePointer 来自 up.004071CD
0012F5E0    00000080   |hFile = 00000080 (window)
0012F5E4    00000000   |OffsetLo = 0
0012F5E8    00000000   |pOffsetHi = NULL
0012F5EC    00000000   \Origin = FILE_BEGIN
第三个SetFilePointer:
0012F5DC    004071D2   /CALL 到 SetFilePointer 来自 up.004071CD
0012F5E0    00000080   |hFile = 00000080 (window)
0012F5E4    00000400   |OffsetLo = 400 (1024.)
0012F5E8    00000000   |pOffsetHi = NULL
0012F5EC    00000000   \Origin = FILE_BEGIN

2.3小结:
比较上面两个跟踪结果发现,主要变化在于第二个SetFilePointer,脱壳后的值变为0,未脱壳的为25A00。
程序先是把指针(第一个SetFilePointer)指向文件最后,然后读取8位的数值,赋值给指针(第二个SetFilePointer),也就是读取的开始位置,然后再这个指针的值加400,指向第三个指针。
因此关键在第一个SetFilePointer后读取的数值。

2.4 PEID 查看未脱壳文件的区段:
.rsrc=24600+1400=25A00
也就是从25A00开始,后面都是OVERLAY数据。

2.5用UE(Winhex也一样)打开文件搜索005A0200(就是00025A00):
搜索到一个,竟然在文件的最尾部:
000979c0h: 44 E0 5C A9 6C 60 14 5D 17 56 37 A7 66 49 4B E2 ; D嘬╈`.].V7фIK?
000979d0h: F7 F6 CF C6 AE 74 2F C7 8A 38 D7 CF 0D A9 0A 04 ; 黯掀?/?8紫.?.
000979e0h: 1B B9 E4 8F B5 60 08 FA 74 FE F6 2B 2A D0 10 81 ; .逛?`.??+*??
000979f0h: 90 1D 8A C7 55 C0 B8 55 29 B8 14 9C B7 4A A5 61 ; ??U栏U)??Jメ
00097a00h: C0 1C 07 00 00 5A 02 00                         ; ?...Z..
00025A00可能就是起始点;
00071CC0可能就是长度(因为00097A00-00025A00=0007200约等于00071CC0,所以估计它就是长度)。

脱壳的没有找到,而且尾部全部是00。怪不得跟踪SetFilePointer的时候返回值是0。估计就是因为这个情况使得脱壳的文件不能运行。

2.6在Winhex中进行拷贝未脱壳的尾部数据
从00025A00开始到结束97A00(00097A00-00025A00=0007200约等于00071CC0,全拷贝算了)。
粘贴于脱壳后的软件的最后面,从00068000开始,这样,要修改最后的起始点,将00 5A 02 00(00025A00)改为00 80 06 00(00068000)。

运行ok,PEID:Borland Delphi 3.0 [Overlay]

3.后记:
参考看雪精华6的附加数据处理的文章,不过里面没有关于upx加壳的overlay处理。
基础知识的贫乏,所以过程中大部分靠猜&运气,感觉不知其所以然,请达者指教,谢谢。

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
2
鼓励一下
2006-1-10 10:14
0
雪    币: 146
活跃值: (72)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
不错啊,挺详细
2006-1-10 10:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我照着做了一遍,是不是还应该用Od改动一下相关的汇编语句的地址为,68000,光粘贴好象不行。搂主快看看,
2006-3-22 23:44
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我没有办法上传我的附件,楼主能给我个
email,楼主帮我看看我做的哪里不对。
我的地址
lylilyli515@hotmail.com
2006-3-24 00:02
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
楼主怎么不理我,fly能帮帮我吗
2006-3-24 01:19
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
以前玩过一个叫查询大全1.0的,也是foxpro的。用软件解开,可以看到源代码
2006-3-24 13:13
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
VFP的壳不该这么解的。
2006-6-17 09:54
0
游客
登录 | 注册 方可回帖
返回
//