zoukankan      html  css  js  c++  java
  • [Outlook] profile在注册表里的秘密。

    This article will also be published in english: http://www.cnblogs.com/LarryAtCNBlog/p/3944901.html

    身为IT有时候要从user的outlook profile中抓取一些信息,如PST的名字,存放位置什么的。此为前提。

    用outlook的com object写一些命令或脚本当然可以很轻松做得到,但是执行效率略低是一方面,对com object的使用又是另一方面。

    而且com object只能从本地端user登陆过后来执行,因为user的outlook profile是存放于HKEY_CURRENT_USER这个键当中,其他用户自然也就无法加载该user的profile然后用com object接口读到相应的信息。

    实际上这种需求直接分析注册表是最为简单,从后台也可以偷摸做。对注册表做一些遍历或者是分析,因此从效率上来说应该是更加快速的。

    outlook的profile在注表中的位置如下,

    HKEY_CURRENT_USERSoftwareMicrosoftWindows NTCurrentVersionWindows Messaging SubsystemProfiles

    当然,打开之后其实是相当不友好的,如下图,

    观察一下就能发现,都是16进制 - 0到9 a-f,其实它们是给MAPI方便调用的,对用户或者说非这方面专家来说是很不友好的。

    但是,它们中某些数据的确能够抓到我们最开始提及的PST文件的信息,我们需要的就是分析这些16进制的字符串,

    经过一些总结后,这些16进制键中,部分是随机生成,部分是固定通用的,根据一些分析下面的几个键应该是通用的,后面也括包括了它们的作用,这里本人水平有限,没有研读MSDN的资料(又不搞这方面开发,读个球球呀),于是浅显地自己实际试验了一下,得出以下结果。

    f86ed2903a4a11cfb57e524153480001    删掉后无异常,也未自动生成
    9207f3e0a3b11019908b08002b2a56c2    providers
    9375CFF0413111d3B88A00104B2A6676    Signature
    8503020000000000c000000000000046    不可删除,需要有value 0102300b,否则报错,具体作用不明
    5acf76a3665511cea39a00aa004acafa    删掉后无异常,也未自动生成
    3517490d76624c419a828607e2a54604    删掉后无异常,会自动生成
    13dbb0c8aa05101a9bb000aa002fc45a    和outlook anywhere有关
    0a0d020000000000c000000000000046    outlook最近使用的一些配置
    {D9734F19-8CFB-411D-BC59-833E334FCB5E}    删掉后无异常,会自动生成

    PST文件的路径呢,其实就在providers所在的键值中,如下图,PST和其它的mailbox等,都存在一个01023d00的value中。

    这个value打开之后,它的data全都是16进制的单字节,下面是一些特性,

    1. 每两行为一组,可以刚好分为一组或多组,也就是说,总的字结数,肯定是16的倍数。

    2. 每两行合并成一个16进制字符串,该字符串其实就是profile的一个subkey。

    3. 每个从第2步合成的字符串上来说,都是一个provider,说白了就是我们在outlook上看到的mailboxes或者是挂载的PST,如下图,

    像我这种有节操的运维,当然公司的一些信息我要打码,能看明白就行了,

    上面说了3点,其实用一张图能更明白表达我想说的是什么(咦!~感觉前面3点白说了),

    一看就懂了,是吧,下面我们打开F67F21B*****这个key来看一下里面的内容,其中有一个叫001f3001的value,它的data如图,说明了这个provider是一个PST文件,那它的路径在哪呢?在001f6700这个value里放着,请看下图,

    providers的value里,包括了很多mailbox或者挂载的PST,还有public folder之类一般看不到的folder,一切都是按上面PST的方法一样,能够读出来。

    现在有个问题,其它的一些value代表了什么?又是怎么知道01023d00这个value存着providers的?其它还有很多key是干嘛用的?

    关于这几个问题,我自认水平糙,智商不高加上先天缺陷,无法一一解答,贴一个MSDN链好了。

    http://msdn.microsoft.com/en-us/library/bb415650.aspx

    还有另一个在网上找到的站点,信息已经过时,而且是德文(Google翻译告诉我的),但依然有一定参考价值,

    http://www.msxfaq.de/clients/mapireg.htm

    那捕获PST的脚本有么?遗憾,没有,因为是某BBS里有人提到过怎么从注册表里找PST的问题,我才研究了一下,本身我没有该需求,也就没有编写任何的script。

  • 相关阅读:
    强行拉取git分支到覆盖到本地
    提交git报错:rejected non fast forward
    表单验证
    获取ipv6转换ipv4
    使用js获取外网ip
    --打坐篇-学习的一些笔记-03--
    --心法篇-《我和我的Angular》-01-学习笔记--
    --打坐篇-学习的一些笔记-02--
    --打坐篇-学习的一些笔记-01--
    --前端派-练功房-01-关于this指向的一些案例补充--
  • 原文地址:https://www.cnblogs.com/LarryAtCNBlog/p/3944826.html
Copyright © 2011-2022 走看看