RAM

Тема в разделе "WASM.BEGINNERS", создана пользователем left behind, 27 окт 2005.

  1. left behind

    left behind New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2005
    Сообщения:
    6
    Народ, вот такая задача ... например у меня есть процесс, у меня есть адресс (например,022C51F0) , так вот, каким образом мне получить м мою переменную значение под етим адресом ... (в С++), аналогичто нужно ЗАПИСАТЬ под етим адресом число ...
     
  2. Shama

    Shama New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2005
    Сообщения:
    17
    Адрес:
    Ukraine
    Значит так, если меня не подводит память, адресок у тебя хранится в понтер-переменной. Чтоб получить значение по адресу делаеш например следующее int num=*p, где p собственно поинтер ии по-русски адрес. Записываем аналогично *р=548478. Другое дело, чужой процесс тебе не разрешит его @#at, только свой. Для посленего нужно копать глубже и по-другому!
     
  3. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    "по другому" это значит использовать ReadProcessMemory()/WriteProcessMemory()
     
  4. left behind

    left behind New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2005
    Сообщения:
    6
    Для Shama Я не пробывал, но чтото мне подсказывает что он будет сильно ругатся, типо немогу урровнять (инт) и (*инт), тебе так не кажется!?



    Dr.Golova Попробуем ...
     
  5. Sharp

    Sharp New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2003
    Сообщения:
    143
    Адрес:
    Ukraine
    Код (Text):
    1. int *p;
    2. p = (int *)548478;
    3. int num = *p;
    Должно работать
     
  6. Shama

    Shama New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2005
    Сообщения:
    17
    Адрес:
    Ukraine
    Dr.Golova, Энто я и имел ввиду, благодарствую.

    А в случае, если ругань будет, просто выровняй - слушай Sharpa
     
  7. left behind

    left behind New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2005
    Сообщения:
    6
    Да не работает оно, оно и не могло работать,так мне нужен доступ в ЧУЖОЙ ПРОЦЕСС.



    1) Толи я чегото туго не понимаю, толи вы не поняли что мне нужно, вот вам наводка на цель: все знаю прогамку АртМонеи, вот там, выбираеш процесс и она выводит АДРЕСС и РЯДОМ значение ... вот мне нужно чтобы из адресса (который можно например взять с тогоже АртМонеи) я мог получить/положить значиние



    2)ReadProcessMemory()/WriteProcessMemory(), ретурн фалс, оба:


    Код (Text):
    1. ReadProcessMemory( Handle,"007EF9BC",&value,2,NULL);


    Я понимаю что ета "2" звучит подозрительно, но он просто ретурнит фасл, независимо от переменных



    Я догадывался что ето изза запрета ... тоесть не даёт доступ, пробывал юзать: VirtualProtectEx()


    Код (Text):
    1. BOOL VirtualProtectEx(
    2.   HANDLE hProcess,
    3.   LPVOID [b]lpAddress[/b],
    4.   SIZE_T dwSize,
    5.   DWORD flNewProtect,
    6.   PDWORD lpflOldProtect
    7. );






    Вот только немогу получить lpAddress([in] Pointer to the base address of the region of pages whose access protection attributes are to be changed.)



    Вот где взять етот lpAddress ?! ...
     
  8. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    left behind



    Ух, кошмар какой, тебя кто научил такому??
    Код (Text):
    1.  
    2. BOOL ReadProcessMemory(
    3.   HANDLE hProcess,
    4.   LPCVOID lpBaseAddress,
    5.   LPVOID lpBuffer,
    6.   SIZE_T nSize,
    7.   SIZE_T* lpNumberOfBytesRead
    8. );


    Раз уж на то пошло:
    Код (Text):
    1. WORD value;
    2. DWORD dwReaded;
    3. ReadProcessMemory( Handle,0x007EF9BC,&value,2,&dwReaded);
     
  9. left behind

    left behind New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2005
    Сообщения:
    6
    Код (Text):
    1. cannot convert parameter 2 from 'const int' to 'const void *'


    Вот например в АртМонеи, я выбрал процесс, и получил например


    Код (Text):
    1. 00AC44AD 666




    Как мне в программе из 00AC44AD выдавить 666





    Вот так я делал, ПОЧЕМУТО ПРИ РАЗНЫХ АДРЕСАХ ЗНАЧЕНИЕ НЕ МЕНЯЕТСЯ,БОЛЕЕ ТОГО, ОНО НЕ ОТВЕЧАЕТ ТОМУ ЧТО МНЕ ПОКАЗЫВАЕТ АРТМОНЕИ!



    #include <windows.h>

    #include <iostream.h>

    #include "psapi.h"

    <font color="green]
    Код (Text):
    1. void Process( DWORD processID )
    2. {
    3.     TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
    4.     HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
    5.                                    PROCESS_VM_READ,
    6.                                    FALSE, processID );
    7.     if (NULL != hProcess )
    8.     {
    9.         HMODULE hMod;
    10.         DWORD cbNeeded;
    11.         if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),&cbNeeded) )
    12.              GetModuleBaseName( hProcess, hMod, szProcessName,
    13.                                sizeof(szProcessName)/sizeof(TCHAR) );
    14.     }
    15.     int a = 0x005ACF35;
    16.     LPCVOID b  = (LPCVOID)a;
    17.     WORD value;
    18.     if(ReadProcessMemory( hProcess, &b, &value, 2, NULL))
    19.     {
    20.         cout <<szProcessName<<" - " <<value << " [ " << b <<" ]"<<endl;
    21.     }
    22. }
    23. void main ()
    24. {
    25.      DWORD aProcesses[1024], cbNeeded; 
    26.      if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
    27.         return;
    28.      DWORD nProcess = cbNeeded / sizeof(DWORD);
    29.      for ( int i = 0; i < nProcess; i++ )
    30.           Process( aProcesses[i] );
    31.      int pause;cin>>pause;
    32. }
    </font><!--color-->
     
  10. IceStudent

    IceStudent Active Member

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


    ReadProcessMemory( Handle,(void*)0x007EF9BC,&value,2,&dwReaded);



    И вообще, вот пример:

    [​IMG] 756106420__pen.zip
     
  11. left behind

    left behind New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2005
    Сообщения:
    6
    Спасибо конешно тебе, что время тратил, если ты меня хотел убить на повал, ты ето сделал, АСМ, очень мило, я его не знаю абсолютно, Мне желательно на С++, вот в такой форме, как я выложил пример...





    И еще вопросик, почему все хендлы у меня одинаковые, ето так должно быть?!



    Народ, в етом нет ничего сложного, тут нужно просто знать, мне больше спросить не у кого , вы тут все лихие программеры, ХЕПЛ !!!
     
  12. IceStudent

    IceStudent Active Member

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


    Значит, пора исправлять эту досадную случайность.





    А я его не знаю. Сбегай на RSDN, там подскажут. Но лучше почитал бы справку (MSDN (PSDK)) нормально, чем людей тормошить.
     
  13. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    left behind

    > "ПОЧЕМУТО ПРИ РАЗНЫХ АДРЕСАХ ЗНАЧЕНИЕ НЕ МЕНЯЕТСЯ"

    Потому, что в ReadProcessMemory ты передаешь ссылку &b, а это фиксированный указатель на переменную b в твоем адресном прстранстве, а нужно передавать b или (LPCVOID)a, т.е. значение 0x005ACF35, присвоенное переменным b или a