Сейчас на форуме: zombi-vadim, zds (+4 невидимых)

 eXeL@B —› Программирование —› Патч (или инжект) exe-файла для правильного Unicode-вывода в консоль
Посл.ответ Сообщение

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

Создано: 20 июня 2013 14:54
· Личное сообщение · #1

Подскажите, как решить следующую задачу:
есть EXE-приложение LogonSessions от Sysinternals (насколько я понял - консольное, архитектура x86, unicode, скомпилированное в Visual C). Исходников этого приложения нет.
Это приложение содержит баг, который в консоль вместо русских Unicode-символов выводит знаки вопроса (точнее, IMHO, это больше баг VC Runtime-библиотеки). Автор приложения знает об этом баге, исправил его в некоторых своих утилитах (например, Autoruns), но в других это делать не спешит...
В VC2005 Microsoft добавила корректную поддержку Unicode в консоли — для нормального вывода Unicode в консоль необходимо до первой команды вывода в консоль выполнить следующую команду:
_setmode(_fileno(stdout), _O_U16TEXT);

Собственно вопрос следующий:
хотелось бы как-то заставить это exe-приложение выводить в консоль нормально Unicode через инжектирование в адресное пространство exe-приложения (или может быть как-то без инжекта патчить таблицы импорта или ещё что-то) куска кода, выполняющего до первой команды вывода в консоль команду _setmode(_fileno(stdout), _O_U16TEXT);

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

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



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

Создано: 20 июня 2013 15:28
· Личное сообщение · #2

Напишите свою dll, которая будет из dllmain вызывать _setmode(_fileno(stdout), _O_U16TEXT);
Потом либо через инжектор запускайте, либо добавьте свою либу в импорт, чтоб автоматически подтягивалась



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

Создано: 20 июня 2013 23:14
· Личное сообщение · #3

Ютилиту LogonSessions можно написать самому. Список заюзанных системой сессий возвращает функция LsaEnumerateLogonSessions.
А вообще советую также взглянуть на аналогичные утилиты: mimikatz и WCE.



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

Создано: 21 июня 2013 13:12
· Личное сообщение · #4

Veliant пишет:
Напишите свою dll, которая будет из dllmain вызывать _setmode(_fileno(stdout), _O_U16TEXT);Потом либо через инжектор запускайте, либо добавьте свою либу в импорт, чтоб автоматически подтягивалась


А нет ли уже какой-нибудь готовой универсальной утилиты для инжекта или правки таблицы импорта? Или может быть дадите ссылки на примеры кода, как самому написать инжектор или правку импорта?



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

Создано: 21 июня 2013 13:21
· Личное сообщение · #5

OSA пишет:
Ютилиту LogonSessions можно написать самому.


LogonSessions - это просто пример одной утилиты. У Sysinternals их много, и большая часть из них имеет проблемы с Unicode. Поэтому и спрашиваю про вариант автоматического инжекта, применяемого с минимальными телодвижениями для любой Sysinternals-утилиты.

А вообще советую также взглянуть на аналогичные утилиты: mimikatz и WCE.
Спасибо. А не подскажите какие-либо консольные утилиты для перечисления:
- Windows desktops;
- Windows Stations;
- COM Classes;
- ActiveX Controls;
- DCOM Classes.


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


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