测试了一下,vm有一个VMProtectDecryptStringA/W解密函数,但是他是调用时解密,尝试将他放在全局变量区的话,会在一开始就解密完成。ps 将重要数据放在全局变量是不安全的,最好随用随销
测试代码:
[C] 纯文本查看 复制代码 #include <stdio.h>
#include <windows.h>
#include "VMProtectSDK.h"
const char *szStr = VMProtectDecryptStringA("这段文字是加密的AAABBB");
int main()
{
printf("main=%08X \nszStr=%08X \n按回车继续\n", main,szStr);
getchar();
MessageBoxA(NULL, szStr, VMProtectDecryptStringA("测试文本textAAABBB"), MB_OK);
return 0;
}
od main函数
[Asm] 纯文本查看 复制代码 006C1070 /$ 51 push ecx ; vmptest_.<ModuleEntryPoint>
006C1071 |. FF35 B8A26D00 push dword ptr ds:[0x6DA2B8]
006C1077 |. 68 70106C00 push vmptest_.006C1070 ; 入口地址
006C107C |. 68 80746D00 push vmptest_.006D7480 ; ASCII "main=%08X \nszStr=%08X \n按回车继续\n"
006C1081 |. E8 AAFFFFFF call vmptest_.006C1030
006C1086 |. 83C4 0C add esp,0xC
006C1089 |. E8 DF2A0000 call vmptest_.006C3B6D
006C108E |. 6A 00 push 0x0
006C1090 |. 68 A4746D00 push vmptest_.006D74A4
006C1095 |. E8 021C0600 call vmptest_.00722C9C
006C109A |. 90 nop ; |
006C109B |. 50 push eax ; |Title = "慂0w汝q "
006C109C |. FF35 B8A26D00 push dword ptr ds:[0x6DA2B8] ; |Text = "这段文字是加密的AAABBB"
006C10A2 |. 6A 00 push 0x0 ; |hOwner = NULL
006C10A4 |. FF15 10216D00 call dword ptr ds:[0x6D2110] ; \MessageBoxA
006C10AA |. 33C0 xor eax,eax
006C10AC |. 59 pop ecx ; 010FFA2C
006C10AD \. C3 retn
|