Я хочу знать, как можно вручную выполнить функцию, существующую внутри приложения? Я искал везде и не могу найти полезного слова об этом. В IDA Pro это называется appCall, так что это эквивалентно для olly?Выполнить функцию от ollydbg?
ответ
Вызов любой функции вручную эквивалентно сборки InPlace вызова функции
Предположим, вы работаете calc.exe под OllyDbg
внутренней функции SetBox (< х>, < у>) устанавливает галочку в окнах inv и hyp в научном режиме
< x> может иметь два значения, установленные == 1 и unset == 0
< у> == Id из CheckBox, и вы определили Id быть 0x8c и 0x8d
вы также определили, что эта функция является __stdcall
предположит, что вы хотите, чтобы вызвать эту функцию вручную и хотят, чтобы установить флажок с идентификатором 0x8c все, что вам нужно сделать, это найти место и собрать следующую последовательность и выполнить их
push 1
push 0x8c
call calc.SetBox
, делая это все, что вам нужно позаботиться не повредится в стек и, когда вы закончили выполнение фрагмента кода вернуться обратно к месту, где вы первоначально перешли от
ollydbg.exe calc.exe -> f9 запустить ехе, а затем f12, чтобы приостановить обратите внимание на адрес, где OllyDbg приостановлена
(для XPSP3 это будет Ntdll KiFastSystemCallRet()!) теперь найдите код cave assemble используйте новое происхождение здесь, чтобы передать eip к вновь собранному коду выполните сниппет, когда закончите, выберите оригинальный приостановленный адрес (для xpsp3 ntdll!kiFastSystemCallRet()) и сброса EIP обратно на этот адрес с новым происхождения здесь и f9 для запуска ехе вы заметите, как вы установите флажок, не нажимая на флажке :)
в некоторых случаях я либо делать это вручную (f12 закладку EIP прокручивать вниз свободное место объединяет выполнения и вернуться назад с помощью закладки)
или использовать скрипт и запустить его с ODBGSCRIPT
скриптом для scenerio, описанной выше (известково флажка), когда вы приостановите OllyDbg с f12 ниже
редактировать прокомментировал сценарий и добавил таНос избавить пещеру испытующа рутинной
var myret ;variable
var cave ;variable
var mem ;variable
mov myret , eip ;save current eip
alloc 1000 ;allocate memory (no need to search for code caves
mov mem, $RESULT ;save for freeing the allocated memory
mov cave,$RESULT ;mov newly allocated space to var cave
mov eip , cave ;detour current eip to cave
asm cave, "push 01" ;assemble instruction (pop all push dont corrupt stack)
add cave,$RESULT ;lenght added to find next address for assembling
asm cave, "push 08c" ;assemble next instruction
add cave,$RESULT ;len of previous instruction added to current address
asm cave, "call calc.SetBox" ; assemble call
step ; we assembled 3 instructions lets step thrice
step ;
step ;
mov eip , myret ;restore saved eip
free mem,1000 ;free
go ;run the binary to notice the check box ticked
Для использования в Ollydbg нет встроенного способа для этого. Возможно, вам понадобится написать плагин для этого.
Однако, если ваша цель - экспортированная функция в DLL, вы можете использовать функцию «Вызов DLL-импорта» в Ollydbg. Используя функцию «Экспорт вызовов», вы можете вызвать экспортированную функцию с аргументами, как показано на скриншотах ниже.
Есть ли плагин, что там я могу назвать внутреннюю функцию внутри исполняемого файла? –
есть ли какой-либо плагин, который автоматически сделает это для меня, поэтому мне просто нужно написать код asm, который я хочу выполнить, и нажать run? –
@ DanielEugen Я не знаю о плагине, но это выполнимо тривиально либо вручную, закладок eip при паузе, либо с использованием скрипта с odbgscript. Я добавил детали примерного сценария, чтобы ответить, проверив его – blabb
благодарю вас за подробный ответ. .. Я выкопаю его, и если я найду какие-нибудь плагины, я расскажу вам об этом. –