曲线解决:错误(10063): 被取地址的子程序“子程序1”的参数 1 必须是基本数据类型,且不能为字节集。
在帖子:https://bbs.125.la/forum.php?mod ... 14829320&extra= 中看到一个对非基本数据类型参数的函数取指针的思路
只能针对特定的参数数量,优化了一下,自适应任意非0个参数数量,原理就是通过返回地区,去扒原生函数的代码,它返回多少,就跟着返回多少
只根据第一个参数是否为空,来决定是否返回函数指针
置入代码 ({ 139, 69, 0, 131, 120, 12, 0, 116, 2, 201, 195, 139, 64, 4, 3, 64, 252, 139, 93, 4, 235, 1, 67, 129, 59, 139, 229, 93, 194, 117, 247, 49, 201, 102, 139, 75, 4, 201, 201, 90, 1, 204, 255, 226 })
汇编代码:
[JavaScript] 纯文本查看 复制代码 mov eax, dword [ebp+0x00]
cmp dword [eax+0x0C], 0x00000000
je label1
leave
ret
label1:
mov eax, dword [eax+0x04]
add eax, dword [eax-0x04]
mov ebx, dword [ebp+0x04]
jmp label3
label2:
inc ebx
label3:
cmp dword [ebx], 0xC25DE58B
jne label2
xor ecx, ecx
mov cx, word [ebx+0x04]
leave
leave
pop edx
add esp, ecx
jmp edx
一般获取函数指针,会用“调用子程序”来调用,这个方式有个bug,不能获取到正确的返回值,于是修复弄了另外一种方式,需要在目标函数开头调用一次,返回前调用一次,(相对麻烦一点了,但是没办法)
置入代码 ({ 139, 69, 0, 131, 120, 12, 0, 116, 8, 201, 137, 157, 0, 4, 0, 0, 195, 139, 64, 4, 3, 64, 252, 139, 93, 4, 235, 1, 67, 129, 59, 139, 229, 93, 194, 117, 247, 49, 201, 102, 139, 75, 4, 201, 201, 90, 1, 204, 255, 226 })置入代码 ({ 201, 139, 157, 0, 4, 0, 0, 195 })
dididid.e
(4.51 KB, 下载次数: 14)
|