Сейчас на форуме: tyns777, cppasm, dutyfree, asfa (+7 невидимых)

 eXeL@B —› Вопросы новичков —› Вопрос по поводу НАГа
Посл.ответ Сообщение

Ранг: 15.5 (новичок), 21thx
Активность: 0.040
Статус: Участник

Создано: 02 апреля 2017 22:22
· Личное сообщение · #1

Приветствую всех!
Хотелось бы убрать наг с программы. Собственно уже порядочно покопался в программе, нашел и место, откуда запускается НАГ, и брякался после ввода левого кода и нажатия ОК, смотрел на проверку введенного серийника и т.п.
Идеальным вариантом, как я понимаю, было бы отреверсить механизм генерации ключа и написать кейген, или хотя бы ввести валидный серийник, но там уж больно много условных переходов и вызовов, так что это оставлю на потом.

Я понимаю так -- перед вызовом НАГа выполняется какая-то элементарная проверка на регистрацию, и если ее нет, то появляется НАГ. если же программа зарегистрирована, то НАГА нет.

В общем место, где начинает выполняться НАГ, на скрине. Как выяснить, откуда происходит переход на выполнение НАГа ?

cf98_02.04.2017_EXELAB.rU.tgz - 1111111111.PNG

Добавлено спустя 10 минут
з.ы. на всякий случай скажу -- хотелось бы чтобы гуру показали, в какую сторону копать, не более того. мне не надо, чтобы гуру что-то сделал за меня.



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

Создано: 02 апреля 2017 23:20 · Поправил: VodoleY
· Личное сообщение · #2

VanHelsing посмотреть в стеке адреса возврата.. и останавливаться ПЕРЕД нагом..
типа
cmp eax,0
jnz lab1
call ShowForm
lab1:
или вместо push ebp ret поставить.. вернетесь туда откуда вызвалась процедура

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....


| Сообщение посчитали полезным: VanHelsing

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

Создано: 03 апреля 2017 02:19 · Поправил: dosprog
· Личное сообщение · #3

VanHelsing пишет:
Как выяснить, откуда происходит переход на выполнение НАГа ?

В простейшем случае адрес возврата находится в вершине стека.

| Сообщение посчитали полезным: VanHelsing


Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 03 апреля 2017 03:05
· Личное сообщение · #4

вызовы процедур типично дельфинские, поэтому я бы сказал, что есть смысл искать TForm.Create для класса нужной формы.
IDR разве не помогает?

| Сообщение посчитали полезным: VanHelsing

Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 03 апреля 2017 11:55
· Личное сообщение · #5

построить граф и посмотреть ветви ведущие к вызову окна?
или же брать адреса в стеке и бэкстепом возвращаться к месту вызова.



Ранг: 262.5 (наставник), 337thx
Активность: 0.340.25
Статус: Участник

Создано: 03 апреля 2017 14:18
· Личное сообщение · #6

shellstorm пишет:
построить граф

есть какой-нибудь готовый инструмент?



Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 03 апреля 2017 15:39
· Личное сообщение · #7

TryAga1n пишет: есть какой-нибудь готовый инструмент?

IDA?

ну или любой другой современный дизассемблер, хоть тот же radare. сейчас графы стали стандартной функцией и есть в любом приличном инструменте. сейчас актуальна компонентная модель, когда есть набор компонентов в виде эмулятора, дизассемблера, парсеры бинарных файлов, анализаторы и прочее, а из них каждый лепит что то свое. на github для того же питона есть десятки библиотек, несколько строк кода и можно получить какие угодно графы, статические, динамические, логирование стека, итд.

| Сообщение посчитали полезным: TryAga1n

Ранг: 15.5 (новичок), 21thx
Активность: 0.040
Статус: Участник

Создано: 03 апреля 2017 22:56 · Поправил: VanHelsing
· Личное сообщение · #8

VodoleYVodoleY пишет:
посмотреть в стеке адреса возврата.. и останавливаться ПЕРЕД нагом..


потихоньку ковыряюсь, спасибо!

итак. formShow при запуске вызывается 2 раза (1 раз отрисовывается частично главное окно программы, во второй раз собственно появляется НАГ), оба раза в стеке одинаковый адрес возврата. кстати если туда поставить бряк, и потом в программе нажать "регистрация", то брякается на этом же адресе. и еще -- если запустить программу, закрыть НАГ, а потом поставить по этому адресу бряк, то брякнется при нажатии на любую кнопку, скажем настройки, "about" и прочих.

