首页
社区
课程
招聘
[原创]不能说的秘密
发表于: 2020-7-25 15:51 7954

[原创]不能说的秘密

2020-7-25 15:51
7954

话说前几天我正在构思写个小工具把隐藏在png图片中的信息解出来,突然“叮咚”一声,我的一位好友BYD给我发了个名为某手在线指导之越练越肥视频链接,我赶紧回了一句“上班呢!”,之后默默打开了手机独自欣赏起来,完事之后我就在想不如写个小工具即能够隐写信息,有能够解出来多好玩。哎!你看背弃了初衷,谁人都可以不是。

废话少说,开扯!至于为啥有这个想法,主要是因为发现最近的好多.net病毒其中有个手段就是将一些关键代码隐藏在png图片中,并将其作为资源内嵌到程序中,在主程序中对其进行解密之后进行调用。比如这样
那我我们大概看下这个病毒吧,这个病毒相对简单一些,关键点也容易找些,即使被混淆了。幸运的是de4dot能脱壳,对我后面拷贝他接出来的dll代码起了很大作用,哈哈!

可以看到这里并不是对图片直接进行解密,而是通过先解另外一个资源之后并调用了其中的“StartGame”函数。所以我就把他解出来的文件保存了一份进行分析。结果和预想相同是个dll文件,之后我本想调试着来看,但是有其他需求,所以索性把他的dll代码修改了成exe文件,当然资源我也进行了内嵌,毕竟没资源解个锤子。

这就是StartGame函数了,我把延时操作和调用病毒代码给注释掉了。

这里就比较明显了,调用GetPixel函数来获取每个像素点的RGB值最后组成病毒代码,当然这个病毒解到这里还不是最终的代码,而是被压缩过的代码,但是不是此次重点就不深究了。
接下来我想的是这个RGB到底是从哪里来的呢?所以我加了一段Write函数将其得到的RGB的值写入到文件中,看看能不能得到有用的信息。

之后我随便找了一个在线的RGB取色器,输入其获取的RGB值,发现其在纵向获取像素点中的RGB值。

接着我打开了010Editor对这些值进行了搜索,结果并没有找到。想想也是,怎么可能这么简单的直接把三色值存储到二进制文件中。好吧,去网上查查png图片的格式,查了一圈大概就是png有几个比较重要的块,有想详细了解的朋友,网上好多资料,这里就不说了,文件格式标志位,IHDR头描述图片的像素大小,像素深度,以及图片的透明度。IHDR尾是固定的12个字节。IDAT就是最重要的块了,其中存储图片的关键数据。到这就确定了方向就是寻找如何解析IDAT块中的数据!
找了一大圈关于IDAT块的相关信息,结果很多都说如果了解IDAT块就能构造一个png图片了,害,我tm也是这么想的呢!算了,继续找吧,终于在stackoverflow上找到了一篇帖子,这个是个很有趣的问题,我来给大家翻译一下,机翻真的蛋疼啊!
先放原帖子链接:
https://stackoverflow.com/questions/49017937/png-decompressed-idat-chunk-how-to-read


这是唯一的一条回复


至此,我得到了写小工具相关的有用信息,就是IDAT块数据的来源是调用了zlib库函数进行了压缩,还有一个细节就是图中所说的计算方法,224+227 = 195??? 215+241 = 200???其实是当两者相加超过256时候要剪掉256才是最终的结果!其实我也不清楚为啥,深入看算法从来不是我强项,索性就算了,但是不影响我写工具即可,哈哈!
终于可以开始构造我的png了!这次我采用python来写,重要的是我并不会使用python,所以我都是边上网查编写,过程说实在的有点困难,此次会上传我的源码和成品,我会尽量把注释写的详细写,先声明代码能看不能学,懂我意思吧(手动狗头)!
写到这里,我觉着我还有好多想写的,但我我突然意识到我写不下去了,因为想说的都在代码里了,一切结束的这么突然,哈哈!反正就说下思路和注意点吧,其实png的块构成很简单,这次我采用最简单的三块,IHDR.IDAT.IEND,然后将一些不变的数据搞成结构体,方便写入,比如IHDR和IEND中的一些数据。需要注意的是,IHDR和IDAT中的参数都是大端序存储,所以程序中需要注意,还有就是png中crc校验,代码我是在网上扒的,本来想用之前从病毒中弄下来计算crc代码的,但是010会提示crc错误,为了优雅,还是改掉了。

最后展示一下成品吧!

先用key = 6进行转换,成功之后会生成,compress_1.bin文件,之后改成.png后缀就行了

compress_1.bin

之后用key = 6进行解压,成功之后会生成decompress_1.bin文件,之后改成指定格式的后缀即可,temp文件可以不用管,中间文件,不想删了。

我也尝试过压视频,只不过测试视频大小只有16M,再大的视频没试过,主要是有点慢!有兴趣的小伙伴可以试试,可能有bug哈哈!


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

上传的附件:
收藏
免费 5
支持
分享
最新回复 (9)
雪    币: 14484
活跃值: (17483)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
2
mark,感谢分享,楼主猴哥老粉了 O(∩_∩)O哈哈~
2020-7-25 17:09
0
雪    币: 3013
活跃值: (981)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
牛~~感谢分享~
2020-7-26 10:24
0
雪    币: 3013
活跃值: (981)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
牛~~感谢分享~
2020-7-26 10:25
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
大佬666
2020-7-26 11:10
0
雪    币: 3307
活跃值: (3524)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
6
.net的那个解密png图片的也分析过,不过没想过把他给掏出来,优秀啊,
2020-7-26 11:26
0
雪    币: 3072
活跃值: (20)
能力值: ( LV1,RANK:40 )
在线值:
发帖
回帖
粉丝
7
有些意思
2020-7-26 11:48
0
雪    币: 3126
活跃值: (3251)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
8
刚发现py无key解压缩那又压缩了一遍,可能忘记注释掉了
2020-7-26 12:14
0
雪    币: 1195
活跃值: (1125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
厉害!感谢分享
2020-7-26 14:47
0
雪    币: 26588
活跃值: (63252)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
10
感谢分享,关注了!
2020-7-28 13:32
0
游客
登录 | 注册 方可回帖
返回
//