执行ollydbg的功能?

时间:2015-02-18 23:21:47

标签: ollydbg

我想知道如何手动执行附加应用程序中存在的函数?我到处搜索,找不到任何有用的词。在IDA Pro中,它叫做appCall,那对于olly来说是什么等同的呢?

2 个答案:

答案 0 :(得分:3)

手动调用任何函数等同于组装函数调用inplace

假设您在ollydbg下运行calc.exe 内部函数SetBox(< x>,< y>)在科学模式的inv和hyp复选框中设置复选标记
< x>可以有两个值设置== 1和未设置== 0
< y> == CheckBox的Id,您已确定Id为0x8c和0x8d
你还确定这个函数是__stdcall

假设您想要手动调用此函数并想要设置id为0x8c的复选框,您需要做的就是找到一个位置并汇编以下序列并执行它们

push 1
push 0x8c
call calc.SetBox

执行此操作时,您需要注意的是不要破坏堆栈,当您完成执行代码段后返回到您最初转移的位置

ollydbg.exe calc.exe - > f9 运行exe然后 f12暂停 注意ollydbg暂停的地址(对于xpsp3它将是ntdll!KiFastSystemCallRet()

现在找到一个代码洞穴汇编在这里使用new origin将eip 转移到新组装的代码执行完代码片段时选择原始的暂停地址(对于xpsp3 ntdll!kiFastSystemCallRet())和重新设置回到该地址这里有新的来源和 f9 来运行exe你会注意到你设置了复选标记而没有点击复选框:)

我有时会手动完成(f12书签eip向下滚动到空白空间汇编执行并通过书签返回)

或使用脚本并使用ODBGSCRIPT

运行它 当你用下面的f12暂停ollydbg时,

上面描述的scenerio脚本(calc复选框)

编辑评论的脚本并添加了一个malloc来摆脱洞穴搜索家务

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

答案 1 :(得分:0)

对于Ollydbg中的应用程序,没有内置的方法来执行此操作。您可能需要编写一个插件来执行此操作。

但是,如果您的目标是DLL中的导出函数,则可以使用Ollydbg中的“调用DLL导出”功能。使用“调用导出”功能,您可以使用参数调用导出的函数,如下面的屏幕截图所示。

Call DLL import Call an export