eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: Xlab0s, UniSoft (+4 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Вопросы новичков —› Патчер DUP 2.26, настроить(убрать) вывод строк(лога) в ListBox
Посл.ответ Сообщение

Ранг: 1.0 (гость)
Статус: Участник

Создано: 26 ноября 2018 03:10 · Поправил: mp3muzika New!
Цитата · Личное сообщение · #1

Здравствуйте.
Есть на свете патчер под названием dUP v2.26.
У него есть скины типа standard_skin.res, которые можно редактировать программами типа resource_hacker и настраивать тем самым сам патчер.

Есть проблема: необходимо чтобы патчер не выводил в ListBox никакие логи (строки) по умолчанию, т.е чтобы он оставался полностью пустым, желательно и без пустых строк (не спрашивайте зачем). В патчере есть плагин [LogMessage], который может выводить настраиваемые сообщения в ListBox.

Добиться этого редактированием res файла у меня не получилось, максимум что вышло это заменить строки из таблицы на пустоту. Но в итоге такие логи типа адреса или имя конечного файла все равно попадают в лог. Или может я просто не знаю как это сделать правильно..

В патчере есть исходники плагина [Log Message] на ассемблере, и батник, конвертирующий их в dll и .dup файлы. Может можно как-то заставить этот плагин писать сообщения не в этот ListBox, а в другой, а этот просто убрать? Можно даже просто ID сменить у ListBox и уже в него ничего не пишется.



Ранг: 119.9 (ветеран)
Статус: Участник

Создано: 26 ноября 2018 08:56 · Поправил: f13nd New!
Цитата · Личное сообщение · #2

В сгенерированном патче есть ресурс 'dll', это как ни странно зашифрованная длл. Расшифровывается по-детски:
- берется очередной байт
- ксорится на младший байт 0xDEADBEEF
- 0xDEADBEEF циклически сдвигается на 1 бит вправо
Эта длл в ресурсах содержит этот самый скин и 3 диалога, в одном из которых этот листбокс.
Code:
  1.    CONTROL "", 111, LISTBOX, LBS_NOTIFY | LBS_NOINTEGRALHEIGHT | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP, 5, 88, 243, 47 , 0x00000200

В экспорте этой длл есть функция AddMsg, которая выводит строки в этот листбокс.
Code:
  1. 0F6622C0 PUSH EBP                                 ; dup2patcher.AddMsg(guessed Arg1)
  2. 0F6622C1 MOV EBP,ESP
  3. 0F6622C3 PUSHAD
  4. 0F6622C4 MOV ESI,DWORD PTR DS:[0F66D8BE]
  5. 0F6622CA OR ESI,ESI
  6. 0F6622CC JZ SHORT 0F6622FC
  7. 0F6622CE PUSH DWORD PTR SS:[EBP+8]                ; /lParam
  8. 0F6622D1 PUSH 0                                   ; |wParam = 0
  9. 0F6622D3 PUSH 180                                 ; |Msg = LB_ADDSTRING
  10. 0F6622D8 PUSH ESI                                 ; |hWnd
  11. 0F6622D9 CALL <JMP.&user32.SendMessageA>          ; \USER32.SendMessageA
  12. 0F6622DE PUSH 0                                   ; /lParam = 0
  13. 0F6622E0 PUSH 0                                   ; |wParam = 0
  14. 0F6622E2 PUSH 18B                                 ; |Msg = LB_GETCOUNT
  15. 0F6622E7 PUSH ESI                                 ; |hWnd
  16. 0F6622E8 CALL <JMP.&user32.SendMessageA>          ; \USER32.SendMessageA
  17. 0F6622ED DEC EAX
  18. 0F6622EE PUSH 0                                   ; /lParam = 0
  19. 0F6622F0 PUSH EAX                                 ; |wParam
  20. 0F6622F1 PUSH 186                                 ; |Msg = LB_SETCURSEL
  21. 0F6622F6 PUSH ESI                                 ; |hWnd
  22. 0F6622F7 CALL <JMP.&user32.SendMessageA>          ; \USER32.SendMessageA
  23. 0F6622FC PUSH OFFSET 0F66D10C                     ; /Arg1 = ASCII ""
  24. 0F662301 CALL 0F666D14                            ; \dup2patcher.0F666D14
  25. 0F662306 PUSH DWORD PTR SS:[EBP+8]                ; /Arg1
  26. 0F662309 CALL 0F666D14                            ; \dup2patcher.0F666D14
  27. 0F66230E POPAD
  28. 0F66230F LEAVE
  29. 0F662310 RETN 4

Вставляешь этот 'retn 4' в ее начало и больше там ничего не будет. Либо подменяешь в ней хендл листбокса, чтобы выводить в другой. На что фантазии хватит. Либо выборочно занопываешь вызовы этой функции, чтобы убрать определенные сообщения.

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



Ранг: 574.3 (!)
Статус: Модератор
Research & Development

Создано: 26 ноября 2018 11:11 New!
Цитата · Личное сообщение · #3

mp3muzika пишет:
Добиться этого редактированием res файла у меня не получилось

Сделай свой скин, в котором ListView вынеси за пределы основного окна, для этого в скрипте диалога задай любую из координат за пределами габаритов диалога. Как вариант можешь ешё и габариты окна лога уменьшить.
Сохрани этот скин и укажи его в настройках dUP.
При запуске патча он будет писать в лог, но сам лог виден не будет.

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


Ранг: 1.0 (гость)
Статус: Участник

Создано: 26 ноября 2018 13:16 · Поправил: mp3muzika New!
Цитата · Личное сообщение · #4

f13nd пишет:
В сгенерированном патче есть ресурс 'dll', это как ни странно зашифрованная длл.

Программой Resource Hacker я тоже видел что в созданном патче есть DLL, но она не читалась. От обычных людей она была скрыта Крестьянскими опытами я выяснил, что функция, которая пишет сообщения в ListBox, действительно называется AddMsg. Ушло на это у меня 2 дня, но дело в другом.
При составлении проекта в патчере есть плагин [Log Message], который, если посмотреть его код на ассемблере, тоже пишет в ListBox сообщения посредством этой функции AddMsg. Если поломать эту функцию, то и плагин вывода сообщений ничего не выведет в ListBox

Code:
  1. PLUGIN_Action proc uses esi edi ebx _plugin_data
  2.          
  3.          LOCAL local_return_value  :DWORD
  4.          LOCAL local_buffer[1024]  :BYTE
  5.  
  6.          mov esi,_plugin_data
  7.          
  8.          mov local_return_value,-1 ;no return value
  9.  
  10.                  
  11.          ;---post messages to patcher logbox---
  12.          lea ebx,[esi].MY_PLUGIN_DATA_STRUCTURE.message
  13.          
  14.          .if [esi].MY_PLUGIN_DATA_STRUCTURE.options & MSG_RESOLVE_ENV_VAR
  15.                  invoke ExpandEnvironmentStrings,ebx,addr local_buffer,sizeof local_buffer               ;expand internal vars
  16.                  lea ebx,local_buffer
  17.          .endif
  18.                  
  19.          fn AddMsg,ebx


Как теперь быть? Может можно, например, переименовать эту функцию и в DLL, и в плагине [Log Message]? Или так не делается?
Ведь проблема не в том, чтобы в ListBox лог не выводился. Можно просто убрать этот блок из скина и все. Нужно чтобы у плагина вывода сообщений [Log Message] осталась возможность писать в ListBox.
Jupiter пишет:
При запуске патча он будет писать в лог, но сам лог виден не будет.

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


Ранг: 574.3 (!)
Статус: Модератор
Research & Development

Создано: 26 ноября 2018 13:54 New!
Цитата · Личное сообщение · #5

mp3muzika пишет:
смысл не в том чтобы просто убрать лог из окошка патча


Это я понял из первого поста:
mp3muzika пишет:
чтобы он оставался полностью пустым, желательно и без пустых строк (не спрашивайте зачем)

но предложил альтернативный вариант, если нужно, чтобы лог был пустым, то можно создать другой ListView с другим ID, а лог, куда dUP выводит всё, вынести за пределы диалога.


mp3muzika пишет:
пишет в ListBox сообщения посредством этой функции AddMsg. Если поломать эту функцию, то и плагин вывода сообщений ничего не выведет в ListBox

Code:
  1. lea eax,AddMsg
  2. mov dword ptr [eax],900004C2h

при этом должны быть права на запись в эту область памяти, разумеется

в результате в начале AddMsg будет:

Code:
  1. 00000000: C20400  retn         4
  2. 00000003: 90      nop


`nop` добавил чтобы уместить в DWORD (900004C2) и записать патч одной командой.

Если же тебе будет необходимо использовать функцию AddMsg, то ты можешь:
- использовать патч, описанный мной выше, но вызывать AddMsg через свою функцию-обёртку, восстанавливая часть затёртого кода
- поставить хук на AddMsg и фильтровать сообщения как нужные/ненужны

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



Ранг: 119.9 (ветеран)
Статус: Участник

Создано: 26 ноября 2018 14:14 New!
Цитата · Личное сообщение · #6

mp3muzika пишет:
Как теперь быть? Может можно, например, переименовать эту функцию и в DLL, и в плагине [Log Message]? Или так не делается?

Я не знаю в каком виде этот плагин там существует и как работает. На самом деле неплохая идея точку входа в эту функцию в экспорте перенести, если этот плагин в виде другой длл. Это отсечет все сообщения, выводимые самой dup2patcher.dll, она адресует эту функцию по смещению. Но по-моему проще занопать вывод лишних сообщений, их там изнутри dup2patcher.dll 70 штук, а прикрыть нежелательных надо наверное 3-4 максимум.

Ранг: 1.0 (гость)
Статус: Участник

Создано: 26 ноября 2018 14:50 New!
Цитата · Личное сообщение · #7

f13nd пишет:
Я не знаю в каком виде этот плагин там существует и как работает.

Плагин там есть на ассемблере, на посл. скриншоте в 1м сообщении я показывал. Рядом батники, которые колдуют из них dll плагин для патчера. Этот патчер при генерации патча их использует.

Я вижу что вы знаете и понимаете как оно все работает. Но я так мыслить не умею, и попросту не могу понять что мне надо сделать конкретно.
Но самый главный вопрос все равно возникает: чтобы наладить свою схему вывода лога в ListBox, нужно ли будет каждый раз что-то на что-то "ксорить", или же можно сделать это на автоматической основе? Грубо говоря, отредактировать "что-то" в патчере или его исходниках плагина на ассемблере, и оно всегда будет выводить лог как хочется при каждом создании нового патча? Или так не выйдет?


Ранг: 574.3 (!)
Статус: Модератор
Research & Development

Создано: 26 ноября 2018 14:59 New!
Цитата · Личное сообщение · #8

mp3muzika пишет:
или же можно сделать это на автоматической основе

Если dUP позволяет запускать плагины на этапе инициализации диалога, до попытки вывода в лог, то да, можно.
Но даже если плагин запускается уже после того, как dUP что-то вывел в лог, этот лог можно очистить программно и выводить только то, что нужно.

Ксорить ничего не придётся, если при помощи плагина можно сделать патч или хук функции AddMsg, как описал в предыдущем комментарии.

Ранг: 1.0 (гость)
Статус: Участник

Создано: 26 ноября 2018 15:00 · Поправил: mp3muzika New!
Цитата · Личное сообщение · #9

f13nd, вы так ловко препарировали и выдернули dll в виде кода, но для меня это магия. Вы думаете я знаю как сделать также? Я бы хотел это проделать хотя бы по аналогии, просто повторить. Но каким инструментом вы пользуетесь и из чего состоит заклинание - я своими нетехническими умами не допру

Jupiter, плагин [Log Message] батниками (2мя) из ассемблера (посл. скрин в 1м сообщении) делает 2 одноименных файла с расширением dll и d2p

dll используется для того, чтобы в окошке патчера вообще была возможность выбрать из меню этот плагин. При запуске патчера он щупает папку с dll файлами и определяет что добавить в список плагинов. Далее в патчере он выбирается, пишешь в диалоге сообщение, нажимаешь сохранить, опция добавления сообщения добавлена в проект. А вот при создании уже готового патча, когда жмешь кнопку сделать патч, то патчеру нужен файл d2p, если его удалить то патчер поругается что наколдовать нормально патч из проекта не получается. Но он его все равно его наколдует, но по итогу плагин, выводящий в ListBox сообщения, в готовом патче работать не будет. Будто в проекте его и не прописывал никто.


Ранг: 119.9 (ветеран)
Статус: Участник

Создано: 26 ноября 2018 15:26 New!
Цитата · Личное сообщение · #10

mp3muzika пишет:
каким инструментом вы пользуетесь и из чего состоит заклинание - я своими нетехническими умами не допру

Ну не знаю, инструмент самый заурядный ollydbg. ПКМ -> Search for -> all intermodular calls -> LoadLibraryA -> F2 за вызовом этой функции -> F9 -> Alt-E -> двойной клик Dup2Patcher.dll -> ПКМ -> Search for -> Names -> AddMsg -> F2. При каждом вызове функции будет срабатывать бряк. Смотришь откуда она вызывается (в стеке, правая нижняя область, первая строчка) ПКМ -> Follow in disassembler.
Code:
  1. 0F2F632E 68 FCD02F0F PUSH OFFSET 0F2FD0FC
  2. 0F2F6333 E8 88BFFFFF CALL AddMsg

Если это нежелательная строчка, в нех-редакторе или как-нибудь еще эти 10 байт надо заменить на 90909090909090909090, это называеться "занопать". Как бы создавая тему ты по идее должен какой-то минимум знать и уметь, чтоб хотя бы иметь возможность применить то, что насоветуют.

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



Ранг: 574.3 (!)
Статус: Модератор
Research & Development

Создано: 26 ноября 2018 15:46 New!
Цитата · Личное сообщение · #11

Перенесено в Вопросы новичков

mp3muzika

По раскриптовке DLL из ресурсов: можешь использовать версию dUP без шифрования, но тогда, возможно, измениться баланс детектов антивирусами.


f13nd
Похоже, что всё сводится к тому, что ТС попросит помощи сделать за него )

