перехват API и ASPack

Тема в разделе "WASM.WIN32", создана пользователем Codeblight, 19 ноя 2005.

  1. Codeblight

    Codeblight New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2005
    Сообщения:
    60
    Адрес:
    Russia
    ж-) Люди! Начитался я мануалов про перехват апи, решил попробовать. Создал Dll, перекрыл в ней нужные функции, потом прописал в AppInit_Dlls и оно заработало... но! при запуске приложений упакованных ASPack'ом они валятся... на остальных упаковщиках все нормально :dntknw: Каким образом можно это поправить ? кто-нибудь сталкивался с такими проблемами ???
     
  2. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    У тебя наверно перехват идет через таблицу импорта?
     
  3. Codeblight

    Codeblight New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2005
    Сообщения:
    60
    Адрес:
    Russia
    Ms Rem

    Не, у меня GetProccessAddress и модификация памяти DLL (Пример №2 c WASM.RU ;) про таблицу мне грозить не должно)... Причем валится он после попытки установить переход перехватываемой функции на мою (т.е. ставит, а потом дальше валик, если просто оттуда читать - все нормально) ... может как-то переходы вычисляются неверно ??? но винда после этого говорит что инструкция тра ля ля ушла по 0х000000 и не может быть read :) какие еще есть варианты ? (тока без пердложений потрейсить ASPack если можно :))
     
  4. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Странно, со сплайсингом у меня никогда проблем не было ни с ASPack ни с ASProtect программами.





    Отладчик - лучший инструмент для рзбора таких случаев, но раз это не нужно предлагать, то могу предложить погадать на кофейной гуще :)
     
  5. Codeblight

    Codeblight New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2005
    Сообщения:
    60
    Адрес:
    Russia
    8-) не, ну все понятно, я просто в асме не так крут :dntknw: особенно в разборке упакованны\защищенных модулей *)

    Вчера даже попробовал подебажить ASPack но руки у меня кривые и OllyDebug разругался и вылетел *). ASPack точно никак там на функции не намудряет ? может кто подскажет чего еще ?
     
  6. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    чтобы OllyDbg вылетел...

    это редкость.



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

    так вот у разработчика были траблы с Оперой как раз по причине аспака: см. http://www.freecap.ru/?p=buglist
     
  7. Codeblight

    Codeblight New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2005
    Сообщения:
    60
    Адрес:
    Russia
    8-) Всем спасибо, вопрос снимается :)

    Оказалось *) что некоторая функция в виндах иногда может возвращать NULL :) что в аспаковских поргах она часто делает *) баг нашелся после того, как вывалилась неупакованная прога *)

    Короче баг мой :)



    Jupiter

    Оля вылетал не с валиком а просто говорил что точка входа где то в другой программе, а явно не в этой :)



    Еще раз всем спосибо!
     
  8. Codeblight

    Codeblight New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2005
    Сообщения:
    60
    Адрес:
    Russia
    Ms Rem

    ты на комменты к своим статьям когда-нить отвечаешь :)?...

    Скажи, библиотека по AppInit_Dlls загружается после USER32.dll или после загрузки всех статических библиотек процесса ?
     
  9. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    После загрузки user32.dll
     
  10. Codeblight

    Codeblight New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2005
    Сообщения:
    60
    Адрес:
    Russia
    Ms Rem



    Странно, я в DllMain делаю GetModuleHandle("SHELL32.DLL") и он иногда там уже есть :) Библиотеки по моему логическому сценарию должы загружаться как

    ntdll

    kernel

    user32



    и т.п. *)



    Да, вопрос, можно ли перехватывать LoadLibrary ? у меня после этого некоторые апликашки просто не грузятся :dntknw: хотя функция просто тупо вызывает оригинал.

    Просто необходимо перехватить несколько функций в других либах, но так криво получается что на LoadLibrary я допустим могу перехватить частично, а в сетуации когда процесс грузится и загружает USER, а потом меня, то библиотеки за USER еще не загружены, а узнать кто загружался я смогу только по таблице импорта ??? но опять же когда я буду их ловить ? в MSDN написано что в DllMain нельзя грузить либы?.. как лучше сделать не подскажешь ?
     
  11. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"




    Ничего странного, просто в импортах приложения shell32.dll значит стоит раньше чем user32.







    Значит криво перехватываешь. Я для отслеживания загрузки библиотек ловлю LdrLoadDll.
     
  12. Codeblight

    Codeblight New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2005
    Сообщения:
    60
    Адрес:
    Russia
    Ms Rem

    А можно сделать так ??:

    1. при загрузке своей dll получить путь к exe и в нем получить путь к WinMain

    2. перекрыть WinMain на себя

    3. подождать пока туда придет управление :) прекрыть все загруженные dll и перекрыть LdrLoadDll (и функцию для выгрузки имя которой я не знаю)

    4. отдать управление WinMain ?



    Так можно засубкласить любые функции в загруженных либах, которые загрузчик загрузил ? (масло масляное).

    или загрузчик на каждой либе вызывает LdrLoadDll в моем процессе ?
     
  13. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"




    Можно, но в этом случае во время инициализации библиотек они могут вызвать еще непохуканые апи.



    Лучше перехватывать LdrLoadDll и LdrUnloadDll и отслеживать загрузку/выгрузку библиотек.
     
  14. Codeblight

    Codeblight New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2005
    Сообщения:
    60
    Адрес:
    Russia
    Ms Rem







    Ну как я понял - так уже и получается. с AppInit_Dlls оказалась идея плохая :dntknw: user32 при загрузке там внутри как-то инициализируется, после чего грузит мою либу, а мне надо перехватить функции до инициализации, т.к. после нее уже бестолку. Видимо придется учиться писать драйвера :dntknw:...



    Пошли меня в какое-нить определенное место, где понятно написано как загружается система (желательно на русском).



    p.s. в яндекс не посылать *)
     
  15. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"




    Тогда посылаю в google.