1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
#include "../runtime/common.h"
#include "../runtime/crypto.h"
#include "../core/objects.h"
#include "../core/osutils.h"
#include "../core/streams.h"
#include "../core/files.h"
#include "../core/processors.h"
#include "../core/core.h"
TEST(CoreTest, OpenAndCompile)
{
Core vmp;
ASSERT_TRUE(vmp.Open("test-binaries/win32-app-test1-i386.vmp"));
EXPECT_EQ(vmp.vm_section_name().compare(".test"), 0);
IFile &file = *vmp.input_file();
ASSERT_EQ(file.count(), 1ul);
IArchitecture &arch = *file.item(0);
// Check folders.
Folder &folder = *file.folder_list();
ASSERT_EQ(folder.count(), 2ul);
EXPECT_EQ(folder.item(0)->name().compare("Folder1") , 0);
EXPECT_EQ(folder.item(1)->name().compare("Folder2") , 0);
ASSERT_EQ(folder.item(1)->count(), 1ul);
EXPECT_EQ(folder.item(1)->item(0)->name().compare("Strings"), 0);
EXPECT_EQ(file.folder_list()->GetFolderList().size(), 3ul);
// Check functions.
ASSERT_EQ(arch.function_list()->count(), 4ul);
EXPECT_EQ(arch.function_list()->item(0)->count(), 6ul);
EXPECT_EQ(arch.function_list()->item(1)->folder()->name().compare("Strings"), 0);
EXPECT_EQ(arch.function_list()->item(2)->folder()->name().compare("Strings"), 0);
// Check external commands.
ExtCommandList *ext_command_list = arch.function_list()->item(0)->ext_command_list();
ASSERT_EQ(ext_command_list->count(), 2ul);
EXPECT_EQ(ext_command_list->item(0)->address(), 0x00401007ull);
EXPECT_EQ(ext_command_list->item(1)->address(), 0x00401011ull);
ASSERT_TRUE(vmp.Compile());
}
TEST(CoreTest, CryptRSA)
{
RSA cryptor;
size_t key_lengths[] = { 1024ul, 1536ul, 2048ul, 2560ul, 3072ul, 3584ul, 4096ul };
//for(size_t i = 0; i < _countof(key_lengths); i++)
size_t i = rand() % _countof(key_lengths);
{
size_t key_length = key_lengths[i];
ASSERT_TRUE(cryptor.CreateKeyPair(key_length)) << key_length;
const uint64_t c = 0xDEAD00F00D00AA55ull;
Data data;
data.PushQWord(c);
ASSERT_TRUE(cryptor.Encrypt(data)) << key_length;
ASSERT_NE(memcmp(data.data(), &c, sizeof(c)), 0) << key_length;
ASSERT_TRUE(cryptor.Decrypt(data)) << key_length;
ASSERT_EQ(memcmp(data.data(), &c, sizeof(c)), 0) << key_length;
}
}
TEST(CoreTest, IsUniqueWatermark)
{
WatermarkManager wm(NULL);
wm.Add("name", "AbCdE?");
ASSERT_FALSE(wm.IsUniqueWatermark("AB"));
ASSERT_FALSE(wm.IsUniqueWatermark("b?"));
ASSERT_FALSE(wm.IsUniqueWatermark("DEF"));
ASSERT_FALSE(wm.IsUniqueWatermark("AbCdE?"));
ASSERT_FALSE(wm.IsUniqueWatermark("?123?AbCdE8EF"));
ASSERT_TRUE(wm.IsUniqueWatermark("?B12"));
ASSERT_TRUE(wm.IsUniqueWatermark("34587?B123"));
}
#ifndef VMP_GNU
TEST(CoreTest, UTF8Validator)
{
ASSERT_TRUE(os::ValidateUTF8(std::string()));
ASSERT_TRUE(os::ValidateUTF8(os::ToUTF8(os::unicode_string(L"кириллица"))));
ASSERT_FALSE(os::ValidateUTF8(std::string("кириллица 1251")));
}
TEST(CoreTest, FromACP)
{
ASSERT_TRUE(os::FromACP(std::string("кириллица 1251")) == os::unicode_string(L"кириллица 1251"));
}
#endif
|