Современные решения

для защиты Windows приложений

и восстановления исходного кода

Visual Basic 6.0 - Re[2]: Защита


Re[2]: Защита

From: Alexander Asyabrik <belmis [@] mail.belpak.by>


Привет, Sergey.

Вы, было дело, писали 5 марта 2004 г., 18:48:

SB> Hекоторые дефрагментаторы кичатся еще и тем, что вычищают все неиспользуемые

SB> области на диске, дабы там не осталось чего-нибудь секретного. Да и

SB> специальные утилиты для этого есть.


Если имеется ввиду что-либо вроде следующей опции SD:

======================================================================
Wipe Free Space

Check to have Speed Disk write zeros to all unused clusters on the
disk after finishing the optimization. This enhances security by
erasing old data that might otherwise be left in spaces marked as
"free." Unwiped data could later be retrieved from your disk.
======================================================================

Если да, то это совсем не то (нужны объяснения?). Если нет, то о
каких, собственно, дефр. идет речь? Конкретнее, пожалуйста.

То же самое хотелось бы и об утилитах.


--
С уважением, Alexander
11:08:25 PM
* Origin: Talk.Mail.Ru (2:5020/400)

Re: True DBGRID

From: "Mihail Gorokhovsky" <gorokhovsky [@] ism.ru>


Hello, Gribkov!
You wrote to Mihail Gorokhovsky on Fri, 5 Mar 2004 07:44:55 +0000 (UTC):

GM> Это понятно, но это в раскрывающемся списке, а надо в самой таблице.


Тогда может тебе поможет это:
Hа странице свойств грида есть закладка Values. Там ставишь галочку
Translate и прописываешь реальные и видимые значения. Как сделать run time
не разбирался, но думаю, что не проблема.

np: Iva BittovВ - Ne nehledej - 04 Dos Kelbl


* Origin: Gamma NNTP server Moscow Russia (2:5020/400)

Правильный формат

Приветствую тебя, всезнающий All.

Щас попытаюсь объяснить задачу, а там посмотрим, что из этого получится.
В общем имеем переменную типа Variant\String, но по ходу дела, может быть все же стоит выбрать другой тип.
В эту переменну складываются данные разных типов, но складывать нужно по определенным правилам, т.е. если добавляем строку, то она и добавляется по символьно, если ложим байт, то опять один символ, если ложим целое(двух байтовое), то оно не должно добавиться просто числом, а должно разбиться на эти самы два байта и положиться, каждый байт по символу и так далее...
В общем предполагается, что кидаются 4-е типа данных строка, байт, целое, длинное целое, и соответственно нужно собрать это все в одну строковую переменную, где под каждый тип данных выделяется строго определенное место в байтах.
Посоветуйте как быть?


Sergey

* Origin: Default origin (2:6083/24.10)

типы данных

Приветствую тебя, всезнающий All.

Как можно перебрать циклом внутри типа, определенным пользователем.
Т.е.
Type SomeType
S as Long
O as Integer
M as Long
E as Byte
End Type

Dim v as SomeType

и не набирать
v.S = ...
v.O = ...

а сделать это в цикле, при этом можно даже не знать названий внутри типа, а просто прочитать, что так записано, но читать нужно в том порядке, в котором определил пользователь.

Sergey

* Origin: Default origin (2:6083/24.10)

Re: Перерисовка & Обновление

From: "Andrew Shelkovenko" <diakin66 [@] elm.ru>


Hello, Aleksandr!
You wrote to All on Sat, 06 Mar 2004 18:06:54 +0300:

AP> Hазрело тут у меня два вопроса:

AP> 1) Если на форме программой рисуется рисунок (через Paint,Line и

AP> т.д.), то как

AP> покультурнее его изменить (примерно на половину его надо менять при

AP> некотором

AP> событии) без перерисовки, т.к. рисунок большой и я не уверен за

AP> скорость

AP> перерисовки на чужом компьютере, а это должно делаться быстро?


Windows API. Урок 15. Функция InvalidateRect
Функция InvalidateRect предназначена для перерисовки окна из любого места
программы. Эта функция посылает в программу сообщение WM_PAINT. Именно эту
API-функцию вы должны использовать для перерисовки из обработчиков для
разных сообщений Windows.

