存档

文章标签 ‘DLL’

Windows NT WinLogon Notify

2012年5月31日 没有评论

在NT系列Windows操作系统中,恶意软件可以通过关联Winlogon特定的事件来使自身被启动,如Lock,Logoff,Logon,Shutdown,StartScreenSaver,StartShell,Startup,StopScreenSaver,Unlock等,这甚至能够使得恶意软件在安全模式下被加载。WinLogon的通知事件在注册表的位置是:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify

当WinLogon.exe产生一个事件通知的时候,Windows会检查注册表里面指定的DLL并调用DLL指定的导出函数。示例(当屏幕锁定时调用WinLogonDemo.dll导出的LockFun函数)。

从Windows Vista开始,这项特性被取消了。可以通过注册一个服务来监听相应的事件(部分事件不支持),参见Using Service Control Manager (SCM) Notifications[......]

DllMain多线程死锁

2011年10月11日 4 条评论

在调试中遇到的一种死锁情况——DllMain死锁。DllMain是可选择的DLL入口指针,当进程和线程启动和终止时被系统调用,分别进行创建资源和释放资源等操作;而且也可以在DLL被装载进进程空间时(即DllMain响应DLL_PROCESS_ATTACH通知时)创建线程,在DLL从进程空间卸载时(即DllMain响应DLL_PROCESS_DETACH通知时)结束线程。但是在DllMain对创建或结束进程需要特别注意DllMain的序列化调用规则,使用不当将会造成死锁。下面是参考《Windows[......]

继续阅读

分类: 逆向调试 标签: , , ,

远线程DLL注入技术

2011年8月24日 没有评论

远线程DLL注入主要通过使用API CreateRemoteThread创建远程线程来实现,CreateRemoteThread与创建线程用的CreateThread非常相似,除了第一个参数hProcess之外,其他参数都是一样的。hProcess用于指定要在哪个进程中创建远程线程,也就是需要将DLL注入的那个进程。
为了通过将远程线程与DLL加载关联起来,我们可以把LoadLibraryW作为线程函数,把DLL的路径作为线程的参数。对于DLL的路径,因为用户态进程空间是互相独立的,所以我们需[......]

继续阅读

分类: Windows SDK 标签: , ,

在DLL中获取主进程窗口句柄

2011年8月23日 3 条评论

有的时候难免需要在DLL中获取主进程的窗口句柄,比如在DLL注入的时候等等。那么如何在DLL中获取主进程的窗口句柄呢?可以通过EnumWindows来实现。先通过GetCurrentProcessId获取进程的PID,然后在EnumWindows中调用GetWindowThreadProcessId获得与窗口句柄关联的进程PID,然后对比PID,看是否相等,并判断是不是主窗口即可。
以上方法参考自网络,不一定很完善,但是通常情况下已经够用了。附上测试代码:

// Author: 代码疯子
//[......]

继续阅读

分类: Windows SDK 标签: , ,

PE文件格式解析(五)——导出表的解析

2011年4月19日 没有评论

昨天看了一下PE感染的实现,发现还是存在很多疑问,所以决定继续写那个PE工具。这里要实现导出表的解析。
输出表一般存在于Dll之中,在Winnt.h中的定义如下:

typedef struct _IMAGE_EXPORT_DIRECTORY {
DWORD Characteristics;
DWORD TimeDateStamp;
WORD MajorVersion;
WORD MinorVersion;
DWORD N[......]

继续阅读

分类: PE文件格式 标签: , , ,