Commit 69dba8b
authored
elf, pe: Add/Extend ELF/PE permissive parsing mode to better handle packed, broken, or malware samples (#479)
Add a new permissive internal trait to allow non-strict parsing of elf and pe binaries.
Add a new options module that exposes ParseMode and ParseOptions. ParseOptions and ParseMode implement Default, which defaults to the current strict form of goblin's parsing of binaries.
Add two new pub functions that allow users to pass ParseOptions to e.g., turn off strict parsing, etc.
Permissive parsing defaults unparseable structures to defaults or optionals in general, and allows the parse of the binary to continue.
Some inline git commit messages:
* fix: invalid utf8
* fix: wrong reloc directory size
* skip tls parsing on error
* load binaries with broken/packed sections in permissive mode
* skipping basereloc in packed binaries in permisive mode
* do not map the debug directory in permissive mode if it has been removed or does not exist
* ELF permissive mode + malformed sections handling in permissive mode
* skip rich and dos stub parssing on fail in permissive mode
* allow ImageDebugDirectory size 0 in permissive mode (packed/stripped binaries)
* continue parsing on missing section headers in permissive mode
* skip non-utf8 strings in sections and strtab
* added more permissive parsing to handle packed/malformed elfs
* added persmisive mode for import table
* pe: added better error handling with Permissive trait to HintNameTableEntry1 parent 04d69ad commit 69dba8b
File tree
15 files changed
+904
-155
lines changed- src
- elf
- pe
15 files changed
+904
-155
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
67 | 67 | | |
68 | 68 | | |
69 | 69 | | |
| 70 | + | |
70 | 71 | | |
71 | 72 | | |
72 | 73 | | |
| |||
260 | 261 | | |
261 | 262 | | |
262 | 263 | | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
263 | 269 | | |
264 | 270 | | |
265 | 271 | | |
| 272 | + | |
266 | 273 | | |
267 | 274 | | |
268 | 275 | | |
| |||
275 | 282 | | |
276 | 283 | | |
277 | 284 | | |
278 | | - | |
| 285 | + | |
| 286 | + | |
279 | 287 | | |
280 | 288 | | |
281 | 289 | | |
| |||
290 | 298 | | |
291 | 299 | | |
292 | 300 | | |
293 | | - | |
294 | | - | |
| 301 | + | |
| 302 | + | |
295 | 303 | | |
296 | 304 | | |
297 | 305 | | |
| |||
302 | 310 | | |
303 | 311 | | |
304 | 312 | | |
305 | | - | |
306 | | - | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
307 | 334 | | |
308 | 335 | | |
309 | 336 | | |
| |||
317 | 344 | | |
318 | 345 | | |
319 | 346 | | |
320 | | - | |
| 347 | + | |
| 348 | + | |
321 | 349 | | |
322 | 350 | | |
323 | 351 | | |
324 | 352 | | |
325 | | - | |
326 | | - | |
327 | | - | |
328 | | - | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
329 | 358 | | |
330 | 359 | | |
331 | 360 | | |
| |||
346 | 375 | | |
347 | 376 | | |
348 | 377 | | |
349 | | - | |
350 | | - | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
351 | 384 | | |
352 | | - | |
| 385 | + | |
| 386 | + | |
353 | 387 | | |
354 | 388 | | |
355 | | - | |
| 389 | + | |
| 390 | + | |
356 | 391 | | |
357 | | - | |
| 392 | + | |
| 393 | + | |
358 | 394 | | |
359 | 395 | | |
360 | 396 | | |
| |||
365 | 401 | | |
366 | 402 | | |
367 | 403 | | |
368 | | - | |
| 404 | + | |
369 | 405 | | |
370 | 406 | | |
371 | 407 | | |
372 | 408 | | |
373 | 409 | | |
374 | 410 | | |
375 | | - | |
376 | | - | |
377 | | - | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
378 | 423 | | |
379 | 424 | | |
380 | 425 | | |
381 | | - | |
382 | | - | |
383 | | - | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
384 | 434 | | |
385 | 435 | | |
386 | 436 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
370 | 370 | | |
371 | 371 | | |
372 | 372 | | |
373 | | - | |
| 373 | + | |
| 374 | + | |
374 | 375 | | |
375 | 376 | | |
376 | 377 | | |
| |||
477 | 478 | | |
478 | 479 | | |
479 | 480 | | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
480 | 485 | | |
481 | 486 | | |
482 | 487 | | |
483 | 488 | | |
484 | 489 | | |
485 | 490 | | |
486 | 491 | | |
487 | | - | |
| 492 | + | |
| 493 | + | |
488 | 494 | | |
489 | 495 | | |
490 | 496 | | |
491 | 497 | | |
492 | 498 | | |
493 | | - | |
| 499 | + | |
| 500 | + | |
494 | 501 | | |
495 | 502 | | |
496 | 503 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
330 | 330 | | |
331 | 331 | | |
332 | 332 | | |
| 333 | + | |
333 | 334 | | |
334 | 335 | | |
335 | 336 | | |
| |||
515 | 516 | | |
516 | 517 | | |
517 | 518 | | |
518 | | - | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
| 525 | + | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
| 530 | + | |
| 531 | + | |
| 532 | + | |
| 533 | + | |
| 534 | + | |
| 535 | + | |
| 536 | + | |
| 537 | + | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
519 | 551 | | |
520 | 552 | | |
521 | | - | |
| 553 | + | |
522 | 554 | | |
523 | | - | |
524 | | - | |
525 | | - | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
| 566 | + | |
| 567 | + | |
| 568 | + | |
| 569 | + | |
| 570 | + | |
| 571 | + | |
| 572 | + | |
| 573 | + | |
| 574 | + | |
| 575 | + | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
526 | 590 | | |
527 | 591 | | |
528 | 592 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
110 | 110 | | |
111 | 111 | | |
112 | 112 | | |
113 | | - | |
| 113 | + | |
114 | 114 | | |
115 | 115 | | |
116 | 116 | | |
| |||
0 commit comments