Ранг: 1.0 (гость)
Статус: Участник

Создано: 27 ноября 2018 18:52 New!
Цитата · Личное сообщение · #12

f13nd, вы так все понятно объяснили, спасибо вам большое. Голова моя скрипела, нагревалась, но в итоге все переварила вами сказанное. Вы правы, надо понимать что тут могут насоветовать. И вы насоветовали прям то, что я сам не мог себе насоветовать

Вот я нашел место которое надо занопать (хорошо что есть гугл), занопал. Сидел радовался прям. Первая надпись патчера ---START PATCHING--- повержена в неравном бою. Аа.. дальше что? Как применить все это к патчу не знаю.


Jupiter пишет:
f13nd
Похоже, что всё сводится к тому, что ТС попросит помощи сделать за него )

А вот и не угадали Вы себе просто не представляете сколько надо сил чтобы переварить те простые вещи которые вы рассказываете. Но я стараюсь, и вы мне очень помогаете. Спасибо вам ребята ;) И гуглу


Ранг: 574.3 (!)
Статус: Модератор
Research & Development

Создано: 27 ноября 2018 19:16 New!
Цитата · Личное сообщение · #13

mp3muzika пишет:
А вот и не угадали

Рад буду ошибиться )

mp3muzika пишет:
Вы себе просто не представляете сколько надо сил чтобы переварить те простые вещи которые вы рассказываете

