Сейчас на форуме: tyns777, bezumchik (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Распаковка ПО для работы с SPD ОЗУ и разлочка функций
Посл.ответ Сообщение

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

Создано: 23 декабря 2018 22:03
· Личное сообщение · #1

Уважаемые товарищи, приветствую.
Опыт в реверсе и крэкинге ещё набираю, но пользоваться отладчиком и дизасмом умею, читаю и понимаю код довольно многих языков программирования, что иногда облегчает задачи.
Друг недавно попросил посмотреть программу, смогу ли разблокировать функции, которые заблочены, если нет файла с рег данными. Название софта начинается на Thaiphoon. Полностью не пишу, чтобы не индексировалось, потому что автор полный неадекват и параноик. Даже по отношению к легальным пользователям. Софт позволяет работать с SPD оперативной памяти.
Ссылка на файл программы --> Ссылка <--. Написана на Delphi. Вес 1 мб.
Первым делом проверил на упаковщик/протектор. Файл упакован PECompact 3.02.2. На тот момент даже с этим упаковщиком не умел работать, но научиться хотелось, поэтому результат такой:
1. OEP на 005BDE4C
На OEP прыгаем тут
Code:
  1. 00739A71 | 5D | pop ebp
  2. 00739A72 | FFE0 | jmp eax

2. Работал в x64dbg. Для дампа и восстановления импорта использовал встроенную Scylla. Весь импорт valid, сдампил и пофиксил.
3. Ввиду отсутствия опыта, запустил полученный файл на рабочей системе. ПК почему-то ушёл в перезагруз и после больше не смог стартануть. Оказалось, что на всех моих 4-ёх планках был затёрт SPD.
Тут я прошу Вашей помощи. Прошу поделиться Вашим опытом, может кто сталкивался с таким поведением софта после распаковки. Моё предположение, что автор написал что-то руками, какой-то код, который проверяет был ли файл распакован или нет. Если да, то софт трёт SPD и перезагружает ПК без возможности понять в чём дело и восстановить SPD. Может ошибаюсь, не знаю, не хватает опыта и того, кто мог бы подсказать в какую сторону посмотреть.
По итогу, планки я восстановил и принялся копать дальше, только уже пробовал всё на виртуалке. Подумал, что, может я хреново распаковал (?), опыта в распаковке PECompact не было, подумал, что допустил где-то ошибку. Однако, после ещё трёх попыток распаковки, с использованием других инструментов (Olly и ImpRec), результат оставался таким же: перезагрузка ПК и стирание SPD. Хочу развиваться в направлении исследования защиты ПО и её обхода. Уже потратил около 2.5 недель на этот файл, читал форумы на exelab и tuts'ах, при первых трудностях не побежал на форумы просить сделать всё за меня, а стал разбираться сам. Но сейчас моих знаний не хватает, прошу Вас не решать мою проблему за меня, а, как более опытных профессионалов в исследовании защит, подсказать мне куда посмотреть, может я что-то упустил.

Программа имеет определённые ограничения, если нет регистрации. Например, нельзя сохранить дамп прошивки в формате BIN. Это ограничение я обошёл, проследив за строкой "Saving data to a binary file is not available in the Demo version". Два jne лоадером изменил на je и получил сохранение в BIN. Часть кода с проверкой на демо версию:
Code:
  1. 005ADB9D | A1 54515C00              | mov eax,dword ptr ds:[5C5154]           |
  2. 005ADBA2 | 8038 00                  | cmp byte ptr ds:[eax],0                 |
  3. 005ADBA5 | 75 17                    | jne thaiphoon.5ADBBE                    |
  4. 005ADBA7 | A1 B44E5C00              | mov eax,dword ptr ds:[5C4EB4]           |
  5. 005ADBAC | 8038 00                  | cmp byte ptr ds:[eax],0                 |
  6. 005ADBAF | 75 0D                    | jne thaiphoon.5ADBBE                    |
  7. 005ADBB1 | 8B55 FC                  | mov edx,dword ptr ss:[ebp-4]            | edx:EntryPoint
  8. 005ADBB4 | 8B45 F4                  | mov eax,dword ptr ss:[ebp-C]            |
  9. 005ADBB7 | E8 B41DE7FF              | call thaiphoon.41F970                   |
  10. 005ADBBC | EB 15                    | jmp thaiphoon.5ADBD3                    |
  11. 005ADBBE | 6A 00                    | push 0                                  |
  12. 005ADBC0 | 66:8B0D 2CDC5A00         | mov cx,word ptr ds:[5ADC2C]             |
  13. 005ADBC7 | B2 02                    | mov dl,2                                |
  14. 005ADBC9 | B8 38DC5A00              | mov eax,thaiphoon.5ADC38                | 5ADC38:"Saving data to a binary file is not available in the Demo version."
  15. 005ADBCE | E8 4998E9FF              | call thaiphoon.44741C                   |
  16. 005ADBD3 | 8B45 F4                  | mov eax,dword ptr ss:[ebp-C]            |
  17. 005ADBD6 | E8 C55DE5FF              | call thaiphoon.4039A0                   |


Поковыряв exe, понял, что функционал полной версии есть, но он станет доступным, только если рядом с прогой будет лежать валидный regdata.rkf файл. Но как блочится функционал - просто кнопки записи и других полезных функций становятся отключёнными (disabled или grayed out). В прошлом был опыт исследования одной известной проги для работы с жёсткими дисками Western Digital. Та тоже написана на Delphi и там тоже были заблокированные кнопки. Там я их разблокировал, насильно указав в коде следовать на функцию EnableMenuItem. В данном же случае я нашёл, что в коде формируется запрос на EnableMenuItem( HMENU hMenu, UINT uIDEnableItem, UINT uEnable) с параметрами. Параметры кладутся в стек здесь
Code:
  1. 75A23046 | C745 FC FEFFFFFF         | mov dword ptr ss:[ebp-4],FFFFFFFE       |
  2. 75A2304D | FF75 10                  | push dword ptr ss:[ebp+10]              |
  3. 75A23050 | FF75 0C                  | push dword ptr ss:[ebp+C]               |
  4. 75A23053 | FF75 08                  | push dword ptr ss:[ebp+8]               |
  5. 75A23056 | FF15 8868AA75            | call dword ptr ds:[<&NtUserEnableMenuItem>] |

В push dword ptr ss:[ebp+10] как раз передаётся 0, 1 или другой int, который управляет состоянием кнопки. Но, как оказалось, данная процедура действует не для всех пунктов верхнего меню. Встал вопрос, как же тогда формируются другие пункты, которые разблокированы для использования? Или это я лопух и поздно ставлю бряк на эту функцию? На Delphi не писал сам никогда, поэтому мог упустить какую-то банальную вещь, о которой просто даже не подозреваю.

В итоге, суть данного поста - помогите, пожалуйста, советом. Почему после распаковки софт ведёт себя таким образом? Подскажите куда посмотреть в коде. Есть ли какой-то обвес от автора?
Какие ещё функции могут задавать статус кнопок? Я не лентяй, прежде, чем писать сюда, усердно пользовался поиском, но свойств типа Enabled у кнопок в данной проге нет, тогда всё было бы очень просто, менять с false на true. EnableMenuItem на некоторые пункты просто не действует. Что ещё может быть?
Самые интересные кнопки
--> Запись в SPD 1<--
--> Запись в SPD 2<--

Буду благодарен любым советам, любой помощи.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 23 декабря 2018 22:07
· Личное сообщение · #2

http://forum.ru-board.com/topic.cgi?forum=35&topic=33758&start=220#lt
Только для зарегеных пользователей
все уже сломано
пользуйтесь



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

Создано: 23 декабря 2018 22:18
· Личное сообщение · #3

reversecode
Дело в том, что это я и есть, если Вы про последнее сообщение в той теме.
7 версия работает только на х86 и не берёт новые ПК, к тому же каждая версия этого ПО имеет внутреннюю тайм бомбу. Ещё 7-ая версия работает только, если выставить системную дату на апрель 2011 и до загрузки ОС. Как гласит реклама в футтере "Нужно вылечить программу? Взломай сам". Вот и хочу сделать 15 версию. Кейген от 7-ой версии не подходит, уже пытался "обмануть систему". Прежде, чем написать сюда, я действительно перелопатил много информации, чтобы не отнимать время других людей. Если у кого-то из здешних товарищей будет время, чтобы подсказать мне в какую сторону идти, буду очень благодарен.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 23 декабря 2018 22:22
· Личное сообщение · #4

на борде есть раздел запрос на взлом
там пробовали запостить ?



Ранг: 9.2 (гость), 1thx
Активность: 0=0
Статус: Участник

Создано: 24 декабря 2018 09:51
· Личное сообщение · #5

ставь бряки на запись mov eax,dword ptr ds:[5C4EB4] и mov eax,dword ptr ds:[5C5154]
и лови момент, когда туда будет что-то писаться.
Или глобально в IDA поищи ссылки на эти адреса.
Тебя надо найти кусок где идет проверка, а ты сейчас смотришь на следствия этой проверки.
Возможно это решит сразу и проблему недоступных кнопок.




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

Создано: 24 декабря 2018 09:58
· Личное сообщение · #6

> функционал полной версии есть, но он станет доступным, только если рядом с прогой будет лежать валидный regdata.rkf файл.

Так эту проверку и нужно искать. Так как дальше она определяет логику работы апп; если меню доступно, это не значит что оно будет работать.

> как же тогда формируются другие пункты

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

-----
vx




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

Создано: 24 декабря 2018 10:53
· Личное сообщение · #7

shura_k,difexacaw
Спасибо за ответы.

shura_k, да, согласен, расписал про проверку, а сам смотрел следствия. Сейчас посмотрю что там будет по записи в указанных местах.

difexacaw, вот тут интересно. Прога на дельфи, предположим, что она сама рисует меню и кнопки, значит, по идее, должна использовать формы и TMenu, и TButton. А если так, то у TButton должно быть свойство Enabled. В De decompiler засовывал распакованный файл, показало код форм и события кликов на кнопки, есть событие btWriteOnClick. Теоретически, полные функции заложены. Ну, или я ещё далёкий лох и всё это - мои неверные размышления, или размышляю верно, но есть ещё какие-то способы отрисовки меню, кроме как самим апп или через винапи. Спасибо, что уделили время и изложили свои мысли.




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

Создано: 24 декабря 2018 11:10
· Личное сообщение · #8

manavi4

Посмотрите апи монитором.

-----
vx




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 26 декабря 2018 02:36
· Личное сообщение · #9

manavi4
адреса файла с твоими листингами из дебагера не совпадают, скачал файл по твоей ссылке, распаковал и запустил - эта обычная демка. кнопки включаются элементарно стандартно для дельфи через edx, адрес 00460C68, шура выше верно написал, там 2-3 глобальных переменных которые содержат указатели на поведение
процедура проверки на анпак - 0050F7D4 банальная, открытие и получение размера, константа с которой сравнивается размер тут: 0050F808 |. C700 D8422600 MOV DWORD PTR DS:[EAX],2642D8, если больше то...



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

Создано: 26 декабря 2018 14:00 · Поправил: manavi4
· Личное сообщение · #10

SReg
Читаю вас и понимаю, что мой уровень где-то там, далеко-глубоко... Даже не представляю сколько у вас опыта в этом деле. Но очень благодарен вам за ваш комментарий. Для меня это очень важные и полезные знания на будущее. Знаю, что для вас эта программа не представляет интереса, поэтому я искренне благодарен вам за потраченное вами время.
По поводу различия в листинге. У меня в папке версий этого ПО от 7-ой до 15-ой и есть две 15-ые версии, одна DEMO, а вторая пишет FREE VERSION. Я проверил, я смотрел FREE VERSION. Прошу извинить, что не проверил версию и получилось, что листинг реально не от той версии, что в ссылке.
Все кнопки я разблокировал, ещё пару дней назад. Только остался один вопрос: когда формируется начальная форма с кнопками Create, Read и прочими, то кнопка Write скрывается. Какие только методы не брейкал, не могу отследить в какой момент кнопка Write убирается с панели. Много времени трассировал как CreateButton, так и Destroy. Возможно, что даже смотрел не то, что нужно было...




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

Создано: 26 декабря 2018 20:14 · Поправил: difexacaw
· Личное сообщение · #11

Твои адреса не совпадают
Есть адрес 0050F7D4, вы же всё можите".

-----
vx





Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 03 января 2019 13:43
· Личное сообщение · #12








Ранг: 568.2 (!), 465thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 03 января 2019 16:23
· Личное сообщение · #13

Gideon Vi
Да ладно так и написал

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.





Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 03 января 2019 16:34
· Личное сообщение · #14

ClockMan, огонь, вообще.
--> Link <--




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 03 января 2019 16:44
· Личное сообщение · #15

Начнет глумиться с аватарки, как кое-кто

-----
2 оттенка серого



 eXeL@B —› Вопросы новичков —› Распаковка ПО для работы с SPD ОЗУ и разлочка функций
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати