На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> запись в сегмент кода
    привет всем.
    подскажите если знаете, как сдлеать возможным запись в сегмент кода для Win32 в пользовательском режиме (ring 3) ?
    я выставил для текущего процесса DEBUG привелегию через апишные функции.
    но все одно при попытке записи в сегмент кода выскакивает ексепшен !!!

    если есть какие идеи, буду благодарен !

    Добавлено
    самое главное забыл, что писать должен процесс сам в себя !
      WriteProcessMemory вообщето...
        WriteProcessMemory известно, но какая в сущности разница.
        вот такой имеется код.
        EncryptStart2 и EncryptEnd2 это метки в самом сегменте кода.
        по идее долэжно работать!!!
        но....
        почему ?


        DecryptProc proc uses edi lpStart, lpEnd: DWORD
        mov edi, lpStart
        .WHILE edi != lpEnd
        inc edi
        xor byte ptr[edi-1], 5
        not byte ptr[edi-1]
        .ENDW
        ret
        DecryptProc endp

        start:

        invoke DecryptProc, offset EncryptStart2, offset EncryptEnd2
          врете вы все
          нада просто при компиляции дать сегменту кода атрибуты реад-врите-ехекуте
          и все
          или же непосредственно в процессе изменить атрибуты участка кода
            милый человек, поделись плз. как ето сделать ?
            "или же непосредственно в процессе изменить атрибуты участка кода"

            честное слово, чего то не догоняю.
            а как ето можно изменить атрибуты участка кода ?
            сегмента кода еще можно наверное , а ето как ?
            очень надо !!!!!!!!!!
              Блин я то думал писать в любой экзешник :lol:
              bench, смотри дерективы компилятора, ты каким пользуешься?
                элементарно Ватсон :)
                лирическое отступление, обычно сегмент кода имеет атрибуты реад-ехекуте
                тоесть оттуда можно читать и запускать и вот писать туда нельзя, будет ексцепшин 100%
                но если мы используем функ VirtualProtect то проблема решится :)))
                http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/virtualprotect.asp
                  я юзаю MASM.
                  сейчас просмотрел, но такой директивы не нашел. :(

                  Добавлено
                  всем пасибо !!!!

                  оказвается можно через линковщик задать атрибуды сегмента.
                  во как оно делается:

                  link.exe /SUBSYSTEM:WINDOWS /section:.text,ERW body.obj
                    есть еще вариант - весь код хранить в секции данных - я так делаю ;) :
                    ExpandedWrap disabled
                      .386
                      .model flat, stdcall ;; это тасм, но с масмом все тоже самое
                      .data
                       
                      start:
                      extrn ExitProcess: proc
                      push eax
                      call ExitProcess
                       
                      end start
                      Цитата cqwerty @
                      это тасм, но с масмом все тоже самое


                      Фиг. Use of register assumed to error. Низя это в MASM, надо /section:.text,ERW
                      А вот данные в коде - пжалста, хотя это логично.
                        TauxCanolf, млин, ну никто же не мешает тебе использовать какую-нить тулзу типа pewrsec?
                          Хм...
                          а функцию
                          ExpandedWrap disabled
                            The VirtualProtect function changes the protection on a region of committed pages in the virtual address space of the calling process.
                            BOOL VirtualProtect(
                              LPVOID lpAddress,
                              SIZE_T dwSize,
                              DWORD flNewProtect,
                              PDWORD lpflOldProtect
                            );


                          flNewProtect = PAGE_EXECUTE_READWRITE;

                          З.Ы. И не забыть, что lpflOldProtect, несмотря на то, что пишут в MSDN, не может быть NULL.
                            Цитата cqwerty @
                            TauxCanolf, млин, ну никто же не мешает тебе использовать какую-нить тулзу типа pewrsec?


                            Мне гораздо проще написать 17 буковок в директиве линкеру.
                              Цитата TauxCanolf @
                              Мне гораздо проще написать 17 буковок в директиве линкеру.

                              Все ж таки rcz привел более правильный и логичный вариант. Первоначально IsBadWritePtr и следуещее (по отказу) VirtualProtect ...
                                Цитата Rouse_ @
                                Все ж таки rcz привел более правильный и логичный вариант. Первоначально IsBadWritePtr и следуещее (по отказу) VirtualProtect ...


                                Это универсальный вариант. Т.е. для ЛЮБОЙ, произвольной области памяти(выделенной конечно). А если доподлинно известно, что своя, родная секция разрешена на запись, вполне можно писать туда без уточнения (типа ты прежде чем позвонить другу каждый раз пробиваешь, его ли это номер :) )
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0352 ]   [ 14 queries used ]   [ Generated: 19.05.24, 00:15 GMT ]