Commit 9ac7f0ee by lwilms

added test pdf creation and modified old tests

parent c5f5546a
{"file_type": {"mime": "application/x-tar", "full": "POSIX tar archive (GNU)", "summary": {"application/font-sfnt": [324], "application/gzip": ["well, that's compressed!"], "application/octet-stream": [42], "application/pdf": ["nice document here"], "application/x-archive": [42,42,42], "application/x-cpio": [13], "application/x-executable": [123,21], "application/x-object": [1,23,56,78,3,23,67,34,1309,35,5454], "application/x-sharedlib": [1,2,3,4,5], "application/x-tex-tfm": [42], "audio/mpeg": ["nice song there."], "compression/zlib": [1,3,5,6,3,6,4,2,5,4,21,5,7,9,5,3], "data/raw": ["hi there.",1,2,3,4,5,6,"wanna have some data?"], "filesystem/dosmbr": [1,2,3,44,56,67,2], "filesystem/squashfs": [1,2,3,4,5,4,5,32,6,7,89,3], "image/gif": [1,2,3,4,5,6,7,"gif time"], "image/png": ["boom. an image"], "linux/avm-kernel-image-v1": ["some kernel data"], "text/plain": [1,2,3,4,5,6,"there was data"], "video/mp4": ["there was a video"]}, "analysis_date": 1591092558.1460986, "plugin_version": "1.0"}, "crypto_material": {"summary": {"SSLCertificate": ["nothing to see here"]}, "analysis_date": 1591092560.042629, "plugin_version": "0.5.2", "system_version": "3.7.1_1588174612"}, "software_components": {"summary": {"BusyBox 1.24.2": [8], "Linux Kernel 2.6.39": [7], "OpenSSL 1.0.2r": [5], "hostapd 2.7": [3], "libFLAC 1.3.2": [2], "wpa_supplicant 2.7": [1]}, "analysis_date": 1591092560.6536422, "plugin_version": "0.4.1", "system_version": "3.7.1_1588174612"}, "exploit_mitigations": {"skipped": "blacklisted file type", "summary": {"Canary disabled": [1,2,3,4,5], "Canary enabled": [6,7,8,9], "FORTIFY_SOURCE disabled": [1,2,3], "FORTIFY_SOURCE enabled": [4,5,6,7,8,9], "NX disabled": [1,2,3,4], "NX enabled": [5,6,7,8,9], "PIE - invalid ELF file": [1,2,3,4,5,6,7,8,9], "RELRO disabled": [1,2,3,4,5], "RELRO fully enabled": [6,7], "RELRO partially enabled": [8,9]}, "analysis_date": 1591092560.9982054, "plugin_version": "0.1.2"}, "cve_lookup": {"cve_results": {}, "summary": {"BusyBox 1.24.2 (CRITICAL)": ["dat data."], "Linux Kernel 2.6.39 (CRITICAL)": ["some data"], "OpenSSL 1.0.2r": ["also some data"], "hostapd 2.7": ["data"], "wpa_supplicant 2.7": ["data"]}, "analysis_date": 1591092564.6739304, "plugin_version": "0.0.4"}, "cpu_architecture": {"summary": {"ARM, 32-bit, big endian (M)": [1,2,3,4,5,6,7,8,9], "x86, 32-bit, little endian (M)": [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3,4,5,42]}, "analysis_date": 1591092565.5146425, "plugin_version": "0.3.2"}, "binwalk": {"signature_analysis": "some Binwalk output", "summary": {"something, that binwalk found": ["some data"]}, "entropy_analysis_graph": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdeVwW5f7/8fcNCCgKoijumLtm7ktkphUnXHKpc8yjJJqdlpOWxSm3FLdvYZtHS9M0t056pF+LdY5mKWllkbiEZaJmqaiJigoILij3/P6Y4113oGJyO3jP6/l4zAPvua+Z+czc9w1vr2tmbodhGIYAAABgGz5WFwAAAIBriwAIAABgMwRAAAAAmyEAAgAA2AwBEAAAwGYIgAAAADZDAAQAALAZAiAAAIDNEAABAABshgAIAABgMwRAAAAAmyEAAgAA2AwBEAAAwGYIgAAAADZDAAQAALAZAiAAAIDNEAABAABshgAIAABgMwRAAAAAmyEAAgAA2AwBEAAAwGYIgAAAADZDAAQAALAZAiAAAIDNEAABAABshgAIAABgMwRAAAAAmyEAAgAA2AwBEAAAwGYIgAAAADZDAAQAALAZAiAAAIDNEAABAABshgAIAABgMwRAAAAAmyEAAijVFi1aJIfDcdHpm2++uaL1rVy5UhMnTvRMsQBwnfCzugAAKI7JkyfrhhtuKDS/QYMGV7SelStXatasWYRAALZGAARwXejevbvatWt3Tbd5/vx5OZ1O+fv7X9PtAoCnMQQM4Lq3d+9eORwOvfzyy5o7d67q16+vgIAAtW/fXhs3bnS1GzJkiGbNmiVJbsPIv1/H9OnTXevYvn27JOmzzz5T586dFRQUpIoVK6pPnz5KS0tzq2PixIlyOBzasWOH7rvvPgUHB6ty5coaMWKEzpw542rXpUsXtWzZssh9ady4saKjo0v0+ADA79EDCOC6kJ2drczMTLd5DodDlStXdj1eunSpTp48qUceeUQOh0Mvvvii7r33Xv38888qU6aMHnnkEf3yyy9avXq1/vWvfxW5nYULF+rMmTN6+OGHFRAQoEqVKmnNmjXq3r276tWrp4kTJ+r06dN67bXX1KlTJ23ZskV169Z1W8d9992nunXrKiEhQd98841effVVnThxQm+99ZYkadCgQXrooYe0bds2NW/e3LXcxo0btWvXLo0bN66EjhoAXIQBAKXYwoULDUlFTgEBAYZhGMaePXsMSUblypWN48ePu5b98MMPDUnGf/7zH9e8YcOGGUX96ruwjuDgYOPIkSNuz7Vq1cqoWrWqcezYMde8rVu3Gj4+PkZsbKxr3oQJEwxJRu/evd2Wf+yxxwxJxtatWw3DMIysrCwjMDDQGDVqlFu7J554wggKCjJyc3Ov9DABwBWhBxDAdWHWrFlq1KiR2zxfX1+3x/3791doaKjrcefOnSVJP//8c7G38+c//1lVqlRxPT506JBSU1M1cuRIVapUyTW/RYsW+tOf/qSVK1cWWsewYcPcHj/++ON6/fXXtXLlSrVo0UIhISHq06eP/v3vfyshIUEOh0MFBQVKTExU3759FRQUVOx6AeCPIAACuC506NDhsheB1KlTx+3xhTB44sSJYm/n91ca79u3T5J5bt7vNW3aVJ988ony8vLcQlvDhg3d2tWvX18+Pj7au3eva15sbKwSExP15Zdf6rbbbtOaNWt0+PBhDRo0qNi1AsAfxUUgALzG73sELzAMo9jrKFu2bEmV43LhQpPfio6OVnh4uN5++21J0ttvv61q1aopKiqqxLcPAL9HAARgK0WFsUuJiIiQJO3cubPQczt27FBYWFihIdsff/zR7fHu3bvldDrdLhbx9fXVwIED9e677+rEiRNavny5BgwYcNEQCwAliQAIwFYuhLWsrKxita9evbpatWqlxYsXuy2zbds2ffrpp+rRo0ehZS7cauaC1157TZJ5L8PfGjRokE6cOKFHHnlEubm5uv/++69oXwDgj+IcQADXhY8//lg7duwoNP+WW26Rj0/x/y/btm1bSdITTzyh6Oho+fr66q9//esll3nppZfUvXt3RUZG6sEHH3TdBiYkJKTIbxTZs2ePevfurW7duik5OVlvv/22Bg4cWOjef61bt1bz5s31//7f/1PTpk3Vpk2bYu8HAFwNAiCA60J8fHyR8xcuXKiuXbsWez333nuvHn/8cS1btkxvv/22DMO4bACMiorSqlWrNGHCBMXHx6tMmTLq0qWLXnjhhSK/ni4xMVHx8fEaPXq0/Pz8NHz4cL300ktFrjs2NlYjR47k4g8A15TDuJKzowEAFzVx4kRNmjRJR48eVVhYWLGWmTFjhp566int3bu30FXMAOApnAMIABYxDEPz589X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f5MkLfkDy3/wwQd6/vnnZRhGCVblPQiAAIAiORwOTZw4UUFBQWrYsKF8fDhrCKWf0+lUbm6u+vbtK0l67rnnLK6odCIAAgCKFBYWptatWysiIkLly5e3uhyg2C68X++55x4tXrxYBw4csLii0of/zgEAihQaGipJCggIsLgS4MpdCIGtW7dW1apVLa6m9CEAAgCK5HA43H4C15MLpywYhqEaNWrQi/07BEAAAOC18vPz5evrS0/27xAAAQC2s27dOjkcDmVlZVldSiGLFi1SxYoVL9lmyJAhroscriWrtlsS6Ml2RwAEAHiNC8HuYtPtt98uSbrlllt06NAhhYSEWFzxHzNjxgwtWrTI6jIua+/evXI4HEpNTbW6FPwOVwEDALzGhWD3ex999JEeffRRPfbYY5Ikf39/VatW7VqXp/z8fPn7+1/1eq7X4IrSgx5AAIDXuBDsfjudOHFCTz/9tMaOHat+/fpJKjwEfGHYdfny5WrYsKECAwMVHR2t/fv3X3J7o0aNUqNGjVSuXDnVq1dP48eP17lz51zPT5w4Ua1atdKbb76pG264QYGBgZKkrKwsPfLIIwoPD1dgYKCaN2+u//73v27r/uSTT9S0aVOVL19e3bp1cwu2vx2KnTt3rmrUqCGn0+m2fJ8+fTR06FDX4w8//FBt2rRRYGCg6tWrp0mTJun8+fMX3beCggLFxcWpYsWKqly5skaOHFnopsqrVq3Srbfe6mpz991366effnI9f8MNN0gyr8R1OBzq2rWrJGnjxo3605/+pLCwMIWEhKhLly7asmXLJY81ShYBEADgtbKystSnTx917dpVU6ZMuWTbU6dO6bnnntNbb72lr776SllZWfrrX/96yWUqVKigRYsWafv27ZoxY4bmzZunf/7zn25tdu/erffee0/vv/++UlNT5XQ61b17d3311Vd6++23tX37dk2dOtXtq/ZOnTqll19+Wf/617/0xRdfKD09XU8//XSRNfTr10/Hjh3T2rVrXfOOHz+uVatWKSYmRpL05ZdfKjY2ViNGjND27dv1xhtvaNGiRZe8SfIrr7yiRYsWacGCBVq/fr2OHz+uDz74wK1NXl6e4uLitGnTJiUlJcnHx0f33HOPK4ympKRIktasWaNDhw7p/ffflySdPHlSgwcP1vr16/XNN9+oYcOG6tGjh06ePHnJ442SwxAw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", "analysis_date": 1592550893.563894, "plugin_version": "0.5.2"}, "known_vulnerabilities": {"summary": {"BackDoor_String": ["here is some data"]}, "analysis_date": 1591092565.987832, "plugin_version": "0.2", "system_version": "3.7.1_1588174612"}}
\ No newline at end of file
{"device_name": "A devices name", "device_class": "Router", "device_part": "", "vendor": "a vendor", "version": "version 42.13", "release_date": "1970-01-01", "hid": "some specs", "size": 2315412323, "number_of_included_files": 21, "included_files": [1,2,3,4,5,6,7], "total_files_in_firmware": 12}
\ No newline at end of file
TEST_DICT = { TEST_DICT = {
"firmware": { "file_type": {"mime": "application/x-tar", "full": "POSIX tar archive (GNU)",
"analysis": { "summary": {"application/font-sfnt": [324], "application/gzip": ["well, that's compressed!"],
"binwalk": { "application/octet-stream": [42], "application/pdf": ["nice document here"],
"analysis_date": 1548333205.871766, "application/x-archive": [42, 42, 42], "application/x-cpio": [13],
"entropy_analysis_graph": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3XlclWX+//H3AWUTQc0EJBRzxVLcDatRi8JlTGtqTEnFypbRUhnNpdzHZWbMsHRy0kQrTG3RSs0y0mbKhVywTHNXTAVSY3NDOdfvj76e35xAxQQOnvv1fDzuh97Xfd33/bnOwcPbezs2Y4wRAAAALMPD1QUAAACgbBEAAQAALIYACAAAYDEEQAAAAIshAAIAAFgMARAAAMBiCIAAAAAWQwAEAACwGAIgAACAxRAAAQAALIYACAAAYDEEQAAAAIshAAIAAFgMARAAAMBiCIAAAAAWQwAEAACwGAIgAACAxRAAAQAALIYACAAAYDEEQAAAAIshAAIAAFgMARAAAMBiCIAAAAAWQwAEAACwGAIgAACAxRAAAQAALIYACAAAYDEEQAAAAIshAAIAAFgMARAAAMBiCIAAAAAWQwAEAACwGAIgAACAxRAAAQAALIYACAAAYDEEQADl2oIFC2Sz2S47bdy48Zq2t2rVKo0fP750igWAG0QFVxcAAMUxceJE1alTp1B7vXr1rmk7q1at0uzZswmBACyNAAjghtC5c2e1atWqTPd58eJF2e12eXl5lel+AaC0cQoYwA3v0KFDstlsmj59ut544w3VrVtX3t7eat26tb799ltHv7i4OM2ePVuSnE4j/3YbCQkJjm3s3LlTkpSZmaknnnhCQUFB8vHxUWRkpBYuXHjZOl555RXVrl1bvr6+at++vXbs2OHol5iYKJvNpm3bthUay5QpU+Tp6amjR4+W+OsEAJdwBBDADSE7O1snTpxwarPZbLrpppsc84sWLVJubq6efvpp2Ww2/eMf/9BDDz2kAwcOqGLFinr66ad17NgxrVmzRm+//XaR+0lMTNS5c+f01FNPydvbW9WqVdPZs2fVoUMH7du3T4MGDVKdOnX03nvvKS4uTllZWRo8eLDTNt566y3l5uZq4MCBOnfunGbOnKl77rlH33//vYKCgvTwww9r4MCBSkpKUvPmzZ3WTUpKUocOHRQaGlpCrxwAFMEAQDmWmJhoJBU5eXt7G2OMOXjwoJFkbrrpJnPq1CnHuh999JGRZD755BNH28CBA01RH32XthEQEGAyMzOdliUkJBhJ5p133nG05efnm6ioKOPv729ycnKctuHr62t++uknR99NmzYZSWbo0KGOtl69epmaNWuagoICR9vWrVuNJJOYmPg7Xy0AKB5OAQO4IcyePVtr1qxxmj799FOnPj179lTVqlUd83fffbck6cCBA8Xez5/+9CfdfPPNTm2rVq1ScHCwevXq5WirWLGinn/+eeXl5emrr75y6t+jRw+nI3ht2rRR27ZttWrVKkdb3759dezYMa1du9bRlpSUJF9fX/3pT38qdr0A8HtwChjADaFNmzZXvQmkVq1aTvOXwuAvv/xS7P0Udafx4cOHVb9+fXl4OP+fOSIiwrH8f9WvX7/QNho0aKClS5c65u+77z6FhIQoKSlJ9957r+x2u9599111795dlStXLna9APB7cAQQgNvw9PQsst0YU+xt+Pr6llQ5V+Tp6anevXvrgw8+0Llz57R27VodO3ZMjz32WJnsH4C1EQABWMqlu36vRe3atbV3717Z7Xan9h9//NGx/H/t3bu30Db27Nmj8PBwp7a+ffsqJydHn3zyiZKSknTzzTcrJibmmusDgGtFAARgKZUqVZIkZWVlFXudLl26KD09XUuWLHG0Xbx4Ua+99pr8/f3Vvn17p/7Lly93eoxLSkqKNm3apM6dOzv1a9q0qZo2bap58+bpgw8+0KOPPqoKFbgyB0Dp45MGwA3h008/dRxx+1/t2rUrdG3elbRs2VKS9PzzzysmJkaenp569NFHr7jOU089pX//+9+Ki4vTli1bFB4ervfff1/ffPONEhISCl2zV69ePd1111169tlndf78eSUkJOimm27SCy+8UGjbffv21bBhwySJ078AygwBEMANYezYsUW2JyYmqkOHDsXezkMPPaTnnntOixcv1jvvvCNjzFUDoK+vr9atW6eRI0dq4cKFysnJUcOGDZWYmKi4uLhC/fv27SsPDw8lJCQoMzNTbdq00axZsxQSElKob2xsrEaMGKG6deuqTZs2xR4HAFwPm7mWq6MBAJd16NAh1alTR//85z8dR/Wu5sSJEwoJCdHYsWM1ZsyYUq4QAH7FNYAA4EILFixQQUGB+vTp4+pSAFgIp4AB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2ighIUGnT59W//79JUl9+/ZVaGiopk6dKknq1q2bZsyYoebNm6tt27bat2+fxowZo27dujmCIAAAgDtymwDYs2dP/fzzzxo7dqzS09PVrFkzrV692nFjSFpamtMRv5deekk2m00vvfSSjh49qptvvlndunXT5MmTXTUEAACAMmEznO/83XJychQYGFg6G4+XFCApR9KM0tlFme7nRqultFhhjMXFawHgCo5IukXST5LCSmkf2dnZCggIKKWtl29ucQ0gAAAAio8ACAAAYDEEQAAAAIshAAIAAFgMARAAAMBiCIAAAAAWQwAEAACwGAIgAACAxRAAAQAALIYACAAAYDEEQAAAAIshAAIAAFgMARAAAMBiCIAAAAAWQwAEAACwGAIgAACAxRAAAQAALIYACAAAYDEEQAAAAIshAAIAAFgMARAAAMBiCIAAAAAWQwAEAACwGAIgAACAxRAAAQAALIYACAAAYDEEQAAAAIshAAIAAFgMARAAAMBiCIAAAAAWQwAEAACwGAIgAACAxRAAAQAALIYACAAAYDEEQAAAAIshAAIAAFgMARAAAMBiCIAAAAAWQwAEAACwGAIgAACAxRAAAQAALIYACAAAYDEEQAAAAIshAAIAAFgMARAAAMBiCIAAAAAW4/IA2L59e7311ls6e/asq0sBAACwBJcHwObNm2vYsGEKDg7WgAEDtHHjRleXBAAA4NZcHgATEhJ07NgxJSYmKjMzU3/4wx/UuHFjTZ8+XRkZGa4uDwAAwO24PABKUoUKFfTQQw/po48+0k8//aTevXtrzJgxCgsLU48ePfTll1+6ukQAAAC3US4C4CUpKSkaN26cXn75ZdWoUUOjRo1S9erV9cc//lHDhg276vqzZ89WeHi4fHx81LZtW6WkpFyxf1ZWlgYOHKiQkBB5e3urQYMGWrVqVUkNBwAAoFyq4OoCMjMz9fbbbysxMVF79+5Vt27d9O677yomJkY2m02SFBcXp06dOmn69OmX3c6SJUsUHx+vOXPmqG3btkpISFBMTIx2796tGjVqFOqfn5+v++67TzVq1ND777+v0NBQHT58WFWqVCm1sQIAAJQHLg+At9xyi+rWravHH39ccXFxuvnmmwv1adq0qVq3bn3F7cyYMUMDBgxQ//79JUlz5szRypUrNX/+fI0cObJQ//nz5+vUqVNav369KlasKEkK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/HcOAFDIpdB36RcpcKO59LPbvHlz1ahRw8XVlD8EQABAIZdO93LaFzeqSz+7xhjVrFmT/8z8Bv+yAQCA28rPz5enp6e8vb1dXUq5QgAEAFjOunXrZLPZlJWV5epSCjl06JBsNptSU1Mv22fBggWqUqVKGVbl2v2WBJvN5uoSyhUCIADAbVwKdpebOnbsKElq166djh8/rsDAQBdX/Pv07NlTe/bscXUZxRIeHq6EhARXl4Hf4C5gAIDbuBTsfuvjjz/WM888o7/85S+SJC8vL5fc3Zyfny8vL6/r3o6vr698fX1LoCJYFUcAAQBu41JneKuIAAAgAElEQVSw+9/pl19+0bBhwzR69Gg98sgjkgqfAr50anP58uWqX7++fHx8FBMToyNHjlxxfyNGjFCDBg3k5+enW2+9VWPGjNGFCxccy8ePH69mzZpp3rx5qlOnjnx8fCT9+qy6f/zjH6pXr568vb1Vq1atQs+rO3DggDp27Cg/Pz9FRkZqw4YNjmX/eyp2z549stls+vHHH53Wf+WVV1S3bl3H/I4dO9S5c2f5+/srKChIffr00YkTJ644vgULFqhWrVry8/PTgw8+qJMnTzot379/v7p3766goCD5+/urdevW+uKLLxzLO3TooMOHD2vo0KGOo7CSdPLkSfXq1UuhoaHy8/NTkyZN9O67716xFpQsAiAAwG1lZWWpe/fu6tChgyZNmnTFvmfOnNHkyZP11ltv6ZtvvlFWVpYeffTRK65TuXJlLViwQDt37tTMmTM1d+5cvfLKK0599u3bpw8++EAffvih47q+UaNGadq0aRozZox27typRYsWKSgoyGm9F198UcOGDVNqaqoaNGigXr166eLFi4VqaNCggVq1aqWkJOfvy0hKSlLv3r0dr8M999yj5s2ba/PmzVq9erUyMjL05z//+bJj27Rpk5544gkNGjRIqamp6tixo/72t7859cnLy1OXLl2UnJysbdu2qVOnTurWrZvS0tIkSR9++KFuueUWTZw4UcePH3ccnT137pxatmyplStXaseOHXrqqafUp08fpaSkXPH1RsnhFDAAoNhavdFK6XnpZb7fYP9gbX5q8zWtY7fb1bt3b1WoUEFJSUlXvQngwoULmjVrltq2bStJWrhwoSIiIpSSkqI2bdoUuc5LL73k+Ht4eLiGDRumxYsX64UXXnC05+fn66233tLNN98sScrNzdXMmTM1a9Ys9evXT5JUt25d3XXXXU7bHjZsmLp27SpJmjBhgm677Tbt27dPjRo1KlRHbGysZs2a5Qi5e/bs0ZYtW/TOO+9IkmbNmqXmzZtrypQpjnXmz5+vsLAw7dmzRw0aNCi0zZkzZ6pTp06OsTRo0EDr16/X6tWrHX0iIyMVGRnpmJ80aZKWLVumjz/+WIMGDVK1atXk6empypUrO51yDw0N1bBhwxzzzz33nD777DMtXbr0sq81ShYBEABQbOl56Tqae9TVZRTL6NGjtWHDBqWkpKhy5cpX7V+hQgW1bt3aMd+oUSNVqVJFu3btumwoWbJkiV599VXt379feXl5unjxogICApz61K5d2xH+JGnXrl06f/687r333ivW07RpU8ffQ0JCJEmZmZlFBsBHH31Uw4YN08aNG3XHHXcoKSlJLVq0cPTdvn271q5dW+Sz8Pbv319kANy1a1eh74GOiopyCoB5eXkaP368Vq5cqePHj+vixYs6e/as4wjg5RQUFGjKlClaunSpjh49qvz8fJ0/f15+fn5XXA8lhwAIACi2YH/XfC3cte538eLFmj59ulauXKn69euXSk0bNmxQbGysJkyYoJiYGAUGBmrx4sV6+eWXnfpVqlTJab64N29UrFjR8fdLRy/tdnuRfYODg3XPPfdo0aJFuuOOO7Ro0SI9++yzjuV5eXnq1q2b/v73vxda91K4/D2GDRumNWvWaPr06apXr558fX318MMPKz8//4rr/fOf/9TMmTOVkJCgJk2aqFKlShoyZMhV10PJIQACAIrtWk/DukJqaqqeeOIJTZs2TTExMcVe7+LFi9q8ebPjaN/u3buVlZWliIiIIvuvX79etWvX1osvvuhoO3z48FX3U79+ffn6+io5OVlPPvlkseu7mtjYWL3wwgvq1auXDhw44HT9YosWLfTBBx8oPDxcFSoU71d/RESENm3a5NS2ceNGp/lvvvlGcXFxjiOFeXl5OnTokFMfLy8vFRQUFFqve/fueuyxxyT9Gmz37Nmjxo0bF6s2XD9uAgEAuI0TJ06oR48e6tChgx577DGlp6c7TT///PNl161YsaKee+45bdq0SVu2bFFcXJzuuOOOy57+rV+/vtLS0rR48WLt379fr776qpYtW3bVGn18fDRixAi98MILeuutt7R//35t3LhRb7755u8etyQ99NBDys3N1bPPPquOHTuqZs2ajmUDBw7UqVOn1KtXL3377bfav3+/PvvsM/Xv379QOLvk+eef1+rVqzV9+nTt3btXs2bNcjr9e+k1uHRzy/bt29W7d+9CRynDw8P1n//8R0ePHnXcdVy/fn2tWbNG69ev165du/T0008rIyPjusaPa0MABAC4jZUrV+rw4cNatWqVQkJCCk3/e43fb/n5+WnEiBHq3bu37rzzTvn7+2vJkiWX7f/AAw9o6NChGjRokJo1a6b169drzJgxxapzzJgx+utf/6qxY8cqIiJCPXv2VGZm5jWP939VrlxZ3bp10/bt2xUbG+u0rGbNmvrmm29UUFCg+++/X02aNNGQIUNUpUqVy37f8x133KG5c+dq5syZioyM1Oeff+5004skzZgxQ1WrVlW7du3UrVs3xcTEqEWLFk59Jk6cqEOHDqlu3bqOayFfeukltWjRQjExMerQoYOCg4PVo0eP6xo/ro3NGGNcXcSNKicnp/SeIh8vKUBSjqQZpbOLMt3PjVZLabHCGIuL16Jca9iwoZKSkhQREWGJC/MXLFigIUOGlMuvhsPvc+bMGe3atUujR4/WyZMndfjw4ULPPczOzi50045VcAQQAADAYgiAAAAAFkMABABYXlxcHKd/YSkEQAAAAIshAAIAAFgMARAAAMBiCIAAAAAWQwAEAACwGAIgAACAxRAAAQAohnXr1slms13342LeeOMNhYWFycPDQwkJCb97O3FxceX269PGjx+vZs2aXbFPhw4dNGTIkDKqCL9FAAQAuJW4uDjZbLZCU6dOnVxdmnJycjRo0CCNGDFCR48e1VNPPVWoz+XqvzQtXLhQkjRz5kwtWLCgjEdQcj788ENNmjTJ1WVYVgVXFwAAQEnr1KmTEhMTndq8vb1dVM3/l5aWpgsXLqhr164KCQkpss/MmTM1bdq0Qu19+vTRvn371LVrV0kqve+iv4r8/Hx5eXld93aqVatWAtXg9+IIIADA7Xh7eys4ONhpqlq1qmO5zWbTvHnz9OCDD8rPz0/169fXxx9/7LSNVatWqUGDBvL19VXHjh116NChq+43LS1N3bt3l7+/vwICAvTnP/9ZGRkZkqQFCxaoSZMmkqRbb71VNputyG0GBgYWqv3NN9/Uhg0btHz5clWvXl1S4VPAHTp00KBBgzRo0CAFBgaqevXqGjNmjIwxl613//796t69u4KCguTv76/WrVvriy++cOoTHh6uSZMmqW/fvgoICHActfzpp5/Uq1cvVatWTZUqVVKrVq20adMmp3XffvtthYeHKzAwUI8++qhyc3Od6r10Cnj06NFq27ZtofoiIyM1ceJEx/y8efMUEREhHx8fNWrUSP/6178uOzZcGQEQAGBJEyZM0J///Gd999136tKli2JjY3Xq1ClJ0pEjR/TQQw+pW7duSk1N1ZNPPqmRI0decXt2u13du3fXqVOn9NVXX2nNmjU6cOCAevbsKUnq2bOnI1ylpKTo+PHjCgsLu2qdK1as0NixY5WYmKjIyMgr9l24cKEqVKiglJQUzZw5UzNmzNC8efMu2z8vL09dunRRcnKytm3bpk6dOqlbt25KS0tz6jd9+nRFRkZq27ZtGjNmjPLy8tS+fXsdPXpUH3/8sbZv364XXnhBdrvdsc7+/fu1fPlyrVixQitWrNBXX31V5JFNSYqNjVVKSor279/vaPvhhx/03XffqXfv3pKkpKQkjR07VpMnT9auXbs0ZcoUjRkzxnFKHNfIuJFZs2aZ2rVrG29vb9OmTRuzadOmK/ZfunSpadiwofH29ja33367Wbly5TXtLzs720gqnSleRuP/78/S2kdZ7udGq4Ux8lpYfGrYsKHZvHmzOX36tPMHX8uWxoSGlv3UsmWxP5v79etnPD09TaVKlZymyZMnO/pIMi+99JJjPi8vz0gyn376qTHGmFGjRpnGjRs7bXfEiBFGkvnll1+K3O/nn39uPD09TVpamqPthx9+MJJMSkqKMcaYbdu2GUnm4MGDxRrLrl27TEBAgHnxxReLHGf37t0d8+3btzcRERHGbrc71RwREVGsfV1y2223mddee80xX7t2bdOjRw+nPv/+979N5cqVzcmTJ4vcxrhx44yfn5/JyclxtA0fPty0bdvWqd7Bgwc75iMjI83EiRMd86NGjXLqX7duXbNo0SKn/UyaNMlERUUVWcPp06fN5s2bzf33329atmxpqlevXujnPDs7+0ovhVtzm2sAlyxZovj4eM2ZM0dt27ZVQkKCYmJitHv3btWoUaNQ//Xr16tXr16aOnWq/vjHP2rRokXq0aOHtm7dqttvv90FIwCAG0B6unT0qKuruKqOHTvq9ddfd2r77TVnTZs2dfy9UqVKCggI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pXr16qlly5aaOnWqIiMjNXPmTLcb55YtW5SZmakWLVqoQoUKqlChgr766iu9+uqrqlChgoKCgtxqvP+rSpUqatCggfbt2+d272tISIgaN27s1BYREeE45e2On02HDx/WF198oSeffNLR5m7v6/DhwzVy5Eg9+uijatKkifr06aOhQ4dq6tSpktzzfS0JBMByxMvLSy1btlRycrKjzW63Kzk5WVFRUS6srGTVqVNHwcHBTuPMycnRpk2bHOOMiopSVlaWtmzZ4ujz5Zdfym63q23btmVe8+UYYzRo0CAtW7ZMX375perUqeO0vGXLlqpYsaLTWHfv3q20tDSnsX7//fdOHz5r1qxRQEBAoV9W5Y3dbtf58+fdbpz33nuvvv/+e6WmpjqmVq1aKTY21vF3dxrv/8rLy9P+/fsVEhLidu/rnXfeWegxTXv27FHt2rUluddn0yWJiYmqUaOGunbt6mhzt/f1zJkz8vBwjjOenp6y2+2S3PN9LRGuvgsFzhYvXmy8vb3NggULzM6dO81TTz1lqlSp4nQn1o0gNzfXbNu2zWzbts1IMjNmzDDbtm0zhw8fNsb8ekt+lSpVzEcffWS+++4707179yJvyW/evLnZtGmT+frrr039+vXL3S35zz77rAkMDDTr1q1zeuTCmTNnHH2eeeYZU6tWLfPll1+azZs3m6ioKBMVFeVYfulxC/fff79JTU01q1evNjfffHO5e9zCyJEjzVdffWUOHjxovvvuOzNy5Ehjs9nM559/boxxn3Fezv/eBWyM+4z3r3/9q1m3bp05ePCg+eabb0x0dLSpXr26yczMNMa4zziN+fWRPhUqVDCTJ082e/fuNUlJScbPz8+88847jj7u8tlkzK9PkahVq5YZMWJEoWXu9L7269fPhIaGOh4D8+GHH5rq1aubF154wdHHnd7XkkIALIdee+01U6tWLePl5WXatGljNm7c6OqSrtnatWuNpEJTv379jDG/3pY/ZswYExQUZLy9vc29995rdu/e7bSNkydPml69ehl/f38TEBBg+vfvb3Jzc10wmssraoySTGJioqPP2bNnzV/+8hdTtWpV4+fnZx588EFz/Phxp+0cOnTIdO7c2fj6+prq1aubv/71r+bChQtlPJore/zxx03t2rWNl5eXufnmm829997rCH/GuM84L+e3AdBdxtuzZ08TEhJivLy8TGhoqOnZs6fTc/HcZZyXfPLJJ+b222833t7eplGjRuaNN95wWu4un03GGPPZZ58ZSYXqN8a93tecnBwzePBgU6tWLePj42NuvfVW8+KLLzo9rsad3teSYjPmfx6VDQAAALfHNYAAAAAWQwAEAACwGAIgAACAxRAAAQAALIYACAAAYDEEQAAAAIshAAIAAFgMARDA/2vvbkKi+uIwjn8HZERtxjfMoUEGR02uugnaKJoYDY7SRoxaFAotXIkRFNhCSXxDN25CplZKiQjmSgWlYnypFkmLUAYdFcmFs3EyEMPA6b8bmL8ujJRi7vOBu/mdew/nt3s43HOvKR0cHFBfX4/dbsdisbC3t3diTUQkHikAikjc2d7e5v79+1y6dAmr1YrL5eLBgwfs7u5G7xkeHmZhYYEPHz6ws7NDamrqibU/4ff7FSRF5J+kACgicWVzc5OrV/kFy8kAAAOQSURBVK8SDAYZHR1lfX0dn8/H27dvKS0tJRwOA7CxsYFhGJSUlOBwOLBYLCfWRETikX4FJyJxpaamhuXlZdbW1khKSorWQ6EQeXl5NDQ0EAgEmJubi45VVlYCHKv5/X4GBwcZGBhge3ub1NRUKioqGB8fByASidDX18eLFy8IhUJcvnyZtrY2bt26xdbWFrm5uTFra2xsZGho6By7FxE5nYS/vQARkbMSDoeZmZmhu7s7JvwBOBwO7t69y9jYGMFgkCdPnrC8vMzExARWqxWA1tbWmNrS0hItLS28fPmSsrIywuEwCwsL0Tl7e3t59eoVPp+PgoIC5ufnuXfvHllZWZSXl/P69Wvq6+tZXV3FbrcfW5OIyN+iACgicSMYDPLr1y8Mwzhx3DAMvn37xtHREcnJyVitVhwOR3T8/zW/309KSgo3b97EZrPhcrm4cuUKAIeHh/T09PDmzRtKS0sBcLvdLC4u8vz5cyorK8nIyADg4sWLpKWlnWfrIiK/RQFQROLOWb3Z4vF4cLlcuN1uvF4vXq+Xuro6kpOTWV9f5+DgAI/HE/PMz58/oyFRRORfpQAoInEjPz8fi8VCIBCgrq7u2HggECA9PZ2srKxTzWez2fj8+TN+v5/Z2Vna29t5+vQpnz59Yn9/H4CpqSmcTmfMc4mJiX/ejIjIOdIpYBGJG5mZmXg8HgYHB/nx40fMWCgUYmRkhDt37vzW6d6EhARu3LhBf38/X758YWtri3fv3lFUVERiYiJfv34lPz8/5srJyQGIvlt4dHR0dk2KiJwB7QCKSFx59uwZZWVlVFdX09XVRW5uLisrKzx+/Bin00l3d/ep55qcnGRzc5Nr166Rnp7O9PQ0kUiEwsJCbDYbjx494uHDh0QiEcrLy/n+/Tvv37/HbrfT2NiIy+XCYrEwOTlJbW0tSUlJXLhw4Ry7FxE5He0AikhcKSgoYGlpCbfbze3bt8nLy6OpqYmqqio+fvwYPZhxGmlpaUxMTHD9+nUMw8Dn8zE6OkpxcTEAnZ2dtLW10dvbi2EYeL1epqamop9/cTqddHR00NraSnZ2Ns3NzefSs4jI79J3AEVERERMRjuAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMv8B1GY63YW86TwAAAAASUVORK5CYII=", "application/x-executable": [123, 21],
"plugin_version": "0.5.2", "application/x-object": [1, 23, 56, 78, 3, 23, 67, 34, 1309, 35, 5454],
"signature_analysis": "\nDECIMAL HEXADECIMAL DESCRIPTION\n--------------------------------------------------------------------------------\n0 0x0 Zip archive data, at least v2.0 to extract, name: get_files_test/\n45 0x2D Zip archive data, at least v2.0 to extract, name: get_files_test/generic folder/\n105 0x69 Zip archive data, at least v1.0 to extract, compressed size: 20, uncompressed size: 20, name: get_files_test/generic folder/test file 3_.txt\n201 0xC9 Zip archive data, at least v2.0 to extract, compressed size: 59, uncompressed size: 62, name: get_files_test/testfile1\n314 0x13A Zip archive data, at least v1.0 to extract, compressed size: 28, uncompressed size: 28, name: get_files_test/testfile2\n765 0x2FD End of Zip archive, footer length: 22\n\n", "application/x-sharedlib": [1, 2, 3, 4, 5], "application/x-tex-tfm": [42],
"summary": { "audio/mpeg": ["nice song there."],
"End of Zip archive": [ "compression/zlib": [1, 3, 5, 6, 3, 6, 4, 2, 5, 4, 21, 5, 7, 9, 5, 3],
"418a54d78550e8584291c96e5d6168133621f352bfc1d43cf84e81187fef4962_787" "data/raw": ["hi there.", 1, 2, 3, 4, 5, 6, "wanna have some raw data?"],
], "filesystem/dosmbr": [1, 2, 3, 44, 56, 67, 2],
"Zip archive data": [ "filesystem/squashfs": [1, 2, 3, 4, 5, 4, 5, 32, 6, 7, 89, 3],
"418a54d78550e8584291c96e5d6168133621f352bfc1d43cf84e81187fef4962_787" "image/gif": [1, 2, 3, 4, 5, 6, 7, "gif time"], "image/png": ["boom. an image"],
] "linux/avm-kernel-image-v1": ["some kernel data"],
} "text/plain": [1, 2, 3, 4, 5, 6, "there was data"],
}, "video/mp4": ["there was a video"]}, "analysis_date": 1591092558.1460986,
"file_hashes": { "plugin_version": "1.0"},
"analysis_date": 1548333208.4131176, "crypto_material": {"summary": {"SSLCertificate": ["nothing to see here"]},
"imphash": None, "analysis_date": 1591092560.042629, "plugin_version": "0.5.2",
"md5": "743692a4121ff9f0c492c14a8371a32e", "system_version": "3.7.1_1588174612"},
"plugin_version": "1.0", "software_components": {
"ripemd160": "6cb1094fd083fe21c5ebba5426e3863f77f85d11", "summary": {"BusyBox 1.24.2": [8], "Linux Kernel 2.6.39": [7], "OpenSSL 1.0.2r": [5], "hostapd 2.7": [3],
"sha1": "105bc9f473fa46553bc256521b9b0c5e29213d69", "libFLAC 1.3.2": [2], "wpa_supplicant 2.7": [1]}, "analysis_date": 1591092560.6536422,
"sha256": "418a54d78550e8584291c96e5d6168133621f352bfc1d43cf84e81187fef4962", "plugin_version": "0.4.1", "system_version": "3.7.1_1588174612"},
"sha512": "bf9fa25242fecaa8e2b58d01758e5d7d9779487594cbb43ec9665d1df5ae967faabc625764715296bb663a88e6c01cca3b862c33e9d093df79e595b47fa68255", "exploit_mitigations": {"skipped": "blacklisted file type",
"ssdeep": "12:5DJhWmNJAx9DV1JzAkVTDL4EZFJhudt6JA1uL33k9S/OgRI:ThWm7Ax9DVLAe4EZhueAk3k9SWf", "summary": {"Canary disabled": [1, 2, 3, 4, 5], "Canary enabled": [6, 7, 8, 9],
"summary": None, "FORTIFY_SOURCE disabled": [1, 2, 3],
"whirlpool": "fdb19c4ed557ce8c1e5d7972008c9e83a5c82501a1057f9dbae083762a653b264e0ddeec25a6933f00fe7273e80bf8066904425119a544ea2161ef8ec9c3ecc0" "FORTIFY_SOURCE enabled": [4, 5, 6, 7, 8, 9],
}, "NX disabled": [1, 2, 3, 4], "NX enabled": [5, 6, 7, 8, 9],
"file_type": { "PIE - invalid ELF file": [1, 2, 3, 4, 5, 6, 7, 8, 9],
"analysis_date": 1548333203.6747785, "RELRO disabled": [1, 2, 3, 4, 5], "RELRO fully enabled": [6, 7],
"full": "Zip archive data, at least v2.0 to extract", "RELRO partially enabled": [8, 9]},
"mime": "application/zip", "analysis_date": 1591092560.9982054, "plugin_version": "0.1.2"},
"plugin_version": "1.0", "cve_lookup": {"cve_results": {}, "summary": {"BusyBox 1.24.2 (CRITICAL)": ["dat data."],
"summary": { "Linux Kernel 2.6.39 (CRITICAL)": ["some data"],
"application/zip": [ "OpenSSL 1.0.2r": ["also some data"],
"418a54d78550e8584291c96e5d6168133621f352bfc1d43cf84e81187fef4962_787" "hostapd 2.7": ["data"], "wpa_supplicant 2.7": ["data"]},
], "analysis_date": 1591092564.6739304, "plugin_version": "0.0.4"},
"text/plain": [ "cpu_architecture": {
"d558c9339cb967341d701e3184f863d3928973fccdc1d96042583730b5c7b76a_62", "summary": {"ARM, 32-bit, big endian (M)": [1, 2, 3, 4, 5, 6, 7, 8, 9],
"faa11db49f32a90b51dfc3f0254f9fd7a7b46d0b570abd47e1943b86d554447a_28", "x86, 32-bit, little endian (M)": [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4,
"289b5a050a83837f192d7129e4c4e02570b94b4924e50159fad5ed1067cfbfeb_20" 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 42]},
] "analysis_date": 1591092565.5146425, "plugin_version": "0.3.2"},
} "binwalk": {"signature_analysis": "some Binwalk output",
}, "summary": {"something, that binwalk found": ["some data"]},
"known_vulnerabilities": { "entropy_analysis_graph": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdeVwW5f7/8fcNCCgKoijumLtm7ktkphUnXHKpc8yjJJqdlpOWxSm3FLdvYZtHS9M0t056pF+LdY5mKWllkbiEZaJmqaiJigoILij3/P6Y4113oGJyO3jP6/l4zAPvua+Z+czc9w1vr2tmbodhGIYAAABgGz5WFwAAAIBriwAIAABgMwRAAAAAmyEAAgAA2AwBEAAAwGYIgAAAADZDAAQAALAZAiAAAIDNEAABAABshgAIAABgMwRAAAAAmyEAAgAA2AwBEAAAwGYIgAAAADZDAAQAALAZAiAAAIDNEAABAABshgAIAABgMwRAAAAAmyEAAgAA2AwBEAAAwGYIgAAAADZDAAQAALAZAiAAAIDNEAABAABshgAIAABgMwRAAAAAmyEAAgAA2AwBEAAAwGYIgAAAADZDAAQAALAZAiAAAIDNEAABAABshgAIAABgMwRAAAAAmyEAAijVFi1aJIfDcdHpm2++uaL1rVy5UhMnTvRMsQBwnfCzugAAKI7JkyfrhhtuKDS/QYMGV7SelStXatasWYRAALZGAARwXejevbvatWt3Tbd5/vx5OZ1O+fv7X9PtAoCnMQQM4Lq3d+9eORwOvfzyy5o7d67q16+vgIAAtW/fXhs3bnS1GzJkiGbNmiVJbsPIv1/H9OnTXevYvn27JOmzzz5T586dFRQUpIoVK6pPnz5KS0tzq2PixIlyOBzasWOH7rvvPgUHB6ty5coaMWKEzpw542rXpUsXtWzZssh9ady4saKjo0v0+ADA79EDCOC6kJ2drczMTLd5DodDlStXdj1eunSpTp48qUceeUQOh0Mvvvii7r33Xv38888qU6aMHnnkEf3yyy9avXq1/vWvfxW5nYULF+rMmTN6+OGHFRAQoEqVKmnNmjXq3r276tWrp4kTJ+r06dN67bXX1KlTJ23ZskV169Z1W8d9992nunXrKiEhQd98841effVVnThxQm+99ZYkadCgQXrooYe0bds2NW/e3LXcxo0btWvXLo0bN66EjhoAXIQBAKXYwoULDUlFTgEBAYZhGMaePXsMSUblypWN48ePu5b98MMPDUnGf/7zH9e8YcOGGUX96ruwjuDgYOPIkSNuz7Vq1cqoWrWqcezYMde8rVu3Gj4+PkZsbKxr3oQJEwxJRu/evd2Wf+yxxwxJxtatWw3DMIysrCwjMDDQGDVqlFu7J554wggKCjJyc3Ov9DABwBWhBxDAdWHWrFlq1KiR2zxfX1+3x/3791doaKjrcefOnSVJP//8c7G38+c//1lVqlRxPT506JBSU1M1cuRIVapUyTW/RYsW+tOf/qSVK1cWWsewYcPcHj/++ON6/fXXtXLlSrVo0UIhISHq06eP/v3vfyshIUEOh0MFBQVKTExU3759FRQUVOx6AeCPIAACuC506NDhsheB1KlTx+3xhTB44sSJYm/n91ca79u3T5J5bt7vNW3aVJ988ony8vLcQlvDhg3d2tWvX18+Pj7au3eva15sbKwSExP15Zdf6rbbbtOaNWt0+PBhDRo0qNi1AsAfxUUgALzG73sELzAMo9jrKFu2bEmV43LhQpPfio6OVnh4uN5++21J0ttvv61q1aopKiqqxLcPAL9HAARgK0WFsUuJiIiQJO3cubPQczt27FBYWFihIdsff/zR7fHu3bvldDrdLhbx9fXVwIED9e677+rEiRNavny5BgwYcNEQCwAliQAIwFYuhLWsrKxita9evbpatWqlxYsXuy2zbds2ffrpp+rRo0ehZS7cauaC1157TZJ5L8PfGjRokE6cOKFHHnlEubm5uv/++69oXwDgj+IcQADXhY8//lg7duwoNP+WW26Rj0/x/y/btm1bSdITTzyh6Oho+fr66q9//esll3nppZfUvXt3RUZG6sEHH3TdBiYkJKTIbxTZs2ePevfurW7duik5OVlvv/22Bg4cWOjef61bt1bz5s31//7f/1PTpk3Vpk2bYu8HAFwNAiCA60J8fHyR8xcuXKiuXbsWez333nuvHn/8cS1btkxvv/22DMO4bACMiorSqlWrNGHCBMXHx6tMmTLq0qWLXnjhhSK/ni4xMVHx8fEaPXq0/Pz8NHz4cL300ktFrjs2NlYjR47k4g8A15TDuJKzowEAFzVx4kRNmjRJR48eVVhYWLGWmTFjhp566int3bu30FXMAOApnAMIABYxDEPz589X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f5MkLfkDy3/wwQd6/vnnZRhGCVblPQiAAIAiORwOTZw4UUFBQWrYsKF8fDhrCKWf0+lUbm6u+vbtK0l67rnnLK6odCIAAgCKFBYWptatWysiIkLly5e3uhyg2C68X++55x4tXrxYBw4csLii0of/zgEAihQaGipJCggIsLgS4MpdCIGtW7dW1apVLa6m9CEAAgCK5HA43H4C15MLpywYhqEaNWrQi/07BEAAAOC18vPz5evrS0/27xAAAQC2s27dOjkcDmVlZVldSiGLFi1SxYoVL9lmyJAhroscriWrtlsS6Ml2RwAEAHiNC8HuYtPtt98uSbrlllt06NAhhYSEWFzxHzNjxgwtWrTI6jIua+/evXI4HEpNTbW6FPwOVwEDALzGhWD3ex999JEeffRRPfbYY5Ikf39/VatW7VqXp/z8fPn7+1/1eq7X4IrSgx5AAIDXuBDsfjudOHFCTz/9tMaOHat+/fpJKjwEfGHYdfny5WrYsKECAwMVHR2t/fv3X3J7o0aNUqNGjVSuXDnVq1dP48eP17lz51zPT5w4Ua1atdKbb76pG264QYGBgZKkrKwsPfLIIwoPD1dgYKCaN2+u//73v27r/uSTT9S0aVOVL19e3bp1cwu2vx2KnTt3rmrUqCGn0+m2fJ8+fTR06FDX4w8//FBt2rRRYGCg6tWrp0mTJun8+fMX3beCggLFxcWpYsWKqly5skaOHFnopsqrVq3Srbfe6mpz991366effnI9f8MNN0gyr8R1OBzq2rWrJGnjxo3605/+pLCwMIWEhKhLly7asmXLJY81ShYBEADgtbKystSnTx917dpVU6ZMuWTbU6dO6bnnntNbb72lr776SllZWfrrX/96yWUqVKigRYsWafv27ZoxY4bmzZunf/7zn25tdu/erffee0/vv/++UlNT5XQ61b17d3311Vd6++23tX37dk2dOtXtq/ZOnTqll19+Wf/617/0xRdfKD09XU8//XSRNfTr10/Hjh3T2rVrXfOOHz+uVatWKSYmRpL05ZdfKjY2ViNGjND27dv1xhtvaNGiRZe8SfIrr7yiRYsWacGCBVq/fr2OHz+uDz74wK1NXl6e4uLitGnTJiUlJcnHx0f33HOPK4ympKRIktasWaNDhw7p/ffflySdPHlSgwcP1vr16/XNN9+oYcOG6tGjh06ePHnJ442SwxAw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",
"analysis_date": 1548333209.475375, "analysis_date": 1592550893.563894, "plugin_version": "0.5.2"},
"plugin_version": "0.2", "known_vulnerabilities": {"summary": {"BackDoor_String": ["here is some data"]},
"summary": {}, "analysis_date": 1591092565.987832, "plugin_version": "0.2",
"system_version": "3.7.1_1548244221" "system_version": "3.7.1_1588174612"}
}, }
"malware_scanner": {
"analysis_date": 1548333207.3892179, META_DICT = {
"md5": "743692a4121ff9f0c492c14a8371a32e", "device_name": "A devices name",
"number_of_scanners": 1, "device_class": "Router",
"plugin_version": "0.3.1", "device_part": "",
"positives": 0, "vendor": "a vendor",
"scanners": [ "version": "version 42.13",
"ClamAV" "release_date": "1970-01-01",
], "hid": "some specs",
"scans": { "size": 2315412323,
"ClamAV": { "number_of_included_files": 21,
"detected": False, "included_files": [1, 2, 3, 4, 5, 6, 7],
"result": "clean", "total_files_in_firmware": 12
"version": "ClamAV 0.100.2/25326/Thu Jan 24 03:30:43 2019\n"
}
},
"summary": {},
"system_version": "0.2.6"
},
"printable_strings": {
"analysis_date": 1548333208.388212,
"plugin_version": "0.3.4",
"skipped": "blacklisted file type",
"summary": {}
},
"software_components": {
"analysis_date": 1548333204.2639465,
"plugin_version": "0.3.2",
"summary": {
"Test Software 1.2.3": [
"d558c9339cb967341d701e3184f863d3928973fccdc1d96042583730b5c7b76a_62"
]
},
"system_version": "3.7.1_1548244221"
},
"unpacker": {
"analysis_date": 1548333203.557019,
"entropy": 0.5789618884873324,
"number_of_unpacked_files": 3,
"output": "\n7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21\np7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,8 CPUs x64)\n\nScanning the drive for archives:\n1 file, 787 bytes (1 KiB)\n\nExtracting archive: /media/data/fact_fw_data/41/418a54d78550e8584291c96e5d6168133621f352bfc1d43cf84e81187fef4962_787\n--\nPath = /media/data/fact_fw_data/41/418a54d78550e8584291c96e5d6168133621f352bfc1d43cf84e81187fef4962_787\nType = zip\nPhysical Size = 787\n\nEverything is Ok\n\nFolders: 2\nFiles: 3\nSize: 110\nCompressed: 787\n",
"plugin_used": "7z",
"plugin_version": "0.7",
"size packed -> unpacked": "459.00 Byte -> 110.00 Byte",
"summary": {
"data lost": [
"418a54d78550e8584291c96e5d6168133621f352bfc1d43cf84e81187fef4962_787"
],
"unpacked": [
"d558c9339cb967341d701e3184f863d3928973fccdc1d96042583730b5c7b76a_62",
"faa11db49f32a90b51dfc3f0254f9fd7a7b46d0b570abd47e1943b86d554447a_28",
"289b5a050a83837f192d7129e4c4e02570b94b4924e50159fad5ed1067cfbfeb_20"
]
}
},
"users_and_passwords": {
"analysis_date": 1548333206.30962,
"plugin_version": "0.4.1",
"summary": {}
}
},
"meta_data": {
"device_class": "Test-Data",
"device_name": "test_container",
"device_part": "",
"hid": "Frauhhofer FKIE test_container v. 0.1",
"number_of_files": 3,
"release_date": "2019-01-24",
"size": 787,
"vendor": "Frauhhofer FKIE",
"version": "0.1"
}
},
"request": {
"uid": "418a54d78550e8584291c96e5d6168133621f352bfc1d43cf84e81187fef4962_787"
},
"request_resource": "/rest/firmware",
"status": 0,
"timestamp": 1548333492
} }
import pytest import pytest
from pdf_generator.tex_generation.template_engine import TemplateEngine from pdf_generator.tex_generation.template_engine import TemplateEngine
from test.data.test_dict import TEST_DICT from test.data.test_dict import TEST_DICT, META_DICT
# pylint: disable=redefined-outer-name
TEST_DATA = { # pylint: disable=redefined-outer-name
'analysis': {'file_hashes': {'ssdeep': 'bla', 'sha1': 'blah'}},
'meta_data': {'device_name': 'test_device'}
}
@pytest.fixture(scope='function') @pytest.fixture(scope='function')
...@@ -16,13 +12,10 @@ def stub_engine(): ...@@ -16,13 +12,10 @@ def stub_engine():
def test_latex_code_generation(stub_engine: TemplateEngine): def test_latex_code_generation(stub_engine: TemplateEngine):
result = stub_engine.render_meta_template(TEST_DICT) result = stub_engine.render_meta_template(META_DICT)
assert result assert result
def test_render_template(tmpdir): def test_render_template(stub_engine, tmpdir):
engine = TemplateEngine(template_folder='test', tmp_dir=tmpdir) output = stub_engine.render_main_template(analysis=[TEST_DICT, META_DICT])
test_data = {'meta_data': '123', 'analysis': '456'} assert output
output = engine.render_analysis_template(plugin='render_test', analysis=test_data)
assert output == 'Test - '
import PyPDF2
from docker_entry import main as main_docker_entry
import pathlib
import shutil
# pylint: disable=redefined-outer-name
def test_docker_entry(template_style='default'):
pathlib.Path("/tmp/interface/data").mkdir(parents=True, exist_ok=True)
pathlib.Path("/tmp/interface/pdf").mkdir(parents=True, exist_ok=True)
shutil.copyfile('data/analysis.json', '/tmp/interface/data/analysis.json')
shutil.copyfile('data/meta.json', '/tmp/interface/data/meta.json')
output = main_docker_entry()
try:
PyPDF2.PdfFileReader(open('/tmp/interface/pdf/A_devices_name_analysis_report.pdf', "rb"))
except PyPDF2.utils.PdfReadError:
assert False
assert pathlib.Path('/tmp/interface/pdf/A_devices_name_analysis_report.pdf').exists()
assert output == 0
...@@ -3,9 +3,10 @@ from pathlib import Path ...@@ -3,9 +3,10 @@ from pathlib import Path
import pytest import pytest
from pdf_generator.generator import ( from pdf_generator.generator import (
LOGO_FILE, MAIN_TEMPLATE, META_TEMPLATE, PLUGIN_TEMPLATE_BLUEPRINT, copy_fact_image, create_report_filename, LOGO_FILE, MAIN_TEMPLATE, META_TEMPLATE, copy_fact_image, create_report_filename,
create_templates, execute_latex, render_analysis_templates create_templates, execute_latex
) )
from test.data.test_dict import TEST_DICT, META_DICT
class MockEngine: class MockEngine:
...@@ -13,8 +14,8 @@ class MockEngine: ...@@ -13,8 +14,8 @@ class MockEngine:
pass pass
@staticmethod @staticmethod
def render_main_template(analysis, meta_data): def render_main_template(analysis):
return '{}\n{}'.format(json.dumps(analysis), json.dumps(meta_data)) return '{}'.format(json.dumps(analysis))
@staticmethod @staticmethod
def render_meta_template(meta_data): def render_meta_template(meta_data):
...@@ -24,6 +25,10 @@ class MockEngine: ...@@ -24,6 +25,10 @@ class MockEngine:
def render_analysis_template(_, analysis): def render_analysis_template(_, analysis):
return json.dumps(analysis) return json.dumps(analysis)
@staticmethod
def render_template_class():
return json.dumps('template_class.cls')
def exec_mock(*_, **__): def exec_mock(*_, **__):
Path('test').write_text('works') Path('test').write_text('works')
...@@ -51,22 +56,9 @@ def test_create_report_filename(device_name, pdf_name): ...@@ -51,22 +56,9 @@ def test_create_report_filename(device_name, pdf_name):
assert create_report_filename({'device_name': device_name}) == pdf_name assert create_report_filename({'device_name': device_name}) == pdf_name
def test_create_analysis_templates():
templates = render_analysis_templates(engine=MockEngine(), analysis={'test': {'result': 'data'}})
assert len(templates) == 1
filename, result_code = templates[0]
assert filename == PLUGIN_TEMPLATE_BLUEPRINT.format('test')
assert result_code == '{"result": "data"}'
def test_create_templates(monkeypatch, tmpdir): def test_create_templates(monkeypatch, tmpdir):
monkeypatch.setattr('pdf_generator.generator.TemplateEngine', MockEngine) monkeypatch.setattr('pdf_generator.generator.TemplateEngine', MockEngine)
create_templates(analysis={'test': {'result': 'data'}}, meta_data={}, tmp_dir=str(tmpdir)) create_templates(analysis=TEST_DICT, meta_data=META_DICT, tmp_dir=str(tmpdir))
assert Path(str(tmpdir), MAIN_TEMPLATE).exists() assert Path(str(tmpdir), MAIN_TEMPLATE).exists()
assert Path(str(tmpdir), META_TEMPLATE).exists() assert Path(str(tmpdir), META_TEMPLATE).exists()
assert Path(str(tmpdir), PLUGIN_TEMPLATE_BLUEPRINT.format('test')).exists()
assert Path(str(tmpdir), PLUGIN_TEMPLATE_BLUEPRINT.format('test')).read_text() == '{"result": "data"}'
...@@ -8,7 +8,6 @@ from pdf_generator.tex_generation.template_engine import ( ...@@ -8,7 +8,6 @@ from pdf_generator.tex_generation.template_engine import (
from test.data.test_dict import TEST_DICT from test.data.test_dict import TEST_DICT
# pylint: disable=redefined-outer-name # pylint: disable=redefined-outer-name
...@@ -49,15 +48,11 @@ def test_render_meta_template(stub_engine): ...@@ -49,15 +48,11 @@ def test_render_meta_template(stub_engine):
def test_render_main_template(stub_engine): def test_render_main_template(stub_engine):
assert stub_engine.render_main_template(meta_data='anything', analysis='else') == 'Test anything - else' assert stub_engine.render_main_template(analysis='else') == 'Test - else'
def test_render_analysis_template(stub_engine):
assert stub_engine.render_analysis_template(plugin='non_existing', analysis='result') == 'Presenting: result'
def test_get_five_longest_entries(): def test_get_five_longest_entries():
assert len(get_five_longest_entries(TEST_DICT['firmware']['analysis']['file_type']['summary'], top=3)) <= 3 assert len(get_five_longest_entries(TEST_DICT['file_type']['summary'], top=3)) <= 3
longest_dict = get_five_longest_entries(TEST_DICT['firmware']['analysis']['file_type']['summary'], top=1) longest_dict = get_five_longest_entries(TEST_DICT['file_type']['summary'], top=1)
assert len(longest_dict) == 1 assert len(longest_dict) == 1
assert 'text/plain' in longest_dict.keys() assert 'compression/zlib' in longest_dict.keys()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment