def request(self, flow: http.HTTPFlow):
        # Analyze
        headers = dict(flow.request.headers)
        try:
            contentLength = int(headers["Content-Length"])  # 111 Bytes
        except Exception as KeyError:
            return

        if (contentLength < 140) and (contentLength > 100):

            # Log request
            self.simLogger.warning("---> Matching Request")
            httpReqStr = utils.createHttpRequestLogMsg(flow, 0)
            self.simLogger.warning(httpReqStr)
            helpers.saveHttpInfos(self.sampleLogDir + "sim/", httpReqStr, flow, 0, helpers.HttpPacketType.Request)

            self.simLogger.warning("Found Content-Length with: " + str(contentLength))

            keyBytes = bytes(
                [0xfe, 0x29, 0x36])  # e.g. used by ecf6426f6ab647239675e5f9426c7eeee748b2e999b71824f394d521b61c5bb8
            plainBytes = helpers.XOR(flow.request.raw_content, keyBytes)

            try:
                plaintext = plainBytes.decode("utf-8")
                self.simLogger.warning("Plaintext: " + plaintext)

                if (plaintext.count(
                        "%") > 5):  # we know that the plaintext is a URL-encoded string, thus it will contain many % chars
                    # Create response
                    encodedConfig = "<c>KysrKysrKysrDQpJCTg5LjI0NS45NC4xNDpERQ0K</c><n>"
                    encryptedConfig = helpers.XOR(encodedConfig.encode("utf-8"), keyBytes)

                    nPartFile = open("Azorult32_Parts/n_part.bin", "rb")
                    nPartBytes = nPartFile.read()
                    nPartFile.close()

                    dPartFile = open("Azorult32_Parts/d_part.bin", "rb")  # exactly same
                    dPartBytes = dPartFile.read()
                    dPartFile.close()

                    responseBytes = encryptedConfig + nPartBytes + "</n><d>".encode(
                        "utf-8") + dPartBytes + "</d>".encode("utf-8")


                    flow.response = http.HTTPResponse.make(200, responseBytes,
                                                           {"Content-Type": "text/plain; charset=utf-8"})

                    # Log response
                    self.simLogger.warning("---> Own Response")
                    httpResStr = utils.createHttpResponseLogMsg(flow, 0)
                    self.simLogger.warning(httpResStr)
                    helpers.saveHttpInfos(self.sampleLogDir + "sim/", httpResStr, flow, 0,
                                          helpers.HttpPacketType.Response)

            except Exception as e:
                self.simLogger.error("Exception: \n" + traceback.format_exc())
    def request(self, flow: http.HTTPFlow):
        # Analyze
        headers = dict(flow.request.headers)
        try:
            contentLength = int(headers["Content-Length"])  # 111 Bytes
        except Exception as KeyError:
            return

        if (contentLength < 130) and (contentLength > 90):
            # Log request
            self.simLogger.warning("---> Matching Request")
            httpReqStr = utils.createHttpRequestLogMsg(flow, 0)
            self.simLogger.warning(httpReqStr)
            helpers.saveHttpInfos(self.sampleLogDir + "sim/", httpReqStr, flow, 0, helpers.HttpPacketType.Request)

            self.simLogger.warning("Found Content-Length with: " + str(contentLength))

            keyBytes = bytes(
                [0x0D, 0x0A, 0xC8])  # e.g. used by 2a3ff0ac89c072d3734a0a0d4bb7106d7854fca1a71eea3e48b20a9ada0d8cec
            plainBytes = helpers.XOR(flow.request.raw_content, keyBytes)

            try:
                plaintext = plainBytes.decode("utf-8")
                self.simLogger.warning("Plaintext: " + plaintext)

                if (plaintext.count(
                        "%") > 5):  # we know that the plaintext is a URL-encoded string, thus it will contain many % chars
                    # Create response
                    encodedConfig = "<c>KysrKy0rLSstKw0KRglERVNLCSVVU0VSUFJPRklMRSVcRGVza3RvcAkqLnR4dCwqLnBkZiwqLnBuZywqLmpwZywqLnJhciwqLnppcCwqLmRvYwkzMDAJKwktCQ0KTAkJLQkNCkkJODMuMTM1LjE5NC41OkRFDQo=</c><n>"
                    encryptedConfig = helpers.XOR(encodedConfig.encode("utf-8"), keyBytes)

                    nPartFile = open("Azorult32_Parts/n_part.bin", "rb")
                    nPartBytes = nPartFile.read()
                    nPartFile.close()

                    dPartFile = open("Azorult32_Parts/d_part.bin", "rb")
                    dPartBytes = dPartFile.read()
                    dPartFile.close()

                    responseBytes = encryptedConfig + nPartBytes + "</n><d>".encode(
                        "utf-8") + dPartBytes + "</d>".encode("utf-8")

                    # cipherBytes = sourcefile.read()
                    flow.response = http.HTTPResponse.make(200, responseBytes,
                                                           {"Content-Type": "text/plain; charset=utf-8"})

                    # Log response
                    self.simLogger.warning("---> Own Response")
                    httpResStr = utils.createHttpResponseLogMsg(flow, 0)
                    self.simLogger.warning(httpResStr)
                    helpers.saveHttpInfos(self.sampleLogDir + "sim/", httpResStr, flow, 0,
                                          helpers.HttpPacketType.Response)


            except Exception as e:
                self.simLogger.error("Exception: \n" + traceback.format_exc())
    def request(self, flow: http.HTTPFlow):  # The full HTTP request has been read.
        try:
            if utils.filterMicrosoftHttpTraffic(flow):
                return
            self.packetCounter += 1
            httpReqStr = utils.createHttpRequestLogMsg(flow, self.packetCounter)
            self.httpLogger.warning(httpReqStr)

            helpers.saveHttpInfos(self.sampleLogDir + "http/", httpReqStr, flow, self.packetCounter, helpers.HttpPacketType.Request)

        except Exception as e:
            self.httpLogger.error("Exception: \n" + traceback.format_exc())
    def request(self, flow: http.HTTPFlow):
        if flow.request.path.find("/gate.php") != -1:  # make sure that remote host is not localhost

            # Log request
            self.simLogger.warning("---> Matching Request")
            httpReqStr = utils.createHttpRequestLogMsg(flow, 0)
            self.simLogger.warning(httpReqStr)
            helpers.saveHttpInfos(self.sampleLogDir + "sim/", httpReqStr, flow, 0, helpers.HttpPacketType.Request)

            # Create response
            config = "IS_G_PWDS: 1\r\n" + "IS_G_DOUBLE: 1\r\n" + "IS_G_BROWSERS: 1\r\n" + "IS_G_COINS: 1\r\n" + "IS_G_SKYPE: 1\r\n" + "IS_G_STEAM: 1\r\n" + "IS_G_DESKTOP: 1\r\n" + "G_DESKTOP_EXTS: txt,doc\r\n" + "G_DESKTOP_MAXSIZE: 200\r\n"
            flow.response = http.HTTPResponse.make(200, config, {"Content-Type": "text/plain; charset=utf-8"})

            # Log response
            self.simLogger.warning("---> Own Response")
            httpResStr = utils.createHttpResponseLogMsg(flow,0)
            self.simLogger.warning(httpResStr)
            helpers.saveHttpInfos(self.sampleLogDir + "sim/", httpResStr, flow, 0, helpers.HttpPacketType.Response)
    def request(self, flow: http.HTTPFlow):
        if flow.request.path.find("Libs.zip") != -1:

            # Log request
            self.simLogger.warning("---> Matching Request")
            httpReqStr = utils.createHttpRequestLogMsg(flow, 0)
            self.simLogger.warning(httpReqStr)
            helpers.saveHttpInfos(self.sampleLogDir + "sim/", httpReqStr, flow, 0, helpers.HttpPacketType.Request)

            fLibs = open("AcridRain_Parts/Libs.zip", "rb")  # exactly same
            responseBytes = fLibs.read()
            flow.response = http.HTTPResponse.make(200, responseBytes, {"Content-Type": "application/zip"})
            fLibs.close()

            # Log response
            self.simLogger.warning("---> Own Response")
            httpResStr = utils.createHttpResponseLogMsg(flow, 0)
            self.simLogger.warning(httpResStr)
            helpers.saveHttpInfos(self.sampleLogDir + "sim/", httpResStr, flow, 0, helpers.HttpPacketType.Response)
    def request(self, flow: http.HTTPFlow):
        if flow.request.path.find("config.php") != -1 or flow.request.pretty_host == "a-n-y.online" or flow.request.pretty_host == "jelouslaodnn.org" or flow.request.pretty_host == "seeyouonlineservice.com":
            # Log request
            self.simLogger.warning("---> Matching Request")
            httpReqStr = utils.createHttpRequestLogMsg(flow, 0)
            self.simLogger.warning(httpReqStr)
            helpers.saveHttpInfos(self.sampleLogDir + "sim/", httpReqStr, flow, 0, helpers.HttpPacketType.Request)


            if(flow.request.path.find("config.php") != -1):
                # Create response
                fConfig = open("Kpot_Parts/config_kpot.bin", "rb")  # exactly same
                responseBytes = fConfig.read()
                fConfig.close()
                flow.response = http.HTTPResponse.make(200, responseBytes, {"Content-Type": "text/plain; charset=utf-8"})

            # Log response
            self.simLogger.warning("---> Own Response")
            httpResStr = utils.createHttpResponseLogMsg(flow,0)
            self.simLogger.warning(httpResStr)
            helpers.saveHttpInfos(self.sampleLogDir + "sim/", httpResStr, flow, 0, helpers.HttpPacketType.Response)