Сейчас на форуме: user99, _MBK_, ManHunter, Magister Yoda (+8 невидимых)

 eXeL@B —› Основной форум —› Взлом paxScript
Посл.ответ Сообщение


Ранг: 103.3 (ветеран), 8thx
Активность: 0.060
Статус: Участник

Создано: 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? Вы меня подтолкните, я уж дальше соображу, наверное...




Ранг: 307.9 (мудрец), 196thx
Активность: 0.180
Статус: Участник

Создано: 01 октября 2005 03:11
· Личное сообщение · #2

NaumLeNet
Сслыка ?
Найди в скомпиленом екзешнике где вызывается наг. Заетм найди такой же код в dcu.

-----
Don_t hate the cracker - hate the code.





Ранг: 103.3 (ветеран), 8thx
Активность: 0.060
Статус: Участник

Создано: 01 октября 2005 03:18
· Личное сообщение · #3

> mysterio
h++p://www.paxscript.com/downloads/pax_delphi567.zip

да найти условный переход это проблем нет ) интересует именно возможность подхода с изменением этой константы в DCU. или мы друг друга не поняли? DCUDumper из состава DeDe все делает четко и понятно ) Формируемый листинг читабелен ) Но как определить позицию "описания" сей константы непосредственно в DCU?




Ранг: 103.3 (ветеран), 8thx
Активность: 0.060
Статус: Участник

Создано: 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? ) (не забываем, что щас рассматривался демо ЕХЕ с триалом)

2cf9_BASE_SYS.dcu



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 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...

-----
Всем привет, я вернулся





Ранг: 103.3 (ветеран), 8thx
Активность: 0.060
Статус: Участник

Создано: 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 вроде) =(




Ранг: 260.3 (наставник), 2thx
Активность: 0.120
Статус: Участник
PPC-PROTECT author

Создано: 01 октября 2005 04:51
· Личное сообщение · #7

Bitfry че за Falsh )

-----
Пиво, сиськи, транс





Ранг: 103.3 (ветеран), 8thx
Активность: 0.060
Статус: Участник

Создано: 01 октября 2005 06:08
· Личное сообщение · #8

Кстати. Информация о типе переменной / константы несомненно хранится в формате DCU32, дык тип у этой константы (ну точно константа, зуб даю) не булевский ) тут я сам себе противоречю, но все же )

к примеру pascal:

const
IsTrial: boolean = True;

не есть одно и тоже, что

const
IsTrial = True;

Так что все-таки условимся не называть эту константу "100% - boolean" =) Тут уж я погорячился ) Щас вон только одумался... Дык что делать то? )




Ранг: 299.6 (наставник)
Активность: 0.30
Статус: Участник
Armadillo Killer

Создано: 01 октября 2005 07:02
· Личное сообщение · #9

NaumLeNet что то у меня НАГ твой не вызывается хоть убей ... что с IDE что без него



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 01 октября 2005 07:05 · Поправил: Bitfry
· Личное сообщение · #10

-= ALEX =- пишет:
Bitfry че за Falsh



NaumLeNet пишет:
мне никогда не хватало наставника / гуру... так то я парень толковый ))))

Но выше ты пишешь:
времени нету на изучение асма

Извини, но либо найди время, либо забей на это дело.
С тобой и так другие люди "делятся" своим временем, так выдели и ты совё. И будет тебе счастье.


NaumLeNet пишет:
Дык что делать то?

Подумать ровно минуту
Для того чтоб разобраться у меня ушло меньше времени, чем я пушу это .

Скачал, посмотрел - абракадабра всякая.
Нашел в файле BASE_SYS.dcu текст IsTrial.
Далее сравнил у других переменных False (что есть 0) и True (что есть 3).

Правка:
Здесь меня слегка проглючило

-----
Всем привет, я вернулся





Ранг: 103.3 (ветеран), 8thx
Активность: 0.060
Статус: Участник

Создано: 01 октября 2005 07:38
· Личное сообщение · #11

> Извини, но либо найди время, либо забей на это дело.
> С тобой и так другие люди "делятся" своим временем, так выдели и ты совё. И будет тебе счастье.

За то что "делятся" - спасибо огромнейшее. Я люблю / ценю и уважаю этот форум. Время на освоение асма и так пытаюсь находить, но уж больно плотна загрузка ( Вы единственные кто толково может помочь. Причем я же не прошу решить за меня задачу, а просто натолкнуть на мысль / методику / подход. Если я чувствую что мой вопрос совершенно глупый я лучше RTFM, чем сюда полезу )

А вот далее из твоего поста ничего не понял ) ей богу )) Может я конечно туплю... По поводу False / True я понял уже давно, но где именно корректировать информацию в DCU? В промежутке между описанием переменных IsTrial и IsDump вроде бы нету значения IsTrial. Вы меня простите, если я назойлив. Но ей богу, если вы поняли "фишку" то поделитесь )



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 01 октября 2005 07:52
· Личное сообщение · #12

Нее, пока не понял, извини. Просто я второпях на обед бреда накатал.
Сейчас разбираться буду.

-----
Всем привет, я вернулся




Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 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


