Sec Hotspot 首页  排行榜  收藏本站  技术博客  RSS
统计信息
已收录文章数量:13793 篇
已收录公众号数量:89 个
本站文章为爬虫采集,如有侵权请告知
已收录微信公众号
网信中国 区块链大本营 白说区块链 区块链投资家 区块链官微 区块链铅笔Blockchain HACK学习呀 二道情报贩子 合天智汇 小白帽学习之路 小米安全中心 弥天安全实验室 SAINTSEC SecPulse安全脉搏 TideSec安全团队 360安全卫士 游侠安全网 计算机与网络安全 安全祖师爷 安全学习那些事 腾讯安全联合实验室 黑客技术与网络安全 安全圈 腾讯御见威胁情报中心 Python开发者 Python之禅 编程派 Python那些事 Python程序员 安全威胁情报 吾爱破解论坛 行长叠报 安在 i春秋 嘶吼专业版 E安全 MottoIN 网信防务 网安杂谈 数说安全 互联网安全内参 漏洞战争 安全分析与研究 邑安全 ChaMd5安全团队 天融信阿尔法实验室 安全牛 SecWiki 安全学术圈 信安之路 漏洞感知 浅黑科技 Secquan圈子社区 奇安信集团 奇安信 CERT 国舜股份 雷神众测 盘古实验室 美团安全应急响应中心 瓜子安全应急响应中心 顺丰安全应急响应中心 蚂蚁金服安全响应中心 携程安全应急响应中心 滴滴安全应急响应中心 字节跳动安全中心 百度安全应急响应中心 腾讯安全应急响应中心 网易安全应急响应中心 OPPO安全应急响应中心 京东安全应急响应中心 Bypass CNNVD安全动态 安恒应急响应中心 天融信每日安全简报 奇安信威胁情报中心 看雪学院 黑白之道 水滴安全实验室 安全客 木星安全实验室 云鼎实验室 绿盟科技安全预警 白帽汇 深信服千里目安全实验室 腾讯玄武实验室 长亭安全课堂 FreeBuf 绿盟科技 nmask
不能说的秘密
本文来自公众号:看雪学院   2020.08.07 18:19:10


本文为看雪论坛精华文章

看雪论坛作者 ID:dayday向上8



话说前几天我正在构思写个小工具把隐藏在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错误,为了优雅,还是改掉了。



最后展示一下成品吧!


W3B.exe -z [file] -k [key]参数说明:-z 压缩文件-k文件密钥 W3B.exe -j [file] -k [key]参数说明:-j 解压文件-k文件密钥(和压缩密钥对应) -k参数可以不给

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



compress_1.bin



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



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




- End -


看雪ID:dayday向上8

https://bbs.pediy.com/user-868245.htm

*本文由看雪论坛 dayday向上8 原创,转载请注明来自看雪社区。



推荐文章++++

* 让C语言源码可知自身函数的实际地址与大小

* 一种通过后端编译优化脱混淆壳的方法

* Win10 1909逆向(反向计算Windows内核内存布局及代码实现)

* Chunk Extend and Overlapping笔记

* Frida 入门小练习


好书推荐




公众号ID:ikanxue
官方微博:看雪安全
商务合作:wsc@kanxue.com



ps. 觉得对你有帮助的话,别忘点 分享 点赞 在看 ,支持看雪哦~


“阅读原文 一起来充电吧!