Browse code

ISHIELD support: - preliminary ishield-msi ftype sport

aCaB authored on 2009/07/13 08:02:13
Showing 4 changed files
... ...
@@ -93,6 +93,7 @@ static const struct ftmap_s {
93 93
     { "CL_TYPE_ARJSFX",		CL_TYPE_ARJSFX		},
94 94
     { "CL_TYPE_NULSFT",		CL_TYPE_NULSFT		},
95 95
     { "CL_TYPE_AUTOIT",		CL_TYPE_AUTOIT		},
96
+    { "CL_TYPE_ISHIELD_MSI",	CL_TYPE_ISHIELD_MSI	},
96 97
     { NULL,			CL_TYPE_IGNORED		}
97 98
 };
98 99
 
... ...
@@ -80,6 +80,7 @@ typedef enum {
80 80
     CL_TYPE_ARJSFX,
81 81
     CL_TYPE_NULSFT, /* on the fly */
82 82
     CL_TYPE_AUTOIT,
83
+    CL_TYPE_ISHIELD_MSI,
83 84
     CL_TYPE_IGNORED /* please don't add anything below */
84 85
 } cli_file_t;
85 86
 
... ...
@@ -148,6 +148,7 @@ static const char *ftypes_int[] = {
148 148
   "0:0:cffaedfe:Mach-O LE 64-bit:CL_TYPE_ANY:CL_TYPE_MACHO:45",
149 149
   "0:0:feedface:Mach-O BE:CL_TYPE_ANY:CL_TYPE_MACHO:45",
150 150
   "0:0:feedfacf:Mach-O BE 64-bit:CL_TYPE_ANY:CL_TYPE_MACHO:45",
151
+  "1:*:496e7374616c6c536869656c6400{292}06000000:ISHIELD-MSI:CL_TYPE_ANY:CL_TYPE_ISHIELD_MSI:45",
151 152
   NULL
152 153
 };
153 154
 
... ...
@@ -104,6 +104,8 @@
104 104
 #include <stddef.h>
105 105
 #endif
106 106
 
107
+static int cli_scanishield_msi(int desc, cli_ctx *ctx, off_t off) { cli_dbgmsg("in ishield-msi\n"); return CL_CLEAN; }
108
+
107 109
 static int cli_scanfile(const char *filename, cli_ctx *ctx);
108 110
 
109 111
 static int cli_scandir(const char *dirname, cli_ctx *ctx, cli_file_t container)
... ...
@@ -1792,6 +1794,13 @@ static int cli_scanraw(int desc, cli_ctx *ctx, cli_file_t type, uint8_t typercg,
1792 1792
 			}
1793 1793
 			break;
1794 1794
 
1795
+		    case CL_TYPE_ISHIELD_MSI:
1796
+		        if(SCAN_ARCHIVE && type == CL_TYPE_MSEXE /* FIXMEISHIELD && (DCONF_ARCH & ARCH_CONF_ISHIELD)*/) {
1797
+			    cli_dbgmsg("ISHIELD-MSI signature found at %u\n", (unsigned int) fpt->offset);
1798
+			    nret = cli_scanishield_msi(desc, ctx, fpt->offset + 14);
1799
+			}
1800
+			break;
1801
+
1795 1802
 		    case CL_TYPE_PDF:
1796 1803
 			if(type != CL_TYPE_PDF && SCAN_PDF && (DCONF_DOC & DOC_CONF_PDF)) {
1797 1804
 			    cli_dbgmsg("PDF signature found at %u\n", (unsigned int) fpt->offset);
... ...
@@ -1965,6 +1974,11 @@ int cli_magic_scandesc(int desc, cli_ctx *ctx)
1965 1965
 		ret = cli_scanautoit(desc, ctx, 23);
1966 1966
 	    break;
1967 1967
 
1968
+        case CL_TYPE_ISHIELD_MSI:
1969
+	    if(SCAN_ARCHIVE /* FIXMEISHIELD && (DCONF_ARCH & ARCH_CONF_ISHIELD)*/)
1970
+		ret = cli_scanishield_msi(desc, ctx, 14);
1971
+	    break;
1972
+
1968 1973
 	case CL_TYPE_MSSZDD:
1969 1974
 	    if(SCAN_ARCHIVE && (DCONF_ARCH & ARCH_CONF_SZDD))
1970 1975
 		ret = cli_scanszdd(desc, ctx);