Как запустить программу на выполнения после eё пропатчения

Тема в разделе "WASM.BEGINNERS", создана пользователем holld, 6 июл 2009.

  1. holld

    holld New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2008
    Сообщения:
    39
    Пишу патч на Ассемблере для программы, осталось только доделать процедура для запуска программы после её пропатчения.

    Вот код

    Код (Text):
    1. RunPath proc uses ebp
    2.  
    3. invoke CreateProcess,addr szTargetFileName,NULL,NULL,NULL,FALSE,CREATE_NEW_CONSOLE or CREATE_SEPARATE_WOW_VDM,NULL,NULL, addr StartInfo, addr ProcessInfo
    4. invoke    WinExec,addr szTargetFileName,SW_NORMAL
    5.  xor    eax,eax
    6.  ret
    7.  
    8.  RunPath endp
    После выполнения этого кода патч выдает ошибку и пропатченая программа не запускается.

    Я думаю это и за того что, пока патч запусчин программа занята патчем. (Файл занят другой программой)

    Вопрос как освободить программу от патча.
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    жжошь, пишы исчо
    зависит от того, как ты открывал файл. Скорее всего, надо сделать CloseHandle
    подозреваю, что ты криво пропатчил и сам файл оказался битым, а не в этом коде ошибка
    тоже неплохо
     
  3. holld

    holld New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2008
    Сообщения:
    39
    Пишу....

    Вот так, открываю вроде правильно.
    Код (Text):
    1. INVOKE CreateFile, ADDR szTargetFile, GENERIC_READ OR GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL
    Где именно, надо, поставить CloseHandle?

    Код (Text):
    1. xor ecx, ecx
    2. lea eax, nOffsets
    3. lea edx, nNewBytes
    4.  
    5. patch:
    6.  
    7. pushad
    8. pushad
    9.  
    10.            INVOKE SetFilePointer, hTargetFile, 00525E53h, NULL, FILE_BEGIN
    11.  
    12.           popad
    13.           add edx, ecx
    14.           INVOKE WriteFile, hTargetFile, edx, 1, ADDR nBytesWritten, NULL
    15.           invoke CloseHandle,eax
    16.           popad
    17.  
    18. inc ecx
    19. cmp ecx, SIZEOF nNewBytes
    20.  
    21. je endpatch
    22.  
    23. jmp patch
    24.  
    25.               endpatch:
    Ставлю CloseHandle, после WriteFile, безуспешно программа всё равно занята патчем...

    Если не патчить, программу а просто проверить этот код без функции патча то он запускает программу

    патч программу правильно патчит, просто не выходит сделать так чтобы после, пропатчения, программы,программа ,не была, занята патчем. Именно и за этого патч, и не запускает программу. Если попытаться запустить программу когда патч работает, то Винда выдает ошибку "Файл занят другой программой",0_O...
    Спасибо, я знаю...

    P.s Может тут дело не только в CloseHandle...
     
  4. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    INVOKE WriteFile, ...
    invoke CloseHandle,eax
    Функция WriteFile возвращает не Handle файла, а всего-лишь флаг успешности ;)
    И вообще заведи нормальные переменные для Handle и др., а не парься с pushad, или используй то что api сами сохраняют значения регистров edi, esi, ebx, ebp.
     
  5. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    ну это никак не свидетельствует о том, что патч сделан правильно
    вобщем, правильно тебе Y_Mur подсказывает
     
  6. holld

    holld New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2008
    Сообщения:
    39
    Y_Mur, MSoft, парни спасибо вам огромное!!!

    Мне нужно было указать для CloseHandle, hTargetFile, а не eax

    Вот код

    Код (Text):
    1. RunProgramm proc   ,hWnd:HWND
    2. invoke CloseHandle, hTargetFile
    3. invoke CreateProcess,addr szTargetFileName,NULL,NULL,NULL,FALSE,CREATE_NEW_CONSOLE or CREATE_SEPARATE_WOW_VDM,NULL,NULL, addr StartInfo, addr ProcessInfo
    4. .IF EAX==0
    5. INVOKE MessageBox, hWnd, ADDR szOpenErrorMsg, ADDR szOpenErrorTitle, MB_ICONERROR OR MB_OK 
    6. .endif
    7. xor eax, eax
    8. ret
    9. RunProgramm endp
    Assembler Rules.....
     
  7. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    затея запускать программу патчем не совсем здравая -- зачем каждый раз переписывать пропатченый файл ???
     
  8. holld

    holld New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2008
    Сообщения:
    39
    С чего ты взял, что я собираюсь переписывать пропатченый файл...
    Не совсем здравая идея это писать патч на Делфи.

    Я сделал так после того как нажата кнопка Path и Path, успешно отроботол после некоторых проверок, появляется Msg и user сам выберет запустить ему пропатченную программу иле нет.
     
  9. hack_virii

    hack_virii New Member

    Публикаций:
    0
    Регистрация:
    7 июн 2009
    Сообщения:
    71
    ахахах!! жжошь! ;)
    Ну я как-то писал патч на VB 6.. =)Е
     
  10. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    я думал что все намного просще запустил patch.exe someprog.exe и на этом все, а у тебя там интерфейс и все такое ...