@Override protected ApplicationMessage parseMessageContent() { LOGGER.debug("Parsing ApplicationMessage"); ApplicationMessage msg = new ApplicationMessage(); parseData(msg); return msg; }
private void prepareData(ApplicationMessage msg) { if (msg.getDataConfig() != null) { msg.setData(msg.getDataConfig()); } else { msg.setData(chooser.getLastHandledApplicationMessageData()); } LOGGER.debug("Data: " + ArrayConverter.bytesToHexString(msg.getData().getValue())); }
/** * Sends bytes as ApplicationMessages * * @param bytes * ApplicationMessages to send */ public void send(byte[] bytes) { ApplicationMessage message = new ApplicationMessage(); ByteArrayInputStream stream = new ByteArrayInputStream(bytes); byte[] sendingBytes = new byte[16384]; int actuallyRead = 0; do { try { actuallyRead = stream.read(sendingBytes); if (actuallyRead > 0) { message.setDataConfig(Arrays.copyOf(sendingBytes, actuallyRead)); send(message); } } catch (IOException ex) { LOGGER.warn(ex); } } while (actuallyRead > 0); }
/** * Receives bytes and decrypts ApplicationMessage contents * * @return Received bytes The bytes which are received * @throws java.io.IOException * If something goes wrong during the receive */ public byte[] receiveBytes() throws IOException { ReceiveAction action = new ReceiveAction(new ApplicationMessage()); action.setConnectionAlias(state.getTlsContext().getConnection().getAlias()); action.execute(state); List<ProtocolMessage> recievedMessages = action.getReceivedMessages(); List<ApplicationMessage> recievedAppMessages = new LinkedList<>(); for (ProtocolMessage message : recievedMessages) { if (message instanceof ApplicationMessage) { recievedAppMessages.add((ApplicationMessage) message); } } ByteArrayOutputStream stream = new ByteArrayOutputStream(); for (ApplicationMessage message : recievedAppMessages) { stream.write(message.getData().getValue()); } return stream.toByteArray(); }
@Override public void adjustTLSContext(ApplicationMessage message) { tlsContext.setLastHandledApplicationMessageData(message.getData().getValue()); String readableAppData = ArrayConverter.bytesToHexString(tlsContext.getLastHandledApplicationMessageData()); if (tlsContext.getTalkingConnectionEndType() == tlsContext.getChooser().getMyConnectionPeer()) { LOGGER.debug("Received Data:" + readableAppData); } else { LOGGER.debug("Send Data:" + readableAppData); } } }
List<ProtocolMessage> messages = new LinkedList<>(); if (config.isServerSendsApplicationData()) { messages.add(new ApplicationMessage(config)); workflowTrace.addTlsAction(MessageActionFactory .createAction(connection, ConnectionEndType.SERVER, messages)); messages = new LinkedList<>(); messages.add(new ApplicationMessage(config));
earlyDataMsg = new ApplicationMessage(config); earlyDataMsg.setDataConfig(config.getEarlyData()); } else { clientHello = new ClientHelloMessage(); earlyDataMsg = new ApplicationMessage(); clientMessages.add(new ApplicationMessage(config)); trace.addTlsAction(MessageActionFactory.createAction(connection, ConnectionEndType.CLIENT, clientMessages)); return trace;
/** * * @param config * @return */ @Override public List<WorkflowTrace> getPaddingOracleVectors(Config config) { List<WorkflowTrace> traceList = new LinkedList<>(); for (Record record : recordGenerator.getRecords(config.getDefaultSelectedCipherSuite(), config.getDefaultSelectedProtocolVersion())) { WorkflowTrace trace = new WorkflowConfigurationFactory(config).createWorkflowTrace( WorkflowTraceType.HANDSHAKE, RunningModeType.CLIENT); ApplicationMessage applicationMessage = new ApplicationMessage(config); SendAction sendAction = new SendAction(applicationMessage); sendAction.setRecords(new LinkedList<AbstractRecord>()); sendAction.getRecords().add(record); trace.addTlsAction(sendAction); trace.addTlsAction(new GenericReceiveAction()); traceList.add(trace); } return traceList; } }
/** * * @param config * @return */ @Override public List<WorkflowTrace> getPaddingOracleVectors(Config config) { List<WorkflowTrace> traceList = new LinkedList<>(); for (Record record : recordGenerator.getRecords(config.getDefaultSelectedCipherSuite(), config.getDefaultSelectedProtocolVersion())) { WorkflowTrace trace = new WorkflowConfigurationFactory(config).createWorkflowTrace( WorkflowTraceType.HANDSHAKE, RunningModeType.CLIENT); ApplicationMessage applicationMessage = new ApplicationMessage(config); AlertMessage alert = new AlertMessage(); alert.setConfig(AlertLevel.FATAL, AlertDescription.CLOSE_NOTIFY); SendAction sendAction = new SendAction(applicationMessage, alert); sendAction.setRecords(new LinkedList<AbstractRecord>()); sendAction.getRecords().add(record); sendAction.getRecords().add(new Record(config)); trace.addTlsAction(sendAction); trace.addTlsAction(new GenericReceiveAction()); traceList.add(trace); } return traceList; } }
new ApplicationMessage(config)); trace.addTlsAction(f); f = new ForwardMessagesAction(mitmToServerAlias, clientToMitmAlias, new ApplicationMessage(config)); trace.addTlsAction(f);
/** * Create a false start workflow for the given connection end. */ private WorkflowTrace createFalseStartWorkflow(AliasedConnection connection) { if (config.getHighestProtocolVersion().isTLS13()) { throw new ConfigurationException("The false start workflow is not implemented for TLS 1.3"); } WorkflowTrace workflowTrace = this.createHandshakeWorkflow(connection); MessageAction appData = MessageActionFactory.createAction(connection, ConnectionEndType.CLIENT, new ApplicationMessage(config)); // Client CKE, CCS, Fin TlsAction lastClientAction; if (connection.getLocalConnectionEndType() == ConnectionEndType.CLIENT) { lastClientAction = (TlsAction) workflowTrace.getLastSendingAction(); } else { lastClientAction = (TlsAction) workflowTrace.getLastReceivingAction(); } int i = workflowTrace.getTlsActions().indexOf(lastClientAction); workflowTrace.addTlsAction(i + 1, appData); return workflowTrace; }
/** * * @param config * @return */ @Override public List<WorkflowTrace> getPaddingOracleVectors(Config config) { List<WorkflowTrace> traceList = new LinkedList<>(); for (Record record : recordGenerator.getRecords(config.getDefaultSelectedCipherSuite(), config.getDefaultSelectedProtocolVersion())) { WorkflowTrace trace = new WorkflowTrace(); trace.addTlsAction(new SendAction(new ClientHelloMessage(config))); trace.addTlsAction(new ReceiveTillAction(new ServerHelloDoneMessage())); trace.addTlsAction(new SendDynamicClientKeyExchangeAction()); trace.addTlsAction(new SendAction(new ChangeCipherSpecMessage(), new FinishedMessage())); trace.addTlsAction(new ReceiveAction(new ChangeCipherSpecMessage(), new FinishedMessage())); ApplicationMessage applicationMessage = new ApplicationMessage(config); SendAction sendAction = new SendAction(applicationMessage); sendAction.setRecords(new LinkedList<AbstractRecord>()); sendAction.getRecords().add(record); trace.addTlsAction(sendAction); trace.addTlsAction(new GenericReceiveAction()); traceList.add(trace); } return traceList; } }