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

 eXeL@B —› Вопросы новичков —› пакер: GetModuleFileName не возвращает путь
Посл.ответ Сообщение

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

Создано: 23 мая 2010 02:22
· Личное сообщение · #1

Здравствуйте!

Пишу пакер.
Запускаю из него MFC приложение.
Оно вываливается из-за того, что GetModuleFileName не возвращает путь к файлу.
Т.е. возвращает 0 (это количество символов в пути).

Думал, что это как-то связано с TLS директорией, но её в MFC приложении нет...

Подскажите, с чем это может быть связано.



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

Создано: 23 мая 2010 02:27
· Личное сообщение · #2

А как ты функу вызываешь?



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

Создано: 23 мая 2010 02:33
· Личное сообщение · #3

это не я, а инициализации MFC
первым параметром она правильно передаёт 0x400000



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

Создано: 23 мая 2010 02:37
· Личное сообщение · #4

e53 Напугай куском кода где вызывается функа.
// На MFC не пишу ибо убогость.



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

Создано: 23 мая 2010 11:38
· Личное сообщение · #5

при инициализации MFC вызывается ф-ция void CWinApp::SetCurrentHandles()
так вот, в ней есть вызов
DWORD dwRet = ::GetModuleFileName(m_hInstance, szBuff, _MAX_PATH)
так вот здесь я получаю нулевую длину

хотя, возможно дело в том, что я, пока, в пакере использую CRT библиотеку?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 23 мая 2010 11:54
· Личное сообщение · #6

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



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

Создано: 23 мая 2010 17:53
· Личное сообщение · #7

После передачи управления пакуемому приложению идут следующие вызовы:
AfxWinMain
AfxWinInit
CWinApp::SetCurrentHandles()
так в последней есть вызов
DWORD dwRet = ::GetModuleFileName(m_hInstance, szBuff, _MAX_PATH);
так он возвращает 0 (длину строки, записанной в szBuff. Соответственно и в буфер ничего не пишется.

вызовы выше приведённых ф-ций происходят с корректными аргументами.

сложность для меня в том, что я ASM не знаю



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

Создано: 25 мая 2010 14:53 · Поправил: e53
· Личное сообщение · #8

пакер загружается по адресу 0x3c0000
выстраивает программу по 0x400000

Нашёл исходники GetModuleFileName
В ней вызывается LdrFindEntryForAddress
так мне нужно, что бы он для адреса, по которому я выстроил образ возвращал путь, по которому находится пакер

я пофиксил PEB.ImageBaseAddress это поправило работу GetModuleHandle()

а что мне нужно сделать, что бы LdrFindEntryForAddress отрабатывал корректно?


Ещё раз:
GetModuleFileName корректно работает, если ему передать адрес 0x3c0000
а мне нужно, что бы он корректно работал, если ему передать адрес 0x400000




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 25 мая 2010 16:20
· Личное сообщение · #9

Видимо, править базу в списке загруженных модулей, который нашарить в пебе можно.
З.Ы. А вообще каким-то говнокриптером для коней дело пахнет.



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

Создано: 25 мая 2010 16:26
· Личное сообщение · #10

все когда-то начинали с Hello, World!
или я не прав?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 25 мая 2010 17:09
· Личное сообщение · #11

Hello world-да, коней нет. И предлагаю оффтоп на этом закончить.


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


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