Как определить Месторасположение моей функции в *.exe
От: WoldemaR Россия  
Дата: 28.08.06 10:26
Оценка:
Есть проект на VC++.
Исходный код могу править как надо.

Как определить Месторасположение некоторой моей функции в *.exe?

Предполагается использовать тупые асм-вставки и использовать их как сигнатуру для поиска в памяти.

Если нет более кошерного пути, то прошу — подскажите, какие асм-вставки лучше всего использовать?
Re: Как определить Месторасположение моей функции в *.exe
От: 0xd34df00d Россия  
Дата: 28.08.06 10:47
Оценка:
Здравствуйте, WoldemaR, Вы писали:

WR>Есть проект на VC++.

WR>Исходный код могу править как надо.

WR>Как определить Месторасположение некоторой моей функции в *.exe?

.map файлы? AFAIK, они для объектников, но если поиграться, то можно получить хорошие результаты.

WR>Предполагается использовать тупые асм-вставки и использовать их как сигнатуру для поиска в памяти.

WR>Если нет более кошерного пути, то прошу — подскажите, какие асм-вставки лучше всего использовать?
Зачем ассемблерные... создай какую-нибудь строку и все... потом по этой строке ищи.
And solder won't keep me together (c)
Re: Как определить Месторасположение моей функции в *.exe
От: Demon Россия  
Дата: 28.08.06 10:55
Оценка: 1 (1)
Здравствуйте, WoldemaR, Вы писали:

WR>Есть проект на VC++.

WR>Исходный код могу править как надо.

WR>Как определить Месторасположение некоторой моей функции в *.exe?


WR>Предполагается использовать тупые асм-вставки и использовать их как сигнатуру для поиска в памяти.


WR>Если нет более кошерного пути, то прошу — подскажите, какие асм-вставки лучше всего использовать?


Сделай их экспортируемыми.
А дальше уж сам смотри что с ними делать, хошь — GetProcAddress(), хошь — анализ PE.
Честнее получается и надежнее.
Re[2]: Как определить Месторасположение моей функции в *.exe
От: WoldemaR Россия  
Дата: 28.08.06 11:03
Оценка:
Здравствуйте, 0xd34df00d, Вы писали:

0>Зачем ассемблерные... создай какую-нибудь строку и все... потом по этой строке ищи.




А строка будет висеть на стеке...
Re[2]: Как определить Месторасположение моей функции в *.exe
От: WoldemaR Россия  
Дата: 28.08.06 11:04
Оценка:
Здравствуйте, Demon, Вы писали:

D>Сделай их экспортируемыми.

D>А дальше уж сам смотри что с ними делать, хошь — GetProcAddress(), хошь — анализ PE.
D>Честнее получается и надежнее.

Нет. Такой вариант не катит. (нестану объяснять почему)

К тому-же надо как-то определять конец функции.
Re: Как определить Месторасположение моей функции в *.exe
От: Conr Россия  
Дата: 28.08.06 11:37
Оценка: 4 (1)
Здравствуйте, WoldemaR, Вы писали:

WR>Если нет более кошерного пути, то прошу — подскажите, какие асм-вставки лучше всего использовать?

первое, что пришло в голову — вставить в начало и конец функции int 3, штук несколько. такой код точно в обычной жизни не встречается . А, проанализировав, забить nop'ами, чтобы не мешались.
Re[3]: Как определить Месторасположение моей функции в *.exe
От: zaufi Земля  
Дата: 28.08.06 11:43
Оценка: 4 (1)
Здравствуйте, WoldemaR, Вы писали:

WR>Здравствуйте, Demon, Вы писали:


D>>Сделай их экспортируемыми.

D>>А дальше уж сам смотри что с ними делать, хошь — GetProcAddress(), хошь — анализ PE.
D>>Честнее получается и надежнее.

WR>Нет. Такой вариант не катит. (нестану объяснять почему)


WR> К тому-же надо как-то определять конец функции.


вот с этим могут быть проблемы... никто не обещал что "конец у функции в машинном коде" буит один

что касаца вставок это может быть много чего... примеры:
  push eax
  mov eax, 0DEADFACEh
  pop eax
  ; или 
  jmp label
  db 'my MEGA function starts here'
label:


при определенных обстоятельствах можно убрать сохранение|восстановление eax...
Re[2]: Как определить Месторасположение моей функции в *.exe
От: zaufi Земля  
Дата: 28.08.06 13:18
Оценка:
Здравствуйте, Conr, Вы писали:

