上面代码的逻辑:
寻找计算器,返回计算器的窗口句柄,如果成功,(返回值默认放eax中)
如果成功,继续往下执行,如果失败,调用ShowLastError显示错误信息
OD分析
?...lea eax,dword ptr ss:[ebp - oxc]位置,我们就可以去栈中看下ebp -c的位置是什么了,注意这里因为我走到下边
所以已经获取到了进程PID的值,所以是810,默认的时候是0...,那么是什么意思那,就是取得 ebp -c 的地址
2.取得ebp的地址(假设地址是18ff44)那么吧地址给eax,再把eax入栈,
3.把我们的第一个局部变量,也就是ebp - 4的值,(40D40...的栈地址),所以获得的PID
值则会给对应栈地址的内容(什么意思: 就是你提供局部变量的地址,也就是我们先前ebp -c的地址,操作系统获得PID的值,则会根据你给的地址,把对应地址里面的内容修改了,所以相当于是...我们用在反汇编窗口 CTRL + G 跳转到00401204 我们发现
第一个程序,也就是我们的注入程序,它调用MessageBox,是有的
而计算器的程序调用的时候,是没有的,找不到这块内存,所以就出错了