diff options
Diffstat (limited to 'help/ru/manager/usage/step21_src.htm')
-rw-r--r-- | help/ru/manager/usage/step21_src.htm | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/help/ru/manager/usage/step21_src.htm b/help/ru/manager/usage/step21_src.htm new file mode 100644 index 0000000..65a2ec7 --- /dev/null +++ b/help/ru/manager/usage/step21_src.htm @@ -0,0 +1,109 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <link rel="Stylesheet" type="text/css" href= + "../../default.css" /> + <meta http-equiv="Content-Type" content= + "text/html; charset=utf-8" /> + + <title>Шаг 2.1: Создаем новое защищенное приложение</title> +</head> + +<body> + <h1>Шаг 2.1: Создаем новое защищенное приложение</h1> + + <p>Если на первом этапе мы создавали несколько разных тестовых + приложений для изучения API системы лицензирования, то на втором этапе + приложение будет одно. Оно также будет консольным и в нем будет + функция <strong>foo()</strong>, которая может работать только в + зарегистрированной версии. Вот код нашего тестового + приложения:</p> + <pre class="code">#include <windows.h> +#include <stdio.h> +#include "VMProtectSDK.h" + +#define PRINT_HELPER(state, flag) if (state & flag) printf("%s ", #flag) +void print_state(INT state) +{ + if (state == 0) + { + printf("state = 0\n"); + return; + } + + printf("state = "); + PRINT_HELPER(state, SERIAL_STATE_FLAG_CORRUPTED); + PRINT_HELPER(state, SERIAL_STATE_FLAG_INVALID); + PRINT_HELPER(state, SERIAL_STATE_FLAG_BLACKLISTED); + PRINT_HELPER(state, SERIAL_STATE_FLAG_DATE_EXPIRED); + PRINT_HELPER(state, SERIAL_STATE_FLAG_RUNNING_TIME_OVER); + PRINT_HELPER(state, SERIAL_STATE_FLAG_BAD_HWID); + PRINT_HELPER(state, SERIAL_STATE_FLAG_MAX_BUILD_EXPIRED); + printf("\n"); +} + +char *read_serial(const char *fname) +{ + FILE *f; + if (0 != fopen_s(&f, fname, "rb")) return NULL; + fseek(f, 0, SEEK_END); + int s = ftell(f); + fseek(f, 0, SEEK_SET); + char *buf = new char[s + 1]; + fread(buf, s, 1, f); + buf[s] = 0; + fclose(f); + return buf; +} + +// метод foo() очень короткий, но он нам нужен в виде отдельной функции +// поэтому мы попросим компилятор не делать его inline +__declspec(noinline) void foo() +{ + printf("I'm foo!\n"); +} + +int main(int argc, char **argv) +{ + char *serial = read_serial("serial.txt"); + int res = VMProtectSetSerialNumber(serial); + delete [] serial; + if (res) + { + printf("serial number is bad\n"); + print_state(res); + return 0; + } + printf("serial number is correct, calling foo()\n"); + foo(); + printf("done\n"); + return 0; +} +</pre> + + <p>Скомпилируем программу без отладочной информации, но в + настройках линкера попросим создать MAP-файл, который потребуется + для работы VMProtect. При запуске программы мы должны увидеть + следующий текст:</p> + <pre class="code">serial number is bad +state = SERIAL_STATE_FLAG_INVALID +</pre> + + <p>В настоящий момент система лицензирования все еще работает в + тестовом режиме, т.к. файл еще не был обработан VMProtect'ом и в + него не был внедрен модуль лицензирования. На <a href= + "step22_vmp.htm">следующем шаге</a> мы создадим проект VMProtect + и попробуем защитить нашу программу.</p><br /> + <br /> + <br /> + <br /> + <br /> + <hr noshade="noshade" size="1" /> + + <div align="center"> + © 2006-2015 Copyright VMProtect Software + </div> +</body> +</html> |