Прекрасно представляю ))
Все мы когда-то начинали с нуля

mp3muzika пишет:
я стараюсь, и вы мне очень помогаете. Спасибо вам ребята ;)

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


Ранг: 119.9 (ветеран)
Статус: Участник

Создано: 27 ноября 2018 19:22 New!
Цитата · Личное сообщение · #14

mp3muzika пишет:
Аа.. дальше что? Как применить все это к патчу не знаю.

ПКМ на строчке в листинге -> Go to -> Executable file. В левой колонке (address) будет FileOffset выбранной инструкции. По нему заходишь в нех-редакторе и исправляешь.

Ранг: 1.0 (гость)
Статус: Участник

Создано: 27 ноября 2018 20:39 New!
Цитата · Личное сообщение · #15

Что-то я делаю не так, а что не пойму. После хекс-редактора патч не запускается, жмакаю на него и вообще ничего не происходит.
Что я делаю. Загрузил свой файлик TEST.exe в программу. Далее все в точности как вы написали:
f13nd пишет:
Search for -> all intermodular calls -> LoadLibraryA -> F2 за вызовом этой функции -> F9 -> Alt-E -> двойной клик Dup2Patcher.dll -> ПКМ -> Search for -> Names -> AddMsg -> F2. При каждом вызове функции будет срабатывать бряк.

