Сейчас на форуме: _MBK_, ut2004, vsv1 (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Защита констант
Посл.ответ Сообщение

Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 14 января 2007 17:46
· Личное сообщение · #1

Доброго времени суток.
Подскажите пожалуйста, как решить такую задачу: есть программа на С++, использующая MFC(Visual Studio 7.0). В программе используется переменная типа CString. (например CString str1 = "ABCD";). Так вот, каким образом можно(если можно вообще) сделать так, чтобы её НЕ СМОГЛИ ИЗМЕНИТЬ в EXE-файле на другую переменную? Да, если CString более уязвим, чем, например, char, подскажите.
Заранее благодарю за любые подсказки.
Алексей.




Ранг: 120.9 (ветеран), 5thx
Активность: 0.080
Статус: Участник
Programmer and reverser

Создано: 16 января 2007 06:36
· Личное сообщение · #2

в Си нет строкового типа как такового. Это просто массив элементов типа char с null-символом на конце. Так что разницы нет. А вообще можно просто поксорить (xor) строки для усложнения анализа. Хотя это мало что даст, если не чайник будет ломать. А вообще можно пройтись по проге протектором

-----
Уважайте других и пишите грамотно.




Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 16 января 2007 06:49
· Личное сообщение · #3

Так юзайте MFC, ксорьте, и до Ваших констант уже никому не будет дела.
Контрольную сумму константы посчитайте (лучше самописным алгоритмом) и так же юзайте MFC

-----
Я медленно снимаю с неё UPX... *FF_User*




Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 16 января 2007 08:07
· Личное сообщение · #4

Спасибо за советы. Протектором пройдусь. А где можно прочитать про "ксорьте" и подсчёт контрольных сумм?
Алексей.




Ранг: 120.9 (ветеран), 5thx
Активность: 0.080
Статус: Участник
Programmer and reverser

Создано: 16 января 2007 08:19
· Личное сообщение · #5

Про "ксорьте" почитай в учебниках по программированию) XOR - это такая битовая операция. Исключающее ИЛИ.
А о подсчете контрольных сумм... Ну почитай что-нить про хеш-функции. Гугл рулит) Там все это дело и ищи.

-----
Уважайте других и пишите грамотно.




Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 16 января 2007 09:46
· Личное сообщение · #6

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

-----
Я медленно снимаю с неё UPX... *FF_User*




Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 16 января 2007 13:51
· Личное сообщение · #7

"Лучше уж протектором по MFC - никто близко не подойдет"
Что, MFC сложнее ломается, чем чистый С++ например?

"AlexDL, если будешь продавать прогу, то желательно сначала купить протектор."
А есть разница в качестве защиты между взломанным протектором и купленным?



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 16 января 2007 22:20
· Личное сообщение · #8

AlexDL пишет:
Что, MFC сложнее ломается, чем чистый С++ например?

Для чистого С++ имена функций(из DLL) видны, а для MFC нужно иметь иструменты, которые не на каждом углу лежат и плюс обилие версий этого MFC.




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 17 января 2007 00:23
· Личное сообщение · #9

AlexDL пишет:
делать так, чтобы её НЕ СМОГЛИ ИЗМЕНИТЬ в EXE-файле на другую переменную?


всё равно изменят) не парься.. лучше пиши прогу

-----
[nice coder and reverser]




Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 17 января 2007 08:34
· Личное сообщение · #10

"всё равно изменят) не парься.. лучше пиши прогу"
В общем эта переменная является номером кошелька WM(моего). Те имеет вид: Z8576...). Хранится как CString str; str.Format("Z8576..."); , потом он "забивается" в ShellExecute(.....) для открытия WM Keeper
А что если численную честь кошелька хранить в int? Тогда будем иметь:
int pock = 8576...;
CString str; str.Format("Z%d",pock");
Усложнит ли это его изменение?
Да, и как можно сделать, чтобы в ShellExecute(.....) нельзя было подставить свои данные?
Поможет ли макроподстановка ShellExecute?
Одни вопросы в общем)).
Подскажите пожалуйста, что тут лучше сделать.
ps. Протектором, конечно, пройдусь. Но ведь это не сильно надёжно, да и лучшая защита своей ведь считается.



Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 17 января 2007 08:35
· Личное сообщение · #11

