| Посл.ответ | 
Сообщение | 
 Ранг: 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.08↘0 Статус: Участник Programmer and reverser 
 
 | 
Создано: 16 января 2007 06:36   · Личное сообщение ·  #2 
в Си нет строкового типа как такового. Это просто массив элементов типа char с null-символом на конце. Так что разницы нет. А вообще можно просто поксорить (xor) строки для усложнения анализа. Хотя это мало что даст, если не чайник будет ломать. А вообще можно пройтись по проге протектором  
----- Уважайте других и пишите грамотно.  | Сообщение посчитали полезным:  | 
 Ранг: 203.3 (наставник) Активность: 0.22↘0 Статус: Участник 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.08↘0 Статус: Участник Programmer and reverser 
 
 | 
Создано: 16 января 2007 08:19   · Личное сообщение ·  #5 
Про "ксорьте" почитай в учебниках по программированию) XOR - это такая битовая операция. Исключающее ИЛИ.
 А о подсчете контрольных сумм... Ну почитай что-нить про хеш-функции. Гугл рулит) Там все это дело и ищи.
 ----- Уважайте других и пишите грамотно.  | Сообщение посчитали полезным:  | 
 Ранг: 203.3 (наставник) Активность: 0.22↘0 Статус: Участник 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.43↘0 Статус: Участник 
 
 | 
Создано: 16 января 2007 22:20   · Личное сообщение ·  #8 
AlexDL пишет:
 Что, MFC сложнее ломается, чем чистый С++ например?  
 Для чистого С++ имена функций(из DLL) видны, а для MFC нужно иметь иструменты, которые не на каждом углу лежат и плюс обилие версий этого MFC.
   | Сообщение посчитали полезным:   | 
  Ранг: 990.2 (! ! !), 380thx Активность: 0.68↘0 Статус: Модератор 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.37↘0 Статус: Участник resreveR 
 
 | 
Создано: 17 января 2007 08:38   · Личное сообщение ·  #12 
все равно подменят если надо будет - не парься
 ----- Тут не могла быть ваша реклама  | Сообщение посчитали полезным:  | 
 Ранг: 1.2 (гость) Активность: 0=0 Статус: Участник 
 
 | 
Создано: 17 января 2007 08:42   · Личное сообщение ·  #13 
Так а к чему тогда вообще защищать проги, если всё подменят? Должны же быть способы защиты, чтобы нельзя было подменить.
   | Сообщение посчитали полезным:  | 
  Ранг: 120.9 (ветеран), 5thx Активность: 0.08↘0 Статус: Участник Programmer and reverser 
 
 | 
Создано: 17 января 2007 09:24   · Личное сообщение ·  #14 
ну если найдешь или напишешь криптор, который никто снять не сможет, то будет такой способ.
 ----- Уважайте других и пишите грамотно.  | Сообщение посчитали полезным:  | 
 Ранг: 203.3 (наставник) Активность: 0.22↘0 Статус: Участник UPX Killer -d 
 
 | 
Создано: 17 января 2007 09:37   · Личное сообщение ·  #15 
AlexDL пишет:
 А есть разница в качестве защиты между взломанным протектором и купленным? 
Да, есть. Купленый приватный протектор понадежнее спижженого, тем более, если ты делаешь свою прогу платной и собираешься её продавать, то сама библия программиста велит: "Не юзайте пижженый прот, да не захачены будете."
 ----- Я медленно снимаю с неё UPX... *FF_User*  | Сообщение посчитали полезным:   | 
  Ранг: 240.5 (наставник) Активность: 0.19↘0 Статус: Участник Author of ACKiller  
 
 | 
Создано: 17 января 2007 10:11   · Личное сообщение ·  #16 
AlexDL пишет:
 Да, и как можно сделать, чтобы в ShellExecute(.....) нельзя было подставить свои данные? 
Нельзя. Если юзаешь апи, то оно банально перехватывается и аргументы меняются на желаемые, вне зависимости от того, как эта строка образуется.
   | Сообщение посчитали полезным:   | 
  Ранг: 990.2 (! ! !), 380thx Активность: 0.68↘0 Статус: Модератор 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.37↘0 Статус: Участник resreveR 
 
 | 
Создано: 17 января 2007 22:04   · Личное сообщение ·  #19 
еще раз говорю - если очень надо будет - все равно сломают. в аспре вон константы несколько раз пошифрованы и контр. сумма проверяется, и все подменяется на ура..
 ----- Тут не могла быть ваша реклама  | Сообщение посчитали полезным:  | 
 Ранг: 162.2 (ветеран) Активность: 0.09↘0 Статус: Участник 
 
 | 
Создано: 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.19↘0 Статус: Участник Author of ACKiller  
 
 | 
Создано: 18 января 2007 09:55   · Личное сообщение ·  #22 
AlexDL пишет:
 А что это такое? 
Прерывание, запрос в нулевое кольцо. В зависимоти от содержания регистров будет осуществляться вызов различных функций. Ищи в гугле - инфы дох..я
 AlexDL пишет:
 Видимо разумно ключевые ф-ии переложить на серверную часть, чтобы взлом проги с целью "стащить" её себе стал бессмысленным. 
Такой подход всегда хорощ для защиты. Только не будет ли она проэмулирована на клиентской стороне? (Что надо ты не сказал, так что мыслю абстрактно =) )
   | Сообщение посчитали полезным:   | 
 Ранг: 1.2 (гость) Активность: 0=0 Статус: Участник 
 
 | 
Создано: 18 января 2007 10:35   · Личное сообщение ·  #23 
Спасибо за советы. Многое прояснилось.
 Алексей.
   | Сообщение посчитали полезным:  |