shellcode-factory
shellcode-factory copied to clipboard
修复当变量名长度==8时产生的bug
根据COFF规范,如果符号名称的长度正好是8个字节,那么编译器会在名称后面追加一个空字节,并将其存储在 ShortName 字段中。 修复后代码:
bug复现: 修复前如果导出变量的变量名长度正好为8,那么不会产生shellcode导出
const char *obj::symbol_name(IMAGE_SYMBOL &symbol) {
if (symbol.N.Name.Short != 0) {
// 如果符号名称的长度小于等于8个字节,从 ShortName 中提取
char name[9];
memcpy(name, symbol.N.ShortName, 8);
// 查找字符串的实际长度
size_t length = strnlen(name, 8);
// 添加字符串终止符
name[length] = '\0';
// 返回符号名称
return _strdup(name);
}
导出函数如果的函数名字符串包含hookcall或callfunc(请注意是包含),无法正确导出函数