利用FSO取得BMP,JPG,PNG,GIF文件信息

PC微信自动化开发实战:vxhook2.9核心原理与避坑指南 Hook技术是Windows平台实现程序行为监控与修改的核心机制,其原理是通过拦截目标进程的函数调用或消息传递路径,插入自定义代码逻辑。这项技术在软件调试、安全监控及自动化测试领域具有重要价值,尤其适用于对闭源桌面应用进行程序化交互的场景。本文聚焦于PC端微信自动化这一具体应用,深入剖析了基于Hook技术实现的vxhook2.9方案。该方案通过注入DLL钩住微信关键消息处理函数,并对外提供HTTP/WebSocket API,实现了消息监听、自动回复、群管理等自动化功能。文中结合**版本兼容性**与**防检 阅读详情
<%
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::: BMP, GIF, JPG and PNG :::
'::::原作:junyd:::::::::::
':::::翻译:欧阳东杰::::::::::::::::::::::::::::::::::::::::::
'::: :::
'::: 这个东东能从BMP, GIF, JPG and PNG 图片拿到这个文件得字节 :::
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
function GetBytes(flnm, offset, bytes)
Dim objFSO
Dim objFTemp
Dim objTextStream
Dim lngSize
on error resume next
Set objFSO = CreateObject("Scripting.FileSystemObject")

' 首先,我们得到filesize
Set objFTemp = objFSO.GetFile(flnm)
lngSize = objFTemp.Size
set objFTemp = nothing
fsoForReading = 1
Set objTextStream = objFSO.OpenTextFile(flnm, fsoForReading)
if offset > 0 then
strBuff = objTextStream.Read(offset - 1)
end if
if bytes = -1 then ' Get All!
GetBytes = objTextStream.Read(lngSize) 'ReadAll
else
GetBytes = objTextStream.Read(bytes)
end if
objTextStream.Close
set objTextStream = nothing
set objFSO = nothing
end function

':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::: :::
'::: 下面是把两个字节转化成统一数值的的功能 :::
'::: (小endian 和大的endian ) :::
'::: :::
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
function lngConvert(strTemp)
lngConvert = clng(asc(left(strTemp, 1)) + ((asc(right(strTemp, 1)) * 256)))
end function
function lngConvert2(strTemp)
lngConvert2 = clng(asc(right(strTemp, 1)) + ((asc(left(strTemp, 1)) * 256)))
end function

':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::: :::
'::: 这个功能做大多数真正的工作。 它意愿尝试 :::
'::: 读任何文件:::
'::: 如果它是一幅图表的图像,鉴定 . :::
'::: :::
'::: Passed: :::
'::: flnm => Filespec of file to read :::
'::: width => width of image :::
'::: height => height of image :::
'::: depth => color depth (in number of colors) :::
'::: strImageType=> type of image (e.g. GIF, BMP, etc.) :::
'::: :::
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
function gfxSpex(flnm, width, height, depth, strImageType)
dim strPNG
dim strGIF
dim strBMP
dim strType
strType = ""
strImageType = "(unknown)"
gfxSpex = False
strPNG = chr(137) & chr(80) & chr(78)
strGIF = "GIF"
strBMP = chr(66) & chr(77)
strType = GetBytes(flnm, 0, 3)
if strType = strGIF then ' is GIF
strImageType = "GIF"
Width = lngConvert(GetBytes(flnm, 7, 2))
Height = lngConvert(GetBytes(flnm, 9, 2))
Depth = 2 ^ ((asc(GetBytes(flnm, 11, 1)) and 7) + 1)
gfxSpex = True
elseif left(strType, 2) = strBMP then ' is BMP
strImageType = "BMP"
Width = lngConvert(GetBytes(flnm, 19, 2))
Height = lngConvert(GetBytes(flnm, 23, 2))
Depth = 2 ^ (asc(GetBytes(flnm, 29, 1)))
gfxSpex = True
elseif strType = strPNG then ' Is PNG
strImageType = "PNG"
Width = lngConvert2(GetBytes(flnm, 19, 2))
Height = lngConvert2(GetBytes(flnm, 23, 2))
Depth = getBytes(flnm, 25, 2)
select case asc(right(Depth,1))
case 0
Depth = 2 ^ (asc(left(Depth, 1)))
gfxSpex = True
case 2
Depth = 2 ^ (asc(left(Depth, 1)) * 3)
gfxSpex = True
case 3
Depth = 2 ^ (asc(left(Depth, 1))) '8
gfxSpex = True
case 4
Depth = 2 ^ (asc(left(Depth, 1)) * 2)
gfxSpex = True
case 6
Depth = 2 ^ (asc(left(Depth, 1)) * 4)
gfxSpex = True
case else
Depth = -1
end select

