第55章

识别可执行文件

55.1 Microsoft Visual C++

可导入的MSVC版本和DLL文件如下图:

第55章 - 图1

msvcp*.dll包含C++相关函数,因此如果导入了这类dll,便可推测是C++程序。

55.1.1命名管理

命名通常以问号?开始。

获取更多关于MSVC命令管理的信息:51.1.1节

55.2 GCC

除了*NIX环境,Win32下也有GCC,需要Cygwin和MinGW。

55.2.1 命名管理

命名通常以_Z符号开头。

更多关于GCC命名管理的信息:51.1.1节

55.2.2 Cygwin

cygwin1.dll经常被导入。

55.2.3 MinGW

msvcrt.dll可能会被导入。

55.3 Intel FORTRAN

libifcoremd.dll,libifportmd.dll和libiomp5md.dll(OpenMP支持)可能会被导入。

libifcoremd.dll中许多函数以前缀名for_开始,表示FORTRAN。

55.4Watcom,OpenWatcom

55.4.1 命名管理

命名通常以W符号开始。

举个例子,下面是“class”类名为“method”的方法没有任何参数并且返回void的加密:

  1. W?method$_class$n__v

55.5 Borland

这里有一个有关Borland Delphi和C++开发者命名管理的例子:

  1. @TApplication@IdleAction$qv@TApplication@ProcessMDIAccels$qp6tagMSG@TModule@$bctr$qpcpvt1@TModule@$bdtr$qv@TModule@ValidWindow$qp14TWindowsObject@TrueColorTo8BitN$qpviiiiiit1iiiiii@TrueColorTo16BitN$qpviiiiiit1iiiiii@DIB24BitTo8BitBitmap$qpviiiiiit1iiiii@TrueBitmap@$bctr$qpcl@TrueBitmap@$bctr$qpvl@TrueBitmap@$bctr$qiilll

命名通常以@符号开始,然后是类名、方法名、加密方法的参数类型。

这些名称会被导入到.exe,.dll和debug信息内等等。

Borland Visual Component Libarary(VCL)存储在.bpl文件中,而不是.dll。比如vcl50.dll,rtl60.dll。

其他可能导入的DLL:BORLNDMM.DLL。

55.5.1 Delphi

