2015-02-18 3 views
1

Я хочу знать, как можно вручную выполнить функцию, существующую внутри приложения? Я искал везде и не могу найти полезного слова об этом. В IDA Pro это называется appCall, так что это эквивалентно для olly?Выполнить функцию от ollydbg?

ответ

3

Вызов любой функции вручную эквивалентно сборки 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 
+0

есть ли какой-либо плагин, который автоматически сделает это для меня, поэтому мне просто нужно написать код asm, который я хочу выполнить, и нажать run? –

+0

@ DanielEugen Я не знаю о плагине, но это выполнимо тривиально либо вручную, закладок eip при паузе, либо с использованием скрипта с odbgscript. Я добавил детали примерного сценария, чтобы ответить, проверив его – blabb

+0

благодарю вас за подробный ответ. .. Я выкопаю его, и если я найду какие-нибудь плагины, я расскажу вам об этом. –

0

Для использования в Ollydbg нет встроенного способа для этого. Возможно, вам понадобится написать плагин для этого.

Однако, если ваша цель - экспортированная функция в DLL, вы можете использовать функцию «Вызов DLL-импорта» в Ollydbg. Используя функцию «Экспорт вызовов», вы можете вызвать экспортированную функцию с аргументами, как показано на скриншотах ниже.

Call DLL import Call an export

+0

Есть ли плагин, что там я могу назвать внутреннюю функцию внутри исполняемого файла? –