else
strBuff = GetBytes(flnm, 0, -1) ' Get all bytes from file
lngSize = len(strBuff)
flgFound = 0
strTarget = chr(255) & chr(216) & chr(255)
flgFound = instr(strBuff, strTarget)
if flgFound = 0 then
exit function
end if
strImageType = "JPG"
lngPos = flgFound + 2
ExitLoop = false
do while ExitLoop = False and lngPos < lngSize

do while asc(mid(strBuff, lngPos, 1)) = 255 and lngPos < lngSize
lngPos = lngPos + 1
loop
if asc(mid(strBuff, lngPos, 1)) < 192 or asc(mid(strBuff, lngPos, 1)) > 195 then
lngMarkerSize = lngConvert2(mid(strBuff, lngPos + 1, 2))
lngPos = lngPos + lngMarkerSize + 1
else
ExitLoop = True
end if
loop
'
if ExitLoop = False then
Width = -1
Height = -1
Depth = -1
else
Height = lngConvert2(mid(strBuff, lngPos + 4, 2))
Width = lngConvert2(mid(strBuff, lngPos + 6, 2))
Depth = 2 ^ (asc(mid(strBuff, lngPos + 8, 1)) * 8)
gfxSpex = True
end if

end if
end function

':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::: 测试:::
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

' 为了测试,我们把文件放在C:/上
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objF = objFSO.GetFolder("c:/")
Set objFC = objF.Files
response.write "<table border=""0"" cellpadding=""5"">"
For Each f1 in objFC
if instr(ucase(f1.Name), ".GIF") then
response.write "<tr><td>" & f1.name & "</td><td>" & f1.DateCreated & "</td><td>" & f1.Size & "</td><td>"
if gfxSpex(f1.Path, w, h, c, strType) = true then
response.write w & " x " & h & " " & c & " colors"
else
response.write " "
end if
response.write "</td></tr>"
end if
Next
response.write "</table>"
set objFC = nothing
set objF = nothing
set objFSO = nothing

%>

Celery实战:如何用task_acks_late确保关键任务不丢失(附最佳实践) 本文深入探讨Celery的`task_acks_late`机制如何确保关键任务不丢失,特别是在电商支付、库存扣减等场景中的应用。通过对比默认与延迟确认机制的区别,提供多层级配置实践和幂等性设计方法,帮助开发者构建高可靠的任务队列系统。 阅读详情

相关推荐

HexStrike AI:集成Ghidra、Radare2与GDB的智能二进制分析平台

二进制分析是软件安全、逆向工程和漏洞挖掘的核心技术,涉及对可执行文件进行反汇编、调试和代码审计。其基本原理是通过静态和动态分析技术,理解程序的逻辑、数据流和控制流,从而发现潜在的安全风险或逆向软件功能。在工程实践中,高效的分析工作流至关重要,它直接影响安全研究的深度和效率。传统上,分析师需要在Ghidra、Radare2和GDB等多个独立工具间手动切换和同步数据,过程繁琐且易错。HexStrike AI平台通过引入统一的元数据层和AI智能辅助,解决了这一痛点。它作为“粘合剂”,实现了跨工具的断点、注释、符号

weixin_30613343的博客 346

Pe 花指令添加器

原由 既然要写个Xor的壳子,要往里面添加指令,写个加花器,很简单,2天左右搞完,还是使用我个人的LibPe库。 源码 #include <stdio.h> #include <Windows.h> #include <winnt.h> #include <iostream> #include <string> #include "LibPeH.h" //using std::cin; //using std::istream; using na

YoseZang的博客 3222

