1 package edu.jiangxin.apktoolbox.file.password.recovery.checker;
2
3 import org.apache.commons.io.FilenameUtils;
4 import org.apache.poi.POIDocument;
5 import org.apache.poi.hslf.usermodel.HSLFSlideShow;
6 import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey;
7 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
8 import org.apache.poi.hwpf.HWPFDocument;
9 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
10
11 import java.io.*;
12
13 public class BinaryOfficeChecker extends FileChecker {
14 private static final boolean DEBUG = true;
15
16 public BinaryOfficeChecker() {
17 super();
18 }
19
20 @Override
21 public String[] getFileExtensions() {
22 return new String[]{"doc", "ppt", "xls"};
23 }
24
25 @Override
26 public String getFileDescription() {
27 return "*.doc;*.ppt;*.xls";
28 }
29
30 @Override
31 public String getDescription() {
32 return "Office File Checker(Binary formats)";
33 }
34
35 @Override
36 public boolean prepareChecker() {
37 return true;
38 }
39
40 @Override
41 public boolean checkPassword(String password) {
42 if (DEBUG) {
43 logger.info("checkPassword: " + password);
44 }
45
46 boolean result = false;
47 Biff8EncryptionKey.setCurrentUserPassword(password);
48 try (FileInputStream fis = new FileInputStream(file);
49 POIFSFileSystem pfs = new POIFSFileSystem(fis)) {
50 String extension = FilenameUtils.getExtension(file.getName());
51 switch (extension) {
52 case "xls" -> {
53 try (POIDocument poiDocument = new HSSFWorkbook(pfs)) {
54 logger.info("create workbook successfully: {}", poiDocument);
55 result = true;
56 }
57 }
58 case "doc" -> {
59 try (POIDocument poiDocument = new HWPFDocument(pfs)) {
60 logger.info("create document successfully: {}", poiDocument);
61 result = true;
62 }
63 }
64 case "ppt" -> {
65 try (POIDocument poiDocument = new HSLFSlideShow(pfs)) {
66 logger.info("create slideShow successfully: {}", poiDocument);
67 result = true;
68 }
69 }
70 default -> logger.error("Not supported: {}", file.getName());
71 }
72 } catch (Exception e) {
73 if (DEBUG) {
74 logger.error("checkPassword: {}", e.getClass());
75 }
76 }
77 return result;
78 }
79 }