по адресу возврата такой код:

http://i.piccy.info/i9/5e898545a218646312fcd047f97a09a1/1491248990/24830/1134610/123456789.png

как выяснилось, код отвечает за загрузку введенного ранее значения в поле ключа, -- formShow вызывается в любом случае, если сделать там безусловный переход (или при трассировке установить флаг Z), то поле с ключом будет загружаться пустым. и я так понял что для других окон тоже через этот адрес передаются значения.

в общем ковыряюсь дальше!

Добавлено спустя 6 минут
-=AkaBOSS=--=AkaBOSS=- пишет:
вызовы процедур типично дельфинские, поэтому я бы сказал, что есть смысл искать TForm.Create для класса нужной формы.
IDR разве не помогает?


программа дельфийская, PeID и DIE показали Borland Delphi 6-7.
только я ведь и не реверсер вовсе, и про IDR только слышал мельком, не использовал )) я раньше слегка интересовался ассемблером, Ольгу юзал, на масме немного кодировал по урокам Икзелиона, а так чтобы плотно заниматься такого не было. да и Ольгу уже лет несколько не запускал ))

кстати TForm.Create только одна, запускается 1 раз.



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

Создано: 04 апреля 2017 00:35 · Поправил: VodoleY
· Личное сообщение · #9

VanHelsing пишет:
кстати TForm.Create только одна, запускается 1 раз.

а нахрена ему вызываться много раз?
вы батенька пытаетесь кастрировать последствия а не искать причину.. не верный подход
ЗЫ.. вам как вариант.. на форме 2 таба (ну или панельки) на одной НАГ.. на второй сплеш.. в зависимости от совпадения ключа и хвида показывается или сплеш проги с данными регистрации.. или просят ввести номер..
пока вы прогу не положите. будет битва экстрасенсов

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....


| Сообщение посчитали полезным: sefkrd

Ранг: 15.5 (новичок), 21thx
Активность: 0.040
Статус: Участник

Создано: 04 апреля 2017 00:46 · Поправил: VanHelsing
· Личное сообщение · #10

VodoleY
я вот что подумал -- в программе до нага отрисовывается главное меню -- а в главном меню есть пункт Register -- соответственно я подумал, что программа зареганная не будет показывать сей пункт -- а значит проверка реги проверяется раньше , чем появляется НАГ, а именно во время отрисовки главного меню.

так вот. я нашел строку RegisterClick, если на нее поставить бряк то бряк работает. как можно выяснить тот момент, когда отрисовывается пункт Register в главном меню ?

а программа собственно вот -- http://www.eusing.com/free_system_cleaner/system_cleaner.htm

она бесплатная, и думаю защиты там никакой нет. есть проверка ключа, но там алго сложный, мне не по силам конечно.
и разумеется для вас крякнуть ее убрав НАГ не составит труда, но мне не хотелось бы чтобы тут появилось решенье. хотя если можете подсказать в какую сторону копать -- то буду признателен, да и уже собственно признателен )

Добавлено спустя 4 минуты
VodoleYVodoleY пишет:
в зависимости от совпадения ключа и хвида показывается или сплеш проги с данными регистрации.. или просят ввести номер..


я там находил место, где после проверки ключа выдается сообщение о его инвалидности -- заджампил и все ок, вводишь любой ключ -- жмешь ОК вместо SKIP -- и прога работает. другое дело что НАГ все равно вылезает, то бишь проверка идет еще и раньше того как жмешь ОК.

еще там место в окне about -- powered by -- тоже там NOPы поставил после чека и программа пишет POWERED BY: 111, как будто зареганная. ) а вот с НАГом никак не справлюсь.




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 04 апреля 2017 01:10 · Поправил: -=AkaBOSS=-
· Личное сообщение · #11

VanHelsing пишет:
соответственно я подумал, что программа зареганная не будет показывать сей пункт

кстати это совсем необязательно.
во многих продуктах остаётся этот пункт на случай если пользователь купит лицензию с более расширенными функциями или просто продлённым сроком действия..


VanHelsing пишет:
а вот с НАГом никак не справлюсь.