"Для чистого С++ имена функций(из DLL) видны, а для MFC нужно иметь иструменты, которые не на каждом углу лежат и плюс обилие версий этого MFC."
В предыдущем посте я упомянул макроподстановку(те #define _MFCFUNC _MYFUNC)
Поможет ли это усложнить "забивание" своих анных в функцию?
Алексей.




Ранг: 353.0 (мудрец)
Активность: 0.370
Статус: Участник
resreveR

Создано: 17 января 2007 08:38
· Личное сообщение · #12

все равно подменят если надо будет - не парься

-----
Тут не могла быть ваша реклама




Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 17 января 2007 08:42
· Личное сообщение · #13

Так а к чему тогда вообще защищать проги, если всё подменят? Должны же быть способы защиты, чтобы нельзя было подменить.




Ранг: 120.9 (ветеран), 5thx
Активность: 0.080
Статус: Участник
Programmer and reverser

Создано: 17 января 2007 09:24
· Личное сообщение · #14

ну если найдешь или напишешь криптор, который никто снять не сможет, то будет такой способ.

-----
Уважайте других и пишите грамотно.




Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 17 января 2007 09:37
· Личное сообщение · #15

AlexDL пишет:
А есть разница в качестве защиты между взломанным протектором и купленным?

Да, есть. Купленый приватный протектор понадежнее спижженого, тем более, если ты делаешь свою прогу платной и собираешься её продавать, то сама библия программиста велит: "Не юзайте пижженый прот, да не захачены будете."

-----
Я медленно снимаю с неё UPX... *FF_User*





Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 17 января 2007 10:11
· Личное сообщение · #16

AlexDL пишет:
Да, и как можно сделать, чтобы в ShellExecute(.....) нельзя было подставить свои данные?

Нельзя. Если юзаешь апи, то оно банально перехватывается и аргументы меняются на желаемые, вне зависимости от того, как эта строка образуется.




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 17 января 2007 10:51
· Личное сообщение · #17

AlexDL ну если на то пошло, то используй какие нибудь ариф. операции с номером, а лишь
потом выводи. ну можно ещё и целостность этого участка проверять на наличие изменений...

-----
[nice coder and reverser]




Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 17 января 2007 19:54
· Личное сообщение · #18

"AlexDL ну если на то пошло, то используй какие нибудь ариф. операции с номером, а лишь
потом выводи. ну можно ещё и целостность этого участка проверять на наличие изменений..."
Это я так понимаю, тоже сломають, лишь отсрочка по времени будет?

"Купленый приватный протектор понадежнее спижженого"
Хорошо, это важно знать.

"Нельзя. Если юзаешь апи, то оно банально перехватывается и аргументы меняются на желаемые, вне зависимости от того, как эта строка образуется."
А если не API использовать, а переписать ShellExecute на чистый С++, те свою ф-ию сделать, это поможет?




Ранг: 353.0 (мудрец)
Активность: 0.370
Статус: Участник
resreveR

Создано: 17 января 2007 22:04
· Личное сообщение · #19

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

-----
Тут не могла быть ваша реклама




Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 18 января 2007 00:23 · Поправил: asd
· Личное сообщение · #20

AlexDL пишет:
А если не API использовать, а переписать ShellExecute на чистый С++, те свою ф-ию сделать, это поможет?

Во весело будет, если каждая прога за собой начнёт таскать свои ShellExecute, LoadLibrary и т.д.

AlexDL
Int 2e юзай



Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 18 января 2007 09:13
· Личное сообщение · #21

"Int 2e юзай"
А что это такое?

"еще раз говорю - если очень надо будет - все равно сломают. в аспре вон константы несколько раз пошифрованы и контр. сумма проверяется, и все подменяется на ура.."
Понятно, в общем, что можно сделать - это отсрочить время взлома, те усложнить его.
Либо другой подход - использовать специфику работы проги. Моя прога в нете должна работать, общаться с сервером. Видимо разумно ключевые ф-ии переложить на серверную часть, чтобы взлом проги с целью "стащить" её себе стал бессмысленным.
Алексей.




Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 18 января 2007 09:55
· Личное сообщение · #22

AlexDL пишет:
А что это такое?

Прерывание, запрос в нулевое кольцо. В зависимоти от содержания регистров будет осуществляться вызов различных функций. Ищи в гугле - инфы дох..я

AlexDL пишет:
Видимо разумно ключевые ф-ии переложить на серверную часть, чтобы взлом проги с целью "стащить" её себе стал бессмысленным.

Такой подход всегда хорощ для защиты. Только не будет ли она проэмулирована на клиентской стороне? (Что надо ты не сказал, так что мыслю абстрактно =) )



Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 18 января 2007 10:35
· Личное сообщение · #23

Спасибо за советы. Многое прояснилось.
Алексей.


 eXeL@B —› Вопросы новичков —› Защита констант
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати