Написание Launcher

Тема в разделе "WASM.RESEARCH", создана пользователем aXe, 12 авг 2005.

  1. aXe

    aXe New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2004
    Сообщения:
    8
    Адрес:
    Russia
    Нужно сделать чтоб exe запускался только от определенной программы (launcher)

    Над исходным exe уже кто-то поработал и внем есть места куда можно вставить код (entrypoint начинается с джампа который перепрыгивает кучу nop)

    Так вот как определить какой процесс запустил этот ехе Из него самого
     
  2. bogrus

    bogrus Active Member

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

    mr_death New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2005
    Сообщения:
    42
    "Нужно сделать чтоб exe запускался только от определенной программы"



    Я бы сделал так: затер бы адрес OEP в нужном экзешнике, а потм launcher'ом подправил бы в памяти на оригинальный.
     
  4. aXe

    aXe New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2004
    Сообщения:
    8
    Адрес:
    Russia
    mr_death

    Да я впринципе уж почти сделал через ToolHelpAPI - т.к. нужно чтоб это работало и в 98 и в XP, НО всетаки каков алгоритм пропачивания в памяти?

    Надо CreateProcess с CREATE_SUSPENDED, а потом как-то поучить доступ к памяти процесса и там править или как?
     
  5. mr_death

    mr_death New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2005
    Сообщения:
    42
    НО всетаки каков алгоритм пропачивания в памяти?



    Вот пример лоадера к одной из прог :) Здесь как раз и происходит процесс патчинга.


    Код (Text):
    1.  
    2. .386
    3. .model flat, stdcall
    4. option casemap:none
    5.  
    6. include \masm32\include\windows.inc
    7. include \masm32\include\kernel32.inc
    8. include \masm32\include\user32.inc
    9.  
    10. includelib \masm32\lib\kernel32.lib
    11. includelib \masm32\lib\user32.lib
    12.  
    13. .data
    14. AppName db  "Loader", 0
    15. Proga   db  "yourproga.exe", 0
    16. Error   db  "File yourproga.exe not found!", 0
    17. buf1     DWORD 0Fh
    18. buf2     DWORD 084h
    19. buf3     DWORD 074h
    20.  
    21. addr1   DWORD 431B0Bh
    22. addr1_1 DWORD 431B0Ch
    23. addr2   DWORD 431B15h
    24. addr2_2 DWORD 431B16h
    25. addr3   DWORD 431B1Fh
    26. addr3_3 DWORD 431B20h
    27. addr4   DWORD 431B29h
    28. addr4_4 DWORD 431B2Ah
    29.  
    30. addr5   DWORD 431B51h
    31. addr6   DWORD 431BACh
    32.  
    33. .data?
    34. bufr    dw ?
    35. pInfo PROCESS_INFORMATION <>
    36. sInfo STARTUPINFO <>
    37. Count DWORD ?
    38.  
    39. .code
    40. start:
    41. invoke CreateProcess, ADDR Proga, NULL, NULL, NULL, FALSE,
    42.        NORMAL_PRIORITY_CLASS, NULL, NULL,
    43.        ADDR sInfo, ADDR pInfo
    44. .IF eax == 0
    45.     invoke MessageBox, NULL, addr Error, addr AppName, MB_OK+MB_ICONERROR
    46.     invoke ExitProcess, NULL
    47. .ENDIF
    48. .WHILE TRUE
    49.     invoke ReadProcessMemory, pInfo.hProcess, addr1, addr bufr, 1, Count
    50.     .IF eax != 0
    51.     .IF bufr != 00h
    52.     invoke SuspendThread, addr pInfo.hThread
    53.     ; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« «««
    54.     invoke WriteProcessMemory, pInfo.hProcess, addr1, addr buf1, 1, Count
    55.     invoke WriteProcessMemory, pInfo.hProcess, addr1_1, addr buf2, 1, Count
    56.     invoke WriteProcessMemory, pInfo.hProcess, addr2, addr buf1, 1, Count
    57.     invoke WriteProcessMemory, pInfo.hProcess, addr2_2, addr buf2, 1, Count
    58.     invoke WriteProcessMemory, pInfo.hProcess, addr3, addr buf1, 1, Count
    59.     invoke WriteProcessMemory, pInfo.hProcess, addr3_3, addr buf2, 1, Count
    60.     invoke WriteProcessMemory, pInfo.hProcess, addr4, addr buf1, 1, Count
    61.     invoke WriteProcessMemory, pInfo.hProcess, addr4_4, addr buf2, 1, Count            
    62.        
    63.     invoke WriteProcessMemory, pInfo.hProcess, addr5, addr buf3, 1, Count
    64.     invoke WriteProcessMemory, pInfo.hProcess, addr6, addr buf3, 1, Count
    65.     ; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« «««    
    66.     invoke ResumeThread, addr pInfo.hThread
    67.     invoke CloseHandle, pInfo.hThread
    68.     invoke ExitProcess, NULL
    69.     .ENDIF
    70.     .ENDIF
    71. .ENDW                  
    72. end start
    73.