定位 COM+ ProgId 后面的源 DLL

Locating the source DLL behind a COM+ ProgId

我从来没有真正调试过 Classic 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 文件,但我不熟悉如何使用它。

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

我希望通过了解这段代码的执行方式或执行位置,我可以找出其他问题。

背景知识

该项目正在使用 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+ 库

NOTE: Please be careful when accessing the registry as modifying or deleting keys could lead to a corrupt operating system.

Also for the purposes of this guide will use the Scripting.Dictionary ProgId.

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

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

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

  3. Find what 中键入 ProgId 在这种情况下 Scripting.Dictionary 并确保在 look at 中仅选中 Key 然后按 FindFind Next.

  4. 如果找到 ProgId 键,展开到该键并找到包含 (Default) REG_SZ 的 CLSID 键,其值为本例中的 CLSID {EE09B103-97E0-11CF-978F-00A02463E06F}。双击该值以弹出 Edit String 对话框,将值复制到剪贴板。

  5. Return 到 HKEY_CLASS_ROOT 键并使用 Find 搜索 CLSID 值,在此示例中为 {EE09B103-97E0-11CF-978F-00A02463E06F} 并再次确保Look at 仅选中 Key,然后按 FindFind Next

  6. 如果找到密钥,展开并找到其中的 InprocServer32 密钥,您将在 (Default) REG_SZ 值中找到 DLL 的位置。在这个例子中是 C:\Windows\System32\scrrun.dll (这将根据安装位置和 OS 而不同)

反编译呢?

关于用于编译 DLL(主要是 .NET)的编译器的评论中有很多假设,但最好的检查方法是使用 public 中的众多程序之一为此目的设计的域名。

SO 上有一个特定问题处理此问题;

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