从 ollydbg 执行函数?
Execute function from ollydbg?
我想知道如何手动执行附加应用程序中存在的功能?。我到处搜索,找不到任何有用的词。在 IDA Pro 中,它被称为 appCall 那么它与 olly 的等价物是什么?
Ollydbg 中的应用程序没有执行此操作的内置方法。您可能需要编写一个插件来执行此操作。
但是,如果您的目标是 DLL 中的导出函数,则可以使用 Ollydbg 中的 "Call DLL export" 功能。使用 "Call export" 功能,您可以调用带参数的导出函数,如下面的屏幕截图所示。
手动调用任何函数等同于就地组装函数调用
假设你运行宁calc.exe在ollydbg
之下
内部函数 SetBox(< x >,< y >) 在科学模式下设置 inv 和 hyp 复选框的复选标记
< x > 可以有两个值 set == 1 和 unset == 0
< y > == CheckBox 的 Id,您已确定 Id 为 0x8c 和 0x8d
您还确定此函数是 __stdcall
假设你想手动调用这个函数并且想设置id为0x8c的复选框,你需要做的就是找到一个地方assemble下面的顺序并执行它们
push 1
push 0x8c
call calc.SetBox
执行此操作时,您需要注意的是不要损坏堆栈,并且当您完成代码段执行后 return 回到您最初转移的地方
ollydbg.exe calc.exe ->f9 到 运行 exe 然后 f12 暂停
请注意 ollydbg 暂停的地址( 对于 xpsp3 它将是 ntdll!KiFastSystemCallRet())
现在找到一个代码洞穴assemble 在这里使用新的源来传输eip到新的assembled代码完成后执行代码片段select 原始暂停地址(对于 xpsp3 ntdll!kiFastSystemCallRet())和 将 eip 重置回那个地址 新的来源在这里和 f9 到 运行 你会注意到你没有点击复选框就设置了复选标记:)
有时我要么手动执行(f12 书签 eip 向下滚动到空的 space assemble 执行并 return 通过书签返回)
或使用脚本并 运行 它与 ODBGSCRIPT
当您暂停 ollydbg 并在
下面使用 f12 时,用于上述场景的脚本(计算复选框)
编辑注释脚本并添加 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
我想知道如何手动执行附加应用程序中存在的功能?。我到处搜索,找不到任何有用的词。在 IDA Pro 中,它被称为 appCall 那么它与 olly 的等价物是什么?
Ollydbg 中的应用程序没有执行此操作的内置方法。您可能需要编写一个插件来执行此操作。
但是,如果您的目标是 DLL 中的导出函数,则可以使用 Ollydbg 中的 "Call DLL export" 功能。使用 "Call export" 功能,您可以调用带参数的导出函数,如下面的屏幕截图所示。
手动调用任何函数等同于就地组装函数调用
假设你运行宁calc.exe在ollydbg
之下
内部函数 SetBox(< x >,< y >) 在科学模式下设置 inv 和 hyp 复选框的复选标记
< x > 可以有两个值 set == 1 和 unset == 0
< y > == CheckBox 的 Id,您已确定 Id 为 0x8c 和 0x8d
您还确定此函数是 __stdcall
假设你想手动调用这个函数并且想设置id为0x8c的复选框,你需要做的就是找到一个地方assemble下面的顺序并执行它们
push 1
push 0x8c
call calc.SetBox
执行此操作时,您需要注意的是不要损坏堆栈,并且当您完成代码段执行后 return 回到您最初转移的地方
ollydbg.exe calc.exe ->f9 到 运行 exe 然后 f12 暂停 请注意 ollydbg 暂停的地址( 对于 xpsp3 它将是 ntdll!KiFastSystemCallRet())
现在找到一个代码洞穴assemble 在这里使用新的源来传输eip到新的assembled代码完成后执行代码片段select 原始暂停地址(对于 xpsp3 ntdll!kiFastSystemCallRet())和 将 eip 重置回那个地址 新的来源在这里和 f9 到 运行 你会注意到你没有点击复选框就设置了复选标记:)
有时我要么手动执行(f12 书签 eip 向下滚动到空的 space assemble 执行并 return 通过书签返回)
或使用脚本并 运行 它与 ODBGSCRIPT
当您暂停 ollydbg 并在
下面使用 f12 时,用于上述场景的脚本(计算复选框)编辑注释脚本并添加 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