Скан памяти

Тема в разделе "WASM.BEGINNERS", создана пользователем Sun07, 30 май 2009.

  1. Sun07

    Sun07 New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2009
    Сообщения:
    52
    А как можно просканировать всю оперативную память для поиска нужной мне строки?
     
  2. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    Sun07
    В DOS - очень просто.
    В WIN ВСЮ без драйвера наверно никак.
    Думаю у тебя более простая задача, найти строку в неком приложении?
     
  3. Sun07

    Sun07 New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2009
    Сообщения:
    52
    Нет, найти путь, который прописан как путь запуска проги и заменить его.
     
  4. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    Sun07
    ???
    Моя твоя не понимай.
    Извольте выражаться яснее.
     
  5. Sun07

    Sun07 New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2009
    Сообщения:
    52
    ну прога стартует из определённой папки. Мне надо изменить этот путь в памяти, чтобы показывала система, что прога стартанула из другой папки, а не из той, что на самом деле.
     
  6. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    Чья "прога"?
    Кто её стартует?
    Кому система должна показывать?
     
  7. slavanap

    slavanap Вячеслав

    Публикаций:
    0
    Регистрация:
    10 сен 2008
    Сообщения:
    300
    Адрес:
    Смоленск, Россия
    Хук на CreateProcess ??
     
  8. Rodin

    Rodin New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    125
    PEB.ProcessParameters.CurrentDirectory
    PEB.ProcessParameters.ImagePathName
    PEB.ProcessParameters.CommandLine
     
  9. Sun07

    Sun07 New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2009
    Сообщения:
    52
    http://izg0y.coru.in/
     
  10. Rodin

    Rodin New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    125
    И что? Я так понимаю, тебе процесс скрывать и не нужно. Изменения в PEB.ProcessParameters приводят к изменениям в параметрах запуска, в чем можно убедиться посмотрев в process explorer до и после изменения.
     
  11. Sun07

    Sun07 New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2009
    Сообщения:
    52
    не понимаю, отколь столь много Syntax Error?
    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap :none
    4.  
    5. include    \masm32\include\windows.inc
    6. include    \masm32\include\kernel32.inc
    7. include    \masm32\include\psapi.inc
    8. include    \masm32\include\user32.inc
    9.  
    10.  
    11.  
    12. includelib \masm32\lib\kernel32.lib
    13. includelib \masm32\lib\Psapi.lib
    14. includelib \masm32\lib\user32.lib
    15.  
    16. PTOZWQUERYINFORMATIONPROCESS TYPEDEF PROTO :DWORD, : DWORD, : DWORD, : DWORD, : DWORD
    17. PZWQUERYINFORMATIONPROCESS TYPEDEF PTR PTOZWQUERYINFORMATIONPROCESS
    18.  
    19.     .data?
    20. buff        db 2000 dup(?)
    21. buffout     db 15 dup(?)
    22.  
    23. .data
    24.    Prog_name   db "a.exe", 0
    25.  
    26. str1        db "%d",0
    27. error       db "E",0
    28. FormatStr   db "%d",0
    29.     _PROCESSENTRY32 struct
    30.         dwSize DWORD 0
    31.         cntUsage DWORD 0
    32.         th32ProcessID DWORD 0
    33.         th32DefaultHeapID DWORD 0
    34.         th32ModuleID DWORD 0
    35.         cntThreads DWORD 0
    36.         th32ParentProcessID DWORD 0
    37.         pcPriClassBase DWORD 0
    38.         dwFlags DWORD 0
    39.         szExeFile BYTE 260 dup (?)
    40.     _PROCESSENTRY32 ends
    41.  
    42.     _PROCESS_BASIC_INFORMATION struct
    43.         ExitStatus DWORD 0
    44.         PebBaseAddress DWORD 0
    45.         AffinityMask DWORD 0
    46.         BasePriority DWORD 0
    47.         UniqueProcessId DWORD 0
    48.         InheritedFromUniqueProcessId DWORD 0
    49.     _PROCESS_BASIC_INFORMATION ends
    50.  
    51.     _PEB struct
    52.         InheritedAddressSpace DWORD 0
    53.         ReadImageFileExecOptions DWORD 0
    54.         BeingDebugged DWORD 0
    55.         SpareBool DWORD 0
    56.         Mutant DWORD 0
    57.         ImageBaseAddress DWORD 0
    58.         Ldr DWORD 0
    59.         ProcessParameters DWORD 0
    60.         SubSystemData DWORD 0
    61.         ProcessHeap DWORD 0
    62.         FastPebLock DWORD 0
    63.         AltThunkSListPtr DWORD 0
    64.         IFEOKey DWORD 0
    65.         Spare DWORD 0
    66.     _PEB ends    
    67.  
    68.     _UNICODE_STRING struct
    69.         sLength WORD 0
    70.         MaximumLength WORD 0
    71.         Buffer DWORD 0
    72.     _UNICODE_STRING ends
    73.  
    74.  
    75.  _RTL_DRIVE_LETTER_CURDIR STRUCT
    76.      Flags WORD 0
    77.      Length1 WORD 0
    78.      TimeStamp DWORD 0
    79.      DosPath UNICODE_STRING <>
    80.  _RTL_DRIVE_LETTER_CURDIR ends
    81.  
    82.  _RTL_USER_PROCESS_PARAMETERS STRUCT
    83.     MaximumLength DWORD ?
    84.     length1 DWORD ?
    85.     Flags DWORD ?
    86.     DebugFlags DWORD ?
    87.     ConsoleHandle DWORD ?
    88.     ConsoleFlags DWORD ?
    89.     StdInputHandle DWORD ?
    90.     StdOutputHandle DWORD ?
    91.     StdErrorHandle DWORD ?
    92.     CurrentDirectoryPath UNICODE_STRING <>
    93.     CurrentDirectoryHandle DWORD ?
    94.     DllPath UNICODE_STRING <>
    95.     ImagePathName UNICODE_STRING <>
    96.     CommandLine UNICODE_STRING <>
    97.     Environment DWORD ?
    98.     StartingPositionLeft DWORD ?
    99.     StartingPositionTop DWORD ?
    100.         CountX DWORD 0
    101.         CountY DWORD 0
    102.         CountCharsX DWORD 0
    103.         CountCharsY DWORD 0
    104.     ConsoleTextAttributes DWORD ?
    105.     WindowFlags DWORD ?
    106.     ShowWindowFlags DWORD ?
    107.     WindowTitle UNICODE_STRING <>
    108.     DesktopName UNICODE_STRING <>
    109.     ShellInfo UNICODE_STRING <>
    110.     RuntimeData UNICODE_STRING <>
    111.     DLCurrentDirectory RTL_DRIVE_LETTER_CURDIR 020h dup (?)
    112.  _RTL_USER_PROCESS_PARAMETERS ENDS    
    113.  
    114.    
    115.     uProcess _PROCESSENTRY32 <?>
    116.     pbi _PROCESS_BASIC_INFORMATION <?>
    117.     pPeb _PEB <?>
    118.     uStr _UNICODE_STRING <?>
    119.     RtlUserProcParams _RTL_USER_PROCESS_PARAMETERS <?>
    120.     ZwQueryInformationProcess PZWQUERYINFORMATIONPROCESS ?
    121.    
    122.     sTitle     db "Message", 0
    123.     hSnapShot  dd 0
    124.     BytesCount dd 0
    125.     hOpenProcess    dd 0
    126.     wszBuffer db 260 dup (?)
    127.     hModule dd ?
    128.     szNtdll db "ntdll",0
    129.     szFuncName db "ZwQueryInformationProcess",0
    130.  
    131.  .code
    132.  
    133. start:
    134.  
    135.     invoke CreateToolhelp32Snapshot, 2h, 0
    136.     mov hSnapShot, eax
    137.     mov uProcess.dwSize, sizeof PROCESSENTRY32
    138.    
    139.  
    140.         invoke Process32First, hSnapShot, addr uProcess
    141.         invoke lstrcmpi, addr uProcess.szExeFile, addr Prog_name
    142.         jz ok
    143. next1:  invoke Process32Next, hSnapShot, addr uProcess
    144.         invoke lstrcmpi, addr uProcess.szExeFile, addr Prog_name
    145.         jnz next1
    146. ok:
    147.         invoke GetModuleHandle,offset szNtdll
    148.         mov hModule,eax
    149.         invoke GetProcAddress,eax,offset szFuncName
    150.         mov ZwQueryInformationProcess,eax
    151.  
    152. ;invoke MessageBox, NULL, addr uProcess.szExeFile, addr sTitle, MB_OK
    153.  
    154.         invoke OpenProcess, PROCESS_QUERY_INFORMATION, FALSE, uProcess.th32ProcessID
    155.         mov hOpenProcess, eax
    156. ;call outn
    157. ;jmp endPrg
    158.        
    159.         invoke ZwQueryInformationProcess, hOpenProcess, 0, offset pbi, sizeof _PROCESS_BASIC_INFORMATION, 0
    160.         invoke ReadProcessMemory, hOpenProcess, pbi.PebBaseAddress, offset pPeb, sizeof _PEB, addr BytesCount
    161.         invoke ReadProcessMemory, hOpenProcess, pPeb.ProcessParameters, offset RtlUserProcParams, sizeof _RTL_USER_PROCESS_PARAMETERS, BytesCount
    162.         invoke ReadProcessMemory, hOpenProcess, RtlUserProcParams.ImagePathName, offset uStr, sizeof _UNICODE_STRING, BytesCount
    163. call outn
    164.     invoke MessageBox, NULL, addr RtlUserProcParams.ImagePathName, addr sTitle, MB_OK
    165.  
    166.         ;invoke ReadProcessMemory, hOpenProcess, RtlUserProcParams.ImagePathName, offset wszBuffer, sizeof wszBuffer, BytesCount
    167. ;call outn
    168.     ;invoke MessageBox, NULL, addr wszBuffer, addr sTitle, MB_OK
    169.  
    170.         ;invoke ReadProcessMemory, hOpenProcess, RtlUserProcParams.CurrentDirectoryPath, offset uStr, sizeof _UNICODE_STRING, BytesCount
    171.  
    172. ;invoke MessageBox, NULL, addr RtlUserProcParams.CurrentDirectoryPath, addr sTitle, MB_OK
    173.        
    174. ;WriteProcessMemory
    175.          invoke CloseHandle, hOpenProcess
    176.        
    177.     invoke CloseHandle, hSnapShot
    178. endPrg:
    179.     invoke ExitProcess, NULL
    180.  
    181.  
    182.  
    183. outn proc
    184. ;вывод числа EAX на экран
    185. invoke wsprintf,offset buffout,offset FormatStr, eax
    186. invoke MessageBox,0,offset buffout,offset error,0
    187. ret
    188. outn endp
    189.  
    190.  
    191. end start
     
  12. Sun07

    Sun07 New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2009
    Сообщения:
    52
    а, понял - UNICODE_STRING на _UNICODE_STRING. А на кой впереди имени подчёркивание? И как определить массив на DLCurrentDirectory?
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    О ужас.. Спросите тут http://govnokod.ru/
     
  14. Sun07

    Sun07 New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2009
    Сообщения:
    52
    да я уже всё исправил. Но не читает тут
    Код (Text):
    1.         invoke ReadProcessMemory, hOpenProcess, RtlUserProcParams.ImagePathName.Buffer, offset wszBuffer, sizeof wszBuffer, BytesCount
    2.     invoke MessageBox, NULL, addr wszBuffer, addr sTitle, MB_OK
    вроде все параметры переданы верно.
     
  15. Sun07

    Sun07 New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2009
    Сообщения:
    52
    сделал. Оказыватся, тот код, что я нашёл тут вовсе неверный. Получил:
    PEB.ProcessParameters.CurrentDirectory=C:\Temp\ PEB.ProcessParameters.ImagePathName=C:\Temp\Process.exe "C:\Temp\Process.exe" C:\Temp\Process.exe WinSta0\Default

    PEB.ProcessParameters.CommandLine="C:\Temp\Process.exe" C:\Temp\Process.exe WinSta0\Default

    Так много путей! Что их так много? Все менять, что-ли?
     
  16. Sun07

    Sun07 New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2009
    Сообщения:
    52
    заменил всё. Ничего не работает. Только время зря убил. Просмотрщики процессов берут путь 1 раз на момент запуска проги и он верный... А то кто бы разрешил запись в ту область :dntknw:
     
  17. Rodin

    Rodin New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    125
    Разумеется кейс был на случай, если тулза для просмотра процессов еще не была запущена. Если эта тулза уже запущена и сохранила параметры в свои внутренние переменные, то задача в общем случае не решаема.
     
  18. Sun07

    Sun07 New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2009
    Сообщения:
    52
    а если поставить хук на CreateProcess? Так ведь просмотрщики процессов, антивиры ловят процессы? Удастся ли перехватить и записать данные первыми?
     
  19. Sun07

    Sun07 New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2009
    Сообщения:
    52
    или запись в память другого процесса невозможна? Т.е. посторонний процесс отлавливает запуск моей проги и меняет ей путь.