21、无线传感器网络密钥管理与移动自组网缓存技术解析

本博客深入解析了无线传感器网络中的轻量级多项式密钥管理协议(LPKM)和移动自组网(MANET)中的跨层拦截缓存技术。LPKM 提供了一种分布式、非交互的组密钥建立和管理机制,具备良好的安全性和较低的计算与存储开销,适用于资源受限的传感器节点。跨层拦截缓存方案则通过本地缓存和跨层信息优化请求处理,有效减少了网络延迟、流量和超时次数,提高了网络的可用性和可靠性。文章还通过流程图和性能评估数据展示了这些技术的实现原理和优势,为未来无线网络的安全与性能优化提供了参考。

milk8的博客 103

利用FSO取得图像文件信息

利用FSO取得图像文件信息  ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: BMP, GIF, JPG and PNG :::::::::::::::::::

feng_sundy 的专栏 1154

js 操作磁盘文件--使用fso

var filesList = new Array(); var filesIndex = 0; var fso = new ActiveXObject("Scripting.FileSystemObject"); function searchFilesList(filePath){ var f = fso.GetFolder(filePath); //

刘本龙的专栏 3795

tensorflow代码学习:读取并显示图片

# -*- coding: utf-8 -*- import tensorflow as tf filename = '2.jpg' with tf.gfile.FastGFile(filename,'rb') as f: image_data = f.read() with tf.Session() as sess: image = sess.run(image_data)...

he_wen_jie的博客 1万+

WebService学习总结(五)--CXF的拦截器

拦截器是Cxf的基础,Cxf中很多的功能都是由内置的拦截器来实现的,拦截器在Cxf中由Interceptor表示。拦截器的作用类似axis2中handle。Cxf的拦截器包括入拦截器和出拦截器,所有的入拦截器或出拦截器构成了一个拦截器链,它们可以作用在Server端也可以作用在Client端。当需要使用拦截器链处理消息的时候,Cxf会确保对应的消息被拦截器链里面的每一个拦截器都执行一遍。拦截器链在...

weixin_30588675的博客 258

[MAF预定义ChatClient中间件-09]MessageInjectingChatClient:赋予工具消息注入的能力

MAF框架通过FunctionInvokingChatClient中间件驱动AIFunction调用,但默认仅将结果封装为Tool角色的ChatMessage,无法像LangChain工具那样灵活添加结构化消息。为解决此问题,演示程序利用MessageInjectingChatClient在银行转账工具中动态注入风控提示消息:当检测到未确认转账时,注入Assistant消息警告欺诈风险并索要验证码;若已确认则直接执行转账。通过会话状态管理两次调用差异,输出结果显示风险拦截与成功转账的不同流程。此

JaydenAI的博客 522

【快递云仓微信售后群催件、拦截、改地址运单号自动分类登记填表并且自动匹配转发对应快递物流官方微信售后群,以及定时催单功能】

本文介绍了一个快递云仓微信售后群自动化管理系统,该系统通过智能识别快递单号和关键词(如拦截、催件、改地址),自动将客户需求转发至对应快递公司的售后对接群。系统支持多种快递公司(申通、中通、圆通等)和多网点转发,具备消息去重、数据记录和截单提醒功能。配置简单,只需在.env文件中设置机器人参数和群组信息即可使用。该系统能有效降低人工成本,提高客服处理效率,适用于快递云仓等中间服务商的售后场景。

youeyeb的博客 1063

中通申通韵达圆通快递云仓服务商家售后群自动对接合作快递物流网点微信售后群管理系统

本文介绍了一个基于Python的微信群自动化管理工具,专为快递云仓售后服务设计。该系统通过WebSocket连接微信机器人,实现以下核心功能: 智能识别群消息中的快递单号(支持申通、中通等主流快递)和关键词(如拦截、催件等) 自动将消息转发至对应快递公司的售后群,并@原始发送者 提供WebUI配置界面,支持实时修改参数无需重启 数据记录功能,自动分类存储到Excel表格 截单提醒功能,可配置多个时间点自动发送提醒 消息去重机制防止重复处理 系统采用模块化设计,包含机器人主程序和WebUI两个独立进程,具有断

youeyeb的博客 255

[对比学习LangChain和MAF-07]如何引入人机交互的审批流程

如何执行的工具涉及一些较为敏感的操作,必需要经过人工审批才能执行,这时候就需要引入人机交互(Human-In-The-Loop)的机制。无论是LangChain还是MAF,都提供了相应的机制来支持人机交互,下面我们来看看它们是如何实现的。

JaydenAI的博客 421

Chatterbox TTS 快速上手:10分钟跑通开源语音合成与零样本声音克隆

你想用几句代码生成自然流畅的语音,还要能换个语言、克隆别人的声音,却不知道选哪个开源工具。Chatterbox TTS 是 Resemble AI 开源的语音合成模型家族,一条命令安装、几行代码出声音,还内置 23 种语言支持和零样本声音克隆。读完本文,你可以完成安装、生成第一个语音文件,并知道如何根据场景选对模型、调好参数。 ## 环境准备与安装步骤 - 系统要求:Debian 11 等 L

gitblog_00988的博客 764

3个技巧快速解决Escrcpy安卓设备镜像控制难题

Escrcpy是一款基于Scrcpy开发的图形化界面工具,能够在电脑上实现安卓设备的屏幕镜像和控制功能,为技术爱好者和普通用户提供更友好的操作体验。无论您是需要进行移动应用调试、游戏直播还是日常设备管理,这款工具都能帮助您轻松完成安卓设备的远程控制。 --- ## 痛点分析:为什么安卓设备镜像控制总是出问题? 许多用户在初次使用Escrcpy时都会遇到各种连接和控制问题,这通常源于以下几个关

gitblog_00902的博客 357

Postman抓取HTTP请求

抓取HTTP请求一、前言二、Potman内置代理三、设置Postman代理 一、前言 如果用户正在使用API构建客户端应用程序-移动应用程序、网站或桌面应用程序,可能希望看到在应用程序中发送和接收的实际HTTP请求。Postman提供了一些工具,帮助用户轻松的捕捉和查看这些网络流量。用户可以在Postman本地应用程序中使用内置代理,或者使用Postman的Chrome浏览器应用程序的扩展拦截器。 注意:某些网站为了安全性的考虑,可能会启用HSTS(HSTS的全称是HTTP Strict-Transfer-

精益求精,永无止境,永远在路上! 7466

scrcpy 投屏零基础教程:10分钟让安卓手机画面出现在电脑屏幕上

还在为传个文件先开微信、回条消息还要拿起手机而烦心?这款叫 **scrcpy** 的开源投屏工具能直接解决这个痛点:数据线一插(或同一 Wi-Fi 下无线连接),安卓手机画面就实时出现在电脑窗口里,延迟仅 **35~70 毫秒**,首帧画面约 **1 秒**就能看到,键盘鼠标直接接管手机——全程不用 root、不用在手机上装任何 App。接下来这条完整的操作流程,跟着走一遍,10 分钟从连接到熟练

gitblog_01151的博客 180

为什么你的App必须检查Background App Refresh?Location项目backgroundRefreshStatus检测与提示策略

如果你的 iOS 定位 App 在退到后台后就"悄悄停止上报",罪魁祸首往往是一个被忽略的系统开关——Background App Refresh。开源项目 **Location** 是一个广为流传的 iOS 7/8 后台定位更新完整示例,它最容易被忽略的细节,恰恰是在启动时先检查 `backgroundRefreshStatus`,发现被关时立刻弹窗引导用户。这篇文章带你搞懂:为什么必须检查这个

gitblog_01039的博客 699

Open-AutoGLM支持哪些APP?主流应用兼容性测试

本文介绍了如何在星图GPU平台上自动化部署Open-AutoGLM – 智谱开源的手机端AI Agent框架,实现安卓应用的自然语言驱动操作。该镜像可对抖音、小红书等主流内容类APP执行搜索、浏览、点赞等典型任务,显著提升移动场景下的自动化效率。

weixin_35756373的博客 622
上一篇: 无组件上传图片到数据库中,最完整解决方案
下一篇: asp中利用数组实现数据库记录的批量录入方法
oydj
博客等级 码龄24年 2粉丝 14原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值