powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / защита от копирования и шифрование пароля в одном флаконе
20 сообщений из 20, страница 1 из 1
защита от копирования и шифрование пароля в одном флаконе
    #34037389
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут рылся малехо по форуму, надыбал сцылку на прогу, которая дает реальный железный серийник винта, т.е. независимо от логического раздела диска серийник - один.
Я ее малехо покоментарил, чтобы убрать название модели, ревизию и тд, короче чтоб тока реально сам серийник осталси и чтоб оно пахало как фуКция, параметр - диск (напр. С:):
Код: plaintext
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.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
PARAMETERS cDrive2Test
IF EMPTY(m.cDrive2Test) OR VARTYPE(m.cDrive2Test)#"C"
   m.cDrive2Test = SYS( 5 )
ENDIF
DECLARE INTEGER CloseHandle IN kernel32 ;
INTEGER hObject

DECLARE INTEGER CreateFile IN kernel32 ;
STRING lpFileName, INTEGER dwDesiredAccess, INTEGER dwShareMode,;
       INTEGER lpSecurityAttributes, INTEGER dwCreationDisposition,;
       INTEGER dwFlagsAndAttributes, INTEGER hTemplateFile

DECLARE INTEGER DeviceIoControl IN kernel32 INTEGER hDevice,;
        INTEGER dwIoControlCode, STRING @lpInBuffer,;
        LONG nInBufferSize, STRING @lpOutBuffer,;
        LONG nOutBufferSize, INTEGER @lpBytesReturned, INTEGER lpOverlapped

DECLARE INTEGER GetLogicalDriveStrings IN Win32API INTEGER buflen, STRING @buf
DECLARE INTEGER GetDriveType IN Win32API STRING cpath

DECLARE INTEGER GetVolumeInformation IN Win32API STRING lpRootPathName,;
        STRING @lpVolumeNameBuffer, INTEGER nVolumeNameSize,;
        LONG @lpVolumeSerialNumber, INTEGER @lpMaximumComponentLength,;
        INTEGER @lpFileSystemFlags, STRING @lpFileSystemNameBuffer,;
        INTEGER nFileSystemNameSize

