Господа! Кто может помочь? Есть прога 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 все идет не в то русло.
47cd35 __vbaVarCmpEq 47cd43 __vbaVarAnd 47cd4a __vbaBoolVar Это походу он типа смотрит true или false. If shit = true MsgBox("Ok!") End If
Если смотреть Smartcheck-ом, то фигня какая-то получается, там идет сравнение моей строки с пустой, моя не пустая, а возвращается True...
Да, кроме того. Что интересно было бы попробовать. Если ты je на jne поменяешь - то как ведет себя прога? Запускается?
Вообщем при изменении 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, ведь строка не пустая!
Наконец-то вспомнил, что имею дело с типом Variant, разобрался с аргументами. Теперь правда наоборот ситуация. В первый аргумент __vbaVarAnd заносится True в строке :0047CC8B mov word ptr [ebp+FFFFFF04], FFFF а второй аргумент как раз результат сравнения vbaVarCmpEq, но почему-то когда моя строка пустая, то все равно False. Может в Васике есть какой-то хитрый фокус - специальное обозначение пустой строки в виде последовательности байтов.
Проблема разрешилась! С какого-то хрена SmartCheck иногда при работе с типом Variant содержащим строковое значение показывает что это дескать пустая константа(Const ""). Поэтому-то меня и сбила с толку логика проги. Это че баг типа чтоли? у меня версия SmartCheck 6.20 RC2. Как лечить? Ща попробую в другой ОСи. ПЫСЫ Кейген вот-вот выйдет, теперь использую только ИДУ!
> ПЫСЫ Кейген вот-вот выйдет, теперь использую только ИДУ! Кажется для VB появился декомпилятор, вот только я не знаю что он умеет, можно почитать соответствующий топик на exetools.. _http://www.exetools.com/forum/showthread.php?t=4912
Все! Кейген готов кому надо - обращайтесь! Asterix Спасибо за сцыль. Посмотрел я. Да автор декомпилятора широко размахнулся, дай бог ему энтузиазма. В настоящий момент native код не поддерживается, только формы выдирает, да и с p-code с горем пополам, но это только пока