开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 2634|回复: 12
收起左侧

[易源码分享] 读取图片资源dll函数FOA

[复制链接]
结帖率:50% (1/2)
发表于 2022-8-19 11:07:11 | 显示全部楼层 |阅读模式   浙江省杭州市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -
本帖最后由 埃菲尔铁塔ATA 于 2022-8-19 11:13 编辑
  
子程序名返回值类型公开备 注
Load整数型 返回fun_addr
参数名类 型参考可空数组备 注
data字节集
datalen整数型
fnName文本型
fnOrdinals整数型
dllName文本型不为空则开启DLL名字效验
变量名类 型静态数组备 注
optionalPE整数型 
RVAOfExportTable整数型导出表RVA
SizeOfExportTable整数型导出表大小
FOAOfExportTable整数型导出表FOA
SelectionTable字节集40Bytes Of Selection Table
VirtualAddressOfSelection整数型
PointerToRawDataOfSelection整数型
SizeOfSelction整数型节大小
ExOfName整数型 
NameOfDll文本型读出的dll名
ExOfBase短整数型 
ExOfNumberOfFunctions整数型函数总数
ExOfNumberOfNames整数型有名函数总数
ExOfAddressOfFunctions整数型表地址
ExOfAddressOfFunctions_RVA整数型 
ExOfAddressOfNames整数型表地址
ExOfAddressOfNames_FOA整数型 
NameOfFunction文本型 
ExOfAddressOfNameOrdinals整数型表地址
ExOfAddressOfNameOrdinals_Value短整数型 
i整数型 
j整数型 
cnt整数型 
如果真 (是否为空 (fnOrdinals) 是否为空 (fnName))
' 你在调用啥?
返回 (-1)
如果真 (取反 (是否为空 (fnOrdinals)))
如果真 (取反 (是否为空 (fnName)))
' 你在调用啥?
返回 (-1)

如果真 (data [1] ≠ 77 data [2] ≠ 90)
' 不正确的pe文件
返回 (-1)
optionalPE = 取字节集数据 (data, #整数型, 60 + 1) + 4 + 20  ' 1.PE Sign 2.PE
' 获取导出表RVA&Size
RVAOfExportTable = 取字节集数据 (data, #整数型, optionalPE + 96 + 1)
SizeOfExportTable = 取字节集数据 (data, #整数型, optionalPE + 96 + 4 + 1)
' 遍历节表,查找节
i = 0
判断循环首 ()
SelectionTable = 取字节集中间 (data, optionalPE + 97 + 128 + 40 × i, 40)
计次循环首 (40, j)
cnt = cnt + SelectionTable [j]
计次循环尾 ()
如果真 (cnt = 0)
跳出循环 ()
VirtualAddressOfSelection = 取字节集数据 (SelectionTable, #整数型, 8 + 4 + 1)
PointerToRawDataOfSelection = 取字节集数据 (SelectionTable, #整数型, 8 + 4 + 8 + 1)
SizeOfSelction = 取字节集数据 (SelectionTable, #整数型, 8 + 4 + 4 + 1)
如果真 (VirtualAddressOfSelection ≤ RVAOfExportTable RVAOfExportTable ≤ VirtualAddressOfSelection + SizeOfSelction)
FOAOfExportTable = PointerToRawDataOfSelection + RVAOfExportTable - VirtualAddressOfSelection
跳出循环 ()
i = i + 1
cnt = 0
判断循环尾 ()
' 解析导出表
cnt = 0
如果真 (取反 (是否为空 (dllName)))
ExOfName = 取字节集数据 (data, #整数型, FOAOfExportTable + 1 + 12)
i = 1
判断循环首 (data [PointerToRawDataOfSelection + ExOfName - VirtualAddressOfSelection + i] ≠ 0)
NameOfDll = NameOfDll + 到文本 (到字节集 (data [PointerToRawDataOfSelection + ExOfName - VirtualAddressOfSelection + i]))
i = i + 1
判断循环尾 ()
如果真 (dllName ≠ NameOfDll)
' 非法调用dll
返回 (-1)

ExOfNumberOfFunctions = 取字节集数据 (data, #整数型, FOAOfExportTable + 1 + 20)
如果真 (ExOfNumberOfFunctions ≤ 0)
' 无导出函数
返回 (-1)

ExOfNumberOfNames = 取字节集数据 (data, #整数型, FOAOfExportTable + 1 + 24)
如果真 (取反 (是否为空 (fnName)) ExOfNumberOfNames > 0)  ' 以名称调用
ExOfAddressOfNames = 取字节集数据 (data, #整数型, FOAOfExportTable + 1 + 32)  ' 取出命名表
' 获取函数名字FOA列表
计次循环首 (ExOfNumberOfNames, i)
ExOfAddressOfNames_FOA = PointerToRawDataOfSelection + 取字节集数据 (data, #整数型, PointerToRawDataOfSelection + ExOfAddressOfNames - VirtualAddressOfSelection (i - 1) × 4 + 1) - VirtualAddressOfSelection
j = 1
判断循环首 (data [ExOfAddressOfNames_FOA + j] ≠ 0)
NameOfFunction = NameOfFunction + 到文本 (到字节集 (data [ExOfAddressOfNames_FOA + j]))
j = j + 1
判断循环尾 ()
如果真 (fnName = NameOfFunction)
cnt = i - 1
跳出循环 ()
NameOfFunction = “”
计次循环尾 ()
' cha询序号表
如果真 (取反 (是否为空 (fnOrdinals)))
cnt = fnOrdinals
ExOfAddressOfNameOrdinals = 取字节集数据 (data, #整数型, FOAOfExportTable + 1 + 36)
ExOfAddressOfNameOrdinals_Value = 取字节集数据 (data, #短整数型, PointerToRawDataOfSelection + ExOfAddressOfNameOrdinals - VirtualAddressOfSelection + cnt × 2 + 1)
如果真 (cnt ≥ 0)
ExOfBase = 取字节集数据 (data, #短整数型, FOAOfExportTable + 1 + 16)
ExOfAddressOfFunctions = 取字节集数据 (data, #整数型, FOAOfExportTable + 1 + 28)  ' 取出函数表
ExOfAddressOfFunctions_RVA = 取字节集数据 (data, #整数型, PointerToRawDataOfSelection + ExOfAddressOfFunctions - VirtualAddressOfSelection (ExOfAddressOfNameOrdinals_Value - ExOfBase + 1) × 4 + 1)
' 遍历节表,查找节
i = 0
判断循环首 ()
SelectionTable = 取字节集中间 (data, optionalPE + 97 + 128 + 40 × i, 40)
计次循环首 (40, j)
cnt = cnt + SelectionTable [j]
计次循环尾 ()
如果真 (cnt = 0)
跳出循环 ()
VirtualAddressOfSelection = 取字节集数据 (SelectionTable, #整数型, 8 + 4 + 1)
PointerToRawDataOfSelection = 取字节集数据 (SelectionTable, #整数型, 8 + 4 + 8 + 1)
SizeOfSelction = 取字节集数据 (SelectionTable, #整数型, 8 + 4 + 4 + 1)
如果真 (VirtualAddressOfSelection ≤ ExOfAddressOfFunctions_RVA ExOfAddressOfFunctions_RVA ≤ VirtualAddressOfSelection + SizeOfSelction)
返回 (PointerToRawDataOfSelection + ExOfAddressOfFunctions_RVA - VirtualAddressOfSelection)
i = i + 1
cnt = 0
判断循环尾 ()
返回 (-1)

toFOA.e

11.03 KB, 下载次数: 35, 下载积分: 精币 -2 枚

评分

参与人数 2好评 +2 精币 +6 收起 理由
易语言资源网 + 1 + 3 开源精神必须支持~
冰点 + 1 + 3 开源精神必须支持~

查看全部评分


发表于 2023-2-17 09:43:34 | 显示全部楼层   上海市上海市
谢谢分享
回复 支持 反对

使用道具 举报

结帖率:97% (368/379)

签到天数: 19 天

发表于 2022-10-3 00:24:10 | 显示全部楼层   福建省泉州市
背景图片发下
回复 支持 反对

使用道具 举报

发表于 2022-9-3 18:45:27 | 显示全部楼层   山东省济宁市
大师,仅此而已
回复 支持 反对

使用道具 举报

结帖率:93% (66/71)

签到天数: 20 天

发表于 2022-8-21 17:53:44 | 显示全部楼层   四川省南充市
背景有吗
回复 支持 反对

使用道具 举报

发表于 2022-8-21 10:19:27 | 显示全部楼层   江苏省连云港市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (56/56)

签到天数: 19 天

发表于 2022-8-21 07:18:44 | 显示全部楼层   四川省成都市
开源精神必须支持~
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)

签到天数: 1 天

 楼主| 发表于 2022-8-19 18:51:10 | 显示全部楼层   浙江省杭州市

只写了找FOA
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)

签到天数: 1 天

 楼主| 发表于 2022-8-19 18:50:47 | 显示全部楼层   浙江省杭州市
本帖最后由 埃菲尔铁塔ATA 于 2022-8-19 18:55 编辑

调用还没想好
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)

签到天数: 13 天

发表于 2022-8-19 18:34:32 | 显示全部楼层   广东省深圳市
感谢分享,支持开源
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表