C>Здравствуйте, WoldemaR, Вы писали:


WR>>Если нет более кошерного пути, то прошу — подскажите, какие асм-вставки лучше всего использовать?

C>первое, что пришло в голову — вставить в начало и конец функции int 3, штук несколько. такой код точно в обычной жизни не встречается . А, проанализировав, забить nop'ами, чтобы не мешались.

оч многое в данном предложении зависит от... начиная от задачи (полные усолвия которой мы кстати не знаем) и заканчивая библиотеками|тулзами|ОСями используемыми в проекте.

`0xCD 0x03' сколько бы ни было штук могут этой функции и не принадлежать
  • это чужая прилинкованная библиотека
  • это пролог|эпилог компилятора (кто его туда сунул и почему он такой -- другой вопрос)
  • мы выполняемся под отладчиком или какойлибо другой странной тулзой... или это просто юзер из SoftIce "шутит"

    идея забить нопами тоже во многом спорна... некоторые ОС в таком случае воплне могут "забить" закой процесс насмерть за это
  • Re[3]: Как определить Месторасположение моей функции в *.exe
    От: Conr Россия  
    Дата: 28.08.06 15:12
    Оценка:
    Здравствуйте, zaufi, Вы писали:

    Z>оч многое в данном предложении зависит от... начиная от задачи (полные усолвия которой мы кстати не знаем) и заканчивая библиотеками|тулзами|ОСями используемыми в проекте.

    Ну, исходя из VC++ можно предположить что все-таки Windows

    Z>`0xCD 0x03' сколько бы ни было штук могут этой функции и не принадлежать

    Z>
  • это чужая прилинкованная библиотека
    Код свой, потому как есть возможность его менять.

    Z>
  • это пролог|эпилог компилятора (кто его туда сунул и почему он такой -- другой вопрос)
    за тикие прологи стрелять надо через повешение Опять-таки помним про VC++, он таких финтов вроде не делает

    Z>
  • мы выполняемся под отладчиком или какойлибо другой странной тулзой... или это просто юзер из SoftIce "шутит"
    насколько я понимаю, планируется шифровать или как-то видоизменять функции налету, без участия пользователя. + присутствие отладчика можно при необходимости попытаться обнаружить.

    Z>идея забить нопами тоже во многом спорна... некоторые ОС в таком случае воплне могут "забить" закой процесс насмерть за это

    ну не нопами, так push eax xor eax, eax pop eax, это несущественно. Если все так серьезно можно взять ade32 или любой другой disam engine и морфить налету. Кстати, а можно поподробнее прокомментировать бан за нопы от системы? Не приходилось как-то сталкиваться...
  • Re[2]: Как определить Месторасположение моей функции в *.exe
    От: IceStudent Украина  
    Дата: 29.08.06 05:52
    Оценка:
    Здравствуйте, Conr, Вы писали:

    C>первое, что пришло в голову — вставить в начало и конец функции int 3, штук несколько. такой код точно в обычной жизни не встречается . А, проанализировав, забить nop'ами, чтобы не мешались.

    А загляни-ка в дизасм к PE32 от VC++ и посчитай, сколько там этих int 3 (0xCC) в начале и конце функции
    --
    wbr, icestudent
    Re: Как определить Месторасположение моей функции в *.exe
    От: IceStudent Украина  
    Дата: 29.08.06 05:52
    Оценка:
    Здравствуйте, WoldemaR, Вы писали:

    В чём вопрос вообще? Адрес функции известен на стадии компиляции. Или тебе нужно определить RVA её? Ну тогда если известен IMAGE_BASE (задаётся в опции линкера), тогда RVA = VA — IMAGE_BASE.
    --
    wbr, icestudent
    Re[4]: Как определить Месторасположение моей функции в *.exe
    От: zaufi Земля  
    Дата: 29.08.06 08:44
    Оценка:
    Здравствуйте, Conr, Вы писали:

    C>ну не нопами, так push eax xor eax, eax pop eax, это несущественно. Если все так серьезно можно взять ade32 или любой другой disam engine и морфить налету. Кстати, а можно поподробнее прокомментировать бан за нопы от системы? Не приходилось как-то сталкиваться...

    имееца ввиду AV т.к. кодовый сегмент может быть execution only -- т.е. туда не то что писать, почитать не дадут (без извратов)
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.