| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/safe_browsing/incident_reporting/module_integrity_verif
ier_win.h" | 5 #include "chrome/browser/safe_browsing/incident_reporting/module_integrity_verif
ier_win.h" |
| 6 | 6 |
| 7 #include <stddef.h> |
| 8 |
| 7 #include <algorithm> | 9 #include <algorithm> |
| 8 #include <string> | 10 #include <string> |
| 9 #include <vector> | 11 #include <vector> |
| 10 | 12 |
| 11 #include "base/files/file_path.h" | 13 #include "base/files/file_path.h" |
| 12 #include "base/files/memory_mapped_file.h" | 14 #include "base/files/memory_mapped_file.h" |
| 15 #include "base/macros.h" |
| 13 #include "base/metrics/sparse_histogram.h" | 16 #include "base/metrics/sparse_histogram.h" |
| 14 #include "base/scoped_native_library.h" | 17 #include "base/scoped_native_library.h" |
| 15 #include "base/strings/utf_string_conversions.h" | 18 #include "base/strings/utf_string_conversions.h" |
| 16 #include "base/win/pe_image.h" | 19 #include "base/win/pe_image.h" |
| 17 #include "chrome/common/safe_browsing/csd.pb.h" | 20 #include "chrome/common/safe_browsing/csd.pb.h" |
| 18 | 21 |
| 19 namespace safe_browsing { | 22 namespace safe_browsing { |
| 20 | 23 |
| 21 namespace { | 24 namespace { |
| 22 | 25 |
| (...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 318 WCHAR module_path[MAX_PATH] = {}; | 321 WCHAR module_path[MAX_PATH] = {}; |
| 319 DWORD length = | 322 DWORD length = |
| 320 GetModuleFileName(module_handle, module_path, arraysize(module_path)); | 323 GetModuleFileName(module_handle, module_path, arraysize(module_path)); |
| 321 if (!length || length == arraysize(module_path)) | 324 if (!length || length == arraysize(module_path)) |
| 322 return false; | 325 return false; |
| 323 | 326 |
| 324 base::MemoryMappedFile mapped_module; | 327 base::MemoryMappedFile mapped_module; |
| 325 if (!mapped_module.Initialize(base::FilePath(module_path))) | 328 if (!mapped_module.Initialize(base::FilePath(module_path))) |
| 326 return false; | 329 return false; |
| 327 ModuleVerificationState state( | 330 ModuleVerificationState state( |
| 328 reinterpret_cast<HMODULE>(const_cast<uint8*>(mapped_module.data()))); | 331 reinterpret_cast<HMODULE>(const_cast<uint8_t*>(mapped_module.data()))); |
| 329 | 332 |
| 330 base::win::PEImage mem_peimage(module_handle); | 333 base::win::PEImage mem_peimage(module_handle); |
| 331 if (!mem_peimage.VerifyMagic() || !state.disk_peimage.VerifyMagic()) | 334 if (!mem_peimage.VerifyMagic() || !state.disk_peimage.VerifyMagic()) |
| 332 return false; | 335 return false; |
| 333 | 336 |
| 334 // Get the list of exports and sort them by address for efficient lookups. | 337 // Get the list of exports and sort them by address for efficient lookups. |
| 335 mem_peimage.EnumExports(EnumExportsCallback, &state.exports); | 338 mem_peimage.EnumExports(EnumExportsCallback, &state.exports); |
| 336 std::sort(state.exports.begin(), state.exports.end()); | 339 std::sort(state.exports.begin(), state.exports.end()); |
| 337 | 340 |
| 338 // Get the addresses of the code sections then calculate |code_section_delta| | 341 // Get the addresses of the code sections then calculate |code_section_delta| |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 // entire module was scanned and understood. | 381 // entire module was scanned and understood. |
| 379 if (state.bytes_different) | 382 if (state.bytes_different) |
| 380 module_state->set_modified_state(ModuleState::MODULE_STATE_MODIFIED); | 383 module_state->set_modified_state(ModuleState::MODULE_STATE_MODIFIED); |
| 381 else if (!state.unknown_reloc_type && scan_complete) | 384 else if (!state.unknown_reloc_type && scan_complete) |
| 382 module_state->set_modified_state(ModuleState::MODULE_STATE_UNMODIFIED); | 385 module_state->set_modified_state(ModuleState::MODULE_STATE_UNMODIFIED); |
| 383 | 386 |
| 384 return scan_complete; | 387 return scan_complete; |
| 385 } | 388 } |
| 386 | 389 |
| 387 } // namespace safe_browsing | 390 } // namespace safe_browsing |
| OLD | NEW |