Изменение eip потока в runtime

Тема в разделе "WASM.BEGINNERS", создана пользователем mix_mix, 20 фев 2007.

  1. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    Ламерский вопрос, но... В общем основная задача - скрытые проги от антивируса. Стандартная EP данного файла (злостного вируса :) указывает на код с единственной интсрукцией ret. А затем в runtime процесса (опять же, вируса) нужно поменять eip главного потока на настоящий код (распаковщик).
    В принципе, хотел сделать так: создаю процесс с флагом CREATE_SUSPENDED, получаю CONTEXT главного потока, правлю eip, SetThreadContext, ну и возобновить главный поток. Фигня поисходит на 2 пункте - GetThreadContext возвращает ERROR_NOACCESS. И как можно воплотить сие в жизнь? Надеюсь не только средствами DebugAPI :)
    P.S. Кстати, да, подобная тема на форуме была, но там не совсем то, что надо.
    Код (Text):
    1. xor ebx, ebx
    2. call    [CreateProcess], ebx, Process, ebx, ebx, ebx, CREATE_SUSPENDED, ebx, ebx, sinfo, pi
    3. call    [GetThreadContext], [pi.hThread], context ; <-- ERROR_NOACCESS
    4. mov [context.regEip], 0146A162h
    5. call    [SetThreadContext], [pi.hThread], context
    6. call    [ResumeThread], [pi.hThread]
    7. ret
    8. sinfo       STARTUPINFO
    9. pi      PROCESS_INFORMATION
    10. context     CONTEXT
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    //offtop

    mix_mix
    скажу тебе по секрету, антивирь сильно ругается на SetThreadContext (динамическая защита, конечно).
     
  3. Hellspawn

    Hellspawn New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2006
    Сообщения:
    310
    Адрес:
    Москва
    Cont.ContextFlags:=CONTEXT_CONTROL;
     
  4. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    Hellspawn
    Эмм... прошу заметить, что ошибку возвращает GetThreadContext.
    --Added
    Тоесть здесь получается, что я пытаюсь изменить контекст потока другого процесса.
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    А разница?
     
  6. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    хз :)
    сейчас попробую DuplicateHandle вызвать вначале, хотя если это что-то даст...
     
  7. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    Hellspawn
    Да, не догнал сразу насчет твоего совета. Thanx
    Ну а вобщем ошибка была как всегда в самой незначительной части проги - структуру CONTEXT надо выравнивать по границе 4 байта. Блин, я чуть со смеху не помер :)
     
  8. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Оффтоп.
    А про выравнивание структур для АПИ вызовов - это уже из разряда рекомендаций для скорости перешло в разряд обязательных требований разве? Я в шоке. А в документации от мелкомягких кто-нибудь видел подобные требования по выравниванию структур? Ткните носом пжлста)
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    asmfan
    новые негласные правила мелкомягких :)