Code:
  1. 004DDE23        cmp         byte ptr [ebx+49C],0;TfrmMain.?f49C:byte
  2. 004DDE2A>       jne         004DDE6D
  3. 004DDE2C        mov         ecx,ebx
  4. 004DDE2E        mov         dl,1
  5. 004DDE30        mov         eax,[004DC244];TfrmRegister
  6. 004DDE35        call        TCustomForm.Create;TfrmRegister.Create
  7. 004DDE3A        mov         esi,eax
  8. 004DDE3C        mov         eax,esi
  9. 004DDE3E        mov         edx,dword ptr [eax]
  10. 004DDE40        call        dword ptr [edx+0EC];TfrmRegister.sub_00484AB4


проверяемая переменная инициализируется тут
Code:
  1. 004DDA62        call        004F0FDC
  2. 004DDA67        mov         byte ptr [esi+49C],al;TfrmMain.?f49C:byte


| Сообщение посчитали полезным: VanHelsing

Ранг: 15.5 (новичок), 21thx
Активность: 0.040
Статус: Участник

Создано: 04 апреля 2017 01:21
· Личное сообщение · #12

VodoleY
собственно нашел перед FormActivate все строки, в том числе mi.Register
хардверный бряк на доступ почему-то не срабатывает (

Добавлено спустя 6 минут
-=AkaBOSS=-

я рядом был,
Code:
  1. 004DDDBC >/. 55             PUSH EBP                                 ; FormActivate


Добавлено спустя 7 минут
-=AkaBOSS=- пишет:
кстати это совсем необязательно.
во многих продуктах остаётся этот пункт на случай если пользователь купит лицензию с более расширенными функциями или просто продлённым сроком действия..

ну это да, просто был как вариант еще и там полазить, а вдруг ? )




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 04 апреля 2017 01:37 · Поправил: -=AkaBOSS=-
· Личное сообщение · #13

VanHelsing

ключ состоит из десятичных цифр, длина - 10 символов

проверки примитивные:
key[0] + key[2] > 8
(key[0] + key[1] + key[2]) % 10 == key[7]
key[4] > 5
key[5] < 2

например, подходят ключи
456-91-500
666-61-888
999-70-777

имя любое



Ранг: 15.5 (новичок), 21thx
Активность: 0.040
Статус: Участник

Создано: 04 апреля 2017 01:45
· Личное сообщение · #14

-=AkaBOSS=-
не ну просто поклон вам! как вы так быстро крячите-то ??? (у меня правда азарт сразу пропал)

в этом алгоритме я кстати лазил, в него попадал трассировкой после бряка по нажатию ОК в регистрационной форме. надо было думаю на начало алго бряк еще поставить -- не подумал сразу что он откуда-то еще вызывается, думал только при ОК.

в общем как-то так. если не трудно скажите как нашли место с НАГом ?




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 04 апреля 2017 01:56
· Личное сообщение · #15

VanHelsing пишет:
как вы так быстро крячите-то ?

это шелуха) приходилось разбирать алгоритмы намного сложнее

VanHelsing пишет:
если не трудно скажите как нашли место с НАГом ?

загрузил в IDR, нашёл нужную форму - TFrmRegister
в списке классов нашёл адрес этого класса - 4DC244
а потом в hiew банальный поиск обращений к этому адресу и проверка найденного адреса в IDR
фактически, первый же результат показал мне вызов того что мне нужно - TCustomForm.Create

можно было и через бряк в ольке сработать, но мне работать статично как-то привычнее



Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 04 апреля 2017 02:09
· Личное сообщение · #16

Вам выше советовали IDR (раз делфи), но вы начали, что сложно, не получится.




Ранг: 95.1 (постоянный), 247thx
Активность: 0.260.01
Статус: Участник

Создано: 04 апреля 2017 06:52
· Личное сообщение · #17

Лол.У делфи все процедуры как на ладони.Декомпиляторы имеет смысл юзать только в случае полного разбора алгоритмов,а это никто делать не будет, так как конечная цель ТС - борьба с нагом, а точнее с отрисовкой формы регистрации, которая нагом не является.

-----
TEST YOUR MIGHT




Ранг: 5.3 (гость), 18thx
Активность: 0.010
Статус: Участник

Создано: 06 апреля 2017 05:48 · Поправил: tempesta
· Личное сообщение · #18

Ответ на все вопросы :

--> Link <--

открыть файл htm


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


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