Вопрос № 33915: Уважаемые эксперты! Как можно защитить условный переход от изменения крэкером на безусловный или обратный условный в самой программе, т.е. без запуска дополнительных exe и dll?...
Вопрос № 33.915
Уважаемые эксперты! Как можно защитить условный переход от изменения крэкером на безусловный или обратный условный в самой программе, т.е. без запуска дополнительных exe и dll?
Отвечает: DrakoN
Здравствуйте, Александр А.А.!
Вы понимаете о чем пишите...Есть операторы условного перехода есть операторы безусловного, если вы попытаетесь во время работы приложения внести изменения в код (сменить оператор) винда скажет низя блокируется другим приложением....
Есть вероятность, что если вы поместите енти операторы в отдельный модуль, то вам удасться его открыть для записи при рабочем приложении но ето мало вероятно..А проще говоря открываете нужный модуль для записи(FileOpen-вроде так), делаете изменения в исходнике и меняете операторы...
Удачи она вам пригодится....)))
--------- От Винта!
Ответ отправил: DrakoN (статус: 9-ый класс)
Отправлен: 24.01.2006, 00:31
Отвечает: _Виталий
Здравствуйте, Александр А.А.!
Во время выполнения программы можно устроить проверку своего кода и если он изменился, то можно его и поправить.....но это всё на уровне асма, а не VB. На VB, ИМХО, возможно только проверить код исполняемого файла, который находится непосредственно на диске, подправить самого себя не получиться. А если кракер использует loader(т.е. ждет когда процесс загрузится и патчит его в памяти, а не сам файл) для взлома вашей проги этот вариант отпадает. И к тому же пример который я вам показываю, будет работать только
если файл ничем не упакован.
Итак вот исходник:(на форме 1 текстбокс и кнопка)
------------------------------
Private Sub Command1_Click()
SelfCheck
Dim sTest As String
Dim sTest1 As String
sTest = "Testing"
sTest1 = Text1.Text
If sTest = sTest1 Then
MsgBox "OK"
End If
End Sub
Private Sub SelfCheck()
Dim sFname As String
Dim bByte As Byte
sFname = App.Path + "" + App.EXEName + ".exe"
Open sFname For Binary As #1
Get #1, 7643, bByte
If bByte <> 117 Then
MsgBox "Program cracked"
End
End If
Close #1
End Sub
-------------------------------
Суть проги понятна, сравнивается текстбокс с строкой "Testing". Кракеру нужно, чтоб MsgBox "OK" появлялся всегда, в независимости от введеного слова. В приложении дизасемлерный кусок, где кракер меняет код. Забив NOP'ами инструкцию перехода добиваемся нужного результата. Но подпрограмма SelfCheck() как раз и проверяет код инструкции по адресу 00401DDAh и если байт изменился, то выбрасывет соответствующее сообщение.
Но что мешает убить кракеру SelfCheck()??? :-))))))))))))))
Вообщем вывод такой, чтоб вы не делали, чтобы вы не придумали ВСЕГДА найдется человек способный это сломать. Не морочте себе голову, или думайте как защитить из ассемблера или упакуте свой файл ASProtect'ом - это хотя бы отпугнёт новичков, а для более продвинутых людей это всего лишь вопрос времени.
Приложение:
Ответ отправил: _Виталий (статус: Студент)
Отправлен: 24.01.2006, 10:43