Прошу помочь найти выход.

Тема в разделе "WASM.ASSEMBLER", создана пользователем EvilsInterrupt, 23 сен 2004.

  1. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Есть код мне надо в .0030100E передать управление на .00401038, потом

    вернуться на .00401018. В этом случае приложение отказывается работать

    после .00401018.

    Какой должен быть правильный маш.код в .0040103E, чтобы прога работала

    нормально?



    .00401000: 6A00 push 000

    .00401002: 6800304000 push 000403000 -----v (1)

    .00401007: 6819304000 push 000403019 -----v (2)

    .0040100C: 6A00 push 000

    .0040100E: E81F000000 call MessageBoxA ;USER32.dll --



    .00401013: E826000000 call .00040103E -----v (4)



    ->.00401018: 6A00 push 000



    .0040101A: 6832304000 push 000403032 -----v (5)

    .0040101F: 6800E80700 push 00007E800 ;" •ш "

    .00401024: 6A00 push 000

    .00401026: E807000000 call MessageBoxA ;USER32.dll --

    .0040102B: 6A00 push 000

    .0040102D: E806000000 call ExitProcess ;KERNEL32.dll

    .00401032: FF2508204000 jmp MessageBoxA ;USER32.dll

    .00401038: FF2500204000 jmp ExitProcess ;KERNEL32.dll



    /? .0040103E: C3 retn
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    Бесполезно , после 00401038 ты уже никуда не вернёшся :))
     
  3. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Тода что подвинут эти байты и поэкспереминтировать так с самомодификацией? (ff 25...)
     
  4. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    Подвинуть можно жену в кровати , а в ассемблере это как ? :) Тебя чтоб понять , надо уйму извилин напрячь , старайся лучше восемь раз , разными предложениями объяснить один вопрос , чем двумя словами все .



    "FF25..." тут jmp в KERNEL32.dll на код ф-ции ExitProcess , она управление не возвращает .
     
  5. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Это понятно, я хотел попробывать изменить характреристики секции кода на запись и поэксперементировать за этим по изменял немного 2 урок Исцелиона, что привело к коду выше.

    сначала я в хью сделал без инструкции в .00401013 все работало потом немного сместил, есно и поправки в коде сделал перестало работать. Думаю сместить код в .401032 по ниже чтобы до него сделать че нить с самомодификацией и понаблюдать за реакцией винды. или как лучше это все обставить?
     
  6. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Ладно как от call`a возвратиться? Какой маш код, если не каких параметров не передается?
     
  7. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Так ret у тебя стоит в том месте , куда call указывает , всё правильно , после него переходишь к следующей за call (т.е. 00401018) , а там должен выскочить второй месаджбокс (правда с кривыми параметрами - " •ш ") , потом прога завершаеться .



    Что у тебя не работает , ты хотел сделать так ?
    Код (Text):
    1.         invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK
    2.         call   @F
    3.         invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK
    4.         invoke ExitProcess,NULL
    5. @@:     ret




    Вот кстати как масм может тоже и без лишних джампов :
    Код (Text):
    1. 00401000 >/$  6A 00         PUSH 0                                          ; /Style = MB_OK|MB_APPLMODAL
    2. 00401002  |.  68 00304000   PUSH msgbox.00403000                            ; |Title = "Iczelion's tutorial no.2"
    3. 00401007  |.  68 19304000   PUSH msgbox.00403019                            ; |Text = "Win32 Assembly is Great!"
    4. 0040100C  |.  6A 00         PUSH 0                                          ; |hOwner = NULL
    5. 0040100E  |.  FF15 08204000 CALL NEAR DWORD PTR DS:[<&user32.MessageBoxA>]  ; \MessageBoxA
    6. 00401014  |.  E8 1C000000   CALL msgbox.00401035
    7. 00401019  |.  6A 00         PUSH 0                                          ; /Style = MB_OK|MB_APPLMODAL
    8. 0040101B  |.  68 00304000   PUSH msgbox.00403000                            ; |Title = "Iczelion's tutorial no.2"
    9. 00401020  |.  68 19304000   PUSH msgbox.00403019                            ; |Text = "Win32 Assembly is Great!"
    10. 00401025  |.  6A 00         PUSH 0                                          ; |hOwner = NULL
    11. 00401027  |.  FF15 08204000 CALL NEAR DWORD PTR DS:[<&user32.MessageBoxA>]  ; \MessageBoxA
    12. 0040102D  |.  6A 00         PUSH 0                                          ; /ExitCode = 0
    13. 0040102F  \.  FF15 00204000 CALL NEAR DWORD PTR DS:[<&kernel32.ExitProcess>]; \ExitProcess
    14. 00401035   $  C3            RETN
     
  8. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Что у тебя не работает , ты хотел сделать так ?

    Именно но хотел ручками,через хью уже в готовом

    invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK

    ; call @F

    invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK

    invoke ExitProcess,NULL

    ;@@: ret
     
  9. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Блин скажите пожалуйста дату выхода в свет хью, я эту дату за дату программиста возьму. Ваще рульный прога.
     
  10. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Володя.



    Взял таблицу секций от calc.exe w2k sp4 и думаю где же точка

    входа гланул на 4й dword говорит, что 00000600 гляжу и вижу,

    что то где останавливается олли или сайс, т.е. на 55 8B не по-

    хоже. А потом смотрю все четвертые цифры 77 и тут доперло, что

    это похоже на импорт. :) Вот ведь поглючило.

    Че это за хрень какого хера в начале не 55 8B, а какой то "лож-

    ный импорт" глянул в DATA_DIRECTORY тама есть bound может, это

    как то влияет?



    Ты уж не взыщи задолбался по обрывакам информацию собирать,т.к.

    в Питреке джунгли да и в твоих статьях не меньше прохода. :dntknw:



    Мне еще интересно на этапе компиляция код должен начинать, чо

    нить вроде этого:

    int main()

    {

    ... то что идет ниже как я думаю должно ложиться в секцию кода

    и на это место должен указывать PointerRawData!

    Так ли это?