没有技术含量的东西。因为我校的 EasyConnect(一下简称 “EC” ) 在连接后,总是会弹出一个资源列表。因为我的 EC 部署在一个虚拟机上,只分配了 1GB 的内存,因此每次断线自动重连后,会不断打开浏览器 (Google Chrome),最终造成内存不足,系统死机。
PS:这个资源列表虽然 EC 有设置可以不自动打开,但不管怎么设置,它就是要打开,否则就没有此文了。
解决方案
我想到了两种方案。第一种是怒怼客户端。第二种是 Hook 关键 API : CreateProcess, ShellExecute 等。因为 Hook 方案没有成功(以前留下来的可用的代码失效了),遂采取第二种方案。
1. IDA 载入 SangforCSClient.exe 进行分析
2. 推测打开浏览器无非就是通过 CreateProcess, ShellExecute 等 Win32 API 来进行,于是重点关注对这几个 API 的 Xref,最终找到并确定 0x0041A311 这个基址。
3. 在此处,0041A311 的 CreateProcess 就是创建浏览器进程的调用,因此只要将这个调用抹杀掉,让它直接返回 true。下面是 IDA 处该指令附近的伪代码:
4. OD 载入,定位基址,因为 Win32 的调用方式是 stdcall,右向左压栈,被调用方负责堆栈平衡。因为我们灭杀这个 API 调用,会造成压进去的参数没有弹出栈。所以我们必须把上面压栈部分一起消灭。
5. 因为 CreateProcess 被我们消灭掉后,PROCESS_INFORMATION 结构体中的两个句柄是空的,所以在我们强制其成功后,不需要再 CloseHandle。于是我痛快地消灭它们。
6. 最终实现的效果:
Leave a Reply