RAM

Discussion in 'WASM.BEGINNERS' started by left behind, Oct 27, 2005.

  1. left behind

    left behind New Member

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

    Shama New Member

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

    Dr.Golova New Member

    Blog Posts:
    0
    Joined:
    Sep 7, 2002
    Messages:
    348
    "по другому" это значит использовать ReadProcessMemory()/WriteProcessMemory()
     
  4. left behind

    left behind New Member

    Blog Posts:
    0
    Joined:
    Oct 27, 2005
    Messages:
    6
    Для Shama Я не пробывал, но чтото мне подсказывает что он будет сильно ругатся, типо немогу урровнять (инт) и (*инт), тебе так не кажется!?



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

    Sharp New Member

    Blog Posts:
    0
    Joined:
    Aug 1, 2003
    Messages:
    143
    Location:
    Ukraine
    Code (Text):
    1. int *p;
    2. p = (int *)548478;
    3. int num = *p;
    Должно работать
     
  6. Shama

    Shama New Member

    Blog Posts:
    0
    Joined:
    Oct 4, 2005
    Messages:
    17
    Location:
    Ukraine
    Dr.Golova, Энто я и имел ввиду, благодарствую.

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

    left behind New Member

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



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



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


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


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



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


    Code (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

    Blog Posts:
    0
    Joined:
    Oct 2, 2003
    Messages:
    4,300
    Location:
    Ukraine
    left behind



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


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

    left behind New Member

    Blog Posts:
    0
    Joined:
    Oct 27, 2005
    Messages:
    6
    Code (Text):
    1. cannot convert parameter 2 from 'const int' to 'const void *'


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


    Code (Text):
    1. 00AC44AD 666




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





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



    #include <windows.h>

    #include <iostream.h>

    #include "psapi.h"

    <font color="green]
    Code (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

    Blog Posts:
    0
    Joined:
    Oct 2, 2003
    Messages:
    4,300
    Location:
    Ukraine


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



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

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

    left behind New Member

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





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



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

    IceStudent Active Member

    Blog Posts:
    0
    Joined:
    Oct 2, 2003
    Messages:
    4,300
    Location:
    Ukraine


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





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

    leo Active Member

    Blog Posts:
    0
    Joined:
    Aug 4, 2004
    Messages:
    2,542
    Location:
    Russia
    left behind

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

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