Вот сработал первый бряк

Далее в окошке CPU жму по строчке Go to -> Executable file, появляется еще одно окошко, в котором, как вы пояснили выше, нам нужно узнать смещение.

Далее открываю свой хекс-редактор, иду по этому смещению

Пожалуйста, беря во внимание мои скриншоты, покажите что именно и на что надо заменить в хекс-редакторе? Или я до этого пункта где-то ошибся?


Ранг: 119.9 (ветеран)
Статус: Участник

Создано: 27 ноября 2018 21:13 New!
Цитата · Личное сообщение · #16

mp3muzika пишет:
Пожалуйста, беря во внимание мои скриншоты, покажите что именно и на что надо заменить в хекс-редакторе?

Во-первых тебе нужен FO от 6D6B632E (верней две инструкции перед этим адресом), это адрес возврата в стеке справа внизу первая строчка. Во-вторых ты патчишь .ехе, а надо дллку (вызов из нее), которую потом надо будет обратно зашифровать и засунуть в ресурсы.

Ранг: 1.0 (гость)
Статус: Участник

Создано: 27 ноября 2018 23:27 · Поправил: mp3muzika New!
Цитата · Личное сообщение · #17

f13nd пишет:
надо будет обратно зашифровать и засунуть в ресурсы

Как положить обратно в ресурсы я разгадал

