欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

PE资源字符串ID计算方法

PE资源字符串ID计算方法

PE资源字符串ID计算方法
注:
不知道怎么发图,只好委屈大家到附件中的doc文档中去看了
关键字:资源字符串表 资源字符串ID计算方法 字符串块之字符串索引值
前言
关于资源字符串ID的计算方法, 国内网页搜索后,几乎没有找到;国外英文的网页搜索后情况也相似,经过本人努力与实验终于明白个中道理
一、参考文章:《Win32 二进制资源格式(全)》
该文章http://www.fish888.com/Win32-t169128
其中资源字符串表相关部分摘录及整理如下
字符串表资源
字符串表表由16个字符串所组成的块(blocks of 16 strings)构成。这些块的组织取决于字符串ID,字符串ID的数值在资源中是隐含的,只能通过计算,计算字符串在字符串块(或叫串组)中的索引值才能得到,索引值的范围为0-15
字符串ID的最低4位指定字符串在块中的位置,高12位指定字符串在哪个块中,每个块存储为一个资源项
每个字符串或错误表资源块的存储格式如下:
[一般资源头(type = 6)]
字符串块
字符串为Pascal格式,第一个单字(WORD)存储长度。不管有无字符串16个块都会填满,其中没有字符串的位置其单字长度值置0
字符串块也有ID,也叫字符串块ID
注意:
资源文件中块不一定按顺序存储。每块都被赋予一个序数ID。这个ID值等于字符串ID的高12位再加1(因此序数ID总大于等于1)。块以其在.rc文件中出现的次序存储在.res文件中,再由CVTRES工具将其顺序存储在COFF对象中,再到最终映像文件中去
二、VC中的字符串
根据以上信息即可确定资源字符串ID了:若为空串,则是一个WORD的0值,占一个索引,见图:
VC中:
 
根据《Win32 二进制资源格式(全)》,计算出该字符串块ID为:(96 / 16) + 1 = 7 
三、看看该字符串块在资源黑客中的情况:
ResHacker中:
 
四、看看OllyDbg中的情况,关于如何定位到此处,请参考文章《Win32 二进制资源格式(全)》,本文不再赘述
OllyDbg中:
 
五、字符串ID计算方法:
见图,得到索引值后,计算方法实在简单
 
六、总结
虽然程序资源节中并没有真实的字符串ID值的存在,但事实上字符串ID却隐含在字符串块ID与索引值中,根据字符串块ID与串块索引能很简单地求出字符串ID
根据这些知识,再结合PE相关知识(网上PE相关文章多如牛毛,本文不再赘述)就能很方便的遍历枚举程序资源中的字符串ID了

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功