2024-11-20-XORandRtf
十一月 20, 2024
反汇编代码审计
进入 sub_4014D0
后
1 | char __cdecl sub_4014D0(LPCSTR lpString) |
根据函数原型逆推代码作用
1 | HANDLE CreateFileA( |
CreateFileA("dbapp.rtf", 0x10000000u, 0, 0, 2u, 0x80u, 0);
文件名 dbapp.rtf
0x10000000
等同于 GENERIC_READ
,意味着请求对文件的读取权限。
0
表示不允许文件与其他进程共享。
0
表示不设置安全属性,使用默认的安全设置。
2u
等同 OPEN_ALWAYS
类似python open 的 a+
文件存在则打开,文件不存在则创建新的
0x80u
是 FILE_FLAG_NO_BUFFERING
,表示文件操作将不使用系统缓存进行缓冲,要求应用程序直接与物理存储进行交互。通常用于高效的文件操作。
0
表示没有模板文件,通常设置为 NULL
,即不使用任何模板文件
上方的可疑代码
hResInfo = FindResourceA(0, (LPCSTR)0x65, "AAA");
1 | HRSRC FindResourceA( |
hModule
参数指定了模块句柄。0
表示该函数将搜索当前进程的可执行文件(EXE)或者动态链接库(DLL)中的资源。因此,0
实际上指的是当前进程本身。
lpName
参数指定了资源的名称。- 在这个例子中,
0x65
是一个整数常量,表示资源的名称(以字符串形式传递时,会进行转换)。由于(LPCSTR)0x65
表示将数字0x65
强制转换为LPCSTR
类型,这里的0x65
是一个指向某个特定字符串资源的地址,通常是一个字符。
- 在这个例子中,
0x65
对应的 ASCII 字符是'e'
,因此,传递的资源名称实际上是一个指向字符'e'
的指针。- 但值得注意的是,这并不意味着它是字符串
"e"
,而是一个内存地址,所以需要结合上下文来看。如果程序的资源文件中包含一个以'e'
为标识符的资源,这种写法就能匹配到该资源。
- 但值得注意的是,这并不意味着它是字符串
lpType
是资源的类型,这里是一个常量字符串"AAA"
,表示要查找的资源的类型。- 资源类型可以是
"RT_BITMAP"
(位图),"RT_ICON"
(图标),"RT_STRING"
(字符串表)等。这里"AAA"
是一个用户自定义的资源类型标识符。
- 资源类型可以是
查看评论