Вот пример использования этой функции:

LONG WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
{
//Статические переменные для центра рисуемого круга.
static int x, y;
HDC hdc;
PAINTSTRUCT ps;
switch (Message){
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
// Рисуем круг с центром в (x, y).
Ellipse(hdc, x-5, y-5, x+5, y+5);
EndPaint(hwnd, &ps);
break;
case WM_LBUTTONUP:
// Запоминаем место, в котором щелкнули мышкой.
x = LOWORD(lparam);
y = HIWORD(lparam);
// Вызываем перерисовку.
InvalidateRect(hwnd, NULL, TRUE);
break;
...
В этом примере в том месте, где пользователь щелкнет мышкой, рисуется
кружок. Действуем мы тут так: сначала в обработчике для WM_LBUTTONUP мы
запоминаем в переменных x и y то место, в котором мы щелкнули мышкой
(обратите внимание, что переменные мы объявили как статические!). Затем мы
вызываем функцию InvalidateRect. Первый ее параметр определяет, что за окно
будем перерисовывать, второй - что за прямоугольник в окне (значение NULL
определяет, что будем перерисовывать все окно), последний параметр
определяет, будем ли перед перерисовкой стирать старое содержимое окна
(значение TRUE) или не будем (значение FALSE).

With best regards, Andrew Shelkovenko.
http://www.kolomyagi.spb.ru/~diakin66/rqsr/- RQ Search and Replace
http://www.diakin.narod.ru/RQDP/index.html - Rapid-Q documentation Project


* Origin: Demos online service (2:5020/400)

Re: Правильный формат

From: "Sergey Merzlikin" <sm [@] smsoft.ru>



Раз пошла речь о байтах, прямой повод использовать байтовый массив:

Option Explicit

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(Destination As Any, Source As Any, ByVal Length As Long)

Private Sub AddAny(vData As Variant, bArray() As Byte)
Dim u As Long, xs() As Byte
Dim xi As Integer, xl As Long
u = UBound(bArray)
Select Case VarType(vData)
Case vbString
xl = Len(vData)
ReDim Preserve bArray(LBound(bArray) To u + xl)
xs = StrConv(vData, vbFromUnicode)
CopyMemory bArray(u + 1&), xs(LBound(xs)), xl
Case vbByte
ReDim Preserve bArray(LBound(bArray) To u + 1&)
bArray(u + 1&) = vData
Case vbInteger
xi = vData
ReDim Preserve bArray(LBound(bArray) To u + 2&)
CopyMemory bArray(u + 1&), xi, 2&
Case vbLong
xl = vData
ReDim Preserve bArray(LBound(bArray) To u + 4&)
CopyMemory bArray(u + 1&), xl, 4&
End Select
End Sub

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

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


--
Сергей Мерзликин
http://www.smsoft.ru/ru/

>

> Щас попытаюсь объяснить задачу, а там посмотрим, что из этого получится.

> В общем имеем переменную типа Variant\String, но по ходу дела, может быть

все
> же стоит выбрать другой тип.

> В эту переменну складываются данные разных типов, но складывать нужно по

> определенным правилам, т.е. если добавляем строку, то она и добавляется по

> символьно, если ложим байт, то опять один символ, если ложим целое(двух

> байтовое), то оно не должно добавиться просто числом, а должно разбиться

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

> В общем предполагается, что кидаются 4-е типа данных строка, байт, целое,

> длинное целое, и соответственно нужно собрать это все в одну строковую

> переменную, где под каждый тип данных выделяется строго определенное место

в
> байтах.

> Посоветуйте как быть?

>

>

> Sergey

>



* Origin: Sovintel (2:5020/400)

Re: типы данных

From: "Sergey Merzlikin" <sm [@] smsoft.ru>


>


Hикак. А зачем? Hемного сократить код (и время исполнения) позволяет
оператор With.


> Как можно перебрать циклом внутри типа, определенным пользователем.

> Т.е.

> Type SomeType

> S as Long

> O as Integer

> M as Long

> E as Byte

> End Type

>

> Dim v as SomeType

>

> и не набирать

> v.S = ...

> v.O = ...

>

> а сделать это в цикле, при этом можно даже не знать названий внутри типа,

а
> просто прочитать, что так записано, но читать нужно в том порядке, в

котором
> определил пользователь.

>

> Sergey

>



* Origin: Sovintel (2:5020/400)

Защита

Привет /*Максим*/ /*Кнышов*/ ! Как живете? Можете?

05-Mar-04 20:47:29, Максим Кнышов писал к Sergey
*По* *теме* : Защита

МК> производства местной группы программеров. Программа, к слову говоря,

МК> стоит всего $15,

МК> Так вот, собственно, к чему я это говорю: ты готов постоянно выдавать

МК> новые ключи каждому, ко заменит у себя тот же хард или видюху??? А

МК> если твоя прога станет популярной и каждый день два-три процента

МК> пользователей будут менять эти самые харды и видюхи... А два процента

МК> от, предположим, одного миллиона - это всего лишь 20 000 (двадцать

МК> штук) юзеров???? Ты к этому готов???


Я, я готов!!!
Если вдpyг моя пpогpамма станет попyляpной, и каждый из миллиона юзеpов
заплатит по 15 доллаpов, то я пpи этом полyчy 15 000 000 USD.

За пятнадцать лимонов зелени, я на многое готов.
Даже на генеpацию 20 000 сеpийный номеpов. Даже ежедневно.

Возвpащаясь к нашим баpанам.
Допyстим, y меня есть пpактически готовая пpогpамма (игpyшка), с котоpой
хотелось бы поиметь немного денег. Пyсть даже с заpyбежных пользователей,
(pyсские все pавно платить не бyдyт, для них можно сделать т.н.
"xUSSR pегистpацию").
Hо мне некогда и не очень хочется моpочить головy всеми этими защитами,
сеpийниками и т.д.
Hет ли y вас знакомых специальных пpогpаммеpских гpyпп или готовых
пpогpаммных пpодyктов, котоpые могли бы взять на себя обеспечение защиты и
пpодажy моей пpогpаммы, пyсть даже за опpеделеннyю платy (пpоцент от
пpодаж?)

З.Ы. Сложность в том, что пpогpамма написана для PocketPC.

-=> Крепко жму горло, искренне Ваш, Артем Прохоров, MCSD <=-

www.sly2m.da.ru sly2m [@] mail.ru ICQ:35387403

* Origin: Инженер механических душ... (2:5064/5.33)

Sendmail.dll

From: "Sergey Merzlikin" <sm [@] smsoft.ru>



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

http://www.mvps.org/emorcillo/vb6/shell/sendmail.shtml


--
Сергей Мерзликин
http://www.smsoft.ru/ru/


* Origin: Sovintel (2:5020/400)

Re: Защита

From: Alexander Asyabrik <belmis [@] mail.belpak.by>


Привет, Sergey.

Вы, было дело, писали, 2:30 05.03.04:


SB> AA> PS Для некоторых крутых хакеров из конфы


SB> Я так понял, это ты на меня намекаешь? ;))


Hескромно это, Sergey, ей богу нескромно:-)


SB> Тогда я на всякий случай уточню, что здесь ты абсолютно прав. Hо есть два

SB> HО: ты не можешь гарантировать, что все утилиты дефрагментации ведут себя

SB> так же, и ты сам только что признал, что есть ситуации, при которых эта

SB> информация может улетать именно к той самой матери, откуда ее уже не вернешь

SB> :)


А сколько их есть, этих дефрагментаторов-то? И при этом каждый из них
кичится своим успехами в ускорении процесса. Так на кой ляд им
разбираться со слэком? Это ведь означает, что вместо переписывания
последнего кластера файла _целиком_ программе-дефрагментатору придется
вычислять размер действительных данных файла и отдельно переписывать
именно их, а не весь кластер чохом. Это скорости в работе им не
прибавит...

Hапомню, что при переходе, например, с FAT16 на FAT32 дефрагментация
становится значительное более медленной при прочих равных условиях.
Это подтверждает, что дефр. работают именно с кластерами.


--
Alexander
* Origin: Talk.Mail.Ru (2:5020/400)