托管注入深入研究
2008-12-11 13:36:11 来源:WEB开发网2. 虽然多次单击按扭注入时,DLL_THREAD_ATTACH都会得到通知;但反过来,得到了通知,不意味着就是远程注入:一个最明显的情况是,对CreateThread的调用就会导致DLL_THREAD_ATTACH收到通知,但这并非远程注入
我的解决办法是:每次主程序调用CreateRemoteThread迫使宿主调用LoadLibrary加载dll的时候,都会使模块计数器加1,根据模块计数器的值的变化,就可以确定是否是远程注入了。
示例程序说明:
示例程序包括3个文件:
1. SuperSpy.exe 用C#写的主程序
2. Invoke.dll 用C++写的dll,也只能用C++来写
3. PropertyControl.dll 用VB.NET写的插件,它不是必需的
除了Invoke.dll必须用C++外,其余两个可以用任意语言写。
你也许会感到奇怪,为什么有两个dll?
其中PropertyControl.dll是一个插件,你完全可以把所有的代码都放到Invoke.dll中,之所以用插件的形式,只是为了方便大家编写自已的插件,插件的规范是,在任意一个类中实现以下成员(你可以用你习惯的语言来编写这个插件):
public static void Inject();
public static string Description
{
get;
}
两个成员都必须是公共、静态的,其中Inject方法是注入后要调用的方法;Description属性是用于描述插件作用的。
我自已实现的插件的功能是:查询和编辑一个托管程序中所有窗口(包括控件)的属性,这是一个很强大的功能,我举两个例子:
1. 星号密码查看。由于已经注入,本来显示为星号的密码,可以直接通过Text属性获得
2. 灰色按扭突破。只需将窗口的Enabled属性设置成true即可
以往要实现这两个功能,都需要分别编写相关的程序,而现在仅仅是这个插件的一个简单应用。而且,你可以编写自己的插件,来实现自己的要求。
- ››注入漏洞及参数化查询
- ››深入理解JAR包
- ››深入分析Volatile的实现原理
- ››深入理解Flash Player的应用程序域(Application ...
- ››深入理解flash函数(AS2)
- ››深入理解Android消息处理系统——Looper、Handler...
- ››深入理解SET NAMES和mysql(i)_set_charset的区别
- ››深入理解Mysql字符集设置
- ››深入浅出实战攻防恶意PDF文档
- ››深入剖析防火墙策略的执行过程:ISA2006系列之六
- ››深入JavaScript与.NET Framework中的日期时间(3)...
- ››深入JavaScript与.NET Framework中的日期时间(2)...
更多精彩
赞助商链接