![]() |
eXeL@B —› Вопросы новичков —› Помогите разобраться с Оллей,, срочно, плз |
Посл.ответ | Сообщение |
|
Создано: 08 июня 2009 00:27 · Поправил: Dark40000 · Личное сообщение · #1 Здраствуйте,, я недавно начал разбираться с Олли,, немного получаеться,, но вот теперь возник вполне обычный и наверное легкий вопрос, но я в силу неопытности никак немогу догнать что да как.. (( сразу все раскажу на примере,, что бы понятнее... есть код char mes[1024]; MIB_IFROW mbrow = { 0 }; PMIB_IFTABLE pTable = NULL; DWORD dwSize = 0; if ( GetIfTable( pTable, &dwSize, FALSE ) == ERROR_INSUFFICIENT_BUFFER ) { pTable = PMIB_IFTABLE(LocalAlloc(LMEM_ZEROINIT, dwSize)); if ( !GetIfTable( pTable, &dwSize, TRUE ) ) { sprintf(mes,"Total entries: %d Enumerating...",pTable->dwNumEntries); Memo1->Lines->Add(mes); for(unsigned int i = 0; i < pTable->dwNumEntries; ++i) { PMIB_IFROW ifRow = &pTable->table[i]; char str[MAXLEN_IFDESCR + 1] = { 0 }; CharToOemA((char*) ifRow->bDescr, (char*) ifRow->bDescr); sprintf(mes,"- if%d is: %s", i, ifRow->bDescr); Memo1->Lines->Add(mes); sprintf(mes,"Address: %02x:%02x:%02x:%02x:%02x:%02x", ifRow->bPhysAddr[0], ifRow->bPhysAddr[1], ifRow->bPhysAddr[2], ifRow->bPhysAddr[3], ifRow->bPhysAddr[4], ifRow->bPhysAddr[5] ); Memo1->Lines->Add(mes); } } } Здесь сканируются сетевые карты, если так грубо сказать. Открываю программу в Олле, ставлю бряк на GetIfTable -> F9 -> останавливаюсь на бряке.... Только у меня другая ситуация,, программа вот таким образом как я понимаю считывает мак адрес сетевухи,, кудато сразу ее сохраняет в памяти, а потом на протяжении всего времени программы время от времени проверяет этот считанный мак адрес. Мне требуеться после того как GetIfTable( pTable, &dwSize, FALSE ) отработала,, отследить куда в памяти она сохранила этот мак адрес, это число,, и сразу же его заменить на свое. Я незнаю что и как с ним потом делаеться и проверяеться, поэтому мне сразу же вот здесь "на корню' надо заменить его на свое,, и непариться больше где и как оно используеться, сравниваеться, отображаеться и т.п. Такое возможно? Как это реализовать?? Подскажите плз,, ато я совсем непонимаю что и как в моей ситуации.. ![]() |
|
Создано: 08 июня 2009 01:00 · Личное сообщение · #2 GetIfTable заполняет две структуры MIB_IFTABL и MIB_IFROW Code:
По адресу _MIB_IFROW->bPhysAddr[] хранится физический адрес(MAC) -> находи структуру в памяти и меняй её. ----- Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes ![]() |
|
Создано: 08 июня 2009 13:45 · Личное сообщение · #3 Coderess пишет: находи структуру в памяти и меняй её Так а как это сделать и когда? Ставить бряк на GetIfTable и что потом?? Как найти эту структуру в памяти... подождать пока функция отработает и чтото искать в Dump'е...? или трасировать эту функцию,,(всеравно я ничего ненаблюдаю, что куда записываеться, и где эта структура могла бы проскочить...) .. или как? ![]() |
|
Создано: 08 июня 2009 18:36 · Личное сообщение · #4 |
|
Создано: 08 июня 2009 19:14 · Личное сообщение · #5 подождать пока функция отработает и чтото искать в Dump'е... Функция GetIfTable, после выполнения заполняет стуктуры: MIB_IFTABL и MIB_IFROW просматривать после её исполнения. можно в дампе посмотреть, что находится в памяти - заполненую структуру. Давай свой экзешник, на нем будет легче все показать. ----- Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes ![]() |
|
Создано: 08 июня 2009 20:49 · Личное сообщение · #6 Archer пишет: Каждая функция принимает параметры и возвращает, эта не исключение. я понимаю,, наблюдал это уже,, допустим должна выполниться строчка 00401BEE E8 85120000 CALL <JMP.&CC3260MT._sprintf> и у этой строчки в стеке лежат параметры которые ей передаются типа 0012ECE8 0012F15C |s = 0012F15C ; 0012ECEC 004035ED |format = "Total entries: %d Enumerating..." ; 0012ECF0 00000005 \<%d> = 5 . я правильно понимаю? но когда же вызываеться например нужная мне функция GetIfTable - стек пустой, т.е. я непредставляю где что искать... Coderess пишет: Давай свой экзешник, на нем будет легче все показать. буду очень признателен если на нем именно и покажете,, прикрепил ехе выполняющий код из первого моего сообщения Code:
(код прикрепленного ехе из олли) вот на первой строчке я останавливаюсь,, там первое выполнение этой функции,, пробую трассировать и ничего ненаблюдаю,, никаких адресов ![]() ![]() |
|
Создано: 08 июня 2009 22:52 · Личное сообщение · #7 |
|
Создано: 09 июня 2009 00:39 · Поправил: Dark40000 · Личное сообщение · #8 SVLab пишет: 004019DA E8 D7060600 CALL <JMP.&KERNEL32.LocalAlloc>выделяет память под таблицу, смотри, что в eax после нее, там и твои данные недалеко. при выполнении данной строчки в стеке лежит 0012ED00 00000040 |Flags = LPTR 0012ED04 00003270 \Size = 3270 (12912.) объясните пожалуйста момент : здесь получаеться в программе выделяеться столько памяти, сколько будет занимать вся эта таблица с Сетевыми устройтсвами... ? а затем 004019E8 E8 4B050600 CALL <JMP.&IPHLPAPI.GetIfTable> заполняет все эти Size = 3270 (12912.) . и получаеться теперь нам надо найти этот кусок памяти длинной в 3270 символов(бит ?) , в нем лежит вся эта инфа,, и ее уже как заблагорассудиться можно менять, на все что захочешь. я правильно понял..? только опять непонятно... в каком месте выделино это место длиной 3270.. ? с какого адреса.. после выполнения 004019DA E8 D7060600 CALL <JMP.&KERNEL32.LocalAlloc> EAX = 001602F0, если смотреть в Dumpe - там пусто по этому адресу... ![]() |
|
Создано: 09 июня 2009 01:29 · Личное сообщение · #9 |
![]() |
eXeL@B —› Вопросы новичков —› Помогите разобраться с Оллей,, срочно, плз |