Pl sql developer 11 serial number
Dating > Pl sql developer 11 serial number
Download links: → Pl sql developer 11 serial number → Pl sql developer 11 serial number
Grammar Mastery Create Displacement Map Photo.. ADD ESI, EAX 0040F43A. Давно не попадались интересные защиты, более-менее объемные, с нетривиальными алгоритмами, способные отвлечь меня в напряженные моменты учебы.
Если немного напряжем моск можем заметить закономерность. Genius handbook part part a. CMP ESI, 3 00B2722F. PL SQL Developer crack focuses on ease of use, responsible quality and productivity, key advantages during Oracle application development. Для удобства вот список локальных переменных и их имена. Why did this happen? Далее видим получение длины строки и деление пополам. Absolute For Mac 3 Episoe 10 The Overlooke Jailer Keygen pl sql developer 11 Gieon Raymond rei petite teen he has to go away Deborah pl sql developer 8 crack keygen that he cant her there Me be unique Me Are nee kegen what pl sql developer 8 crack keygen o now And pl sql developer 8 crack keygen pregnant to song them that she is one of the goo eats then she shoul crcak Safer. There are a number of standard. Oracle PL Sql Developer cannot find my tnsnames. Нам нужно после 11 получить 00.
Итого имеем закодированный байт. Но это только один момент.
Pl Sql Developer 11.0.1 Serial Number Key - Download the Book: Tobira Grammar Power Exercises For Mastery PDF For Free, Preface: This course is designed to review the grammar you have learned in...
Реверсинг и кейгенинг pl sql developer в прямом эфире Очень удобно, когда все крэкерские инструменты, книги и статьи в одном месте. Используйте сборник от EXELAB -. ЕСЛИ ВЫ ИСПОЛЬЗУЕТЕ ЭТИ ДАННЫЕ С КОРЫСТНОЙ ЦЕЛЬЮ ОБХОД ЗАЩИТЫ, ИСПОЛЬЗОВАНИЕ СГЕНЕРИРОВАННОГО КЛЮЧА, ПОЛУЧЕННОГО НЕ ОТ ПРОИЗВОДИТЕЛЯ , ВЫ БЕРЕТЕ ВСЮ ОТВЕТСТВЕННОСТЬ ПЕРЕД ЗАКОНОМ НА СЕБЯ. Вступление: Понадобилась по учебе софтина для работы с oracle db. SQLDeveloper не устроил, т. На форуме вспомнилась тема не помню кого, про поиск кряка к этой софтине. Тема правила нарушала, но название программки запомнил. Скачал, поюзал - понравилась. Плюсов много, за всеми ими смотрите сайт производителя. Вобщем программа полезная и удобная. Но из-за разгара учебы трогать ее не стал - только поправил триал патчем. Ну и в сессию одолело желание покопаца глубже. Писал статью так сказать в прямом эфире - по ходу прогресса дописывал то, что узнавал. В итоге статья по сути сожержит процесс понимания мной защиты. С недочетами, ошибками, заблуждениями. Начал писать естсественно до удачного взлома, так что если бы кейген не получился - статья была бы не закончена. Про размер статьи - написал ровно столько, сколько тербовалось для понимания защиты, так же извиняйте за объемность. Ну и последнее - если вы работаете с oracle db и используете pl sql developer, то не пожалейте денег и купите лицензию - она того стоит. Инструментарий ничем необычным не выделяется: OllyDbg, IDA, Microsoft Visual Studio. Чем упакована честно говоря уже забыл - распаковал давно, чтоб снять триал. Запускаем plsqldeveloper и открываем диалог регистрации. Будем использовать следующие регистрационные данные: product code - rascal serial number - QWERTYUI password - password Поймать процесс проверки легко через поиск строки о неудачной регистрации: 00B27385. MOV ESI, EAX 00B27224. TEST ESI, ESI 00B27226. CMP ESI, 3 00B2722F. В esi кладется регистр eax, а он очевидно возвращается из функции. Запомним, что функция должна вернуть 3, чтобы регистрация удалась. Дальше получение из него данных. TEST AL, AL 00AFC666. CALL MOV EBX, 1 00AFC693. Далее начинается самое веселое. CALL В esi лежит указатель на структуру регистрации. Создается она тут: 005F4FEA. Суть ее установить не удалось. Делается это тут: 00B276D5. Заходим внутрь проверки 005F3A3C. Для удобства вот список локальных переменных и их имена. Так проще будет ориентироваться в коде. TEST EAX, EAX 005F3A71. SUB EAX, 4 005F3A76. Это типичная работа с vcl строками. По адресу str-4 лежит DWORD, в котором хранится длина стркои. А так как проверка строится на строках - нужно знать врага в лицо, чтобы не отвлекаться на такие мелочи. XOR EAX, EAX 005F3AB1. JE ; то ошибка регистрации 005F3B24. Это первое требование, которое надо выполнить. Далее идет преобразование строки в набор 0 и 1. На выходе имеем строку из 0 и 1. Для rascal имеем следующее: 100110000010100000100000001101. Теперь осталось понять, что логически делает этот код. По сути этот цикл - нечто вроде декодирования из системы счисления с другим основанием. Аналог base64, а точнее это base32. Из сокращенного алфавита получаем строку битов. Это значит что надо копать дальше - разбирать, какие биты для чего используются. Биты наверняка должны быть преобразованы в человеческие символы, разделены например на слова, а дальше будет работа уже с обычными аски кодами. Так ли это, увидим дальше. Я написал программку для выбора всех вариантов индексов, итого вот что получилось: a - 00000 b - 00001 c - 00010 2 - 00011 d - 00100 e - 00101 f - 00110 3 - 00111 g - 01000 h - 01001 j - 01010 k - 01011 4 - 01100 l - 01101 m - 01110 n - 01111 p - 10000 5 - 10001 q - 10010 r - 10011 s - 10100 6 - 10101 t - 10110 u - 10111 7 - 11000 v - 11001 w - 11010 8 - 11011 x - 11100 y - 11101 9 - 11110 z - 11111 Это пригодится в дальнейшем. JNZ Проверка наличия в длине младшего бита, т. SUB EAX, 4 005F3839. Далее видим получение длины строки и деление пополам. MOV EDX, EAX 005F385D. ADD EDX, EDX 005F385F. MOV ECX, 2 005F3865. CALL Опять vcl функция. ECX - длина строки, которую извлекаем. EDX - индекс в строке, откуда начинается вырезаемая подстрока. В стеке - адрес для получения указателя на извлеченную подстроку. MOV ESI, 2 005F3872. ADD ESI, EAX 005F38B8. XOR EAX, EAX 005F38DF. Это типа управляющие символы. Каково должно быть значение, сколько таких сумм надо - пока не известно. Для проверки управляющих кодов можно немного изменить строку, отдаваемую на проверку. Смотрим на таблицу соответствия битов символам алфавита. Нам нужно после 11 получить 00. Добавляем еще p - rascalpp. Это следующее важное условие про прохода регистрации. Теперь нада подумать, как избежать таких оплошностей. Для этого пригодится приведенная выше таблица. Казалось бы, все просто - смотрим, в каких символах алфавита нету подряд идущих 00. Не использовать их после 11 и все. Но это только один момент. Если мы посмотрим на соответствие алфавита бинарным строчкам, увидим, что длина бин строк - 5 символов. А это значит, что будут неприятные моменты стыка двух букв. Значит нада учитывать пятерки не отдельно, а сгруппированными по двое. Вспоминая ограничение четности можно предположить, что единицей данных служат как раз таки пары символов. И вполне вероятно, что разделитель у кадой пары должен быть на конце. В общем получится следующая картина - 2 символа по 5 бит, итого 10 бит. Итого имеем закодированный байт. Но это пока только предположения. Для интереса меняем строку rascar: 10 01 01 10 00 00 10 10 10 11 - это первый блок. MOV EAX, EBX 005F3B6F. JNZ SHORT ; то инверсии бита не будет 005F39D8. CMP EBX, EAX 005F3A09. После этой функции опять вызовется расчет суммы и проверка парных нулей в оставшемся блоке. Какие проблемы нас будут ждать? Главная задача - после инвертирования не получить пары нолей. Так как мы формировали строку из этого же принципа, то чтобы получить пару нулей должно произойти инвертирование только одного бита из пары. Например было у нас 01, и проинвертировалась единица. Получили 00, и прощай регистрация. Но в коде вроде как инвертится все... Есть тут подлянка 005F39BF. JNZ SHORT ; то инверсии бита не будет Итак, как видим summ используется как маска инвертирования. Чтобы обойти этот неприятный момент делаем пары в pcbs одинаковыми. Вот вроде бы и достигли цели. Но и это еще не все. Есть еще одно место: 005F39C3. CMP EDI, 80 005F39C9. MOV EDI, 1 Когда edi достигнет значения 1000 0000, он будет сброшен в 0000 0001, и все бы ничего, но к summ добавится число 3. В summ нарушена парность - 11 и 00. Опять пары нулей и единиц. Зная маску мы могли бы подобрать правильный набор pcbs 0 1 1 0 0 1 1 0 - mask 1 1 1 1 1 0 1 1 - result --------------- 1 0 0 1 1 1 0 1 - pcbs. Маской для инверсии служит младший байт в summ. Summ - это сумма от первого блока. Поэтому мы можем получить значение маски заранее. И знать все ее изменения. Например: Вернемся к нашим баранам. Наша задача - выйти из функции разбора битовой строки без ошибки и продолжить проверку регистрации. Я немного пошаманил с блокнотом и программой и получил следующие выражения: 00011 01010 10101 00011 - 2j62. Ответ ниже Я построил таблицу преобразований битов с учетом маски, а так же с учетом приращения маски на 3 при достижении edi числа 0x40. В качестве начального значения маски взято число 01000000 см. Только считался бред, и отнюдь не 9 блоков данных. Ни в исходной строке, ни в инвертированной. И на самом деле невозможно подобрать так эти строки, чтобы 11 был там, где ему вроде как положено быть. Либо первая строка будет правильной, либо последняя, но не обе сразу. Но это навело меня на мысль... MOV EAX, EBX 005F3B6F. MOV EAX, EBX 005F3B76. TEST AL, AL 005F3B7D. JE Я затачивал параметры под первую проверку. Её возвращаемое значение не проверяется. Тогда зачем она отрабатывает? Да она просто считает summ. А дальше строка инвертируется используя этот самый summ. В следующей проверке используется инвертированная строка и учитывается возвращенное значение. О чем это говорит? О том, что строка с данными ожидается инвертированной. Значит правильно отформатированной должна быть строка после инверта, а на вход может быть любого вида. Дописываем к списку требований ключа... Берем число, которое я закодировал. Теперь перепишем эту строку в соответствии с указаниями выше 00 01 10 10 10 10 10 10 00 11 - 1 0 0 0 0 0 0 - end Вот и все. Если вы поотлаживаете, то увидите, что summ будет равно 0x40h, что и есть 1000000b. Теперь мы знаем, как кодировать человеческие числа в удлиненные. Теперь к вопросу о функции 005F3B6F. Значит надо разобрать алгоритм дешифрования и обратить его. Хотя если посмотреть работу функции можно увидеть, что она симметричная, и нам достаточно рипнуть ее код. За это отвечает первая проверка. Ура, мы вышли из функции разбора ключа правда не рассмотрели еще один путь выполнения, когда блоков 8, а не 9 : 005F5030. TEST AL, AL 005F5037. TEST AL, AL 005F5059. MOV AL, 1 005F4F9D. MOV ECX, 1D4 ; число элементов в массиве 468 005F4FA2. XOR EAX, EAX ; иначе обнуление и выход 005F4FAD. RETN Здесь все просто. Но пока нас вполне устроит значение 5... Следующая проверка будет злее. MOV EAX, ESI 005F507B. MOV EBP, ESP 005F3C97. ADD ESP, -8 005F3C9A. MOV ECX, EAX 005F3C9D. TEST EBX, EBX 005F3CA2. XOR EAX, EAX ; иначе пишется ноль в QWORD 005F3CA6. MOV CX, 1 005F3CCF. RETN Используется измененный v6. Обращаем внимание на деление. Если немного напряжем моск можем заметить закономерность. Делится на число месяцев в году. Вполне логично предположить, что тут какой-то замут со сроком лицензии. Посмотрим, что творится дальше. Видим интересное число 1999, похожее на год. Дальше идет вызов еще одной функции - plsqldev. MOV EDI, ECX ; 0040F468. MOV ESI, EDX ; 0040F46A. MOV EBX, EAX ; 0040F46C. MOV ECX, EDI ; 0040F46F. MOV EDX, ESI ; 0040F471. MOV EAX, EBX ; 0040F473. Куча лишних действий - edi, esi, ebx сохраняются в стеке, потом в них скидываются ecx, eax, edx, дальше из них достаются те же значения и кладутся обратно в регистры ecx, eax, ecx, ну и потом значения регистров восстанавливаются. Притом нигде не используются в этой функции. Это так, к слову. MOV EBX, ECX ; 1 0040F39F. MOV EDI, EDX ; v6 - mul 0040F3A1. AND EAX, 7F ; 2 0040F3B5. CMP DI, 1 0040F3D6. CMP DI, 0C ; 12 0040F3DC. CMP BX, 1 0040F3E2. MOVZX EAX, DI 0040F3E7. MOVZX EAX, DI ; 4 start 0040F3F1. TEST EAX, EAX 0040F3F4. MOV EAX, ECX 0040F40B. MOV ESI, 64 ; 100 0040F410. IMUL ESI, ECX, 16D ; 365 5 end 0040F419. MOV EDX, ECX ; 6 start 0040F41B. TEST EDX, EDX 0040F41D. ADD ESI, EDX 0040F427. SUB ESI, EAX ; 6 end 0040F429. MOV EAX, ECX ; 7 start 0040F42B. MOV ECX, 190 ; 400 0040F430. ADD ESI, EAX 0040F435. MOVZX EAX, BX 0040F438. ADD ESI, EAX 0040F43A. SUB ESI, 0A955A ; 7 end 0040F440. Она делает ровно ту работу, которая нам важна, ибо возвращаемое ей значение используется дальше. Важное место номер раз 1 0040F3AD. Что вам говорит кратность четырем в контексте работы с годами? Правильно, это проверка високосности года. Дальше математига для учета високосного. Из нашего ключа получается не високосный, так что не обращаем внимания. Место номер 2 0040F3B2. AND EAX, 7F 0040F3B5. B6F84C , если же в eax 0, то указатель будет равен B6F834. Опять число, кратное 12. При високосном году число дней в феврале стоит 29, для этого и делается поправка указателя в таблице. Запомнили, что в esi лежит таблица длин месяцев. Сталобыть это число - месяц. Потом проведу эксперимент с другими числами. Но пока не отвлекаемся. Место 3 - проверка знчаения в bx с длительностью месяца, номер которого указан в eax. Место 4 - цикл, в котором суммируются длины месяцев вплоть до di, т. Значит предположение об указании месяца - верно. Хотя можете интерпритировать его как число месяцев с января. Но суть ясна - это граница диапозона месяцев. В bx на момент первой итерации лежит число 1. Место 5 - берем год - 1 текущий год еще не закончился, прошло только столькото месяцев, та самая разность , и делим на 100. IMUL ESI, ECX, 16D ; 365 Год умножается на 365 и кладется результат в esi. Получаем примерное число дней с нулевого года. Не учитываются високосные годы. Место 6 - здесь собсно видимо и правится високосность. Место 7 - делим год на 400 и результат опять добавляем к числу дней, ну и наконец добавляем bx, число дней, прошедшее с начала указанного года до указанного месяца. Последняя важная строка - вычитается из числа прошедших дней константа 0A955A 693594. Чтоб понять, что этот кусок делает поделим это число на 365 логично считать эту контанту днями, если вычитаем из дней , получаем почти круглое число не учитываем високосные годы 1900,25753. Число дней до начала 20 века. Сталобыть мы оставляем от общей суммы дней лишь дни, начиная с 1900 года. Меняем ее метку на более логичную: 005F507B. CALL Ну и собсно заключение о назначении переменной v6 4 v6 - число месяцев, добавляемых к 1999 году. Вполне вероятно, что разобранная нами функция относится к vcl, но из-за нераспознанности нам пришлось потратить время на ручной разбор кода. Возврщаемся на уровни выше. TEST EAX, EAX 005F508C. XOR EBX, EBX 005F5098. Если меньше, чем константа в памяти по адресу B96CC8, то ebx сбрасывается в ноль, а это между прочим метка успешности проверки. Поиск по ссылкам не дал результатов, откуда туда заносится число. Тогда ставим хард бряк на акцес и перезапускаем. Вокруг этого места видим еще интересные места. Есть еще ряд констант. Заносятся значения хитро - чем промежуточный адрес. Интересно, это компилер виноват или программисты. Пока вроде никаких ухищрений не было заметно... Функция, которой она передается, высчитывает то же самое число дней, только для разобранной строки даты. На выходе имеем - 39114. Теперь к вопросу о v7 - меняем значение в заготовке кейгена на 77 0x4d и получаем новый ключ, с которым будем забавляться - stquu9xexkk65wdwh7fs8n Проверку на 0x47 прошли. Опять вызывается расчет числа дней. В стеке лежит насчитаное число дней, и видим сравнение с константой. Как получилась эта константа - мы уже увидели выше. Видимо здесь проверка чего - то ли проверка, катит ли лицензия по числу например это лицензия для старой версии и ее нах , либо это еще что нить. XOR EDX, EDX 005F50B7. XOR EAX, EAX 005F50D0. OR BL, DL 005F50DA. MOV BL, 1 005F50E8. Значит нада менять v4 например на 10. MOV BL, 1 005F50E8. Вызываемая функция явно из vcl, пропустим ее мимо ушей. Обращу внимание еще на один кусок кода 005F50D8. PUSH EAX ; hWnd 00AFC67E. CALL ; SendMessageA 00AFC683. TEST AL, AL 00AFC685. MOV EBX, 3 И по результату показывается месажбокс. К сожалению возвращается не то, что надо, поэтому мы видем сообщение о плохой регистрации. А это говорит, что разобранная нами часть алгоритма - еще не конец. Теперь надо найти оконную процедуру окна, которому шлется сообщение, и копаца уже там... А получить мы должны не ноль, чтобы в ebx попала тройка, т. Теперь наша задача - найти оконную процедуру, которая получает сообщение 0x417. Есть путь еще проще inqsoft windowscanner может показывать инфу об окнах. Теперь собсно надо найти, какому окну шлется сообщение. Такой страницы памяти нету. Когда то давно я сталкивался с таким значением оконной процедуры, и мне пришлось изрядно понапрягать память, прежде чем я вспомнил, что такое значение возвращала апи GetWindowLongA, обращаясь к Unicode окну. У InqSoft Window Scanner та же бага может ее и починили, но у меня старая версия сканера. Из сканирующих программ остался один интсрумент - Spy++ из комплекта VisualStudio. Запоминаем адрес, жмем регистрацию, вводим код, останавливаемся на вызове SendMessage и ставим бряк на этот адрес если поставим бряк раньше, будем ловить все оконные сообщения, что нам не надо, ибо заебемся. Смотрим, то ли сообщение получили. Если прокрутить вниз, увидим любопытные строки... Пока начнем с малого 00AFC299. BA C4C4AF00 MOV EDX, plsqldev. E8 F6A090FF CALL 00AFC2A6. Значит пассворд должен быть xs374ca. TEST AL, AL 00AFC2D1. JE Повторная обработка продукт кода 00AFC2D7. Кладем на нее и топаем к следующей проверке. Это нам нах не надо. CMP BL, 9 004042B4. CMP EAX, EDI 004042B8. ADD EAX, EAX 004042BF. ADD EAX, EBX 004042C1. TEST BL, BL 004042C6. Этот алгоритм по сути есть atoi. Еще одно место интересное. Если в поле +40 задано число 0xa, то будет высчитываться число оставшихся дней. Напомню, что там допустимо только 2 значения - 1 и 10. Заключение:Это было весьма приятное приключение. Довольно длительное из-за сесии. Давно не попадались интересные защиты, более-менее объемные, с нетривиальными алгоритмами, способные отвлечь меня в напряженные моменты учебы. Спасибо авторам за их творение. Из неприятных моментов можно выделить странные действия компилятора да кутерьму с оконными прцедурами. Я прошел не всеми возможными путями исполнения например 9 поле ключа может быть не задано , можете сами проверить и дополнить алгоритм для этого случая. Надеюсь, вам было интересно так же, как и мне. Комментарии к статье: Реверсинг и кейгенинг pl sql developer в прямом эфире huckfuck 10. У меня бы терпения не хватило, я бы просто пропатчил. Я-б тоже не выдержал.... В результате кроме OllyDbg 2. Защита в новой версии точно такая же как описано в этой статье. Даже пароль тот же. Я не искал оконную процедуру точнее я не сообразил что её искать нужно - я просто поставил хард бряки на адреса где сохранились из формы серийный номер и пароль. И практически сразу вывалился на сравнениях пароля и серийного номера.
Last updated