资源表:
PE中的相关资源可以通过程序进行深度定位,所获取的二进制字节码与资源脚本语句之间是一一对应的。
这些数据可能是源代码内部需要用到的常景,比如 菜单选项、界面描述等;也可能是源代码外部的,比如程序的图标文件、背景音乐文件、配置 文件等,以上这些数据统称为资源。
常见的资源
程序中常用的六类资源包括:
1、位图资源
2、光标资源
3、图标资源
4、菜单资源
5、对话框资源
6、自定义资源
结构体:
IMAGE_RESOURCE_DIRECTORY STRUCT
Characteristics //dd 0000h资源属性
TimeDatestamp //dd 0004h时间戳
MajorVersion //dw 0008h资源大版本号
MinorVersion //dw 0008h资源小版本号
NumberOfNamedEntries //dw 以名称命名的入口数量
NumberOfIdEntries //dw 命名的入口数量
IMAGE RESOURCE DIRECTORY ENDS
资源目录结构
typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
union {
struct {
DWORD NameOffset : 31; //资源名偏移
DWORD NameIsString : 1; //资源名为字符串
};
DWORD Name; //资源/语言类型
WORD Id; //资源数字ID
};
union {
DWORD OffsetToData; //数据偏移地址
struct {
DWORD OffsetToDirectory : 31; //子目录偏移地址
DWORD DataIsDirectory : 1; //数据为目录
};
};
} IMAGE_RESOURCE_DIRECTORY_ENTRY, *PIMAGE_RESOURCE_DIRECTORY_ENTRY;
我们使用工具进行实验
工具有
1、360zip程序
2、resource hacker或者是exescope
3、stud_pe
首先我们查看PE资源表
有9个资源组
第一个资源表
我们进行观察下
我们对该程序的资源表有个大概的了解之后
使用resource 打开该程序
我们对菜单的功能进行修改
文件会模拟出菜单选项
将一级菜单改掉
将二级菜单中的打开文件操作,修改下名称
选择编译脚本
文件另存为
该文件,如果直接打开
我们将文件放到程序目录
一个是正版,一个是我们修改之后的程序(壳)
正常画面
修改之后的画面
修改成功。
由于PE结构中资源表一层套一层。难以手动分析,所以使用工具是最佳选择。