А вот на вашем слове "зашифровать" нахлынула печаль. Это наверняка в другом инструменте, при помощи скрипта?
f13nd пишет:
- берется очередной байт
- ксорится на младший байт 0xDEADBEEF
- 0xDEADBEEF циклически сдвигается на 1 бит вправо

Это но самое?


Ранг: 119.9 (ветеран)
Статус: Участник

Создано: 27 ноября 2018 23:41 · Поправил: f13nd New!
Цитата · Личное сообщение · #18

mp3muzika пишет:
Это но самое?

Немного не так изложил, вобщем вот (удалено) Шифровать этим же.

UPD: этим --> Link <--

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


Ранг: 1.0 (гость)
Статус: Участник

Создано: 28 ноября 2018 00:17 New!
Цитата · Личное сообщение · #19

f13nd, где можно посмотреть ваши контакты? Я вам должен на пиво
Всё получилось, всё работает. Это мне теперь опытов на несколько дней


Ранг: 119.9 (ветеран)
Статус: Участник

Создано: 28 ноября 2018 00:20 New!
Цитата · Личное сообщение · #20

mp3muzika пишет:
где можно посмотреть ваши контакты? Я вам должен на пиво

А я его не пью От привычки к энергетикам и никотину пытаюсь избавиться, а тут еще пиво. Не.


Ранг: 574.3 (!)
Статус: Модератор
Research & Development

Создано: 28 ноября 2018 09:07 New!
Цитата · Личное сообщение · #21

f13nd пишет:
вобщем вот

Интересное использование fasm g


Ранг: 119.9 (ветеран)
Статус: Участник

Создано: 28 ноября 2018 09:17 New!
Цитата · Личное сообщение · #22

Jupiter пишет:
Интересное использование fasm g

Он и раньше был комбайном для всего, возможность писать на нем программы была просто дополнительной опцией, а сейчас даже встроенный ассемблер из него убран за ненадобностью.
 eXeL@B —› Вопросы новичков —› Патчер DUP 2.26, настроить(убрать) вывод строк(лога) в ListBox

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS