首页
社区
课程
招聘
[原创]解除 VC6 不能打开真彩色位图的限制
发表于: 2011-1-3 20:50 28240

[原创]解除 VC6 不能打开真彩色位图的限制

2011-1-3 20:50
28240
解除 VC6 不能打开真彩色位图的限制
作者:cntrump
      官方的 VC6 只能打开最大 256 色的位图,有时候项目里用了真彩色的位图,想要在 IDE 里直接查看就不行了,必须要在外部查看,比较麻烦。
    为了以后查看真彩色位图能节省时间,所以我就想尝试下看 VC6 是不能还是不想显示真彩色位图。
    直接从限制入手。如果位图超过256色,那么会得到一个提示:


    这是系统的 MessageBox ,我的判断依据是“确定”按钮,因为我用的英文版本,而提示信息中的按钮却是中文的,那么可以肯定的这个框是操作系统本身的资源,而不是 Dialog 之类的自定义资源。那么嫌疑最大的就是 MessageBoxA 了(因为VC6是98年的产品,它还可以运行在Windows 98 上,所以只能是ASCII编译的)。
    OD 加载VC6主程序(或者附加也可以,加载大型软件比较慢时就用附加)。下断 bp MessageBoxA ,在 IDE 里打开一个真彩色位图。被断下:

    正是我们想要的信息,Atl+K 看调用堆栈,主要是看这个消息框来源。


    根据以上内容可以知道,5046BCE6 的作用只是弹出消息框,看来是个封装函数。而调用它的地方是在 5045EFE3 ,处理位图的地方肯定也在这里。
    跟进后发现对位图处理判断的流程起始地方是在  5045EB71 ,如果打开的位图超过 256 色就会跳走弹出消息框,不超过就按正常流程进行。那么只要对比下程序打开真彩色和256色以下位图的流程,让真彩色位图走正常流程,如果能正常显示真彩色位图就说明 VC6 是支持真彩色位图的,如果显示不正常则说明 VC6 不支持。

操作如下:
1. 用 IDE 本身的功能新建一个位图资源,程序就断在了 5045EB71,用 F8 步过每一个 CALL ,标记下所经过的跳转指令。
2. 再在 IDE 里打开一个真彩色位图,同样步过每一个 CALL ,注意看在真彩色位图下所经过的跳转指令和第一步中的有什么不同,如果不同则强制修改为 nop 或 jmp 让其流程和第一步的一样。

    经过对比发现,打开真彩色位图和小于 256 色的位图流程区别在于:
 5045EEBE   /0F8E 27010000   jle devres.5045EFEB        
                          
    小于256位图的话会执行这句跳转,而真彩色位图则不会执行跳转。把 jle 强制修改 jmp 让其走正常流程。
修改后发现真彩色位图可以在 IDE 中正常显示,再对位图进行常规的编辑/保存操作,完全正常,这说明 VC6 是完全可以支持真彩色位图的。
最后把修改的文件保存出来,收工了。
    为了以后方便,我做了个补丁,只要 Patch 一下就可以了。
在 VC6 中打开真彩色位图:


VC6 出生的年代, Windows 98 , 2000 本身还不能支持真彩色。所以VC6不支持真彩色是正常的。

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (53)
雪    币: 311
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
图标也支持吗
2011-1-3 21:13
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
3
这个给力,支持~~
2011-1-3 21:49
0
雪    币: 239
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
这个好强大~~cntrump的帖子,必顶
2011-1-3 22:00
0
雪    币: 4902
活跃值: (110)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
支持一个
LZ最近相当活跃啊
非常感谢!
2011-1-3 22:10
0
雪    币: 296
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
good job!
2011-1-4 11:39
0
雪    币: 2899
活跃值: (1753)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
7
不错!这个方便,补丁一下试试看。
2011-1-4 13:02
0
雪    币: 136
活跃值: (105)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
8
hehe 总结经验了啊
2011-1-4 13:10
0
雪    币: 277
活跃值: (45)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
9
无比强大的楼主~
2011-1-4 13:27
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
10
我测试了一个大于 256 色的图标。是可以的。

上传的附件:
2011-1-4 13:46
0
雪    币: 217
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
非常感谢啊;
神人!!
呵呵
2011-1-4 15:16
0
雪    币: 7273
活跃值: (3241)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
2011的中的幸福一天啊
2011-1-4 16:36
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
C姐太帅了!
2011-1-4 23:28
0
雪    币: 248
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
期待下版更新包中包含此patch以及更多...
2011-1-5 01:28
0
雪    币: 585
活跃值: (568)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
15
标记,留起....
2011-1-5 19:05
0
雪    币: 768
活跃值: (515)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
16


确实很帅~:)
2011-1-5 19:12
0
雪    币: 7906
活跃值: (3086)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
楼主图片很给力
2011-1-5 19:55
0
雪    币: 563
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
有时间试试
2011-1-5 20:20
0
雪    币: 234
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
了然,了然,女高手越来越多了
2011-1-5 22:29
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
膜拜啊,楼主太强悍了!
2011-1-5 22:43
0
雪    币: 2242
活跃值: (169)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
21
这真是重大发现啊~不过为什么明明支持真彩却要弹出阻止对话框呢~用意何在啊
2011-1-5 22:53
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
这个要支持,记得以前写mfc程序被这个烦透了
2011-1-5 23:34
0
雪    币: 217
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
是啊;
很不解;
微软当初怎么想的??
2011-1-6 12:35
0
雪    币: 695
活跃值: (70)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
24
厉害,IDE都拜倒在你脚下
2011-1-7 15:21
0
雪    币: 234
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
呵呵,太给力了,顶
2011-1-7 15:30
0
游客
登录 | 注册 方可回帖
返回
//