| 697 | } |
| 698 | |
| 699 | pub fn decrypt (file_path: &str, key: &str, output_file: &str) |
| 700 | { |
| 701 | unsafe{ |
| 702 | |
| 703 | let mut file = File::open(file_path).expect("[x] Error opening input file."); |
| 704 | let metadata = fs::metadata(file_path).unwrap(); |
| 705 | let mut buffer = vec![]; |
| 706 | file.read_to_end(&mut buffer).unwrap(); |
| 707 | |
| 708 | |
| 709 | let mut buffer_ptr = buffer.as_ptr().add(1); |
| 710 | let key = format!("{}{}", key, "\0"); |
| 711 | let mut key_ptr = key.as_ptr(); |
| 712 | let mut xor_key: u8 = *key_ptr; |
| 713 | key_ptr = key_ptr.add(1); |
| 714 | while *key_ptr != '\0' as u8 |
| 715 | { |
| 716 | xor_key = xor_key ^ *key_ptr; |
| 717 | key_ptr = key_ptr.add(1); |
| 718 | } |
| 719 | |
| 720 | let mut file_content: Vec<u8> = vec![]; |
| 721 | for _i in 0..metadata.len() |
| 722 | { |
| 723 | file_content.push(*buffer_ptr ^ xor_key); |
| 724 | buffer_ptr = buffer_ptr.add(1); |
| 725 | } |
| 726 | |
| 727 | let mut output = std::fs::File::create(output_file).unwrap(); |
| 728 | let _r = output.write_all(&file_content).unwrap(); |
| 729 | } |
| 730 | |
| 731 | println!("{}", &lc!("[+] Successfully decrypted minidump file.")) |
| 732 | |
| 733 | } |