在COM + ProgId

时间:2015-05-11 19:07:36

标签: asp-classic com+

我从来没有真正调试经典ASP,所以这有点粗糙,很可能是一个很糟糕的问题,但我在问之前做了尽可能多的研究。

我有一个请求,要求识别哪些代码打印到打印机,并在某人建立的新页面中重复使用该代码。

在尝试识别时,我偶然发现了一些我不理解的事情,但是我发现了一件大事。

要点是,人们可以从自助餐厅订购饼干,当他们提交时,会显示一个确认页面,并将该订单发送给打印机。

要获取cookie选项的列表,有一个服务器对象已创建,并且从那里存在一个方法,但我无法确定它在哪里或我应该在哪里查看。这是代码:

<%
    On error resume next

    Const CATAGORY_COOKIE = 1

    Dim cookieNames
    Dim objCookie
    Dim Count

    Set objCookie = Server.CreateObject("CookieOrder.CookieRequest")
    if objCookie Is Nothing then
        Response.Write "Error"
        Response.End
    End if

    cookieNames = objCookie.getAvailable_Item_Names(CATAGORY_COOKIE)
    Count = objCookie.Count

    Dim sz
    sz = Split(cookieNames, ";")
    Set objCookie = Nothing
%>

如何识别服务器对象是什么?有一个.dll文件包含二进制文件,但我不熟悉如何使用它。

我曾尝试使用浏览器开发工具,但他们在这方面确实没有太大帮助。

我希望了解这段代码的执行方式或执行方式,我会找出其他问题。

1 个答案:

答案 0 :(得分:3)

背景位

该项目正在使用COM +组件。这些是使用语法

在Classic ASP中定义的
Set obj = Server.CreateObject("[insert COM+ ProgId]")

在此项目中,您使用的是使用ProgId

注册的组件
CookieOrder.CookieRequest

Classic ASP提供了许多开箱即用的COM +组件,它们提供了许多常见功能,例如;

Visual Basic Scripting Runtime
ActiveX Data Objects

还可以使用Visual Basic,Visual C ++以及最近使用.NET Framework (C#,VB.NET)

如何找到COM +库

  

注意:访问注册表时请小心,因为修改或删除密钥可能会导致操作系统损坏。

     

为了本指南的目的,还将使用Scripting.Dictionary ProgId。

关键是使用ProgId找到难以捉摸的COM +库。

  1. 启动%SystemRoot%\system32\regedit.exe (适用于大多数Windows操作系统)

  2. 导航到HKEY_CLASS_ROOT配置单元并选择它,然后按 Ctrl + F 打开“查找”对话框。

    < / LI>
  3. Find what中输入此案例中的ProgId Scripting.Dictionary,并确保仅在look at Key中选中Find,然后按Find Next或{{ 1}}。

  4. 如果找到ProgId密钥,请展开该密钥并找到包含CLSID REG_SZ的(Default)密钥,其中包含CLSID的值,如果是这个示例{EE09B103-97E0-11CF-978F-00A02463E06F}。双击此值以显示Edit String对话框,将值复制到剪贴板中。

  5. 返回HKEY_CLASS_ROOT密钥并使用“搜索”搜索CLSID值,在此示例中为{EE09B103-97E0-11CF-978F-00A02463E06F},并再次确保Look at仅{ {1}}选中,然后按KeyFind

  6. 如果找到密钥,展开并在其中找到Find Next密钥,您将在InprocServer32 REG_SZ值中找到DLL的位置。在此示例中为(Default) (根据安装位置和操作系统,这将有所不同)

  7. 反编译怎么样?

    在评论中有很多关于用于编译DLL(主要是.NET)的编译器的假设,但最好的检查方法是使用公共领域中的众多程序中的一个来设计这个目的。

    有一个关于SO的具体问题涉及到这个问题;

    Answer by @simon-mᶜkenzie to Identifying the origin of a DLL