diff --git a/data/html/css/style.css b/data/html/css/style.css index a37f8db2cf7..389fba856c7 100644 --- a/data/html/css/style.css +++ b/data/html/css/style.css @@ -43,7 +43,40 @@ body { } .page-link { - background-color: #444 + background-color: #444; +} + +.page-link:hover { + background-color: #EE1B2F; +} + +.page-link-active { + background-color: #EE1B2F; +} + +.text-success { + color: #62c462 !important; +} + +.text-success:hover { + color: #62c462 !important; +} + +#top_pagination { + scroll-margin-top: 75px; +} + +.pagination { + --bs-pagination-disabled-bg: #2c3034; /* Dark pale grey background */ + --bs-pagination-disabled-color: #6c757d; /* Muted grey text */ + --bs-pagination-disabled-border-color: #373b3e; /* Matching subtle border */ +} + +.page-item.active .page-link { + z-index: 3; + color: #fff; + background-color: #ee1b2f !important; + border-color: transparent; } .page-item.active .page-link { @@ -183,6 +216,168 @@ h4, .h4 { width : 40%; } + +/* Category buttons (base colors) */ +.btn-cat-default { + background-color: #696969; + color: #000; + border-color: #696969; +} + +.btn-cat-filesystem { + background-color: #ffe3c5; + color: #000; + border-color: #ffe3c5; +} + +.btn-cat-registry { + background-color: #ffc5c5; + color: #000; + border-color: #ffc5c5; +} + +.btn-cat-process { + background-color: #c5e0ff; + color: #000; + border-color: #c5e0ff; +} + +.btn-cat-threading { + background-color: #d3e0ff; + color: #000; + border-color: #d3e0ff; +} + +.btn-cat-services { + background-color: #ccc5ff; + color: #000; + border-color: #ccc5ff; +} + +.btn-cat-device { + background-color: #d3c5cc; + color: #000; + border-color: #d3c5cc; +} + +.btn-cat-network { + background-color: #d3ffc5; + color: #000; + border-color: #d3ffc5; +} + +.btn-cat-socket { + background-color: #d3ffc5; + color: #000; + border-color: #d3ffc5; +} + +.btn-cat-synchronization { + background-color: #f9c5ff; + color: #000; + border-color: #f9c5ff; +} + +.btn-cat-browser { + background-color: #dfffdf; + color: #000; + border-color: #dfffdf; +} + +.btn-cat-crypto { + background-color: #f0f2c5; + color: #000; + border-color: #f0f2c5; +} + +.btn-cat-all { + background-color: #198754; + color: #000; + border-color: #198754; +} + +/* Active state border colors (your current behavior) */ +.btn-cat-default.active, +.btn-cat-default:active, +.show > .btn-cat-default.dropdown-toggle { + border-color: #696969; +} + +.btn-cat-filesystem.active, +.btn-cat-filesystem:active, +.show > .btn-cat-filesystem.dropdown-toggle { + border-color: #ffe3c5; +} + +.btn-cat-registry.active, +.btn-cat-registry:active, +.show > .btn-cat-registry.dropdown-toggle { + border-color: #ffc5c5; +} + +.btn-cat-process.active, +.btn-cat-process:active, +.show > .btn-cat-process.dropdown-toggle { + border-color: #c5e0ff; +} + +.btn-cat-threading.active, +.btn-cat-threading:active, +.show > .btn-cat-threading.dropdown-toggle { + border-color: #d3e0ff; +} + +.btn-cat-services.active, +.btn-cat-services:active, +.show > .btn-cat-services.dropdown-toggle { + border-color: #ccc5ff; +} + +.btn-cat-device.active, +.btn-cat-device:active, +.show > .btn-cat-device.dropdown-toggle { + border-color: #dcd1d6; +} + +.btn-cat-network.active, +.btn-cat-network:active, +.show > .btn-cat-network.dropdown-toggle { + border-color: #dcffd1; +} + +.btn-cat-socket.active, +.btn-cat-socket:active, +.show > .btn-cat-socket.dropdown-toggle { + border-color: #dcffd1; +} + +.btn-cat-synchronization.active, +.btn-cat-synchronization:active, +.show > .btn-cat-synchronization.dropdown-toggle { + border-color: #fad1ff; +} + +.btn-cat-browser.active, +.btn-cat-browser:active, +.show > .btn-cat-browser.dropdown-toggle { + border-color: #e5ffe5; +} + +.btn-cat-crypto.active, +.btn-cat-crypto:active, +.show > .btn-cat-crypto.dropdown-toggle { + border-color: #f3f5d1; +} + +.btn-cat-all.active, +.btn-cat-all:active, +.show > .btn-cat-all.dropdown-toggle { + border-color: #479f76; +} + + + + td { word-wrap: break-word; } @@ -227,4 +422,39 @@ pre { #filter-toggle { display: inline-block; cursor: pointer; -} \ No newline at end of file +} + +.alert-primary, .alert-info { + background-color: #1c1c1c; +} + +/* Hover/focus states */ +.form-control[type="file"]::file-selector-button:hover { + background-color: #3f474e; +} + +/* Mid-gray form controls */ +:root { + --form-bg: #5c5c5c; + --form-border: #666; + --form-text: #fff; + --form-placeholder: rgba(255, 255, 255, .55); +} + +.form-control, +.form-select { + background-color: var(--form-bg) !important; + color: var(--form-text) !important; + border-color: var(--form-border) !important; +} + +.form-control::placeholder { + color: var(--form-placeholder) !important; +} + +.form-control:focus, +.form-select:focus { + background-color: var(--form-bg) !important; + border-color: #007ABCFF !important; + box-shadow: 0 0 0 .25rem rgba(0, 38, 60, 0.25); +} diff --git a/data/html/generic/_network_http.html b/data/html/generic/_network_http.html index 062615210cd..e95c3471b23 100644 --- a/data/html/generic/_network_http.html +++ b/data/html/generic/_network_http.html @@ -12,7 +12,7 @@ {% if http.request %}
- {% if http.req.sha256 %} + {% if http.request.sha256 %} {% else %} Request: @@ -24,7 +24,7 @@ {% endif %}
{% if http.response %} - {% if http.resp.sha256 %} + {% if http.response.sha256 %} {% else %} Response: @@ -33,8 +33,8 @@
  • {{value}}
  • {% endfor %}
    Response preview: - {% if http.resp.preview %} - {% for line in http.resp.preview %} + {% if http.response.preview %} + {% for line in http.response.preview %}
  • {{line}}
  • {% endfor %} {% endif %} diff --git a/data/html/sections/behavior.html b/data/html/sections/behavior.html index b731a167ee1..dd217838983 100644 --- a/data/html/sections/behavior.html +++ b/data/html/sections/behavior.html @@ -1,10 +1,47 @@ {% set proctree_details = True %} {% include "sections/proctree.html" %} + + +

    Behavioral Analysis

    + {% if summary_report %} + {% if results.behavior and results.behavior.processes %} + {% for process in results.behavior.processes %} +
    +

    {{process.process_name}} PID: {{process.process_id}}, Parent PID: {{process.parent_id}}

    +
    + {% endfor %} + {% else %} + Nothing to display. + {% endif %} + {% else %} +
    +
    + +
    + {% include "sections/calltables.html" %} +
    + {% endif %} + + {% if results.behavior and results.behavior.anomaly %}
    diff --git a/data/html/sections/calltables.html b/data/html/sections/calltables.html new file mode 100644 index 00000000000..2c7ec532ffc --- /dev/null +++ b/data/html/sections/calltables.html @@ -0,0 +1,351 @@ + + + +
    +
    + {% if results.behavior and results.behavior.processes %} + {% for process in results.behavior.processes %} +
    +
    +
    {{process.process_name}}
    +

    + PID: {{process.process_id}} | Parent PID: {{process.parent_id}} +
    Path: {{process.module_path}} + {% if process.environ.CommandLine %}
    Cmd: {{ process.environ.CommandLine }}{% endif %} +
    Image Base: {% if process.environ.MainExeBase %}{{ process.environ.MainExeBase }}{% else %}{{process.image_base}}{% endif %} | + Size: {% if process.environ.MainExeSize %}{{ process.environ.MainExeSize }}{% else %}{{process.size}}{% endif %} | + Bitness: {% if process.environ.Bitness %}{{ process.environ.Bitness }}{% else %}{{process.bitness}}{% endif %} + {% if process.environ.DllBase %}
    Dll Image Base: {{ process.environ.DllBase }}{% endif %} +

    +
    +
    +
    +
    + + + + + + + + + + + + +
    + +
    + + +
    + + + +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + {% for call in process.calls %} + + + + + + + + {% if call.pretty_return %} + + {% else %} + + {% endif %} + + + {% endfor %} +
    TimeTIDCallerAPIArgumentsStatusReturnRepeated
    {{call.timestamp[11:]}}{{call.thread_id}}{{call.caller}}
    {{call.parentcaller}}
    {{call.api}} + {% for argument in call.arguments %} + {% if argument.pretty_value %} + {{argument.name}} => {{argument.pretty_value}}
    + {% else %} + {{argument.name}} => {{argument.value}}
    + {% endif %} + {% endfor %} +
    {% if call.status %}SUCCESS{% else %}FAILURE{% endif %}{{call.pretty_return}}{{call.return}} + {% if call.repeated and call.repeated > 0 %} + {{call.repeated}} + {% if call.repeated == 1 %} + time + {% elif call.repeated > 1 %} + times + {% endif %} + {% endif %} +
    + +
    + {% endfor %} + {% endif %} +
    +
    \ No newline at end of file diff --git a/modules/reporting/reporthtml.py b/modules/reporting/reporthtml.py index 5fdfd5df59b..41fbad59a76 100644 --- a/modules/reporting/reporthtml.py +++ b/modules/reporting/reporthtml.py @@ -27,6 +27,11 @@ log = logging.getLogger(__name__) +def network_rn_func(value): + """get basename from path""" + if isinstance(value, bytes): + value = value.decode() + return list(filter(None, value.split("\r\n"))) class ReportHTML(Report): """Stores report in HTML format.""" @@ -114,6 +119,7 @@ def run(self, results): "flare_capa_attck": flare_capa_attck, "flare_capa_mbc": flare_capa_mbc, "datefmt": datefmt, + "network_rn": network_rn_func } ) env.loader = FileSystemLoader(os.path.join(CUCKOO_ROOT, "data", "html"))