Сейчас на форуме: user99, _MBK_, ManHunter, Magister Yoda (+8 невидимых) |
![]() |
eXeL@B —› Основной форум —› Взлом paxScript |
Посл.ответ | Сообщение |
|
Создано: 01 октября 2005 03:02 · Личное сообщение · #1 Есть отличный script-engine для Delphi / Builder'a (www.paxscript.com). Он шараварный, триал. Показывает nag, если запущено вне IDE. Решил избавиться от надоеды по ряду причин )) Взял в руки DeDe, пробежался DCUDumper'ом нашел некую констату которая отвечает за триальность (модуль BASE_SYS.dcu, const IsTrial), т.е. в зависимости от билда автор меняет константу IsTrial с False на True (и наоборот), тем самым добиваясь появления нага в триале и отсутствия в купленной версии. Примитивно, не спорю ) Чтобы не править множество условных переходов в коде, избавляясь от нага, хотелось бы просто поменять значение константы. Но понятное дело DCUDumper не дает информации об оффсете, чтобы я внес коррективы. В asm'е я дуб дубом =( только начинаю осваиваться. Возник вопрос к мастерам - как можно изменить состояние сей константы в DCU? Какие методики существуют, чтобы определить положение константы в теле DCU? Вы меня подтолкните, я уж дальше соображу, наверное... ![]() |
|
Создано: 01 октября 2005 03:11 · Личное сообщение · #2 |
|
Создано: 01 октября 2005 03:18 · Личное сообщение · #3 > mysterio h++p://www.paxscript.com/downloads/pax_delphi567.zip да найти условный переход это проблем нет ) интересует именно возможность подхода с изменением этой константы в DCU. или мы друг друга не поняли? DCUDumper из состава DeDe все делает четко и понятно ) Формируемый листинг читабелен ) Но как определить позицию "описания" сей константы непосредственно в DCU? ![]() |
|
Создано: 01 октября 2005 03:21 · Поправил: NaumLeNet · Личное сообщение · #4 могу для удобства приаттачить саму DCU =) мне не столь важно заиметь сам "кряк" (если это слово тут уместно), хотя результат важен, конечно - ради этого все и затевается, сколько понять возможность изменения значения константы в скомпилированном модуле, а так же методику поиска оной там же ) <edited> условный переход на проверке триала в ЕХЕ я нашел. это проблемы не составило. но все-таки интересует то, о чем я пишу выше ) <edited2> тут winhex'ом открыл DCU, нашел описание константы непосредственно в нем ))) выглядит приблизительно следующим образом (взят фрагмент): 00001400 5F 49 73 54 72 69 61 6C 8A D0 61 03 78 78 _IsTrialЉРa.xx 00001410 00 00 02 27 07 5F 49 73 44 75 6D 70 E2 ...'._IsDumpв <...> в DCUDumper'e ентот фрагмент выглядит, как: const _IsTrial = true; _IsDump: System.Boolean = <...> В общем меня терзают смутные сомнения ) Могу найти решение чисто эмпирически ))) Но хотелось бы услышать знающих товарищей... <edited3> я прошу вас, подскажите все-таки )) на операционном столе ЕХЕшник с проверкой на триал внутри ) локализовать проверку даже мне, нубу, было не сложно: 004C3DCC SUB_L004C3DCC: 004C3DCC FF055C674F00 inc [L004F675C] 004C3DD2 A15C674F00 mov eax,[L004F675C] 004C3DD7 B90F000000 mov ecx,0000000Fh 004C3DDC 99 cdq 004C3DDD F7F9 idiv ecx 004C3DDF 85D2 test edx,edx 004C3DE1 750A jnz L004C3DED 004C3DE3 B8F83D4C00 mov eax,SLP004C3DF8_Trial_version_ 004C3DE8 E88BA5FFFF call SUB_L004BE378 004C3DED L004C3DED: 004C3DED C3 retn Собственно проверка на триал (которая единственная и неповторимая). SLP004C3DF8_Trial_version_ - есть ни что иное как текст триала, L004F675C - вот там хранится значение той самой константы (IsTrial), как я понял. Понятное дело, что тут все правится jnz -> jmp. Но мне все-таки охота разобраться ) Полез смотреть что у нас по L004F675C лежит - а там ) 004F675C L004F675C: 004F675C 03000000 dd 00000003h Во первых почему True выглядит таким макаром? Действительно ли это значение константы IsTrial? И как все-таки правится DCU? ) (не забываем, что щас рассматривался демо ЕХЕ с триалом) ![]() ![]() |
|
Создано: 01 октября 2005 04:24 · Личное сообщение · #5 NaumLeNet пишет: Во первых почему True выглядит таким макаром? На чистом Асме нет никаких True и Falsh - это от лукавого. Как правило, true не ноль, а falsh ==0. В данном случае значение 3. Значит к true/falsh оно отношения не имеет. Можно предположить так: 3 equ trial. 2 equ wrong_version 1 equ time_out И т.д. Предполагать можно всё что душе угодно. Действительно ли это значение константы IsTrial? Да, это действительно значение IsTrial. Но кто сказал, что это константа? Два года как начал, но никак не могу понять высокоуровневых программистов. Чем они мозги забивают? Читай Дневники чайника Чтива 0... ----- Всем привет, я вернулся ![]() |
|
Создано: 01 октября 2005 04:51 · Поправил: NaumLeNet · Личное сообщение · #6 > Bitfry гы ) спасибо что пояснили! ) вот так по маленьку и приобщаюсь к "низам" ) времени нету на изучение асма, хотя давно хочу. по верхам асмы в свое время поскакал, да под рукой справочник держу на всякий случай, не более (( > Можно предположить так: > 3 equ trial. > 2 equ wrong_version > 1 equ time_out > Но кто сказал, что это константа? Можно предположить ) Но немного зная психологию "высокоуровневых программистов", изучив снаружи сей компонент -> там именно константа =) Сам раньше таким же макаром "пробовал" защитить свои программные продукты (не приложения, а именно компоненты). Слава богу, автор paxScript не додумался воспользоваться директивами препроцессора, тогда бы я остался без столь легкого решения ) в общем, судя по показаниям DCU32INT (http://hmelnov.icc.ru/DCU/) и моего здравого рассудка, а также интуиции - там именно boolean (рассуждаю как "высокоуровневый программист"), т.е. значения все таки либо 0, либо не 0, получается... В общем если взять в учет все, что я выше высказал - что это 100% константа и она 100% булевского типа - что мы ковыряем в DCU? )) <edited> при рассмотрении winhex'ом DCU в той "области" ничего похожего на 03h не обнаружено ( разбираться в спецификации формата DCU32 на FlexT тоже не сильно охота ( ну сориентируйте меня, плз ) мне никогда не хватало наставника / гуру... так то я парень толковый )))) P.S. кто что думает про FlexT (http://hmelnov.icc.ru/FlexT/), если сталкивался? почитал, а вещь то стоящая. вот чего-то такого и не хватало всю жизнь для изучения / парсинга бинарных форматов ) кто-нибудь видел интерпритатор языка? охота пощупать, но автор дает только возможность парсинга через web-скрипт (лимит в 200 kb вроде) =( ![]() |
|
Создано: 01 октября 2005 04:51 · Личное сообщение · #7 |
|
Создано: 01 октября 2005 06:08 · Личное сообщение · #8 Кстати. Информация о типе переменной / константы несомненно хранится в формате DCU32, дык тип у этой константы (ну точно константа, зуб даю) не булевский ) тут я сам себе противоречю, но все же ) к примеру pascal: const IsTrial: boolean = True; не есть одно и тоже, что const IsTrial = True; Так что все-таки условимся не называть эту константу "100% - boolean" =) Тут уж я погорячился ) Щас вон только одумался... Дык что делать то? ) ![]() |
|
Создано: 01 октября 2005 07:02 · Личное сообщение · #9 |
|
Создано: 01 октября 2005 07:05 · Поправил: Bitfry · Личное сообщение · #10 -= ALEX =- пишет: Bitfry че за Falsh ![]() NaumLeNet пишет: мне никогда не хватало наставника / гуру... так то я парень толковый )))) Но выше ты пишешь: времени нету на изучение асма Извини, но либо найди время, либо забей на это дело. С тобой и так другие люди "делятся" своим временем, так выдели и ты совё. И будет тебе счастье. ![]() NaumLeNet пишет: Дык что делать то? Подумать ровно минуту ![]() Для того чтоб разобраться у меня ушло меньше времени, чем я пушу это ![]() Скачал, посмотрел - абракадабра всякая. Нашел в файле BASE_SYS.dcu текст IsTrial. Далее сравнил у других переменных False (что есть 0) и True (что есть 3). Правка: Здесь меня слегка проглючило ![]() ----- Всем привет, я вернулся ![]() |
|
Создано: 01 октября 2005 07:38 · Личное сообщение · #11 > Извини, но либо найди время, либо забей на это дело. > С тобой и так другие люди "делятся" своим временем, так выдели и ты совё. И будет тебе счастье. За то что "делятся" - спасибо огромнейшее. Я люблю / ценю и уважаю этот форум. Время на освоение асма и так пытаюсь находить, но уж больно плотна загрузка ( Вы единственные кто толково может помочь. Причем я же не прошу решить за меня задачу, а просто натолкнуть на мысль / методику / подход. Если я чувствую что мой вопрос совершенно глупый я лучше RTFM, чем сюда полезу ) А вот далее из твоего поста ничего не понял ) ей богу )) Может я конечно туплю... По поводу False / True я понял уже давно, но где именно корректировать информацию в DCU? В промежутке между описанием переменных IsTrial и IsDump вроде бы нету значения IsTrial. Вы меня простите, если я назойлив. Но ей богу, если вы поняли "фишку" то поделитесь ) ![]() |
|
Создано: 01 октября 2005 07:52 · Личное сообщение · #12 |
|
Создано: 01 октября 2005 07:59 · Личное сообщение · #13 NaumLeNet пишет: В промежутке между описанием переменных IsTrial и IsDump вроде бы нету значения IsTrial Там оно, точно. Или косвенно или явно. Вот: 5F 49 73 54 72 69 61 6C _IsTrial 8A C7 D9 E8 06 78 00 00 02 27 07 _ЗЩи.x...'. = True 5F 72 6D 52 75 6E _rmRun 8A B3 44 D0 A1 7C 00 00 00 25 0B __DРЎ|...%. = $00 5F 73 73 49 6E 69 74 _ssInit 8A B3 44 D0 A1 7C 00 00 00 25 11 __DРЎ|...%. = $00 5F 72 6D 53 74 65 70 4F 76 65 72 _rmStepOver 8A B4 44 D0 A1 7C 00 00 02 25 0C __DРЎ|...%. = $01 5F 63 63 53 61 66 65 43 61 6C 6C _ccSafeCall 8A B7 44 D0 A1 7C 00 00 08 25 16 _·DРЎ|...%. = $04 ----- Всем привет, я вернулся ![]() |
|
Создано: 01 октября 2005 08:05 · Поправил: Bitfry · Личное сообщение · #14 |
|
Создано: 01 октября 2005 09:56 · Личное сообщение · #15 |
|
Создано: 01 октября 2005 10:38 · Личное сообщение · #16 [b]NaumLeN В чём проблема то? Если скомпилированный файл не запускаетсь без делфи, бряк в Олли на FaindWindow и смотрим в отладчике чего там дальше происходит. Будет примерно, типа такого TEST <любой регистр>,<любой регистр>. Ну а дальще, будет условный переход, правиш его на джамп, на mov al,1 и всё. ![]() |
|
Создано: 01 октября 2005 11:02 · Поправил: NaumLeNet · Личное сообщение · #17 > NIKOLA кхе кхе ) смотрим начало ветки: проблем со снятием нага с ЕХЕ не возникает ) я даже приводил фрагмент, где показывал, что это все легко снимается и даже такой нуб как я смог "справиться". Тут речь идет о возможности изменения значения константы внутри DCU. Не исправления всех джампов, коих теоретически может быть масса. А исправление одного байта с великой целью ) Раз и навсегда лишить компонент "жадности". Просто вот такой вот маленький, возможно глупый, каприз и хотелось бы разобраться ) <edited> > Z0oMiK сорри не заметил пост. попробуй скомпилиный ЕХЕ запустить на другой тачке к примеру, или попробуй пример TestThread грузануть, в нем всегда наг проявляется. там проверка наличия IDE немного видать пошаливает, может по мимо поиска по окнам (как обычно по заголовкам / классам большинства окон среды) есть еще что-либо связанное с delphi / builder'ом, но факт остается фактом - наг есть ) ![]() |
|
Создано: 01 октября 2005 11:08 · Поправил: Bitfry · Личное сообщение · #18 NaumLeNet пишет: DCUDumper не панацея конечно ) но он показывает все равно IsTrial = true Не знаю... Может быть, ты поставил вопрос неверно? Действия для чайников: Открываем в hex-редакторе файл "pax_delphi567\D6\BASE_SYS.dcu". И меняем байты: было стало 00001374: C7 B3 00001375: D9 44 00001376: E8 D0 00001377: 06 A1 00001378: 78 7C 0000137B: 02 00 Грузим DeDe, смотрим DUC: const _IsTrial = $00; _IsDump: System.Boolean = raw[$0..$0]at $0 0: .[00|K5 _IsDump{0x11E}; RootNamespaceName = 00: яяяя....NonameNa|FF FF FF FF 0F 00 00 00 4E 6F 6E 61 6D 65 4E 61| 10: mespace. |6D 65 73 70 61 63 65 00|; Если у тебя не так, я невиноват. NIKOLA Твой вариант хорош тем, что он законный, но не очень красивый, как минимум муторный. ----- Всем привет, я вернулся ![]() |
|
Создано: 01 октября 2005 11:32 · Поправил: NaumLeNet · Личное сообщение · #19 вот я дурак ) лол ) сижу и парю себе моск ) и тебе парю моск ) все моя невнимательность виновата ( DCU в различных версиях D/B отличаются как размером, так и содержанием ))) но не я не удосужился тебе сказать какую я DCU смотрю, не ты спросить ) прошу прощение, я рассматривал "\D7\BASE_SYS.dcu" если ты приводил вот это из D6: -> 5F 49 73 54 72 69 61 6C 8A C7 D9 E8 06 78 00 00 02 27 07 5F то в D7: -> 5F 49 73 54 72 69 61 6C 8A D0 61 03 78 78 00 00 02 27 07 5F правка только 02h на 00h к добру не приводит. (я увидев похожее начало и конец данных что ты дал и своих в редакторе - подумал что одно и тоже, даже не стал проверять смещение, иначе сразу бы выяснилось что мы разные DCU смотрим, впредь, не только в этой ветке, постараюсь быть внимательнее и сообщать подробные данные) в последнем посте (Окт 1, 2005 20:08:56) ты приводишь следующее изменение: было стало 00001374: C7 B3 00001375: D9 44 00001376: E8 D0 00001377: 06 A1 00001378: 78 7C 0000137B: 02 00 вопроса два ) ну 02h -> 00h я понимаю, но остальные байты ты менял следуя чему? я так понимаю что там информация о "типе" IsTrial хранится? вопрос второй: смотрим на "\D7\BASE_SYS.DCU" было стало 0000140B: D0 ?? 0000140C: 61 ?? 0000140D: 03 ?? 0000140E: 78 ?? 0000140F: 78 ?? 00001412: 02 00 из-за того что не могу понять причину изменения байт до 00001412 не могу сообразить результат для D7 =( спасибо тебе большое ) и еще раз прости что я немного ступил с версиями ( но все равно сильно от этого ничего не изменилось ) ![]() |
|
Создано: 01 октября 2005 11:38 · Личное сообщение · #20 Bitfry пишет: как минимум муторный. А чем муторный то? Практически во всех компонентах которые смотрел, есть проверка на присутствие дельфи и буилдера, потом решение, если есть mov al,1, если нет xor eax,eax, вот и всё. Bpl'ку в иду и ищеш FaindWindow, ну а дальше стандартно NIKOLA пишет: Будет примерно, типа такого TEST <любой регистр>,<любой регистр>. Ну а дальще, будет условный переход, правиш его на джамп, на mov al,1 и всё. ![]() |
|
Создано: 01 октября 2005 11:40 · Поправил: Bitfry · Личное сообщение · #21 |
|
Создано: 01 октября 2005 11:42 · Поправил: NaumLeNet · Личное сообщение · #22 > Bitfry ну я ваще дурак, прости... понял я ) спасибо. ща буду проверять ) <edited> ну вот ) все нормально ) только из-за того что, по сути, сменился тип (не из-за значения, я думаю) IsTrial - начали ругаться другие DCU'хи, мол compiled with different version of BASE_SYS =)) так что, раз мы не смогли разобраться в смене значения без смены "типа" (если это вообще возможно), проще делать все по старинке )) ну хоть немного разобрались... <edited2> уже понта ради ) создал проект на D7, описал константу _IsTrial = False, скомпилил, проверил DCUDumper'ом - показывает что False, как и должно быть. Открыл одновременно WinHEX'ом мою dcu и вражескую - по аналогии перебил все байты после 8Ah - реально было очень все похоже на правду )) сохранил, открываю снова DCUDumper'ом - показывает совершенно другой тип (SysUtils.Exception($00)) ну и соответственно дальше дело встает ) в общем решил разбираться со структурой DCU32... истина где-то рядом ) ![]() |
|
Создано: 01 октября 2005 14:23 · Личное сообщение · #23 |
|
Создано: 01 октября 2005 14:28 · Личное сообщение · #24 |
|
Создано: 02 октября 2005 01:47 · Личное сообщение · #25 |
![]() |
eXeL@B —› Основной форум —› Взлом paxScript |