-----
Всем привет, я вернулся




Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 01 октября 2005 08:05 · Поправил: Bitfry
· Личное сообщение · #14

Методом научного тыка был получен ноль:
По адресу 136B было:
5F 49 73 54 72  69 61 6C 8A C7 D9 E8 06  78 00 00 02 27 07 5F

Стало
5F 49 73 54 72  69 61 6C 8A B3 44 D0 A1  7C 00 00 00 27 07 5F



Delphi у меня нет. Проверяй сам что вышло

-----
Всем привет, я вернулся





Ранг: 103.3 (ветеран), 8thx
Активность: 0.060
Статус: Участник

Создано: 01 октября 2005 09:56
· Личное сообщение · #15

DCUDumper не панацея конечно ) но он показывает все равно IsTrial = true, я склонен ему доверять ) я первым делом там пробовал 00h, ибо самое первое что в голову приходит ) дельфи под рукой щас тоже нету, блин, утром гляну. тебе спасибо что тут со мной возекаешься )




Ранг: 500.6 (!), 7thx
Активность: 0.260
Статус: Участник

Создано: 01 октября 2005 10:38
· Личное сообщение · #16

[b]NaumLeN

В чём проблема то?
Если скомпилированный файл не запускаетсь без делфи, бряк в Олли на FaindWindow и
смотрим в отладчике чего там дальше происходит.
Будет примерно, типа такого TEST <любой регистр>,<любой регистр>.
Ну а дальще, будет условный переход, правиш его на джамп, на mov al,1 и всё.




Ранг: 103.3 (ветеран), 8thx
Активность: 0.060
Статус: Участник

Создано: 01 октября 2005 11:02 · Поправил: NaumLeNet
· Личное сообщение · #17

> NIKOLA
кхе кхе ) смотрим начало ветки: проблем со снятием нага с ЕХЕ не возникает ) я даже приводил фрагмент, где показывал, что это все легко снимается и даже такой нуб как я смог "справиться". Тут речь идет о возможности изменения значения константы внутри DCU. Не исправления всех джампов, коих теоретически может быть масса. А исправление одного байта с великой целью ) Раз и навсегда лишить компонент "жадности". Просто вот такой вот маленький, возможно глупый, каприз и хотелось бы разобраться )

<edited>

> Z0oMiK
сорри не заметил пост. попробуй скомпилиный ЕХЕ запустить на другой тачке к примеру, или попробуй пример TestThread грузануть, в нем всегда наг проявляется. там проверка наличия IDE немного видать пошаливает, может по мимо поиска по окнам (как обычно по заголовкам / классам большинства окон среды) есть еще что-либо связанное с delphi / builder'ом, но факт остается фактом - наг есть )



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 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
Твой вариант хорош тем, что он законный, но не очень красивый, как минимум муторный.

-----
Всем привет, я вернулся





Ранг: 103.3 (ветеран), 8thx
Активность: 0.060
Статус: Участник

Создано: 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 =(

спасибо тебе большое ) и еще раз прости что я немного ступил с версиями ( но все равно сильно от этого ничего не изменилось )




Ранг: 500.6 (!), 7thx
Активность: 0.260
Статус: Участник

Создано: 01 октября 2005 11:38
· Личное сообщение · #20

Bitfry пишет:
как минимум муторный.


А чем муторный то? Практически во всех компонентах которые смотрел, есть проверка на присутствие дельфи и буилдера, потом решение, если есть mov al,1, если нет xor eax,eax, вот и всё.
Bpl'ку в иду и ищеш FaindWindow, ну а дальше стандартно
NIKOLA пишет:
Будет примерно, типа такого TEST <любой регистр>,<любой регистр>.
Ну а дальще, будет условный переход, правиш его на джамп, на mov al,1 и всё.




Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 01 октября 2005 11:40 · Поправил: Bitfry
· Личное сообщение · #21

NaumLeNet
Смотри внимательно пост 16:59:06

-----
Всем привет, я вернулся





Ранг: 103.3 (ветеран), 8thx
Активность: 0.060
Статус: Участник

Создано: 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... истина где-то рядом )



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 01 октября 2005 14:23
· Личное сообщение · #23

NaumLeNet пишет:
перебил все байты после 8Ah

Попробуй так:
8A ?? ?? ?? ?? YY YY YY YY
? - не трогай
Y - перебей как у False.

-----
Всем привет, я вернулся




Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 01 октября 2005 14:28
· Личное сообщение · #24

О! Нашёл.
hmelnov.icc.ru/DCU/index.ru.html

А я думал ты в поиске посмотрел

-----
Всем привет, я вернулся





Ранг: 103.3 (ветеран), 8thx
Активность: 0.060
Статус: Участник

Создано: 02 октября 2005 01:47
· Личное сообщение · #25

> Bitfry
обязательно сегодня попробую )

> относительно DCU32:
неа, на ссылу наткнулся прямо с DCU в DeDe ) инфа там полезная. еще бы интерпритатор заиметь. свой писать при условии отсутствия 100% спецификации на язык бесполезно почти ( диссертацию качнул, поизучаю на досуге.


 eXeL@B —› Основной форум —› Взлом paxScript
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати