在研究调Themida 壳时发现的,很强悍
RaiseException的四个参数
参数1-------异常号(由系统发送)
参数2-------异常标志(取1或者0,0表示返回异常处继续执行,1表示不处理)
参数3-------与下面的指针配合用,表示指向的地方一共有几个参数
参数4-------指向调用的地址
我们 可以来做个实验
用OD打开一个加载有KERNEL32.dll和NETDLL.dll模块的文件,然后把代码窗口拉到下面有许多
0000 add byte ptr [eax], al
0000 add byte ptr [eax], al
.....................................
这样的地方,在某个地址开头将这个连续的ASCII二进制串复制上去
0D 0A 0A 0A 25 73 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D
2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 0A 0D 2D 2D 2D 20 20 20 20 20
20 20 20 20 20 54 68 65 6D 69 64 61 20 50 72 6F 66 65 73 73 69 6F 6E 61 6C 20 20 20 20 20 20 20
20 20 20 20 20 2D 2D 2D 0A 0D 2D 2D 2D 20 20 20 20 20 20 28 63 29 32 30 30 36 20 4F 72 65 61 6E
73 20 54 65 63 68 6E 6F 6C 6F 67 69 65 73 20 20 20 20 20 20 20 20 20 2D 2D 2D 0A 0D 2D 2D 2D 2D
2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D
2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 0D 0A 0A 0A
然后再找个0000 byte ptr [eax], al 这样的空白地方输入以下汇编指令
PUSH 你的ASCII的首地址
PUSH 你上面的那个ASCII首地址的堆栈值
PUSH 2
PUSH 0
PUSH 40010006
call dword ptr [你的RaiseException函数地址]
断点(防止跑飞)
最后将EIP强行设置到指令的开始处运行,然后查看记录看看发生了什么
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)