首页
社区
课程
招聘
[已解决]图片解析(二)
2009-3-18 16:58 5993

[已解决]图片解析(二)

2009-3-18 16:58
5993
看过图片解析(一)的朋友,看完后会说,原来这么简单呀,确实,跟踪处理过程后看,确实简单,但如果不好跟踪,光从数据上看,没几个人能看出规律来...下面还有一些图片,又采用了不同的算法进行了压缩,到目前为止,还没跟踪上,先和大家静态分析一下:
000006b4h: 53 4E 50 53 03 00 00 08 76 1A 00 00 7C 07 00 00; SNPS....v...|...
这是一个图片的定位方法.
第一个DWORD,是ASCII标识
第二个DWORD,如果是00000000话,是普通图片,如果是0000000C的话,图片解析一已经破解,03 00 00 08新格式图片...
第三个DWORD,是该图片所依赖的调色板在文件中的偏移量(通过观察发现这个调色板只有0x80长度,可以从点入手)
第四个DWORD,是该图片开始位置在文件中的偏移量

开始图片数据:
前两个DWORD仍为图片的宽高
1B 00 00 00 17 00 00 00 06 0A 81 60 04 81 80 8E 00 00 00 00 08 60 80 95 07 00 90 00 00 00 0D 07
81 80 02 89 55 65 48 85 50 01 81 60 0C 05 81 60 01 8E 85 55 84 82 85 58 55 8E 00 00 05 88 88 83
33 44 44 88 58 08 00 00 8E 00 06 05 88 34 31 11 11 12 43 45 58 00 00 8E 00 56 05 C4 22 23 22 21
22 12 43 8C 56 00 0D 03 96 58 A3 42 35 84 42 43 22 12 33 C8 8E 88 5B 8C 46 85 54 54 45 44 32 12
43 8C 00 8E 08 55 55 48 55 88 45 54 64 44 21 12 85 00 8E 00 8A 84 85 85 85 55 58 44 53 32 21 8C
00 8E 08 EB E8 85 85 5B 55 53 55 54 51 13 58 C0 8E 85 0E EE 55 65 88 55 88 85 55 32 22 58 00 8E
00 EE CB 45 45 55 88 58 85 88 32 54 85 00 8E 0A CC 8C E6 58 B8 88 88 88 85 44 18 48 50 8E 0B 58
0B 8C E6 88 88 5B B8 84 55 85 50 00 8E B0 00 58 8B 86 84 58 85 88 55 5B 85 05 00 8E 00 08 98 08
88 8B FC 88 9C 5B 88 86 00 00 0C 06 93 A8 BC 8B E8 58 FE 5B 8B 58 50 8E 00 00 00 05 80 88 E5 85
88 4C 55 00 80 00 8E 00 00 00 5C 00 8E 08 05 EC 85 50 80 00 00 8E 00 00 00 00 00 C0 05 08 0C 08
00 00 00 00 06 0F 81 60 04 81 60

图片中有大量00数据,且长度都不一样,应该不是什么特殊标识了...调色板长度虽然只有0x80,但数据中却有大于这个值出现,有可能是特殊标识...看规律不象是RLE8格式...大家和我共同分析一下吧...

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

收藏
免费 7
打赏
分享
最新回复 (10)
雪    币: 213
活跃值: (147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jasonzhou 2009-3-18 17:36
2
0
图片怎么动态跟踪?求教
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
smartbear 2009-3-18 17:44
3
0
跟踪处理这个图片数据的程序,以发现处理方法...不是跟踪图片
雪    币: 130
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sojoo 2009-3-18 17:48
4
0
截屏,取一段屏幕数据存为bin(根据经验尝试..2位,4位,8位,24位,32位等等),截取一段像素值内存搜索,下断点。。定位代码位置。。。后面还有很多事情

xx photoshop、 去水印时用过找个方法。。
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
smartbear 2009-3-18 18:10
5
0
不错的方法...
不过我的显卡已经调不到8位色了,用32位色截出的,通过软件转为8位色的,图片数据肯定和原始数据生成的有差别,所以....
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
smartbear 2009-3-19 14:06
6
0
宽          高          ^                    ^                                                
1B 00 00 00 17 00 00 00 06 0A 81 60 04 81 80 8E 00 00 00 00 08 60 80 95 07 00 90 00 00 00

^为每行长度,06,8e-80,0d,0c,8e-80
这样数下来正好等于17,和图片格式一类似,如果长度<7F,表示后面里有压缩数据...如果>7F,长度等于原BYTE-80,后面为原数...
数据中的规律仍在查找中...
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
smartbear 2009-3-25 22:53
7
0
又成功解析出该格式的图片.
附一张解析出来的图片(本来为BMP格式,上传时不允许,才转成GIF格式的:


这种图片看起来很不错,但有没有想到其中只用了16种颜色...我真佩服作者,用16种颜色就能把图片做得这么逼真...

由于只用了16种颜色,所以一个字节可以表示源码的两个字节,所以解析后图片流中不可能出现大于0x10的数据...
每行的第一个BYTE确实为本行的长度nSizeLine,不过有些说法...
  (1) 如果nSizeLine>0x7f,则表示本行为源码,行长度为nSizeLine&0x7F,其后的每个BYTE中的4位为源码...
  (2) 如果nSizeLine<=0x7f,则表示本行内0多,其后的数据中有标志位的...如果标志位nflags > 0x7f,表示其后为源码,解析方法同(1),如果nflags<0x7f,表示有nflags个0...

例子,图片宽1B:(数据均为16进制表示法):
06 0A 81 60 04 81 80//06为本行的长度
   00 00 00 00 00 00 00 00 00 00 06 00 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00
    //0A个00, 81 60为什么为变成06,81表示其后有一个源码,60解析成两位06 00由于只有一个有效的源码,所以00舍掉,04个00, 81 80,同理,解析为1个08
0C 05 81 60 01 8E 85 55 84 82 85 58 55//0C为本行的长度
   00 00 00 00 00 06 00 08 05 05 05 08 04 08 02 08 05 05 08 05 05 00 00 00 00 00 00
    //5个00,1个06,1个0,0E个源码...
8E 00 00 00 00 08 60 80 95 07 00 90 00 00 00//本行的长度为8e & 0x7f = 0E
   00 00 00 00 00 00 00 00 00 08 06 00 08 00 09 05 00 07 00 00 09 00 00 00 00 00 00
   //全是源码,均是一变二
上传的附件:
雪    币: 130
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sojoo 2009-3-25 23:38
8
0
学习.....
雪    币: 200
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Xusually 2009-3-27 08:05
9
0
这么复杂的规律lz都找得到,强啊。
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
smartbear 2009-3-27 16:41
10
0
我现在只找到每个精灵动作的分解图片,图片前还有一大段的数据,估计是定义这个精灵结构的,如向左走,由哪几个图片构成...向右...发弹...静态连续动作等等.这些规律才不好找呢...
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
smartbear 2009-4-1 20:19
11
0
图片虽然只用了0x10种颜色,但调色板长度是0x80.为什么呢?因为这个游戏是用颜色来区分玩家的.根据玩家选择的颜色来定位调色板的初始索引值.如:
color  n
兰    0
红    1
黄    2
...
青    7
pPal += n * 0x10;

这样就用一个调色板实现了8种部队色的变化...作者很强...
游客
登录 | 注册 方可回帖
返回