| 60 | } |
| 61 | |
| 62 | func (pe *PE) isNTHdrModified(mem *PE) bool { |
| 63 | if pe.Is64 != mem.Is64 { |
| 64 | return true |
| 65 | } |
| 66 | if pe.ntHeader == (peparser.ImageNtHeader{}) && mem.ntHeader == (peparser.ImageNtHeader{}) { |
| 67 | return false |
| 68 | } |
| 69 | if pe.ntHeader == (peparser.ImageNtHeader{}) || mem.ntHeader == (peparser.ImageNtHeader{}) { |
| 70 | return true |
| 71 | } |
| 72 | |
| 73 | // reset image base before comparing |
| 74 | switch pe.Is64 { |
| 75 | case true: |
| 76 | fileOH64 := pe.ntHeader.OptionalHeader.(peparser.ImageOptionalHeader64) |
| 77 | memOH64 := mem.ntHeader.OptionalHeader.(peparser.ImageOptionalHeader64) |
| 78 | fileOH64.ImageBase = 0 |
| 79 | memOH64.ImageBase = 0 |
| 80 | pe.ntHeader.OptionalHeader = fileOH64 |
| 81 | mem.ntHeader.OptionalHeader = memOH64 |
| 82 | case false: |
| 83 | fileOH32 := pe.ntHeader.OptionalHeader.(peparser.ImageOptionalHeader32) |
| 84 | memOH32 := mem.ntHeader.OptionalHeader.(peparser.ImageOptionalHeader32) |
| 85 | fileOH32.ImageBase = 0 |
| 86 | memOH32.ImageBase = 0 |
| 87 | pe.ntHeader.OptionalHeader = fileOH32 |
| 88 | mem.ntHeader.OptionalHeader = memOH32 |
| 89 | } |
| 90 | return !reflect.DeepEqual(pe.ntHeader, mem.ntHeader) |
| 91 | } |
| 92 | |
| 93 | func (pe *PE) isFileHdrModified(mem *PE, archMismatch bool) bool { |
| 94 | fileHeader, memHeader := pe.ntHeader.FileHeader, mem.ntHeader.FileHeader |