@@ -34,7 +34,7 @@ export class Scanner extends EventEmitter {
34
34
35
35
private obfuscateMapFilePath : string ;
36
36
37
- private obfuscateMap : Array < Record < string , string > > ;
37
+ private obfuscateMap : Record < string , string > ;
38
38
39
39
private scanRoot : string ;
40
40
@@ -76,7 +76,7 @@ export class Scanner extends EventEmitter {
76
76
this . responseBuffer = [ ] ;
77
77
this . filesToScan = { } ;
78
78
this . filesNotScanned = { } ;
79
- this . obfuscateMap = [ ] ;
79
+ this . obfuscateMap = { } ;
80
80
81
81
this . wfpProvider = new WfpCalculator ( this . scannerCfg ) ;
82
82
this . dispatcher = new Dispatcher ( this . scannerCfg ) ;
@@ -97,7 +97,7 @@ export class Scanner extends EventEmitter {
97
97
this . emit ( ScannerEvents . WINNOWING_NEW_CONTENT , fingerprintPackage ) ;
98
98
this . reportLog ( `[ SCANNER ]: New WFP content` ) ;
99
99
100
- if ( fingerprintPackage . isObfuscated ( ) ) this . obfuscateMap . push ( fingerprintPackage . getObfuscationMap ( ) ) ;
100
+ if ( fingerprintPackage . isObfuscated ( ) ) this . obfuscateMap = { ... this . obfuscateMap , ... fingerprintPackage . getObfuscationMap ( ) } ;
101
101
const item = new DispatchableItem ( ) ;
102
102
item . setFingerprintPackage ( fingerprintPackage ) ;
103
103
item . uuid = uuidv4 ( ) ;
@@ -201,6 +201,14 @@ export class Scanner extends EventEmitter {
201
201
return false ;
202
202
}
203
203
204
+ private deobfuscationResponses ( responses : Record < string , any > , obfuscateMap : Record < string , string > ) : Record < string , any > {
205
+ const deObfuscation = { } ;
206
+ Object . entries ( responses ) . forEach ( ( [ key , value ] : [ string , any ] ) => {
207
+ deObfuscation [ obfuscateMap [ key ] ] = value ;
208
+ } ) ;
209
+ return deObfuscation ;
210
+ }
211
+
204
212
private bufferToFiles ( ) {
205
213
let wfpContent = '' ;
206
214
const serverResponse = { } ;
@@ -211,15 +219,11 @@ export class Scanner extends EventEmitter {
211
219
Object . assign ( serverResponse , serverResponseToAppend ) ;
212
220
}
213
221
214
- const obfuscateMap = { }
215
- for ( const obfuscateMapChunk of this . obfuscateMap ) {
216
- Object . assign ( obfuscateMap , obfuscateMapChunk )
217
- }
218
-
219
- this . appendOutputFiles ( wfpContent , serverResponse , obfuscateMap ) ;
222
+ this . appendOutputFiles ( wfpContent , serverResponse ) ;
220
223
this . responseBuffer = [ ] ;
221
- this . obfuscateMap = [ ] ;
222
- const responses = new DispatcherResponse ( serverResponse , wfpContent ) ;
224
+ const r = ( this . scannerCfg . WFP_OBFUSCATION &&
225
+ this . scannerCfg . RESULTS_DEOBFUSCATION ) ? this . deobfuscationResponses ( serverResponse , this . obfuscateMap ) : serverResponse ;
226
+ const responses = new DispatcherResponse ( r , wfpContent ) ;
223
227
this . reportLog ( `[ SCANNER ]: Persisted results of ${ responses . getNumberOfFilesScanned ( ) } files...` ) ;
224
228
this . emit ( ScannerEvents . RESULTS_APPENDED , responses , this . filesNotScanned ) ;
225
229
return responses ;
@@ -269,7 +273,6 @@ export class Scanner extends EventEmitter {
269
273
const results = JSON . parse ( await fs . promises . readFile ( this . resultFilePath , 'utf8' ) ) ;
270
274
271
275
if ( this . scannerCfg . WFP_OBFUSCATION && this . scannerCfg . RESULTS_DEOBFUSCATION ) {
272
- this . obfuscateMap = JSON . parse ( await fs . promises . readFile ( this . obfuscateMapFilePath , 'utf8' ) ) ;
273
276
for ( const key of Object . keys ( this . obfuscateMap ) ) {
274
277
const component = results [ key ] ;
275
278
const originalPath = this . obfuscateMap [ key ] ;
@@ -283,6 +286,7 @@ export class Scanner extends EventEmitter {
283
286
// eslint-disable-next-line no-restricted-syntax
284
287
for ( const key of sortedPaths ) resultSorted [ key ] = results [ key ] ;
285
288
await fs . promises . writeFile ( this . resultFilePath , JSON . stringify ( resultSorted , null , 2 ) ) ;
289
+ await fs . promises . writeFile ( this . obfuscateMapFilePath , JSON . stringify ( this . obfuscateMap , null , 2 ) ) ;
286
290
this . reportLog (
287
291
`[ SCANNER ]: Scan finished (Scanned: ${ this . processedFiles } , Not Scanned: ${
288
292
Object . keys ( this . filesNotScanned ) . length
@@ -322,7 +326,7 @@ export class Scanner extends EventEmitter {
322
326
323
327
}
324
328
325
- private appendOutputFiles ( wfpContent : string , serverResponse : ScannerResults , obfuscationMap : Record < string , string > ) {
329
+ private appendOutputFiles ( wfpContent : string , serverResponse : ScannerResults ) {
326
330
fs . appendFileSync ( this . wfpFilePath , wfpContent ) ;
327
331
328
332
const storedResultStr = fs . readFileSync ( this . resultFilePath , 'utf-8' ) ;
@@ -331,14 +335,6 @@ export class Scanner extends EventEmitter {
331
335
const newResultStr = JSON . stringify ( storedResultObj ) ;
332
336
fs . writeFileSync ( this . resultFilePath , newResultStr ) ;
333
337
334
-
335
- if ( this . scannerCfg . WFP_OBFUSCATION ) {
336
- const storedObfuscationMapStr = fs . readFileSync ( this . obfuscateMapFilePath , 'utf-8' ) ;
337
- const storedObfuscationMap = JSON . parse ( storedObfuscationMapStr ) ;
338
- Object . assign ( storedObfuscationMap , obfuscationMap ) ;
339
- const newObfuscationMap = JSON . stringify ( storedObfuscationMap ) ;
340
- fs . writeFileSync ( this . obfuscateMapFilePath , newObfuscationMap ) ;
341
- }
342
338
}
343
339
344
340
0 commit comments