Можно ли изменить память процесса без VirtualAlloc {EX}

Тема в разделе "WASM.BEGINNERS", создана пользователем BadLogin, 18 май 2009.

  1. BadLogin

    BadLogin Серёга =)

    Публикаций:
    0
    Регистрация:
    9 окт 2008
    Сообщения:
    82
    Адрес:
    Сайнт-Пи
    Собственно сабж: надо изменить запущенный процес без выделения нового сегмента, нпример, поменять один оператор на другой =)
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Если разделяемая то да. Если имеется ввиду сервис NtAllocateVirtualMemory, то есть есчо NtMapUserPhysicalPages и NtMapViewOfSection.
     
  3. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    WriteProcessMemory
     
  4. barton

    barton New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2008
    Сообщения:
    164
    Адрес:
    Czechoslovakia
    VirtualFreeEx тоже "изменяет память процесса" )
     
  5. BadLogin

    BadLogin Серёга =)

    Публикаций:
    0
    Регистрация:
    9 окт 2008
    Сообщения:
    82
    Адрес:
    Сайнт-Пи
    имеется в виду, что есть сегмент кода ... работающий ... и надо изменить его, модифицировать уже заполненный сегмент - поменять там операторы, как в отладчике, а не добавлять новый сегмент там, где позволит процесс =)
     
  6. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    BadLogin
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Clerk
    Ей нужна привилегия, которая обычно не стоит даже у администратора.
     
  8. BadLogin

    BadLogin Серёга =)

    Публикаций:
    0
    Регистрация:
    9 окт 2008
    Сообщения:
    82
    Адрес:
    Сайнт-Пи
    Sol_Ksacap
    а какова методика ??
    Код (Text):
    1. 00041030              push    eax
    2. 00041031              insd
    3. 00041032              fidiv   word ptr [edi-48h]
    4. 00041032                          ; CODE XREF: spiderui.exe:00041055j
    5. 00041035
    6. 00041035 loc_41035:               ; CODE XREF: spiderui.exe:00041067j
    7. 00041035              jl      short near ptr loc_41013+1
    8. 00041037              ja      short near ptr unk_40FD9
    9. 00041037                          ; CODE XREF: spiderui.exe:00041059j
    10. 00041039              jnb     short near ptr loc_41017+1
    11. 0004103B              ja      short near ptr loc_4104C+2
    12. 0004103D              dec     esp
    13. 0004103E              fidiv   word ptr [edi+5]
    14. 00041041              dec     ebx
    15. 00041042              fidiv   word ptr [edi+2Dh]
    16. 00041042                          ; CODE XREF: spiderui.exe:000410A3j
    17. 00041045              dec     ebx
    как мне например по адресу 0004103D написать к примеру "JMP bla-bla-bla" ???

    Очень выручишь... =)
     
  9. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Сначала один должен овладевать численным значением кода операции 'Jmp xxx'. Заклинание кода.
    (Один должен учитывать, что длина инструкций 'Jmp xxx' составляет 2 или 5 байт, а длина 'dec esp' — один байт. Т.е. придётся перезаписать и следующую инструкцию.
    Можно включить отображение опкодов в листингах (options - general - disassembly - number of opcode bytes).

    Разобравшись с этим, можно вызывать WriteProcessMemory:
    Код (Text):
    1. ; нотация fasm
    2.  
    3. NewOpcodes:
    4. db $EB, $20, $90, $90        ; jmp $+20    ; nop    ; nop
    5. NewOpcodesSize = 4           ; количество байт для записи
    6.  
    7.  
    8. ...
    9. invoke OpenProcess, ProcessID
    10. invoke WriteProcessMemory, eax, $04103D, NewOpcodes, NewOpcodesSize, 0
    Результат:
    Код (Text):
    1. 0004103B    ja      short near ptr loc_4104C+2
    2. 0004103D    jmp short near 4105F    ; 4103f+$20
    3. 0004103F    nop
    4. 00041040    nop
    5. 00041041    dec     ebx
    6. 00041042    fidiv   word ptr [edi+2Dh]
    7. 00041045    dec     ebx
     
  10. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Что-то я мало что понял, но я так делал.

    Писал некоторый код на ассемблере.
    Открываю в OllyDbg KERNEL32.DLL
    Ищу там одни ноли. Тут осторожно надо действовать. Пусть это будет массив где-нибудь в конце секции кода.
    Пишу в OllyDbg туда код, написанный на ассемблере.
    Делаю дамп этого участка памяти
    И WriteProcessMemory по нужному адресу нужного процессса

    Ну, теперь можно этот код исполнить.
    Можно на него прыгнуть (jmp, тут о некоторых тонкостях надо позаботиться, как-то: прописывание jmp в нужное место и прочее)
    Можно создать поток в отдалённом процессе.

    ...Если не помог, так, может, натолкнул на некоторые мысли.
     
  11. BadLogin

    BadLogin Серёга =)

    Публикаций:
    0
    Регистрация:
    9 окт 2008
    Сообщения:
    82
    Адрес:
    Сайнт-Пи
    Sol_Ksacap
    Спасибо!
     
  12. BadLogin

    BadLogin Серёга =)

    Публикаций:
    0
    Регистрация:
    9 окт 2008
    Сообщения:
    82
    Адрес:
    Сайнт-Пи
    amvoz

    мне вообщем-то не имеет значения когда выполнится код и выполнится ли....мне интересен сам факт измениния кода запущенного процесса