· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.RESEARCH —› Кейген для проги на VB6

Посл.отвђт Сообщенiе


Дата: Окт 11, 2004 17:50:06

Господа! Кто может помочь? Есть прога ExpandIT Backup Utility(_http://www.expandit.com/products/backup_utility/downloads/def ault.htm_)
Написана на VB6. Бит хаком лечить не хочу, хочу сделать кейген. Во взломе софта есть некоторый опыт. Пользую SmartCheck и WDasm32 (для Vb вполне достаточно, я думаю).
В принципе я уже прорюхал практически весь алгоритм проверки лицензии, но в одном месте в коде я застрял - не могу разобраться что к чему.
Вообщем че происходит при запуске проги - она выдает окно с сообщением о том, что лицензия не найдена и будет работать в демо режиме. Анализ кода вскрыл, что прога берет значения из реестра
HKLM\SOFTWARE\ExpandIT\Backup Utility\2.0\LicenseInfo
HKLM\SOFTWARE\ExpandIT\Backup Utility\2.0\LicenseSignature
оба строковые. Причем в LicenseSignature пишется шестнадцатиричные значения. Далее в прогу вшит интересный ключ:
"&\F:\Development\Projects\Catfish\Manager"(без кавычек)
Далее начинается цикл. Берется asc значение первого символа ключа
(&=38 вроде) и два хексовых символа LicenseSignature и делается xor.
далее полученное значение переводится в hex и запоминается. Далее цикл продолжается для всех символов ключа(берется 2 символ ключа и 3-4 LicenseSignature...), но LicenseSignature длинее ключа(это я понял косвенно) поэтому далее когда ключ кончается, все начинается с 1-го символа и т.д. пока не будет достигнут конец LicenseSignature.
В итоге после каждой такой операции накапливается строка хексовых значений(назовем ее xh_res). И вот собственно приближаюсь к тому месту в программе, где не могу понять почему делается переход. Там хешируются(вызов функции hash из библеотеки expandit.dll) 1-968 символы xh_res и запоминаются, а потом 969-1000 символы сравниваются с пустой строкой и происходит какое-то невыполнение условия, после которого прога уже перестает проверять дальше лицензию и начинает готовиться к показу демо-окна. Хеш оставим на потом, т.к. бодяга с ним будет дальше.

Вот это место мне и непонятно, почему там что-то не выполняется.
Это здесь
47cd35 __vbaVarCmpEq
47cd43 __vbaVarAnd
47cd4a __vbaBoolVar

И вследствии этого после сравнения
47cd87 cmp di, si
все идет не в то русло.


Дата: Окт 12, 2004 00:52:53

неужели никто не поможет?!


Дата: Окт 12, 2004 02:35:39

Код, брат Горацио, код, а не твои измышлизмы!


Дата: Окт 12, 2004 02:42:25

Вот здесь тот кусок. сделал атачем.

468864941__asm.txt


Дата: Окт 12, 2004 02:48:48

47cd35 __vbaVarCmpEq
47cd43 __vbaVarAnd
47cd4a __vbaBoolVar

Это походу он типа смотрит true или false. :)

If shit = true
MsgBox("Ok!")
End If


Дата: Окт 12, 2004 03:02:13 · Поправил: merad

Если смотреть Smartcheck-ом, то
фигня какая-то получается, там идет сравнение моей строки с пустой, моя не пустая, а возвращается True...


Дата: Окт 12, 2004 22:03:07

Ты в айсе посмотри на аргументы vbaVarCmpEq.


Дата: Окт 12, 2004 22:03:52

Да, кроме того. Что интересно было бы попробовать. Если ты je на jne поменяешь - то как ведет себя прога? Запускается?


Дата: Окт 13, 2004 04:55:50

Вообщем при изменении je на jne прога запускается как обычно,т.е. в демо-режиме.
А как посмотреть аргументы в IDA, с учетом что это VB?

__vbaVarCmpEq(VARIANT:String:"f3e6ac81...", VARIANT:Const String:"") returns DWORD:12F8E4
__vbaVarAnd(VARIANT:Boolean:True, VARIANT:Boolean:False) returns DWORD:12F8D4
__vbaBoolVar(VARIANT:Boolean:False) returns DWORD:0

Вот вырезка из Smartcheck:
Но непонятно почему первый аргумент __vbaVarAnd равен True, ведь строка не пустая!


Дата: Окт 13, 2004 16:36:09

Наконец-то вспомнил, что имею дело с типом Variant, разобрался с аргументами. Теперь правда наоборот ситуация.
В первый аргумент __vbaVarAnd заносится True в строке

:0047CC8B mov word ptr [ebp+FFFFFF04], FFFF

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


Дата: Окт 14, 2004 23:27:01

Проблема разрешилась! С какого-то хрена SmartCheck иногда при работе с типом Variant содержащим строковое значение
показывает что это дескать пустая константа(Const "").
Поэтому-то меня и сбила с толку логика проги.
Это че баг типа чтоли? у меня версия SmartCheck 6.20 RC2.
Как лечить? Ща попробую в другой ОСи.

ПЫСЫ Кейген вот-вот выйдет, теперь использую только ИДУ!


Дата: Окт 15, 2004 02:37:33 · Поправил: Asterix

> ПЫСЫ Кейген вот-вот выйдет, теперь использую только ИДУ!

Кажется для VB появился декомпилятор, вот только я не знаю что он умеет, можно почитать соответствующий топик на exetools..
_http://www.exetools.com/forum/showthread.php?t=4912


Дата: Окт 15, 2004 03:22:13

Все! Кейген готов кому надо - обращайтесь!
Asterix
Спасибо за сцыль. Посмотрел я. Да автор декомпилятора широко размахнулся, дай бог ему энтузиазма. В настоящий момент native код не поддерживается, только формы выдирает, да и с p-code с горем пополам, но это только пока :-)


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.057