Запрет запуска файла

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
=AGD=Doctor
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 26.10.2004 (Вт) 14:44
Откуда: Dnepropetrovsk

Запрет запуска файла

Сообщение =AGD=Doctor » 27.12.2004 (Пн) 11:02

Помогите советом. Задача: есть приложение, необходимо перехватить двойное нажатие по нему, проверить пароль/ключ реестра и принять решение - запускать/не запускать. При этом приложение уже скомпилировано в .ехе, исходника нет.
Подскажите ссылку, где можно почитать про такое
Тщеславие - мой самый любимый из грехов...

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 27.12.2004 (Пн) 18:38

В принципе, можно сделать так:

1) Отлавливаем приложение
Код: Выделить всё
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Function IsLaunched(ByVal EXEName As String) As Boolean
If FindWindow(vbNullString, EXEName) > 0 Then IsLaunched = True
End Function
Соответственно, использование -
Код: Выделить всё
If IsLaunched("NOTEPAD") Then MsgBox "Работает" Else MsgBox "Не работает"
'Предположим, что приложение - "Блокнот" (Notepad.exe)


2) Смотрим в реестр
Код: Выделить всё
Private Const REG_SZ As Long = &H1&
Private Const REG_BINARY As Long = &H3&
Private Const HKEY_CLASSES_ROOT As Long = &H80000000
Private Const HKEY_CURRENT_CONFIG As Long = &H80000005
Private Const HKEY_CURRENT_USER As Long = &H80000001
Private Const HKEY_DYN_DATA As Long = &H80000006
Private Const HKEY_LOCAL_MACHINE As Long = &H80000002
Private Const HKEY_PERF_ROOT As Long = HKEY_LOCAL_MACHINE
Private Const HKEY_PERFORMANCE_DATA As Long = &H80000004
Private Const HKEY_USERS As Long = &H80000003

Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long

Function RegQueryStringValue(ByVal hKey As Long, ByVal strValueName As String) As String
Dim lResult As Long, lValueType As Long, strBuf As String, lDataBufSize As Long
lResult = RegQueryValueEx(hKey, strValueName, 0, lValueType, ByVal 0, lDataBufSize)
If lResult = 0 Then
If lValueType = REG_SZ Then
strBuf = String(lDataBufSize, Chr$(0))
lResult = RegQueryValueEx(hKey, strValueName, 0, 0, ByVal strBuf, lDataBufSize)
If lResult = 0 Then
RegQueryStringValue = Left$(strBuf, InStr(1, strBuf, Chr$(0)) - 1)
End If
ElseIf lValueType = REG_BINARY Then
Dim strData As Integer
lResult = RegQueryValueEx(hKey, strValueName, 0, 0, strData, lDataBufSize)
If lResult = 0 Then
RegQueryStringValue = strData
End If
End If
End If
End Function

Function GetString(hKey As Long, strPath As String, strValue As String)
Dim Ret
RegOpenKey hKey, strPath, Ret
GetString = RegQueryStringValue(Ret, strValue)
RegCloseKey Ret
End Function
Соответственно, использование
Код: Выделить всё
RetVal$ = GetString(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Notepad", "License")
'предположим, ключ лежит в "HKLM\SOFTWARE\Microsoft\Notepad -> License"


3) Закрываем программу
Код: Выделить всё
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Const WM_CLOSE As Long = &H10&

Sub CloseProgram(ByVal EXEName As String)
PostMessage FindWindow(vbNullString, EXEName), WM_CLOSE, 0&, ByVal 0&
End Sub
Соответственно, использование
Код: Выделить всё
CloseProgram "NOTEPAD"
'Предположим, нам надо закрыть "Блокнот" (Notepad.exe)

Ну, а насчет того, правильный или неправильный пароль / ключ, я думаю, ты и сам разберешься :roll:

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 27.12.2004 (Пн) 19:55

[мысли]
Вот будет гемморой, если приложение MDI :)
[/мысли]

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 27.12.2004 (Пн) 22:02

:)

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 28.12.2004 (Вт) 2:33

Можна еще хук поставить на создание окон, далее узнавать какому процессу пренадлжит окно(PID), по PIDу узнать какому файлу пренадлежит процесс, потом сравнить с реестром, и если все так плохо и он нам не подходит, то Terminate Process.Тогда не будет никакой разнице какое приложение
الفيجوال بيسك الرابح

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2056
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 28.12.2004 (Вт) 12:46

Ребяты.... За саавсем небольшой срок своей жизни - я понял одно - Не надо городить на винду эмуляторов её функций.

Хочешь запретить доступ на запуск - выстави права юзеру. :wink:

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 28.12.2004 (Вт) 12:54

В FAT32 никаких прав, как я знаю, нету. А в Windows98 нету ниткаких NTFS. Так что тут проблема еще та. Если тебе надо заблокировать доступ к какому-либо используй OpenFile с параметром Exclusive.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.12.2004 (Вт) 13:06

HKCU\software\microsoft\windows\currentversion\policies\explorer
Создать dword по имени restrictrun, присвоить 1.
Создать подраздел restrictrun, в него насажать параметров:
1 "путь к софтине 1"
2 "путь к софтине 2"

Вот которые перечислены, те будут запускаться. Все остальные нет...

Это был изврат номер 1... Жестокий и беспощадный.


