Сейчас на форуме: bartolomeo (+3 невидимых) |
eXeL@B —› Вопросы новичков —› Точка входа в Win Api функцию |
Посл.ответ | Сообщение |
|
Создано: 27 марта 2006 08:15 · Личное сообщение · #1 Привет All, такой вопрос родился. Есть у меня ехе, я туда дописывал функционал. Лечил с помощью OllyDbg, под ХР профессионал, вызов делал, типа. PUSH 0 PUSH 0 PUSH 2222222222 PUSH 0 call MessageBoxA так вот, на компах где стоит профессионал это все работает, а тут вчера кинул прогу на ХР Home edition и win 98, она быренько загнулась. Посмотрел, а адреса то оказывается у Win Api функций там другие. Как это можно лечить, получить этот адрес динамически? Каким образом? Или придется писать патч на каждую ось? |
|
Создано: 27 марта 2006 09:04 · Поправил: Hellspawn · Личное сообщение · #2 да можно, воспользуйся:
----- [nice coder and reverser] |
|
Создано: 27 марта 2006 09:39 · Личное сообщение · #3 |
|
Создано: 27 марта 2006 09:49 · Личное сообщение · #4 |
|
Создано: 27 марта 2006 19:31 · Поправил: Hellspawn · Личное сообщение · #5 |
|
Создано: 27 марта 2006 19:44 · Личное сообщение · #6 |
|
Создано: 27 марта 2006 20:25 · Личное сообщение · #7 |
|
Создано: 27 марта 2006 20:42 · Личное сообщение · #8 Ну во первых MessageBoxA относится к USER32, а во вторых, ты первый пост читал? Я ж скал, что работаю уже с готовым ехе, дорисовываю туда функционал и что у меня на других виндах, другие вызовы API и как ты предлагаешь воспользоваться ЭТОЙ API функцией, если адреса на которых они живут, ведут в некуда????? Вот для того чтоб воспользоваться этой функцией мне нуно сначала вичислить где она живет, чем щас и занимаюсь. Вот что я нашел wasm.ru/article.php?article=searchapi forum.pascal.net.ru/showtopic=3679 |
|
Создано: 27 марта 2006 20:50 · Поправил: Hellspawn · Личное сообщение · #9 ну хз.. хотел помочь... и гон тут не уместен... млин - это просто пример, для того чтобы понять суть... и всё равно я не понял, что тут сложного смотри есть ехе, в стандартном импотре почти всегда есть GetProcAddress... так двигаемся дальше, как выглядит импотр в ехе
просто пример! надеюсь мысль ясна? или ещё разжевать? ----- [nice coder and reverser] |
|
Создано: 27 марта 2006 21:01 · Личное сообщение · #10 не, ты помог и сильно твой код мне тоже нужен, но прежде чем я смогу им воспользоваться мне нужно получить адреса этих функций ))))), а то я уже замутил с фиксированными адресами, за что и поплатился, сегодня вечером мне сказали, что и на ХР професионал не везде работает. ЗЫ. По первому линку сходи может поймешь очем я |
|
Создано: 27 марта 2006 21:05 · Поправил: Klajnor · Личное сообщение · #11 Попробуй в Olly поискать вызов интересующей тебя функции Они могут быть в виде call dword ptr ds:[401008] (это 004020AA . FF15 08104000 call dword ptr ds:[<&MSVBVM60.__vbaFreeVarList>] ; MSVBVM60.__vbaFreeVarList ) или: 004596F2 |. E8 D3580000 call d3_.0045EFCA ; \MessageBoxA 0045EFCA $- FF25 00BA4600 jmp dword ptr ds:[46BA00] ; USER32.MessageBoxA Gydvin пишет: call MessageBoxA И вместо такого вызова скармливаешь Olly вызов в подобном виде PS А если прога эту функцию не использует, то нужно использовать метод Hellspawn/ Больше на ум ничё не приходит |
|
Создано: 27 марта 2006 21:09 · Личное сообщение · #12 |
|
Создано: 27 марта 2006 21:12 · Личное сообщение · #13 |
|
Создано: 27 марта 2006 21:33 · Поправил: Hellspawn · Личное сообщение · #14 ты ничего не понял или не понял я... (пример на реальной проге, у тебя другие адреса будут) смотри тебе нужно вызвать ф-ию MessageBoxА, беру любую программу... смотрю импорт, такой ф-ии нет! что делаю? ищу в импорте KERNEL32.GetProcAddress опа нашёл! (как правило она есть) дальше смотрю как программ её вызывает!
все данные у тебя есть! теперь ты можешь получить адрес любой ф-ии... если те и щас не понятно, тогда читай литературу... ----- [nice coder and reverser] |
|
Создано: 27 марта 2006 22:04 · Личное сообщение · #15 Gydvin Если тебе нужен именно MessageBoxA, то он есть в любой проге на дельфи( у меня Delphi 7). Даже в проге, которая абсолютно ничего не делает. 00402DD8 |. /75 13 jnz short Project2.00402DED 00402DDA |. |6A 00 push 0 ; /Style = MB_OK|MB_APPLMODAL 00402DDC |. |68 4C404000 push Project2.0040404C ; |Title = "Error" 00402DE1 |. |68 54404000 push Project2.00404054 ; |Text = "Runtime error at 00000000" 00402DE6 |. |6A 00 push 0 ; |hOwner = NULL 00402DE8 |. |E8 43E2FFFF call <jmp.&user32.MessageBoxA> ; \MessageBoxA 00402DED |> \5A pop edx 00402DEE \. C3 retn Для поиска вызова MessageBoxA используй RMB->Search for->All intermodular calls В аттаче исходники и сама прога Hellspawn пишет: ищу в импорте KERNEL32.GetProcAddress опа нашёл! (как правило она есть) - а вот GetProcAddress там как раз и нету=) f80e_Test2.rar.zip |
|
Создано: 27 марта 2006 22:15 · Личное сообщение · #16 ок, въехал спасибо кстати можешь проследить последовательность, правильно ли я делаю. поставил на вход GetProcAddress брейкпоинт GetProcAddress (77E7B332) вывалился в оллу, посмотрел адрес возврата, там оказалось нечто подобное 004051DF |. E8 F4C0FFFF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress при ближнем расмотрении это оказалось call 004012D8, переходим, там 004012D8 $-FF25 BC11A900 jmp dword ptr ds:[<&kernel32.GetProcAddr>; kernel32.GetProcAddress, которое оказывается jmp dword ptr ds:[A911BC] Все дальше не лезет. Вопрос насколько будет верным использовать call 004012D8 ? И это должно работать везде? |
|
Создано: 27 марта 2006 22:24 · Поправил: Hellspawn · Личное сообщение · #17 Klajnor пишет: а вот GetProcAddress там как раз и нету=) а у меня прога на си была там не было... я привёл более сложный случай Gydvin пишет: Вопрос насколько будет верным использовать call 004012D8 ? да вроде верно... можно конечно и jmp намутить... Ос сама заполнит "ячейки" с импортом нужными адресами (для конкретной ос) а ты просто переходишь на прыжок jmp dword ptr ds:[A911BC] - который дальше прыгнет, куда надо ----- [nice coder and reverser] |
|
Создано: 27 марта 2006 23:16 · Личное сообщение · #18 Hellspawn пишет: да вроде верно... можно конечно и jmp намутить... Ос сама заполнит "ячейки" с импортом нужными адресами (для конкретной ос) а ты просто переходишь на прыжок jmp dword ptr ds:[A911BC] - который дальше прыгнет, куда надо - call нужен, чтобы потом в прогу вернуться Можно сделать call dword ptr ds:[A911BC] Hellspawn пишет: а у меня прога на си была там не было... я привёл более сложный случай - чё-то мой уставший мозг сильно тупит... Никак не воткну в эту фразу =( А вообще можно через LordPe добавить в импорт то что тебе нужно. Ща сделал на WinXP Pro запустил на WinME - всё работает Или можно сделать так, как это сделанно в аттаче( scr - оригинал, scr2 - мой вариант вообще без импорта) И то и другое тестил на XP и на Me - работает 2ea7_Kernel.rar.zip |
|
Создано: 27 марта 2006 23:22 · Личное сообщение · #19 |
|
Создано: 27 марта 2006 23:27 · Личное сообщение · #20 |
|
Создано: 27 марта 2006 23:57 · Личное сообщение · #21 |
|
Создано: 28 марта 2006 00:15 · Личное сообщение · #22 |
eXeL@B —› Вопросы новичков —› Точка входа в Win Api функцию |