*SUSPEND 
*LOCAL m.buflen, m.buf
*m.buflen =  104 
*m.buf = REPLICATE(CHR( 0 ), m.buflen)
*GetLogicalDriveStrings(m.buflen, @m.buf)
*m.buf = CHRTRAN(m.buf, CHR( 0 ) + "\:","")
m.str1 = ""
*SUSPEND 
*FOR m.i= 1  TO LEN(m.buf)
*m.i= 1 
   m.drvtype = GetDriveType(LEFT(m.cDrive2Test, 1 )+":\")
   IF m.drvtype =  3 
      m.str1 = LEFT(m.cDrive2Test, 1 )
      *m.str1 = m.str1 + SUBSTR(m.buf, m.i,  1 )
   ENDIF
*NEXT

*FOR m.i =  1  TO LEN(m.str1)
m.i= 1 
   m.vnb = REPLICATE(CHR( 0 ), 64 )
   m.vnbs =  64 
   m.vsn =  0 
   m.mcl =  0 
   m.fsf =  0 
   m.fsnb = REPLICATE(CHR( 0 ), 10 )
   m.fsnbs =  10 

   GetVolumeInformation(SUBSTR(m.str1,m.i, 1 ) + ":\", @m.vnb, m.vnbs,;
						@m.vsn, @m.mcl, @m.fsf, @m.fsnb, m.fsnbs)
   *IF m.vsn <  0 
   *   m.vsn = m.vsn +  168 
   *ENDIF
   *m.vsn = PADL(ALLTRIM(SUBSTR(TRANSFORM(m.vsn,"@0"),  3 )),  8 , "0")
   m.drivenumber = ASC(SUBSTR(m.str1, m.i,  1 )) - ASC("C")

   handle = CreateFile("\\.\" + CHR(ASC("c") + m.drivenumber) + ":",0xC0000000,  3 ,  0 ,  3 ,  0 ,  0 )
   m.sn = ""
   m.mod = ""
   m.rev = ""
   IF handle <> - 1 
      m.sci =""
      m.sci = m.sci + CHR( 0 ) + CHR( 2 ) + CHR( 0 ) + CHR( 0 ) + CHR( 0 )+;
		      CHR( 1 ) + CHR( 1 ) + CHR( 0 ) + CHR( 0 ) + CHR(0xA0) + CHR(0xEC)+;
		      CHR( 0 ) + CHR( 0 ) + REPLICATE(CHR( 0 ),  499 )
      m.sco = REPLICATE(CHR( 0 ),  2048 )
      m.ret_buffersize =  0 
      m.otv=DeviceIoControl(handle, 0x7C088, @m.sci, LEN(sci), @m.sco,;
							LEN(sco), @m.ret_buffersize,  0 )
      CloseHandle(handle)
	  IF m.otv <>  0 
		 m.sn = CHRTRAN( ALLTRIM( conv21( SUBSTR(m.sco,  37 ,  20 ) ) ),CHR( 0 ), "")
		 *m.rev = CHRTRAN( ALLTRIM( conv21( SUBSTR(m.sco,  63 ,  8 ) ) ),CHR( 0 ), "")
		 *m.mod = CHRTRAN( ALLTRIM( conv21( SUBSTR(m.sco,  71 ,  40 ) ) ),CHR( 0 ), "")
	  ENDIF
   ENDIF
   IF EMPTY(m.sn)
      handle = CreateFile("\\.\" + CHR(ASC("c") + m.drivenumber) +":", 0x00000000,  3 , 0 ,  3 ,  0 ,  0 )
      IF handle <> - 1 
		 m.sn = ""
		 *m.mod = ""
		 *m.rev = ""
		 m.sci = REPLICATE(CHR( 0 ), 1024 )
		 m.sco = REPLICATE(CHR( 0 ), 1024 )
		 m.ret_buffersize =  0 
		 m.otv = DeviceIoControl(handle, 0x2D1400, @m.sci, LEN(sci), @m.sco,;
								 LEN(sco), @m.ret_buffersize,  0 )
		 CloseHandle(handle)

		 IF m.otv <>  0 
		    *m.pos0 = ASC(SUBSTR(m.sco, 13 , 1 ))
		    *m.pos1 = ASC(SUBSTR(m.sco, 17 , 1 ))
		    *IF m.pos0 >  0 
		    *   m.pos1 = m.pos0
		    *ENDIF
		    *m.pos2 = ASC(SUBSTR(m.sco,  21 ,  1 ))
		    m.pos3 = ASC(SUBSTR(m.sco,  25 ,  1 ))
		    *m.mod = SUBSTR(m.sco, m.pos1+ 1 , m.pos2 - m.pos1)
		    *m.pos4 = AT(CHR( 0 ), m.mod)
		    *IF m.pos4 >  0 
		    *   m.mod = ALLTRIM(CHRTRAN(m.mod, CHR( 0 ), ""))
		    *ENDIF
		    *IF m.pos3 > m.pos2
			*	m.rev = SUBSTR(m.sco, m.pos2+ 1 , m.pos3 - m.pos2)
			*ELSE
			*	m.rev = SUBSTR(m.sco, m.pos2+ 1 )
			*ENDIF
			*m.pos4 = AT(CHR( 0 ), m.rev)
			*IF m.pos4 >  0 
			*	m.rev = ALLTRIM(LEFT(m.rev, m.pos4 -  1 ))
			*ENDIF
			IF m.pos3 >  0 
				m.pos3 = m.pos3 +  1 
				m.sco1 = SUBSTR(m.sco, m.pos3,  40 )
				m.sco1 = ALLTRIM(m.sco1)
				m.sn = ""
				m.pos3 =  1 
				FOR m.j =  1  TO  20 
					m.ch1 = CHR(EVALUATE("0x" +ALLTRIM(SUBSTR(m.sco1, m.pos3,  2 ))))
					m.pos3 = m.pos3 +  2 
					m.ch2 = CHR(EVALUATE("0x" +ALLTRIM(SUBSTR(m.sco1, m.pos3,  2 ))))
					m.pos3 = m.pos3 +  2 
					m.sn = m.sn + m.ch2 + m.ch1
				ENDFOR
				m.sn = ALLTRIM(CHRTRAN(m.sn, CHR( 0 ), ""))
			ELSE
				m.sn = ""
			ENDIF
		 ENDIF
	 ENDIF
   ENDIF
*?SUBSTR(m.str1, m.i,  1 ) + ":\ VolSN: " + m.vsn + " " +CHRTRAN(m.fsnb, CHR( 0 ), "") + "Model: " + m.mod + " Revision: " + m.rev+ 
RETURN m.sn
*ENDFOR

*/===============================================
FUNCTION conv21
*/===============================================
LPARAMETERS m.str
IF LEN(m.str)% 2  =  1 
m.str = m.str + " "
ENDIF
LOCAL m.i, m.str2
m.str2 = ""
FOR m.i= 1  TO LEN(m.str)
m.str2 = m.str2 + SUBSTR(m.str, m.i + IIF(m.i% 2 = 0 , - 1 ,  1 ),  1 )
ENDFOR
RETURN ALLTRIM(m.str2)

Вот, а потом к энтому замутил такое вот:
Код: plaintext
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.
RESTORE FROM password.mem ADDITIVE
* ресторицца переменная с менем Рassword

* получаем от юзьверя пароль
m.cPassword = ALLTRIM(INPUTBOX("Password"))

m.sPassword = ALLTRIM(m.cPassword)
m.nPasswordLen = LEN(m.sPassword)
m.cnPassword = ""
FOR m.i =  1  TO m.nPasswordLen
    m.cnPassword = m.cnPassword + LTRIM(STR(ASC(SUBSTR(m.sPassword,m.i, 1 ))))
ENDFOR
m.nPassword = BITXOR(VAL(LEFT(m.cnPassword, 14 )),m.nPasswordLen)

m.sHddSerial = hdds()
m.nHddSerialLen = LEN(m.sHddSerial)
m.cnHddSerial = ""
FOR m.i =  1  TO m.nHddSerialLen
    m.cnHddSerial = m.cnHddSerial + LTRIM(STR(ASC(SUBSTR(m.sHddSerial,m.i, 1 ))))
ENDFOR
* число отрезаю на  14  цифр длиной
m.nHddSerial = BITXOR(VAL(LEFT(m.cnHddSerial, 14 )) ,m.nHddSerialLen)

IF m.PassWord # BITXOR(m.nPassword,m.nHddSerial)
   MESSAGEBOX("Password incorrect!", 0 + 16 ,"Error")
ENDIF
*ERASE password.mem
*SAVE TO password.mem ALL LIKE PassWord

ну короче работает, тока нада еще мутить первый раз пароль (у меня закоментировано), сохранить, а потом ужо...

Суть в том, что при переносе проги "правльный" пароль не введешь...

Может есь какие идеи/усовершенствования по этому примеру?
...
Рейтинг: 0 / 0
защита от копирования и шифрование пароля в одном флаконе
    #34037421
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
бутылка пива фоксисту
и рефокс помогут это ломануть
за 2 минуты
...
Рейтинг: 0 / 0
защита от копирования и шифрование пароля в одном флаконе
    #34037492
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я не претендую на оригинальность, на не_Баян, но

помницца была еще в фпд такая тема - шифрование проекта, там шла речь о шифровании класса 2, так до сих пор оные проекты не рефоксят.

Что мешает шифровать свой проект встроенными в фокс методами?

И второе - даже путем анализа введенного нового пароля и результата в файле password.mem - это ничего не даст, т.к. на другом винте все будет по-другому :)
...
Рейтинг: 0 / 0
защита от копирования и шифрование пароля в одном флаконе
    #34037497
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и уж темболее это никак 2 минуты не займет, может 2 часа для профи, а может и все 2 дня. и одним пузырем пива - не отмашешься :)
...
Рейтинг: 0 / 0
защита от копирования и шифрование пароля в одном флаконе
    #34037514
CTAC-KOТут рылся малехо по форуму, надыбал сцылку на прогу, которая дает реальный железный серийник винта, т.е. независимо от логического раздела диска серийник - один.
Я ее малехо покоментарил, чтобы убрать название модели, ревизию и тд, короче чтоб тока реально сам серийник осталси и чтоб оно пахало как фуКция, параметр - диск (напр. С:):
Код: plaintext
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.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
PARAMETERS cDrive2Test
IF EMPTY(m.cDrive2Test) OR VARTYPE(m.cDrive2Test)#"C"
   m.cDrive2Test = SYS( 5 )
ENDIF
DECLARE INTEGER CloseHandle IN kernel32 ;
INTEGER hObject

DECLARE INTEGER CreateFile IN kernel32 ;
STRING lpFileName, INTEGER dwDesiredAccess, INTEGER dwShareMode,;
       INTEGER lpSecurityAttributes, INTEGER dwCreationDisposition,;
       INTEGER dwFlagsAndAttributes, INTEGER hTemplateFile

DECLARE INTEGER DeviceIoControl IN kernel32 INTEGER hDevice,;
        INTEGER dwIoControlCode, STRING @lpInBuffer,;
        LONG nInBufferSize, STRING @lpOutBuffer,;
        LONG nOutBufferSize, INTEGER @lpBytesReturned, INTEGER lpOverlapped

DECLARE INTEGER GetLogicalDriveStrings IN Win32API INTEGER buflen, STRING @buf
DECLARE INTEGER GetDriveType IN Win32API STRING cpath

DECLARE INTEGER GetVolumeInformation IN Win32API STRING lpRootPathName,;
        STRING @lpVolumeNameBuffer, INTEGER nVolumeNameSize,;
        LONG @lpVolumeSerialNumber, INTEGER @lpMaximumComponentLength,;
        INTEGER @lpFileSystemFlags, STRING @lpFileSystemNameBuffer,;
        INTEGER nFileSystemNameSize

*SUSPEND 
*LOCAL m.buflen, m.buf
*m.buflen =  104 
*m.buf = REPLICATE(CHR( 0 ), m.buflen)
*GetLogicalDriveStrings(m.buflen, @m.buf)
*m.buf = CHRTRAN(m.buf, CHR( 0 ) + "\:","")
m.str1 = ""
*SUSPEND 
*FOR m.i= 1  TO LEN(m.buf)
*m.i= 1 
   m.drvtype = GetDriveType(LEFT(m.cDrive2Test, 1 )+":\")
   IF m.drvtype =  3 
      m.str1 = LEFT(m.cDrive2Test, 1 )
      *m.str1 = m.str1 + SUBSTR(m.buf, m.i,  1 )
   ENDIF
*NEXT

*FOR m.i =  1  TO LEN(m.str1)
m.i= 1 
   m.vnb = REPLICATE(CHR( 0 ), 64 )
   m.vnbs =  64 
   m.vsn =  0 
   m.mcl =  0 
   m.fsf =  0 
   m.fsnb = REPLICATE(CHR( 0 ), 10 )
   m.fsnbs =  10 

   GetVolumeInformation(SUBSTR(m.str1,m.i, 1 ) + ":\", @m.vnb, m.vnbs,;
						@m.vsn, @m.mcl, @m.fsf, @m.fsnb, m.fsnbs)
   *IF m.vsn <  0 
   *   m.vsn = m.vsn +  168 
   *ENDIF
   *m.vsn = PADL(ALLTRIM(SUBSTR(TRANSFORM(m.vsn,"@0"),  3 )),  8 , "0")
   m.drivenumber = ASC(SUBSTR(m.str1, m.i,  1 )) - ASC("C")

   handle = CreateFile("\\.\" + CHR(ASC("c") + m.drivenumber) + ":",0xC0000000,  3 ,  0 ,  3 ,  0 ,  0 )
   m.sn = ""
   m.mod = ""
   m.rev = ""
   IF handle <> - 1 
      m.sci =""
      m.sci = m.sci + CHR( 0 ) + CHR( 2 ) + CHR( 0 ) + CHR( 0 ) + CHR( 0 )+;
		      CHR( 1 ) + CHR( 1 ) + CHR( 0 ) + CHR( 0 ) + CHR(0xA0) + CHR(0xEC)+;
		      CHR( 0 ) + CHR( 0 ) + REPLICATE(CHR( 0 ),  499 )
      m.sco = REPLICATE(CHR( 0 ),  2048 )
      m.ret_buffersize =  0 
      m.otv=DeviceIoControl(handle, 0x7C088, @m.sci, LEN(sci), @m.sco,;
							LEN(sco), @m.ret_buffersize,  0 )
      CloseHandle(handle)
	  IF m.otv <>  0 
		 m.sn = CHRTRAN( ALLTRIM( conv21( SUBSTR(m.sco,  37 ,  20 ) ) ),CHR( 0 ), "")
		 *m.rev = CHRTRAN( ALLTRIM( conv21( SUBSTR(m.sco,  63 ,  8 ) ) ),CHR( 0 ), "")
		 *m.mod = CHRTRAN( ALLTRIM( conv21( SUBSTR(m.sco,  71 ,  40 ) ) ),CHR( 0 ), "")
	  ENDIF
   ENDIF
   IF EMPTY(m.sn)
      handle = CreateFile("\\.\" + CHR(ASC("c") + m.drivenumber) +":", 0x00000000,  3 , 0 ,  3 ,  0 ,  0 )
      IF handle <> - 1 
		 m.sn = ""
		 *m.mod = ""
		 *m.rev = ""
		 m.sci = REPLICATE(CHR( 0 ), 1024 )
		 m.sco = REPLICATE(CHR( 0 ), 1024 )
		 m.ret_buffersize =  0 
		 m.otv = DeviceIoControl(handle, 0x2D1400, @m.sci, LEN(sci), @m.sco,;
								 LEN(sco), @m.ret_buffersize,  0 )
		 CloseHandle(handle)

		 IF m.otv <>  0 
		    *m.pos0 = ASC(SUBSTR(m.sco, 13 , 1 ))
		    *m.pos1 = ASC(SUBSTR(m.sco, 17 , 1 ))
		    *IF m.pos0 >  0 
		    *   m.pos1 = m.pos0
		    *ENDIF
		    *m.pos2 = ASC(SUBSTR(m.sco,  21 ,  1 ))
		    m.pos3 = ASC(SUBSTR(m.sco,  25 ,  1 ))
		    *m.mod = SUBSTR(m.sco, m.pos1+ 1 , m.pos2 - m.pos1)
		    *m.pos4 = AT(CHR( 0 ), m.mod)
		    *IF m.pos4 >  0 
		    *   m.mod = ALLTRIM(CHRTRAN(m.mod, CHR( 0 ), ""))
		    *ENDIF
		    *IF m.pos3 > m.pos2
			*	m.rev = SUBSTR(m.sco, m.pos2+ 1 , m.pos3 - m.pos2)
			*ELSE
			*	m.rev = SUBSTR(m.sco, m.pos2+ 1 )
			*ENDIF
			*m.pos4 = AT(CHR( 0 ), m.rev)
			*IF m.pos4 >  0 
			*	m.rev = ALLTRIM(LEFT(m.rev, m.pos4 -  1 ))
			*ENDIF
			IF m.pos3 >  0 
				m.pos3 = m.pos3 +  1 
				m.sco1 = SUBSTR(m.sco, m.pos3,  40 )
				m.sco1 = ALLTRIM(m.sco1)
				m.sn = ""
				m.pos3 =  1 
				FOR m.j =  1  TO  20 
					m.ch1 = CHR(EVALUATE("0x" +ALLTRIM(SUBSTR(m.sco1, m.pos3,  2 ))))
					m.pos3 = m.pos3 +  2 
					m.ch2 = CHR(EVALUATE("0x" +ALLTRIM(SUBSTR(m.sco1, m.pos3,  2 ))))
					m.pos3 = m.pos3 +  2 
					m.sn = m.sn + m.ch2 + m.ch1
				ENDFOR
				m.sn = ALLTRIM(CHRTRAN(m.sn, CHR( 0 ), ""))
			ELSE
				m.sn = ""
			ENDIF
		 ENDIF
	 ENDIF
   ENDIF
*?SUBSTR(m.str1, m.i,  1 ) + ":\ VolSN: " + m.vsn + " " +CHRTRAN(m.fsnb, CHR( 0 ), "") + "Model: " + m.mod + " Revision: " + m.rev+ 
RETURN m.sn
*ENDFOR

*/===============================================
FUNCTION conv21
*/===============================================
LPARAMETERS m.str
IF LEN(m.str)% 2  =  1 
m.str = m.str + " "
ENDIF
LOCAL m.i, m.str2
m.str2 = ""
FOR m.i= 1  TO LEN(m.str)
m.str2 = m.str2 + SUBSTR(m.str, m.i + IIF(m.i% 2 = 0 , - 1 ,  1 ),  1 )
ENDFOR
RETURN ALLTRIM(m.str2)

Вот, а потом к энтому замутил такое вот:
Код: plaintext
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.
RESTORE FROM password.mem ADDITIVE
* ресторицца переменная с менем Рassword

* получаем от юзьверя пароль
m.cPassword = ALLTRIM(INPUTBOX("Password"))

m.sPassword = ALLTRIM(m.cPassword)
m.nPasswordLen = LEN(m.sPassword)
m.cnPassword = ""
FOR m.i =  1  TO m.nPasswordLen
    m.cnPassword = m.cnPassword + LTRIM(STR(ASC(SUBSTR(m.sPassword,m.i, 1 ))))
ENDFOR
m.nPassword = BITXOR(VAL(LEFT(m.cnPassword, 14 )),m.nPasswordLen)

m.sHddSerial = hdds()
m.nHddSerialLen = LEN(m.sHddSerial)
m.cnHddSerial = ""
FOR m.i =  1  TO m.nHddSerialLen
    m.cnHddSerial = m.cnHddSerial + LTRIM(STR(ASC(SUBSTR(m.sHddSerial,m.i, 1 ))))
ENDFOR
* число отрезаю на  14  цифр длиной
m.nHddSerial = BITXOR(VAL(LEFT(m.cnHddSerial, 14 )) ,m.nHddSerialLen)

IF m.PassWord # BITXOR(m.nPassword,m.nHddSerial)
   MESSAGEBOX("Password incorrect!", 0 + 16 ,"Error")
ENDIF
*ERASE password.mem
*SAVE TO password.mem ALL LIKE PassWord

ну короче работает, тока нада еще мутить первый раз пароль (у меня закоментировано), сохранить, а потом ужо...

Суть в том, что при переносе проги "правльный" пароль не введешь...

Может есь какие идеи/усовершенствования по этому примеру?
Идея одна: оказаться от привязывания программы к винту.
ИМХО, неразумно это...
Умные забугорные конторы от этого приема, как метода защиты, уже давно отказались: много сил тратится на организацию защиты, много она доставляет неудобств пользователю и достаточно легко обходится.
Вся Ваша защита пойдет на смарку, если блок:
Код: plaintext
1.
2.
3.
IF m.PassWord # BITXOR(m.nPassword,m.nHddSerial)
   MESSAGEBOX("Password incorrect!", 0 + 16 ,"Error")
ENDIF

кто-то заменит на:

Код: plaintext
1.
2.
3.
IF m.PassWord # m.PassWord && BITXOR(m.nPassword,m.nHddSerial)
   MESSAGEBOX("Password incorrect!", 0 + 16 ,"Error")
ENDIF

С Фоксом это не так трудно сделать, как например с Ассемблером. Хотя и в этом случае действует тот же самый алгоритм: ищем место, где сравнивается эталонное и тестируемое значение и производим подмену....
Если Вам так хочется защитить свою интеллектуальную собственность, то лучше поройтесь в Интернете по современным технологиям защиты программ. Почитайте "Хакер" по взлому и защите от взлома. Там что-то было по технологиям "размазанной" защиты, когда даже опытные хакеры не с первого раза ее взламывают...
Хотя в "Хакере" упор сделан на Делфи и Ассемблер...
...
Рейтинг: 0 / 0
защита от копирования и шифрование пароля в одном флаконе
    #34037538
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 CTAC-KO - inputBOx - виден вводимый пороль
здесь на форуме были примеры как заделать отличный ввод пароля с черепом и костями вместо вводимых символов.

2 alex11100 - вы господин как всегда резки

Refox MMC - или аналоги зашифруют экзешник по шифрованию класса 2
врядли кто расшифрует.
опять же всю эту функцию можно и в FLL реализовать
...
Рейтинг: 0 / 0
защита от копирования и шифрование пароля в одном флаконе
    #34037549
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проходящий
Refox MMC - или аналоги зашифруют экзешник по шифрованию класса 2


Просветите неразумного чем класс 1 отличается от класса 2 и по какой классификации.
...
Рейтинг: 0 / 0
защита от копирования и шифрование пароля в одном флаконе
    #34037565
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ломается все
и левел 2.

только разбивать на екзе+длл корсой
и ключ сентинел ставить

2 часа на взлом любой защиты
если добраться до лисьего кода

если я увижу в апп меню
и там будут вызовы
классов
мне и стартовать это апп не нужно
я сам дерну все, что есть в этом апп
из своего стартового модуля, вот так вот
...
Рейтинг: 0 / 0
защита от копирования и шифрование пароля в одном флаконе
    #34037605
Станислав СИдея одна: оказаться от привязывания программы к винту.
ИМХО, неразумно это...

А вообще, защита должна быть такой, чтобы не мешать легальному пользователю и максимально усложнить жизнь "пирату".
А то получится как сейчас с копирайтом:
- если я легально купил программу и установил на один компьютер, то я выполнил условия лицензионного соглашения.
- а если я установил ее еще и на второй компьютер, то нарушил ли я условия лицензии?
- А если это произошло из-за проблем с компьютером?
- А если это не мой компьютер, а приятеля?
- и много других "если"....
И страдают именно легальные пользователи....

А если еще вспомнить предложения некоторых фирм (не будем показывать пальцем, хотя это имя у всех на слуху) по лицензированию софта по числу "камней" в компьютере, то это вообще "кранты" - апгрейды будут либо вне закона, либо плати дополнительные денежки
...
Рейтинг: 0 / 0
защита от копирования и шифрование пароля в одном флаконе
    #34037631
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Алекс
лан-лан, взломают и пожалуйста, и флаг им в руки :) А мне спать сиравно спокойнее будя :)

и сиравно от ламеров/адвансед юзьверов защитицца получицца. это ишшо поди найди хацкера, а до того дотумкай сперва, что дело не в неправльном пароле...

2 Проходящий
насчет что пароль видно - это ваще прога тестовая, само собой что это я уберу. А про черепок я поискаю, а ежели не в облом - приведите сцылочку, а?

Я ваще по ходу про сам смысл/идею вещаю :) т.е. ясен дел, что не всем по вкусу и тд и тп, но все же мож кому и пригодицца...
...
Рейтинг: 0 / 0
защита от копирования и шифрование пароля в одном флаконе
    #34037902
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В последнее время все больше прихожу к мысли, что защиты быть не должно...

Любая защита мешает свободному распространению продукта. Если бы Microsoft Windows был бы хорошо защищен от копирования, кто бы его сейчас использовал ?
...
Рейтинг: 0 / 0
защита от копирования и шифрование пароля в одном флаконе
    #34037938
ORAselect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, мужики, может не в тему, на на Си такая штука пишется проще, но вскыть и за ящик не получится.
А для FoxPro весьма круто. К тому же смысл-то в применимости, а не в том, чтобы супералгоритм получить. Мне понравилось
...
Рейтинг: 0 / 0
защита от копирования и шифрование пароля в одном флаконе
    #34037993
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по сути у ХР-винды внатуре есть движок предотвративший бы его нелегальное копирование и распространение, во всяком случае об этом я читал де-то в инете.
Но тока невыгодно мелкомягким было эту фичу активировать, так что дело именно таким образом и обстоит. Юзер пиратки однажды МОЖЕТ повзрослеть и купить тада лицензионку!
Тока это ось, а это суръезный продукт, дорогой, широкопрофильный и тд и тп. Я же пишу прогу под заказчика, причем на условиях чистого энтузазизьма, но с перспективой оттяпать за уже готовый продукт. Просто контора потом может сказать - а нафиг он нам? Мы ща сами себе все скопируем и в филиялы отправим :)

