On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение





Пост N: 25
Зарегистрирован: 01.01.10
ссылка на сообщение  Отправлено: 07.01.10 21:56. Заголовок: Простая программа защиты от нелегального копирования exe-файла


Конечно, самая лучшая защита - электронный ключ, но он стоит денег. Предлагаемая программа защиты основана на записи уникальной информации о компьютере, на который программа инсталлируется, внутрь exe-файла и проверке этой информации при запуске защищаемой программы. Если программа будет несанкционированно перенесена на другой компьютер, то потребуется переинсталляция, иначе программа работать не будет.
// Защищаемая программа
#include "windows.ch"
#include "guilib.ch"
STATIC Message := "Копия программы - нелегальная! "
PROCEDURE Main
LOCAL oMainWindow
INIT WINDOW oMainWindow MAIN TITLE "Защищаемая программа";
COLOR COLOR_3DLIGHT + 1 AT 0, 0 SIZE 320, 200;
ON INIT {|x|LegalUse(x)}
CENTER WINDOW oMainWindow
ACTIVATE WINDOW oMainWindow
RETURN
PROCEDURE LegalUse(x)
IF RIGHT(Message, 9) != SPACE(9)
IF HDSerial("C:\") != RIGHT(Message, 9)
MsgInfo(LEFT(Message, 30), x:Title)
x:Close()
ENDIF
ENDIF
RETURN
// Программа инсталляции
#include "windows.ch"
#include "guilib.ch"
#include "fileio.ch"
#define BUFF_SIZE 8192
STATIC Message := "Копия программы - нелегальная!"
PROCEDURE Main(cFile)
BEGIN SEQUENCE
IF PCOUNT() < 1
MsgInfo("Не задан параметр", "Установка"); BREAK
ENDIF
IF !FILE(cFile)
MsgInfo("Файл " + cFile + " не найден", "Установка"); BREAK
ENDIF
Install(cFile)
END SEQUENCE
RETURN
PROCEDURE Install(cFile)
LOCAL fHandle, i, j, bytes_read, buff1 := SPACE(BUFF_SIZE)
LOCAL err, buff2 := "", lFound := .F., curp := 0, curp2 := 0
BEGIN SEQUENCE
fHandle := FOPEN(cFile, FO_READWRITE + FO_SHARED)
IF fHandle == F_ERROR
MsgInfo("Ошибка открытия " + ALLTRIM(STR(FERROR())) + " файла " + cFile, "Установка")
BREAK
ENDIF
FOR i := 0 TO File_Size(fHandle) STEP BUFF_SIZE
curp := File_Pos(fHandle); bytes_read := FREAD(fHandle, @buff1, BUFF_SIZE)
IF (err := FERROR()) <> 0
FCLOSE(fHandle)
MsgInfo("Ошибка чтения " + LTRIM(STR(err)) + " файла " + cFile, "Установка")
BREAK
ENDIF
IF (j := AT(Message, buff2 + LEFT(buff1, bytes_read))) > 0
IF j > LEN(buff2)
curp := curp + ((j - LEN(buff2)) - 1)
ELSE
curp := curp2 + (j - 1)
ENDIF
curp += (LEN(Message) + 1)
FSEEK(fHandle, curp, FS_SET); FWRITE(fHandle, HDSerial("C:\"), 9)
lFound := .T.; EXIT
ELSE
buff2 := LEFT(buff1, bytes_read); curp2 := curp
ENDIF
NEXT
FCLOSE(fHandle)
IF lFound
MsgInfo("Файл " + cFile + " установлен", "Установка")
ELSE
MsgInfo("Файл " + cFile + " не может быть установлен", "Установка")
ENDIF
END SEQUENCE
RETURN
FUNCTION File_Pos(fHandle)
RETURN (FSEEK(fHandle, 0, FS_RELATIVE))
FUNCTION File_Size(fHandle)
LOCAL nCurrent, nLength
nCurrent := File_Pos(fHandle)
nLength := FSEEK(fHandle, 0, FS_END)
FSEEK(fHandle, nCurrent)
RETURN (nLength)
Файлы в архиве

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 14 [только новые]


постоянный участник




Пост N: 1024
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.01.10 22:38. Заголовок: Не собирается !!! Ка..


Не собирается !!! Какая версия хХарбора и HWGUI - нужны ?

Compiling 'TEST.prg'...
Lines 26, Functions/Procedures 2
Generating C source output to 'TEST.c'...
Done.
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
TEST.c:
Borland Resource Compiler Version 5.40
Copyright (c) 1990, 1999 Inprise Corporation. All rights reserved.
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external '_HB_FUN_HB_NUMTOHEX' referenced from Z:\HWGUI\LIB\HWGUI.LIB|richtext

Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1025
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.01.10 22:40. Заголовок: Почему в архиве Prot..


Почему в архиве Protect.rar, rc-файлы пустые ?


Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1026
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.01.10 23:02. Заголовок: sergey5703 пишет: о..


sergey5703 пишет:

 цитата:
основана на записи уникальной информации о компьютере, на который программа инсталлируется


Я вижу только одну функцию HDSerial("C:\") и то с привязкой к библиотеке HWGUI ....
А без этой библиотеки можно в хХарборе получить такую же функцию ?

Спасибо: 1 
ПрофильЦитата Ответить





Пост N: 26
Зарегистрирован: 01.01.10
ссылка на сообщение  Отправлено: 07.01.10 23:44. Заголовок: Версия xHarbour vers..


Версия xHarbour version 1.2.1 Intl. (SimpLex) (Rev. 6658), версия HwGUI 2.16.
Это у меня такие версии, с которыми запускается. А функция NUMTOHEX есть в ЛЮБОМ xHarbour-е (библиотека rtl.lib). Похоже Вы используете HARBOUR, а не XHARBOUR. Потому что функции _HB_FUN_HB_NUMTOHEX в xHarbour-е НЕТ, а есть функция _HB_FUN_NUMTOHEX.
C:\MY\Protect>MAKE_GUI.BAT TEST
xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 6633)
Copyright 1999-2010, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'TEST.prg'...
Lines 26, Functions/Procedures 2
Generating C source output to 'TEST.c'...
Done.
Borland C++ 5.5 for Win32 Copyright (c) 1993, 2000 Borland
TEST.c:
Borland Resource Compiler Version 5.40
Copyright (c) 1990, 1999 Inprise Corporation. All rights reserved.
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland


Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 27
Зарегистрирован: 01.01.10
ссылка на сообщение  Отправлено: 07.01.10 23:46. Заголовок: Просто нет ресурсов ..


Просто нет ресурсов у приложения.


Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 28
Зарегистрирован: 01.01.10
ссылка на сообщение  Отправлено: 07.01.10 23:55. Заголовок: GetVolumeInformation..


GetVolumeInformation - функция Win32 API.
unsigned long Get_SerialNumber(char* RootPathName)
{
unsigned long SerialNumber;
GetVolumeInformation(RootPathName, NULL, 0, &SerialNumber,
NULL, NULL, NULL, 0);
return SerialNumber;
}
HB_FUNC( HDGETSERIAL )
{
hb_retnl( Get_SerialNumber(hb_parc(1)) );
}
FUNCTION HdSerial( cDrive )
Local n := HDGETSERIAL( cDrive )
Local cHex := NUMTOHEX(n)
Local cResult := ""
cResult := Substr( cHex,1, 4 ) + '-' + Substr( cHex,5, 4 )
return cResult


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1029
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.01.10 20:10. Заголовок: sergey5703 пишет: G..


sergey5703 пишет:

 цитата:
GetVolumeInformation - функция Win32 API.



А как оформить все это чтоб под хХарбором работало ?
Я знаю что нужно:
#PRAGMA
.....
#ENDPRAGMA

А какие инклуды вставлять нужно ?

Спасибо: 1 
ПрофильЦитата Ответить





Пост N: 31
Зарегистрирован: 01.01.10
ссылка на сообщение  Отправлено: 08.01.10 21:25. Заголовок: Так оно и работает п..


Так оно и работает под xHarbour-ом. Исходные тексты в HwGUI\Source. А #pragma BEGINDUMP/ENDDUMP должны быть В КОНЦЕ программы. Вот примерная программа:
? HDSerial("C:\")
?
FUNCTION HdSerial( cDrive )
Local cHex := NUMTOHEX(HDGETSERIAL( cDrive ))
return (Substr( cHex,1, 4 ) + '-' + Substr( cHex,5, 4 ))
#pragma BEGINDUMP
#include <windows.h>
#include "hbdefs.h"
#include "hbapi.h"
unsigned long Get_SerialNumber(char* RootPathName)
{
unsigned long SerialNumber;
GetVolumeInformation(RootPathName, NULL, 0, &SerialNumber,
NULL, NULL, NULL, 0);
return SerialNumber;
}
HB_FUNC( HDGETSERIAL )
{
hb_retnl( Get_SerialNumber(hb_parc(1)) );
}
#pragma ENDDUMP
Вот make.bat:
@echo off
SET PATH=c:\BCC55\BIN;c:\XHARBOUR\BIN
SET INCLUDE=c:\BCC55\INCLUDE;c:\XHARBOUR\INCLUDE
SET LIB=c:\BCC55\LIB;c:\BCC55\LIB\PSDK;c:\XHARBOUR\LIB
set HB_BIN_INSTALL=c:\xharbour\bin
set HB_LIB_INSTALL=c:\xharbour\lib\
set HB_INC_INSTALL=c:\xharbour\include\
%HB_BIN_INSTALL%\harbour.exe %1.prg %2 -w -gc0 -i%HB_INC_INSTALL%
bcc32.exe -O2 -d -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% %1.c vm.lib rtl.lib gtwin.lib lang.lib rdd.lib dbffpt.lib hbsix.lib macro.lib pp.lib dbfntx.lib dbfcdx.lib pcrepos.lib common.lib codepage.lib ct.lib
Вот консольный вывод:
C:\3>MAKE.BAT test
xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 6633)
Copyright 1999-2010, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'test.prg'...
Lines 7, Functions/Procedures 2
Generating C source output to 'test.c'...
Done.
Borland C++ 5.5 for Win32 Copyright (c) 1993, 2000 Borland
test.c:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
C:\3>test.exe
3D4E-1A0E


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 157
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 13.01.10 14:45. Заголовок: А при работе в сети?..


А при работе в сети? Ехе расположен на сервере с базой. Запуск с рабочих машин. Сетевой диск и его характеристики будут определяться?

Спасибо: 1 
ПрофильЦитата Ответить





Пост N: 38
Зарегистрирован: 01.01.10
ссылка на сообщение  Отправлено: 13.01.10 21:15. Заголовок: Для сети, если exe-ф..


Для сети, если exe-файл запускается с сервера, это решение не годится, так как для всех рабочих станций будет запускаться один exe-файл. Вообще сразу, как заходит речь об сетевых решениях, ВСЕ программистские проблемы сразу увеличиваются на порядок (раз в десять) - это я по собственному опыту ориентируюсь!


Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 366
Зарегистрирован: 08.04.06
ссылка на сообщение  Отправлено: 14.03.10 12:02. Заголовок: А кто мешает запуска..


А кто мешает запускать exe-файл не с сервера, а с рабочей станции? А путь к серверным базам указывать в "Командной строке" ярлыка после имени exe-файла. У меня например так и делается, и защита прекрасно работает.
Да, при необходимости перестановки программы (исправление ошибок и т.п.) работы на [число рабочих станций] больше, но зато программа защищена!

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 163
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 15.03.10 13:02. Заголовок: Ничто не мешает. Т..


Ничто не мешает. Так обновлять проще- если все на сервере лежит. В одном месте заменил и все довольны.
Я делал вообще просто. Кидаешь в вин папку (там много всякого хлама) файл с произвольным именем и содержанием.Программа при запуске проверяет наличие этого файла - НЕТ его , значит нельзя работать.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1432
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.03.10 14:02. Заголовок: Vlad04 пишет: Так о..


Vlad04 пишет:

 цитата:
Так обновлять проще- если все на сервере лежит


Тоже примерно так делаю. EXE лежит на серваке.
На рабочих станциях в autoexec.bat (NT) прописываю переменную среды и указываю папку куда смотреть.
Типа Set blabla=c:\set (папка может быть любая , это просто пример)
В программе считываю эту переменную среды и проверяю папку на которую она указывает.
В папке лежит файлик с кодом привязки к конкретной машине (вяжу к дате Bios и номеру диска)
Если прога не находит файл - ключ , вываливается табличка с условным номером компа , в ответ на который
нужно ввести код ответа. Если файл-ключ найден но код в нем не верный , значит или железо меняли или
прогу украли или винт форматнули , в этом случае прога уходит в бесконечный цикл , ну а далее разбираюсь в каждом случае отдельно.


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 29
Зарегистрирован: 02.07.12
ссылка на сообщение  Отправлено: 07.09.13 20:46. Заголовок: Попробовал я скомпил..


Попробовал я скомпилирвать данные примеры, что-то не могу понять, после записи в файл, программа перестает запускаться, посылает к билу... или я что-то не то делаю???
Скрытый текст

У кого нибудь сохранились исходники в архиве, а то ссылка битая


Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 27
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет