Глюки Module32First\Module32Next

Тема в разделе "WASM.WIN32", создана пользователем _nic, 30 мар 2011.

  1. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Оно какого то зацикливается на "C:\Windows\system32\avgrsstx.dll".Винда 7й модели.В чем прикол О_о ?
     
  2. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    _nic
    посмотреть ошибки возвращаемые, или заюзать мегахакерскую функцию GetLastError. Но тк телепаты ушли работать в фсб, и сегодня я за них, предположу что вы запускаете не из под админа.
     
  3. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    "ERROR_NO_MORE_FILES" :dntknw: Как в таком случае можно продолжить перечисление?
     
  4. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    говорят же больше ничего нет))
     
  5. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Блин туплю значит :dntknw: Значит у меня проблема :dntknw: Есть вин7,есть процесс экзешник которого с релоками,т.е. ASLR в действие.А мне нада как то узнать базу по которой он был загружен.
    ЗЫ:может есть какая то недокументированная ф-ция для вытягивания PEBа из чужого процесса?
     
  6. Kaimi

    Kaimi Андрей

    Публикаций:
    0
    Регистрация:
    15 апр 2010
    Сообщения:
    120
    NtQueryInformationProcess не подходит?
     
  7. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    GetModuleInformation ?
     
  8. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    чем не подходят тысячи документированных?
     
  9. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Ппробовал с помощью "ZwQueryInformationProcess".Облом :dntknw: GetLastError() возвращяет ERROR_BAD_ENVIRONMENT.Отладочные привелегии непомагают
    Код (Text):
    1. int _tmain(int argc, _TCHAR* argv[])
    2. {
    3.     HANDLE tok;
    4.     OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&tok);
    5.     LUID priv;
    6.     LookupPrivilegeValue(NULL,"SeDebugPrivilege",&priv);
    7.     TOKEN_PRIVILEGES newpriv;
    8.     newpriv.PrivilegeCount=1;
    9.     newpriv.Privileges[0].Luid = priv;
    10.     newpriv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    11.     BOOL privresult=AdjustTokenPrivileges(tok, FALSE, &newpriv, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) NULL,(PDWORD)NULL);
    12.     printf("%d: %d\n",privresult,TRUE);
    13.     PROCESSENTRY32 proc;
    14.     DWORD pid=0;
    15.     HANDLE th=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
    16.     if(th==INVALID_HANDLE_VALUE){return 0;}
    17.     Process32First(th,&proc);
    18.     for(;;)
    19.     {
    20.         if(strcmp("Divinity2.exe",proc.szExeFile)==0){pid=proc.th32ProcessID;break;}
    21.         if(Process32Next(th,&proc)==FALSE){return 0;}
    22.     }
    23.     if(pid!=0)
    24.     {
    25.         printf("%d",sizeof(byte));
    26.         SetLastError(0);
    27.         HANDLE divine=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
    28.         if(divine==NULL)
    29.         {
    30.             printf("Error open Divine: %d",GetLastError());
    31.         }
    32.         /*PROCESS_MEMORY_COUNTERS memfo={0};
    33.         if(GetProcessMemoryInfo(divine,&memfo,sizeof(memfo))==0)
    34.         {
    35.             printf("File get mem info. Er: %d",GetLastError());
    36.         }*/
    37.         else
    38.         {
    39.             HMODULE nt=LoadLibrary("Ntdll.dll");
    40.             PROCESS_BASIC_INFORMATION pbi={0};
    41.             ZWQUERYINFORMATIONPROCESS _ZwQueryInformationProcess;
    42.             _ZwQueryInformationProcess = (ZWQUERYINFORMATIONPROCESS)GetProcAddress(nt, "ZwQueryInformationProcess");
    43.             DWORD rlg;
    44.             SetLastError(0);
    45.             _ZwQueryInformationProcess(divine,0,&pbi,sizeof(pbi),&rlg);
    46.             printf("%d",GetLastError());
    47.             //printf("%d\n",pbi.PebBaseAddress);
    48.             PEB *_peb=(PEB*)pbi.PebBaseAddress;
    49.             //printf("base: %X",_peb->ImageBaseAddress);
    50.             getch();
    51.             DWORD matches=0;
    52.             DWORD base=0x400000;
    53.             DWORD result=0;
    54.             DWORD r;
    55.             for(DWORD i=0;i<(0x121A000/sizeof(DWORD));i++)
    56.             {
    57.                 ReadProcessMemory(divine,(void*)(base),&result,sizeof(DWORD),&r);
    58.                 base=base+sizeof(DWORD);
    59.                 if(result==100)
    60.                 {
    61.                     matches++;
    62.                     system("cls");
    63.                     printf("match: %d\nbytes %d",matches,i*sizeof(DWORD));
    64.                     result=0;
    65.                 }
    66.             }
    67.         }
    68.         CloseHandle(divine);
    69.     }
    70.     CloseHandle(th);
    71.     getch();
    72.     return 0;
    73. }
     
  10. Kaimi

    Kaimi Андрей

    Публикаций:
    0
    Регистрация:
    15 апр 2010
    Сообщения:
    120
    Часом не пытаешься открыть x64 процесс из x86 или что-нибудь подобное сделать?
     
  11. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Код (Text):
    1. SetLastError(0);
    2. _ZwQueryInformationProcess(divine,0,&pbi,sizeof(pbi),&rlg);
    3. printf("%d",GetLastError());
    хех... улыбнуло.. про ntstatus слышали что-нибудь? да и вообще SetLastError(0) перед каждым вызовом апи тоже весело...

    кстати если вспомнить, что ntdll.dll есть маппится ядром и есть во всех процессах, то это тоже улыбнуло)

    код где? судя по "улыбательному фрагменту", винда тут вовсе не причем...
     
  12. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Нет винда 32х битная.Цель запущенна из под админа,и мой код то же работает из под админа.
    Какая вам разница как я получаю базу библиотеки.Индусы в майкрософте не идиоты,и LoadLibrary всегда возвращяет то что надо.Кароче идите троллить в другие темы.
     
  13. Kaimi

    Kaimi Андрей

    Публикаций:
    0
    Регистрация:
    15 апр 2010
    Сообщения:
    120
    Попробуй последний аргумент в вызове ZwQueryInformationProcess заменить на NULL
     
  14. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Ничего неизменилось.ZwQueryInformationProcess отлично работает коогда нада добратся до PEBа внтури процесса,но на чужом процессе обламывается(
     
  15. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    а зачем использовать ее чтобы получить пеб внутри своего процесса?о_0

    Так какой статус ошибки возвращается? ГетЛастЕрор тут вообще не в тему, так что давай ntstatus.
     
  16. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    а ничего и не изменится... еще раз:
    и где неработающий код Module32First\Module32Next?

    внутри чужого процесса... но других способов куча, в этом вы правы))

    да-да... для эпических васмовских исходников у меня теперь есть отличный сайт:
    http://www.govnokod.ru/6173
     
  17. Kaimi

    Kaimi Андрей

    Публикаций:
    0
    Регистрация:
    15 апр 2010
    Сообщения:
    120
    Запусти, проверь покажет ImageBase нужного процесса или нет http://rghost.net/5026340
     
  18. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    STATUS_SUCCESS
     
  19. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    это просто легендарно)))))
     
  20. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    958
    Код (Text):
    1.  PROCESSENTRY32 proc;
    2.     DWORD pid=0;
    3.     HANDLE th=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
    4.     if(th==INVALID_HANDLE_VALUE){return 0;}
    5.     Process32First(th,&proc);
    а где адекватный инит переменной размера структуры?

    мсдн какбэ намекает
    typedef struct tagPROCESSENTRY32 {
    DWORD dwSize;
    ...

    и дело не в ее глюках а в глюках девелопера;)