Потом в конторе этой сплошные ламеры сидят, а ну захотят скопировать, чтобы дома поглядети базу какую? Это ужо конторе не+ и мне подЗАДник
...
Рейтинг: 0 / 0
защита от копирования и шифрование пароля в одном флаконе
    #34038317
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KOПотом в конторе этой сплошные ламеры сидят, а ну захотят скопировать, чтобы дома поглядети базу какую? Это ужо конторе не+ и мне подЗАДник
Проблема в том, что в Вашем никак недокументированном коде потом куча спецов будет ковыряться, чтобы понять, что Вы там за "нетленку" наваяли - дешевле Вас будет держать на работе
...
Рейтинг: 0 / 0
защита от копирования и шифрование пароля в одном флаконе
    #34038421
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот! Правильно! Забронирую себе местечко с подогревом, до пенсии А ежели уволють - то, почитай, торба им А спецы разбирацца шибко долго не стануть, они свой, аналогичный, пердухт напишуть - да и дело с концом!
...
Рейтинг: 0 / 0
защита от копирования и шифрование пароля в одном флаконе
    #34038424
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 CTAC-KO - про скрытие вводимого текста - ссылки не нашел
по моему это решение (череп и кости) предлагал Sergey Ch
свойство text.PasswordChar - подобрать нужный символ и тип шрифта.
2 PaulWist - прошу прощения не класс 2 а level 2 - вот только не скажу чем отличается от level 1 - не интересовался подробнее - но назад без ввода пароля Refox не берет и exe глядел просмотрщиком - полная абракадабра ни чего общего с оригинальным exe.
2 alex11100 - если у пользователя одни exe и dll - то долго он будет мучиться для взлома. Ну а если app - то согласен взломать можно быстро.
Я с вами в полемику вступать не буду - может вы крутой кулхацкер и вам все это как 2 пальца об асфальт
2 Sergey Ch - В последнее время все больше прихожу к мысли, что защиты быть не должно...
Вы как и в большинстве случаев правы
...
Рейтинг: 0 / 0
защита от копирования и шифрование пароля в одном флаконе
    #34038459
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, действительно, что это мы тут заладили взломают/не взломают и кто круче шифруется. Я ж не для этого постил-то. Запостил я идею и ее реализацию вкратце для тех, кому надо или интересно.
...
Рейтинг: 0 / 0
защита от копирования и шифрование пароля в одном флаконе
    #34038547
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня такая идея возникла - чтобы не сравнивать результаты пароля сохраненного и введенного, можно поксорить строку, например DO MAIN или там READ EVENTS в переменной, например, StringToRun
далее полученным результатом ее опять ксорить и вставить в тексте. Содержимое этой строки можно либо задать жестко в проге либо поступать с ней также как и с паролем.