Изврат номер 2...
Написать проверку условия запуска на чём-нибудь типа асма, c или дельфи. Взять кусок скомпилированного кода. Дописать его в конец секции .text. Поставить первой командой точки входа прыжок на это дело. Условие проверится. Если верно, то прыжок обратно... Иначе возврат нуля...
Изврат тот ещё... Придётся, к примеру, ещё и хранить перезаписанный командой прыжка код точки входа...
Да проще переписать заново сей exe...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 28.12.2004 (Вт) 13:22

GSerg писал(а):Изврат номер 2...
Написать проверку условия запуска на чём-нибудь типа асма, c или дельфи. Взять кусок скомпилированного кода. Дописать его в конец секции .text. Поставить первой командой точки входа прыжок на это дело. Условие проверится. Если верно, то прыжок обратно... Иначе возврат нуля...
Изврат тот ещё... Придётся, к примеру, ещё и хранить перезаписанный командой прыжка код точки входа...
Да проще переписать заново сей exe...

А если прога проверяет себя на целостность, или ещё проще - читает какие-то данные из своего файла? Тады ой?
Изображение

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 28.12.2004 (Вт) 13:30

ANDLL писал(а):В FAT32 никаких прав, как я знаю, нету. А в Windows98 нету ниткаких NTFS. Так что тут проблема еще та.

В Win9x можно с помощью редактора политик (poledit?) установить для каждого пользователя список запрещенных для запуска приложений. Только обходится это все элементарно, как, имхо, и первый предложеный способ с FindWindow - банальным переименованием exe-файла.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 28.12.2004 (Вт) 14:08

А чем не подходит
Код: Выделить всё
OpenFile FileName,of,OF_SHARE_EXCLUSIVE

:?:
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2056
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 28.12.2004 (Вт) 14:15

Ага... 95... 98.... Me.... Мож ещё и DOS...

Люди... Ну кто ж под этим работает... :?

Ну поставьте хотябы 2000 и никаких проблем не будет....

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 28.12.2004 (Вт) 15:09

ALX_2002 писал(а):Ага... 95... 98.... Me.... Мож ещё и DOS...

Люди... Ну кто ж под этим работает... :?

Ну поставьте хотябы 2000 и никаких проблем не будет....
Тебе предоставить список ???
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2056
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 31.12.2004 (Пт) 10:41

2 ANDLL: Шеф..., я что то не пойму - вы этим гордитесь ? Гордитесь тем, что используете устаревшие системы ? С кучей ошибок и проблем.

Я не хочу сказать, что 2000 и XP лишены этого, но по крайней мере

они сейчас обновляются и исправляются, а патчи к 98 я что то давно

не видел....

И вообще может тогда програмировать не на VB ,а в ASMLER-е всё

писать ?

Я утрирую ? Думаю нет.

Скажите, что не все компы тянут NT системы и при малой

производительности возникают проблемы. Ну во первых 2000 грузит

систему не на много больше 98, а во вторых - апгрейдится нужно.

Время 486 ушло.... Компы устаревают за месяц...

Так что давайте не будем искать себе лишних проблем и приделывать

к телеге ракетные двигатели. И не будем придумывать защиту файла

на 98. Над этим уже подумал Microsoft и сделал политику

безопасности, нам лишь осталось научиться правильно распределять

права.... :roll:

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2056
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 31.12.2004 (Пт) 10:47

Кстати к теме.... Винда делает это на уровне ядра, а на програмном уровне всё равно всё будет уязвимо.


Одно уже переименование файла будет приводить к проблемам....

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 06.01.2005 (Чт) 19:02

ALX_2002 писал(а):2 ANDLL: Шеф..., я что то не пойму - вы этим гордитесь ? Гордитесь тем, что используете устаревшие системы ? С кучей ошибок и проблем.

Я не хочу сказать, что 2000 и XP лишены этого, но по крайней мере

они сейчас обновляются и исправляются, а патчи к 98 я что то давно

не видел....

И вообще может тогда програмировать не на VB ,а в ASMLER-е всё

писать ?

Я утрирую ? Думаю нет.

Скажите, что не все компы тянут NT системы и при малой

производительности возникают проблемы. Ну во первых 2000 грузит

систему не на много больше 98, а во вторых - апгрейдится нужно.

Время 486 ушло.... Компы устаревают за месяц...

Так что давайте не будем искать себе лишних проблем и приделывать

к телеге ракетные двигатели. И не будем придумывать защиту файла

на 98. Над этим уже подумал Microsoft и сделал политику

безопасности, нам лишь осталось научиться правильно распределять

права.... :roll:


Использование т/р Блокнот с включеным режимом "Автоматический перенос слов" значительно снижает читабельность сообщения :)
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Шнурок
Постоялец
Постоялец
 
Сообщения: 371
Зарегистрирован: 12.11.2004 (Пт) 19:28
Откуда: Санкт-Петербург

Сообщение Шнурок » 06.01.2005 (Чт) 20:04

Может через реестр windows :?:

У меня гдето лежал ключ...тока я виндовс собираюсь переустановить, поэтому все слил на болванки...

Но я точно помню...хотел написать прогу для клуба...и там я череез реестр запрещал запуск regedit
02.01.2004

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 06.01.2005 (Чт) 20:07

Кстати, в настройках безопасности DisableRegestyTools.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

    TopList