Autopsy  4.4.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
AddFileTypeSignaturePanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011-2016 Basis Technology Corp.
5  * Contact: carrier <at> sleuthkit <dot> org
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19 package org.sleuthkit.autopsy.modules.filetypeid;
20 
21 import java.io.UnsupportedEncodingException;
22 import java.nio.charset.Charset;
23 import javax.swing.DefaultComboBoxModel;
24 import javax.swing.JOptionPane;
25 import javax.xml.bind.DatatypeConverter;
26 import org.openide.util.NbBundle;
27 import org.openide.util.NbBundle.Messages;
29 
33 class AddFileTypeSignaturePanel extends javax.swing.JPanel {
34 
35  private static final String RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM = NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.signatureComboBox.rawItem");
36  private static final String START_OFFSET_RELATIVE_COMBO_BOX_ITEM = NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.offsetComboBox.startItem");
37  private static final String END_OFFSET_RELATIVE_COMBO_BOX_ITEM = NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.offsetComboBox.endItem");
38  private static final String ASCII_SIGNATURE_TYPE_COMBO_BOX_ITEM = NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.signatureComboBox.asciiItem");
39 
43  AddFileTypeSignaturePanel() {
44  initComponents();
45  customizeComponents();
46  }
47 
53  AddFileTypeSignaturePanel(Signature toEdit) {
54  this();
55  this.setComponentValues(toEdit);
56  }
57 
61  private void customizeComponents() {
62  setSignatureTypeComboBoxModel();
63  setOffsetRealtiveToComboBoxModel();
64  }
65 
69  private void setSignatureTypeComboBoxModel() {
70  DefaultComboBoxModel<String> sigTypeComboBoxModel = new DefaultComboBoxModel<>();
71  sigTypeComboBoxModel.addElement(RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM);
72  sigTypeComboBoxModel.addElement(ASCII_SIGNATURE_TYPE_COMBO_BOX_ITEM);
73  signatureTypeComboBox.setModel(sigTypeComboBoxModel);
74  signatureTypeComboBox.setSelectedItem(RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM);
75  }
76 
80  private void setOffsetRealtiveToComboBoxModel() {
81  DefaultComboBoxModel<String> offsetRelComboBoxModel = new DefaultComboBoxModel<>();
82  offsetRelComboBoxModel.addElement(START_OFFSET_RELATIVE_COMBO_BOX_ITEM);
83  offsetRelComboBoxModel.addElement(END_OFFSET_RELATIVE_COMBO_BOX_ITEM);
84  offsetRelativeToComboBox.setModel(offsetRelComboBoxModel);
85  offsetRelativeToComboBox.setSelectedItem(START_OFFSET_RELATIVE_COMBO_BOX_ITEM);
86  }
87 
93  @Messages({"AddFileTypeSignaturePanel.signatureStringFail.text=Couldn't get signatures string"})
94  private void setComponentValues(Signature toEdit) {
95  if (toEdit.isRelativeToStart()) {
96  this.offsetRelativeToComboBox.setSelectedIndex(0);
97  } else {
98  this.offsetRelativeToComboBox.setSelectedIndex(1);
99  }
100  this.offsetTextField.setText(toEdit.getOffset() + "");
101  if (Signature.Type.RAW == toEdit.getType()) {
102  this.signatureTypeComboBox.setSelectedIndex(0);
103  this.signatureTextField.setText(DatatypeConverter.printHexBinary(toEdit.getSignatureBytes()));
104  } else {
105  this.signatureTypeComboBox.setSelectedIndex(1);
106  try {
107  this.signatureTextField.setText(new String(toEdit.getSignatureBytes(), "UTF-8"));
108  } catch (UnsupportedEncodingException ex) {
109  JOptionPane.showMessageDialog(null,
110  ex.getLocalizedMessage(),
111  Bundle.AddFileTypeSignaturePanel_signatureStringFail_text(),
112  JOptionPane.ERROR_MESSAGE);
113  }
114  }
115  }
116 
124  Signature getSignature() {
125 
129  FileType.Signature.Type sigType = signatureTypeComboBox.getSelectedItem() == RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM ? FileType.Signature.Type.RAW : FileType.Signature.Type.ASCII;
130 
134  String sigString = signatureTextField.getText();
135 
136  if (sigString.isEmpty()) {
137  JOptionPane.showMessageDialog(null,
138  NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.invalidSignature.message"),
139  NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.invalidSignature.title"),
140  JOptionPane.ERROR_MESSAGE);
141 
142  return null;
143  }
144  byte[] signatureBytes;
145  if (FileType.Signature.Type.RAW == sigType) {
146  try {
147  sigString = sigString.replaceAll("\\s", ""); //NON-NLS
148  signatureBytes = DatatypeConverter.parseHexBinary(sigString);
149  } catch (IllegalArgumentException ex) {
150  JOptionPane.showMessageDialog(null,
151  NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.invalidRawSignatureBytes.message"),
152  NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.invalidSignatureBytes.title"),
153  JOptionPane.ERROR_MESSAGE);
154  return null;
155  }
156  } else {
157  signatureBytes = sigString.getBytes(Charset.forName("UTF-8"));
158  }
159 
163  long offset;
164  boolean isRelativeToStart = offsetRelativeToComboBox.getSelectedItem() == START_OFFSET_RELATIVE_COMBO_BOX_ITEM;
165 
166  try {
167  offset = Long.parseUnsignedLong(offsetTextField.getText());
168  if (!isRelativeToStart && signatureBytes.length > offset + 1) {
169  JOptionPane.showMessageDialog(null,
170  NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.invalidOffset.length"),
171  NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.invalidOffset.title"),
172  JOptionPane.ERROR_MESSAGE);
173  return null;
174  }
175  } catch (NumberFormatException ex) {
176  JOptionPane.showMessageDialog(null,
177  NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.invalidOffset.message"),
178  NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.invalidOffset.title"),
179  JOptionPane.ERROR_MESSAGE);
180  return null;
181  }
182 
189  FileType.Signature signature = new FileType.Signature(signatureBytes, offset, sigType, isRelativeToStart);
190  return signature;
191  }
192 
198  @SuppressWarnings("unchecked")
199  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
200  private void initComponents() {
201 
202  offsetLabel = new javax.swing.JLabel();
203  offsetTextField = new javax.swing.JTextField();
204  offsetRelativeToComboBox = new javax.swing.JComboBox<String>();
205  offsetRelativeToLabel = new javax.swing.JLabel();
206  hexPrefixLabel = new javax.swing.JLabel();
207  signatureTypeComboBox = new javax.swing.JComboBox<String>();
208  signatureLabel = new javax.swing.JLabel();
209  signatureTypeLabel = new javax.swing.JLabel();
210  signatureTextField = new javax.swing.JTextField();
211 
212  offsetLabel.setFont(offsetLabel.getFont().deriveFont(offsetLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
213  org.openide.awt.Mnemonics.setLocalizedText(offsetLabel, org.openide.util.NbBundle.getMessage(AddFileTypeSignaturePanel.class, "AddFileTypeSignaturePanel.offsetLabel.text")); // NOI18N
214 
215  offsetTextField.setFont(offsetTextField.getFont().deriveFont(offsetTextField.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
216  offsetTextField.setText(org.openide.util.NbBundle.getMessage(AddFileTypeSignaturePanel.class, "AddFileTypeSignaturePanel.offsetTextField.text")); // NOI18N
217 
218  offsetRelativeToComboBox.setFont(offsetRelativeToComboBox.getFont().deriveFont(offsetRelativeToComboBox.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
219 
220  offsetRelativeToLabel.setFont(offsetRelativeToLabel.getFont().deriveFont(offsetRelativeToLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
221  org.openide.awt.Mnemonics.setLocalizedText(offsetRelativeToLabel, org.openide.util.NbBundle.getMessage(AddFileTypeSignaturePanel.class, "AddFileTypeSignaturePanel.offsetRelativeToLabel.text")); // NOI18N
222 
223  hexPrefixLabel.setFont(hexPrefixLabel.getFont().deriveFont(hexPrefixLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
224  org.openide.awt.Mnemonics.setLocalizedText(hexPrefixLabel, org.openide.util.NbBundle.getMessage(AddFileTypeSignaturePanel.class, "AddFileTypeSignaturePanel.hexPrefixLabel.text")); // NOI18N
225 
226  signatureTypeComboBox.setFont(signatureTypeComboBox.getFont().deriveFont(signatureTypeComboBox.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
227  signatureTypeComboBox.addActionListener(new java.awt.event.ActionListener() {
228  public void actionPerformed(java.awt.event.ActionEvent evt) {
229  signatureTypeComboBoxActionPerformed(evt);
230  }
231  });
232 
233  signatureLabel.setFont(signatureLabel.getFont().deriveFont(signatureLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
234  org.openide.awt.Mnemonics.setLocalizedText(signatureLabel, org.openide.util.NbBundle.getMessage(AddFileTypeSignaturePanel.class, "AddFileTypeSignaturePanel.signatureLabel.text")); // NOI18N
235 
236  signatureTypeLabel.setFont(signatureTypeLabel.getFont().deriveFont(signatureTypeLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
237  org.openide.awt.Mnemonics.setLocalizedText(signatureTypeLabel, org.openide.util.NbBundle.getMessage(AddFileTypeSignaturePanel.class, "AddFileTypeSignaturePanel.signatureTypeLabel.text")); // NOI18N
238 
239  signatureTextField.setFont(signatureTextField.getFont().deriveFont(signatureTextField.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
240  signatureTextField.setText(org.openide.util.NbBundle.getMessage(AddFileTypeSignaturePanel.class, "AddFileTypeSignaturePanel.signatureTextField.text")); // NOI18N
241  signatureTextField.addActionListener(new java.awt.event.ActionListener() {
242  public void actionPerformed(java.awt.event.ActionEvent evt) {
243  signatureTextFieldActionPerformed(evt);
244  }
245  });
246 
247  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
248  this.setLayout(layout);
249  layout.setHorizontalGroup(
250  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
251  .addGroup(layout.createSequentialGroup()
252  .addContainerGap()
253  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
254  .addGroup(layout.createSequentialGroup()
255  .addComponent(signatureTypeLabel)
256  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
257  .addComponent(signatureTypeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 176, javax.swing.GroupLayout.PREFERRED_SIZE))
258  .addGroup(layout.createSequentialGroup()
259  .addComponent(signatureLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE)
260  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
261  .addComponent(hexPrefixLabel)
262  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
263  .addComponent(signatureTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE))
264  .addGroup(layout.createSequentialGroup()
265  .addComponent(offsetLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE)
266  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
267  .addComponent(offsetTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 178, javax.swing.GroupLayout.PREFERRED_SIZE))
268  .addGroup(layout.createSequentialGroup()
269  .addComponent(offsetRelativeToLabel)
270  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
271  .addComponent(offsetRelativeToComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
272  .addContainerGap(26, Short.MAX_VALUE))
273  );
274  layout.setVerticalGroup(
275  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
276  .addGroup(layout.createSequentialGroup()
277  .addContainerGap()
278  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
279  .addComponent(signatureTypeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
280  .addComponent(signatureTypeLabel))
281  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
282  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
283  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
284  .addComponent(hexPrefixLabel)
285  .addComponent(signatureTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
286  .addComponent(signatureLabel))
287  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
288  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
289  .addComponent(offsetLabel)
290  .addComponent(offsetTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
291  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
292  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
293  .addComponent(offsetRelativeToComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
294  .addComponent(offsetRelativeToLabel))
295  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
296  );
297  }// </editor-fold>//GEN-END:initComponents
298 
299  private void signatureTypeComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_signatureTypeComboBoxActionPerformed
300  if (signatureTypeComboBox.getSelectedItem() == RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM) {
301  hexPrefixLabel.setVisible(true);
302  signatureTextField.setText("0000");
303  } else {
304  hexPrefixLabel.setVisible(false);
305  signatureTextField.setText("");
306  }
307  }//GEN-LAST:event_signatureTypeComboBoxActionPerformed
308 
309  private void signatureTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_signatureTextFieldActionPerformed
310  // TODO add your handling code here:
311  }//GEN-LAST:event_signatureTextFieldActionPerformed
312 
313 
314  // Variables declaration - do not modify//GEN-BEGIN:variables
315  private javax.swing.JLabel hexPrefixLabel;
316  private javax.swing.JLabel offsetLabel;
317  private javax.swing.JComboBox<String> offsetRelativeToComboBox;
318  private javax.swing.JLabel offsetRelativeToLabel;
319  private javax.swing.JTextField offsetTextField;
320  private javax.swing.JLabel signatureLabel;
321  private javax.swing.JTextField signatureTextField;
322  private javax.swing.JComboBox<String> signatureTypeComboBox;
323  private javax.swing.JLabel signatureTypeLabel;
324  // End of variables declaration//GEN-END:variables
325 }

Copyright © 2012-2016 Basis Technology. Generated on: Fri Sep 29 2017
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.