在Delphi应用程序中检测madexcept

时间:2013-01-20 15:03:52

标签: delphi madexcept

我可以通过仅分析exe文件来检测在delphi应用程序中使用的makex以及

通过向我的应用程序添加几行代码并通知最终的exe文件用户是否使用了madshi madexcept,是否有一种简单的方法

3 个答案:

答案 0 :(得分:12)

如果您将madexcept与Delphi应用程序一起使用,那么该可执行文件中应该有一个资源条目:MAD->EXCEPT

测试外部应用程序:

var
  h: HMODULE;

  h := LoadLibraryEx('c:\foo\bar.exe', 0, LOAD_LIBRARY_AS_DATAFILE);
  if h <> 0 then
  begin
    if FindResource(h, 'EXCEPT', 'MAD') <> 0 then 
      ShowMessage('madexcept Found!');
    FreeLibrary(h);
  end;

您的自己的应用程序内部进行测试:

if FindResource(HInstance, 'EXCEPT', 'MAD') <> 0 then 
  ShowMessage('madexcept Found!');

请注意,但是它不会告诉您madexcept使用哪些选项。例如,可能有一个异常过滤器设置来过滤访问冲突异常,或者一个设置不会检查冻结的线程等...

答案 1 :(得分:5)

您可以对“madexcept”文本进行纯文本搜索。我知道的最简单的方法是使用命令行实用程序。我会像这样组合字符串和grep实用程序:

C:\mydir>strings MyApp.exe | grep -i madexcept
MadException
MadExceptionT
madExcept
        madExcept
U9v;1   madExcept5
A       madExcept
        madExcept
        madExcept1
c       madExceptL
c       madExcept
c       madExcept
c       madExceptL
c       madExcept
c       madExcept
        madExcept
c       madExceptH
This way madExcept can't install the thread hooks.
.........

我个人使用GnuWin32作为这些不可或缺的实用工具的来源。

如果您不是某人的命令行,请使用Process Explorer。运行可执行文件,然后运行Process Explorer。找到该过程并双击它。打开Process Explorer属性对话框,其中包含名为 Strings 的页面。选择该页面,然后单击“保存”按钮。现在,您有一个文本文件,其中包含可执行文件中可以搜索的所有字符串。

所有这些都告诉你,你将madExcept代码编译到你的程序中。你不会知道它是否真的有效。

答案 2 :(得分:2)

如果您查看启用了madExcept的项目选项,我相信您会看到使用的定义 madExcept ,例如在您可以执行的任何地方:

{$IFDEF madExcept}
  ....
{$ENDIF}