GTA Vice Sity

Тема в разделе "WASM.RESEARCH", создана пользователем Asterix, 21 дек 2004.

  1. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Кто-нибудь изучал прогу на предмет отвязывания от CD?

    У меня сейчас правда и проги то нет, но летом была -

    племянник привозил, заниматься ею было тогда некогда, поэтому

    сделал клон, но на моем не очень мощном компе игра прилично

    тормозила, думаю из-за того что запускалась с клона тоже

    добавляло тормозов.

    Ссылки на инфу приветствуются, а также ценные мысли.
     
  2. MoKC0DeR

    MoKC0DeR New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2003
    Сообщения:
    136
    Адрес:
    Russia
    Asterix

    ИМХО в инете есть готовые nocd
     
  3. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    В одно время написал отлучалку специально для GTA, если надо могу приаттачить, а вообще перехват GetDriveType, плюс файлы музыки необходимо открывать с помощью CreateFile в директории GTA. К тому же есть версия проги, с записью лога недостающих файлов на винте, по CreateFile.
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    MoKC0DeR

    > ИМХО в инете есть готовые nocd



    Готовое не особенно интересует, т.к. могут не совпадать версии или ещё что..



    Booster

    > если надо могу приаттачить



    Приаттач.. исходники, было бы интересно взглянуть :)
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Вот аттач.

    Работает на w2k и выше.

    Пробовал запускать на других играх, не выходило. Возможно необходимо делать перехват и других функций: GetVolumeInformation, LoadLibrary и т.д.

    Но у меня не было возможности плотно этим заниматься. Может быть у кого-нибудь есть по этому поводу мысли?

    [​IMG] _990865612__Hook_DriveType_2000.rar
     
  6. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Спасибо.



    Tasm пора уже задвинуть куда подальше :derisive:



    Как я понял перехватываем две функции GetDriveType и CreateFile, тут нужно будет действительно сделать версию с логом имен файлов передаваемых в CreateFile, а то не понятно за какими файлами она ломится на диск :)



    Когда у меня появится снова игра нужно будет переписать всё под masm или fasm, + унифицировать до win98, потому как я игры на NT не ставлю :derisive:
     
  7. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Asterix





    Написано как раз на masm, просто не привык пользоваться PROTO, старая привычка от tasm.
     
  8. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    > Написано как раз на masm



    %)
     
  9. snatch

    snatch New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2003
    Сообщения:
    27
    Адрес:
    Belarus
    хех... бредовый пост... :X



    _http://biw.rult.at/tuts/wiz2.htm
     
  10. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Вобщем тутор несколько грубоватый, мой метод написать DLL(уже написал), которая после загрузки захучит CreateFileA и сделает лог необходимых файлов, соответственно добавить в прогу код загрузки DLL и исправить EP на этот код, далее можно менять DLL на своё усмотрение с соответствующим нужным кодом - очень универсально.



    Вот только попробовать пока не на чем, игры то у меня нет %)
     
  11. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Вот собственно код DLL, может кому пригодится :derisive:
    Код (Text):
    1. .486
    2. .model flat, stdcall
    3. option casemap:none
    4. include \masm32\include\windows.inc
    5. include \masm32\include\kernel32.inc
    6. includelib kernel32.lib
    7.  
    8. include C:\masm32\macros\macros.inc
    9. include C:\masm32\macros\Strings.mac
    10.  
    11. include GetAddressOfVAForCurrentApiInIAT.asm
    12.  
    13. CreateFileHookProc  PROTO  :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
    14. SetHook             PROTO  :DWORD, :DWORD, :DWORD, :DWORD
    15. WriteToMemory       PROTO  :DWORD, :DWORD, :DWORD, :DWORD
    16.  
    17.  
    18. .DATA
    19. ALIGN DWORD
    20. hFile        dd  0
    21.  
    22.  
    23. .DATA?
    24. ALIGN DWORD
    25. sBuff        db  1024 dup (?)
    26.  
    27.  
    28. .CODE
    29.  
    30. ALIGN DWORD
    31. DllEntry proc uses ebx hinstDLL:DWORD, fdwReason:DWORD, lpvReserved:DWORD
    32.  mov eax, fdwReason
    33.   .IF eax == DLL_PROCESS_ATTACH
    34.      mov ebx, OFFSET sBuff
    35.      .IF $invoke(GetModuleFileName, NULL, ebx, SIZEOF sBuff)
    36.         mov ecx, eax
    37.         lea eax, [eax+sBuff-1]
    38. @loop:
    39.         cmp BYTE PTR [eax], '\'
    40.         je @end_parse
    41.         dec eax
    42.         loop @loop
    43.         jmp @initialization_failed
    44. @end_parse:
    45.         mov BYTE PTR [eax], 0
    46.         .IF $invoke(lstrcat, ebx, $CTA0("\\C\*reateFileA.log"))
    47.            invoke CreateFile, ebx, GENERIC_WRITE,\
    48.                               FILE_SHARE_READ, 0, CREATE_ALWAYS,\
    49.                               FILE_ATTRIBUTE_NORMAL, 0
    50.            cmp eax, INVALID_HANDLE_VALUE
    51.            je @initialization_failed
    52.            mov hFile, eax
    53.            invoke GetModuleHandle, NULL
    54.            .IF $invoke(SetHook, OFFSET CreateFileHookProc, eax, $CTA0("kernel32.dll"), $CTA0("C\*reateFileA"))
    55.               xor eax, eax
    56.               inc eax
    57.               jmp @r
    58.            .ENDIF
    59.         .ENDIF
    60.      .ENDIF
    61.   .ELSEIF eax == DLL_PROCESS_DETACH
    62.      .IF (hFile)
    63.         invoke CloseHandle, hFile
    64.      .ENDIF
    65.   .ENDIF
    66. @initialization_failed:
    67.   xor eax, eax
    68. @r:
    69.   ret
    70. DllEntry Endp
    71.  
    72. ALIGN DWORD
    73. CreateFileHookProc proc uses ebx lpFileName, dwDesiredAccess, dwShareMode,\
    74. lpSecurityAttributes, dwCreationDistribution, dwFlagsAndAttributes, hTemplateFile
    75. LOCAL Written:DWORD
    76. LOCAL sBuffer[1024]:CHAR
    77.   invoke SetFilePointer, hFile, 0, NULL, FILE_END
    78.   lea ebx, sBuffer
    79.   .IF $invoke(lstrcpy, ebx, lpFileName)
    80.      .IF $invoke(lstrcat, ebx, $CTA0("\n"))
    81.         .IF $invoke(lstrlen, ebx) > 2
    82.            lea ecx, Written
    83.            invoke WriteFile, hFile, ebx, eax, ecx, 0
    84.            jmp @F
    85.         .ENDIF
    86.      .ENDIF
    87.   .ENDIF
    88.   invoke WriteFile, hFile, $CTA0("\[An error occurred\]\n"), 21, ADDR Written, 0
    89. @@:
    90.   invoke CreateFile, lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes,\
    91.                      dwCreationDistribution, dwFlagsAndAttributes, hTemplateFile
    92.   ret
    93. CreateFileHookProc endp
    94.  
    95.  
    96. ALIGN DWORD
    97. WriteToMemory proc hProcess:DWORD, AddressToWrite:DWORD, lpBytesToWrite:DWORD, nSize:DWORD
    98. LOCAL OldProtect:DWORD
    99.   invoke WriteProcessMemory, hProcess, AddressToWrite, lpBytesToWrite,\
    100.                              nSize, NULL
    101.   .IF eax == 0
    102.      invoke VirtualProtectEx, hProcess, AddressToWrite, nSize,\
    103.                               PAGE_READWRITE, ADDR OldProtect
    104.      .IF eax != 0
    105.         invoke WriteProcessMemory, hProcess, AddressToWrite, lpBytesToWrite,\
    106.                                    nSize, NULL
    107.         push eax
    108.         invoke VirtualProtectEx, hProcess, AddressToWrite, nSize,\
    109.                                  OldProtect, ADDR OldProtect
    110.         pop eax
    111.      .ENDIF
    112.   .ENDIF
    113.   ret
    114. WriteToMemory endp
    115.  
    116.  
    117. ALIGN DWORD
    118. SetHook proc uses ebx lpHookProc:DWORD, BaseOfImage:DWORD, lpszNameOfDll:DWORD, lpszNameOfApi:DWORD
    119.    invoke GetModuleHandle, lpszNameOfDll
    120.    invoke GetProcAddress, eax, lpszNameOfApi
    121.    test eax, eax
    122.    jz @F
    123.    invoke GetAddressOfVAForCurrentApiInIAT, BaseOfImage, lpszNameOfDll, eax
    124.    test eax, eax
    125.    jz @F
    126.    mov ebx, eax
    127.    push SIZEOF DWORD
    128.    lea eax, lpHookProc
    129.    push eax
    130.    push ebx
    131.    invoke GetCurrentProcess
    132.    push eax
    133.    call WriteToMemory
    134. @@:
    135.    ret
    136. SetHook endp
    137.  
    138.  
    139. End DllEntry