&StringToRun
on error do ShitHappens
...
Proc ShitHappens
messagebox("Incorrect version dll")
quit
retu

т.е. прога продолжит свое движение в случае правильного раскодирования и будет ошибка синтаксиса в обратном случае и сравнения одного пароля с другим не будет, хотя можно и оставить.
...
Рейтинг: 0 / 0
защита от копирования и шифрование пароля в одном флаконе
    #34039356
ORAselect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СТАС, если вопрос стоит именно так, то лучше всего читать BIOS, а не винт. Если совсем труба и нужен кодировщик, рекомендую поступить сурово:

1. Создается библиотека, в которую пишете кодированные параметры при инсталляции и привязываете к винде.
2. Каждый запуск (и несколько раз за сеанс) система проверяет, на месте ли файл и сравнивает то, что там записано, с тем, что должно быть (путем вычисления определенных контрольных сумм)
3. Если что-то не так - пишет "ПРОГРАММИСТА НУЖНО КОРМИТЬ ХОРОШО!" и вываливается, а после 5-й такой попытки предупреждает : "В следующий раз грохну базу!"
Испытано - помогает!

Но не отдавайте пароли инсталятора.
...
Рейтинг: 0 / 0
защита от копирования и шифрование пароля в одном флаконе
    #34039357
ORAselect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, упустил: процедуры шифрования тоже берет в библиотеке
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / защита от копирования и шифрование пароля в одном флаконе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]