regcapt.pl 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. require "registry.pl";
  2. {
  3. $true = 1;
  4. $false = '';
  5. &_vEnumerateAndPrintRegKeys($HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\MSTravelConfig", $true);
  6. &_vEnumerateAndPrintRegKeys($HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\travel", $true);
  7. &_vEnumerateAndPrintRegKeys($HKEY_LOCAL_MACHINE, "SOFTWARE\\ODBC\\ODBC.INI", $true);
  8. }
  9. sub _sGetHiveFriendlyName
  10. {
  11. local ($sHive) = @_;
  12. if ($sHive eq $HKEY_LOCAL_MACHINE)
  13. {
  14. return "HKLM";
  15. }
  16. elsif ($sHive eq $HKEY_CLASSES_ROOT)
  17. {
  18. return "HKCR";
  19. }
  20. elsif ($sHive eq $HKEY_CURRENT_USER)
  21. {
  22. return "HKCU";
  23. }
  24. elsif ($sHive eq $HKEY_USERS)
  25. {
  26. return "HKU";
  27. }
  28. return $sHive;
  29. }
  30. sub _vEnumerateAndPrintRegKeys
  31. {
  32. local ($sHive, $sKey, $nRecurse) = @_;
  33. local $hKey = '';
  34. local $iSubKey = '';
  35. local $sSubKeyName = '';
  36. local $sClass = '';
  37. local $tmLastWrite = '';
  38. local $sHiveFriendly = &_sGetHiveFriendlyName($sHive);
  39. &NTRegOpenKeyEx($sHive, $sKey, 0, $KEY_READ | $KEY_SET_VALUE, $hKey) || print "fail\n";
  40. $hKey || print "fail\n";
  41. while($iSubKey >= 0)
  42. {
  43. if(!&NTRegEnumKeyEx($hKey, $iSubKey, $sSubKeyName, 0, $sClass, $tmLastWrite))
  44. {
  45. # print "done.\n";
  46. $iSubKey = -1;
  47. }
  48. else
  49. {
  50. # print "--" x $nRecurse;
  51. # print "$sSubKeyName($sClass)\n";
  52. if ($nRecurse)
  53. {
  54. _vEnumerateAndPrintRegKeys($sHive, "$sKey\\$sSubKeyName", $nRecurse+1);
  55. }
  56. $iSubKey++;
  57. }
  58. }
  59. $iSubKey = 0;
  60. while($iSubKey >= 0)
  61. {
  62. if(!&NTRegEnumValue($hKey, $iSubKey, $sSubKeyName, 0, $sClass, $vData))
  63. {
  64. # print "done.\n";
  65. $iSubKey = -1;
  66. }
  67. else
  68. {
  69. # print ".." x $nRecurse;
  70. if ($sClass eq 1)
  71. {
  72. print "$sHiveFriendly\\$sKey\\$sSubKeyName($sClass) = '$vData'\n";
  73. }
  74. elsif ($sClass eq 4)
  75. {
  76. my $sTest = unpack( "I", $vData );
  77. print "$sHiveFriendly\\$sKey\\$sSubKeyName($sClass) = '$sTest'\n";
  78. }
  79. else
  80. {
  81. print "*** unsupported class found for $sSubKeyName($sClass)!!!\n";
  82. }
  83. $iSubKey++;
  84. }
  85. }
  86. &NTRegCloseKey($hkey);
  87. }