编程语言: Nodejs木马我们见得多, 以前多数会以EXE可执行文件形式出现
知识要点: 文件的16进制解析
后来, 开始在Web上出现, 主要侵扰Web页面, 给正常的html/ASP等加上木马代码
再后来, 开始直接在图片内部出现, 让人防不胜防
比如下面2张图(文件名:demo.jpg)
文章插图
这是张正常的图片:demo.jpg
文章插图
这是张含非法代码(无害)的图片:demo-2.jpg
相信从表面上没人看得出来区别是什么
透过表面, 我们来看看这2张图的本质
借助Notepad先打开正常的图片(demo.jpg)
文章插图
我们看到的是一堆乱码,
选择菜单"插件 -> HEX-Editor -> View in HEX"(无此插件的可以先搜索安装)
文章插图
首先我们要先知道, 所有的文件头几个节字可以区分出文件格式
【Trojan Horse 如何破解黑客的手段:揪出给图片施放的特洛伊木马】像JPG文件的文件头2个字节是16进制 FFD8
文章插图
利用这点,可以判定它确实是JPG文件,这个比用文件扩展名判断靠谱得多
然后再来看看文件尾
文章插图
查资料可以得知, JPG文件尾的2个字节应该是FFD9或者是FFD8
看得出来这个demo.jpg文件是正常的;
再来用同样的方法看看demo-2.jpg的文件尾(文件头已查证是正常)
文章插图
明显的, 在最后FFD9后面多出了一些"不寻常"的东西, 右侧可以看到疑似脚本的东西
本文我们讨论的是如何识别被伪装的图片, 至于图片中如何植入木马及如何让它发作不在讨论范围
问题和现象讲清楚了
然后我们来说说在代码级别怎么防范
先上效果
文章插图
分别扫描2个文件, 得到上图结果
怎么实现呢, 我们用Nodejs来举例
const fs = require('fs')let fpath = 'd:/demo.jpg';let packSize = 2;//定义数据包大小(2字节)let buf = new Buffer.alloc(packSize);//对象用于表示固定长度的字节序列let fd = fs.openSync(fpath, 'r');fs.readSync(fd, buf, 0, buf.length, null);console.log(fpath, ">>>>>head:", buf.toString('hex'));//16进制方式打印
这样就可以提取出图片文件的文件头d:/demo.jpg >>>>>head: ffd8
接下来取文件尾2字节let fileInfo = fs.statSync(fpath);//取得文件信息let fileSize = fileInfo.size;//文件长度buf = new Buffer.alloc(packSize);//定义缓冲区fs.readSync(fd, buf, 0, buf.length, (fileSize - fel));//取出文件尾2字节console.log(fpath, ">>>>>end:", buf.toString('hex'));//16进制方式打印
结果:d:/demo.jpg >>>>>end: ffd9
接下来只要收集各种不同文件需要校验的文件头和文件尾标志
加上自己做个校验算法就可以达到扫描文件安全的目的
算起来可以当成一个最简版的查毒(木马)工具呢
收工
文章插图
这期就酱,下期再见
复杂的问题简单化
每次只关注一个知识点
对技术有兴趣的小伙伴可以关注我, 我经常分享各种奇奇怪怪的技术知识
推荐阅读
- 马超如何死的?,马超对蜀国有什么功劳
- |体内有6公斤的宿便?如何排出“赖着不走”的粪便?专家帮你解答
- 食用玫瑰哪种最好,如何挑选食用玫瑰
- 网络安全工程师演示:黑客如何配置渗透测试网络和生成安卓木马?
- C语言如何在终端实现进度条效果?
- 如何开通今日头条赚钱的5大功能,你开通了吗
- 渗透测试发现系统漏洞,如何整改修复
- 黑客是如何“监听”手机的?如果有这3种信号,就说明你被盯上了
- 如何快速开发一个跨平台的带即时通讯功能的APP?
- 如何使用WebRTC建立一个视频会议App