几乎所有的Delphi可执行文件的代码段都以“Boolean”字符串开始,和其他类型名称一起。 下面是一个典型的Delphi程序的代码段开头,这个块紧接着win32 PE文件头:

  1. 00000400 04 10 40 00 03 07 42 6f 6f 6c 65 61 6e 01 00 00 |..@...Boolean...|
  2. 00000410 00 00 01 00 00 00 00 10 40 00 05 46 61 6c 73 65 |........@..False|
  3. 00000420 04 54 72 75 65 8d 40 00 2c 10 40 00 09 08 57 69 |.True.@.,.@...Wi|
  4. 00000430 64 65 43 68 61 72 03 00 00 00 00 ff ff 00 00 90 |deChar..........|
  5. 00000440 44 10 40 00 02 04 43 68 61 72 01 00 00 00 00 ff |D.@...Char......|
  6. 00000450 00 00 00 90 58 10 40 00 01 08 53 6d 61 6c 6c 69 |....X.@...Smalli|
  7. 00000460 6e 74 02 00 80 ff ff ff 7f 00 00 90 70 10 40 00 |nt..........p.@.|
  8. 00000470 01 07 49 6e 74 65 67 65 72 04 00 00 00 80 ff ff |..Integer.......|
  9. 00000480 ff 7f 8b c0 88 10 40 00 01 04 42 79 74 65 01 00 |......@...Byte..|
  10. 00000490 00 00 00 ff 00 00 00 90 9c 10 40 00 01 04 57 6f |..........@...Wo|
  11. 000004a0 72 64 03 00 00 00 00 ff ff 00 00 90 b0 10 40 00 |rd............@.|
  12. 000004b0 01 08 43 61 72 64 69 6e 61 6c 05 00 00 00 00 ff |..Cardinal......|
  13. 000004c0 ff ff ff 90 c8 10 40 00 10 05 49 6e 74 36 34 00 |......@...Int64.|
  14. 000004d0 00 00 00 00 00 00 80 ff ff ff ff ff ff ff 7f 90 |................|
  15. 000004e0 e4 10 40 00 04 08 45 78 74 65 6e 64 65 64 02 90 |..@...Extended..|
  16. 000004f0 f4 10 40 00 04 06 44 6f 75 62 6c 65 01 8d 40 00 |..@...Double..@.|
  17. 00000500 04 11 40 00 04 08 43 75 72 72 65 6e 63 79 04 90 |..@...Currency..|
  18. 00000510 14 11 40 00 0a 06 73 74 72 69 6e 67 20 11 40 00 |..@...string .@.|
  19. 00000520 0b 0a 57 69 64 65 53 74 72 69 6e 67 30 11 40 00 |..WideString0.@.|
  20. 00000530 0c 07 56 61 72 69 61 6e 74 8d 40 00 40 11 40 00 |..Variant.@.@.@.|
  21. 00000540 0c 0a 4f 6c 65 56 61 72 69 61 6e 74 98 11 40 00 |..OleVariant..@.|
  22. 00000550 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
  23. 00000560 00 00 00 00 00 00 00 00 00 00 00 00 98 11 40 00 |..............@.|
  24. 00000570 04 00 00 00 00 00 00 00 18 4d 40 00 24 4d 40 00 |.........M@.$M@.|
  25. 00000580 28 4d 40 00 2c 4d 40 00 20 4d 40 00 68 4a 40 00 |(M@.,M@. M@.hJ@.|
  26. 00000590 84 4a 40 00 c0 4a 40 00 07 54 4f 62 6a 65 63 74 |.J@..J@..TObject|
  27. 000005a0 a4 11 40 00 07 07 54 4f 62 6a 65 63 74 98 11 40 |..@...TObject..@|
  28. 000005b0 00 00 00 00 00 00 00 06 53 79 73 74 65 6d 00 00 |........System..|
  29. 000005c0 c4 11 40 00 0f 0a 49 49 6e 74 65 72 66 61 63 65 |..@...IInterface|
  30. 000005d0 00 00 00 00 01 00 00 00 00 00 00 00 00 c0 00 00 |................|
  31. 000005e0 00 00 00 00 46 06 53 79 73 74 65 6d 03 00 ff ff |....F.System....|
  32. 000005f0 f4 11 40 00 0f 09 49 44 69 73 70 61 74 63 68 c0 |..@...IDispatch.|
  33. 00000600 11 40 00 01 00 04 02 00 00 00 00 00 c0 00 00 00 |.@..............|
  34. 00000610 00 00 00 46 06 53 79 73 74 65 6d 04 00 ff ff 90 |...F.System.....|
  35. 00000620 cc 83 44 24 04 f8 e9 51 6c 00 00 83 44 24 04 f8 |..D$...Ql...D$..|
  36. 00000630 e9 6f 6c 00 00 83 44 24 04 f8 e9 79 6c 00 00 cc |.ol...D$...yl...|
  37. 00000640 cc 21 12 40 00 2b 12 40 00 35 12 40 00 01 00 00 |.!.@.+.@.5.@....|
  38. 00000650 00 00 00 00 00 00 00 00 00 c0 00 00 00 00 00 00 |................|
  39. 00000660 46 41 12 40 00 08 00 00 00 00 00 00 00 8d 40 00 |FA.@..........@.|
  40. 00000670 bc 12 40 00 4d 12 40 00 00 00 00 00 00 00 00 00 |..@.M.@.........|
  41. 00000680 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
  42. 00000690 bc 12 40 00 0c 00 00 00 4c 11 40 00 18 4d 40 00 |..@.....L.@..M@.|
  43. 000006a0 50 7e 40 00 5c 7e 40 00 2c 4d 40 00 20 4d 40 00 |P~@.\~@.,M@. M@.|
  44. 000006b0 6c 7e 40 00 84 4a 40 00 c0 4a 40 00 11 54 49 6e |l~@..J@..J@..TIn|
  45. 000006c0 74 65 72 66 61 63 65 64 4f 62 6a 65 63 74 8b c0 |terfacedObject..|
  46. 000006d0 d4 12 40 00 07 11 54 49 6e 74 65 72 66 61 63 65 |..@...TInterface|
  47. 000006e0 64 4f 62 6a 65 63 74 bc 12 40 00 a0 11 40 00 00 |dObject..@...@..|
  48. 000006f0 00 06 53 79 73 74 65 6d 00 00 8b c0 00 13 40 00 |..System......@.|
  49. 00000700 11 0b 54 42 6f 75 6e 64 41 72 72 61 79 04 00 00 |..TBoundArray...|
  50. 00000710 00 00 00 00 00 03 00 00 00 6c 10 40 00 06 53 79 |.........l.@..Sy|
  51. 00000720 73 74 65 6d 28 13 40 00 04 09 54 44 61 74 65 54 |stem(.@...TDateT|
  52. 00000730 69 6d 65 01 ff 25 48 e0 c4 00 8b c0 ff 25 44 e0 |ime..%H......%D.|

数据段(DATA)最开始的四字节可能是00 00 00 00,32 13 8B C0或者FF FF FF FF。在处理加壳/加密的 Delphi可执行文件时这个信息很有用。

55.6其他有名的DLLs

  • vcomp*.dll Microsoft实现的OpenMP