|
26 | 26 | },
|
27 | 27 | {
|
28 | 28 | "cell_type": "code",
|
29 |
| - "execution_count": 1, |
| 29 | + "execution_count": 2, |
30 | 30 | "id": "59ab69c2",
|
31 |
| - "metadata": {}, |
| 31 | + "metadata": { |
| 32 | + "ExecuteTime": { |
| 33 | + "end_time": "2025-09-30T22:33:28.895480027Z", |
| 34 | + "start_time": "2025-09-30T22:33:28.832413744Z" |
| 35 | + } |
| 36 | + }, |
32 | 37 | "outputs": [],
|
33 | 38 | "source": [
|
34 | 39 | "from ReversingLabs.SDK.ticloud import AdvancedSearch\n",
|
|
51 | 56 | },
|
52 | 57 | {
|
53 | 58 | "cell_type": "code",
|
54 |
| - "execution_count": 2, |
| 59 | + "execution_count": 9, |
55 | 60 | "id": "66ed0816",
|
56 |
| - "metadata": {}, |
| 61 | + "metadata": { |
| 62 | + "ExecuteTime": { |
| 63 | + "end_time": "2025-09-30T22:38:20.732097504Z", |
| 64 | + "start_time": "2025-09-30T22:38:20.726257601Z" |
| 65 | + } |
| 66 | + }, |
57 | 67 | "outputs": [],
|
58 | 68 | "source": [
|
59 | 69 | "import json\n",
|
60 | 70 | "import re\n",
|
61 | 71 | "\n",
|
62 |
| - "# ---------------------------------------------------\n", |
63 |
| - "# Configuration\n", |
64 |
| - "# ---------------------------------------------------\n", |
65 |
| - "SERVER = \"<server>\"\n", |
66 |
| - "USERNAME = \"username\"\n", |
67 |
| - "PASSWORD = \"password\"\n", |
68 |
| - "USER_AGENT= \"ReversingLabs SDK Cookbook v2.9.0\"" |
| 72 | + "\n", |
| 73 | + "CREDENTIALS = json.load(open('credentials.json'))\n", |
| 74 | + "USERNAME = CREDENTIALS.get(\"ticloud\").get(\"username\")\n", |
| 75 | + "PASSWORD = CREDENTIALS.get(\"ticloud\").get(\"password\")\n", |
| 76 | + "USER_AGENT = json.load(open('../user_agent.json'))[\"user_agent\"]\n", |
| 77 | + "HOST = \"https://data.reversinglabs.com\"\n", |
| 78 | + "\n", |
| 79 | + "config = {\n", |
| 80 | + " \"host\": HOST,\n", |
| 81 | + " \"username\": USERNAME,\n", |
| 82 | + " \"password\": PASSWORD,\n", |
| 83 | + " \"user_agent\": USER_AGENT\n", |
| 84 | + "}\n" |
69 | 85 | ]
|
70 | 86 | },
|
71 | 87 | {
|
72 | 88 | "cell_type": "markdown",
|
73 | 89 | "id": "d5beb2d8",
|
74 | 90 | "metadata": {},
|
75 | 91 | "source": [
|
76 |
| - "# 3. Filter query string\n", |
| 92 | + "/# 3. Filter query string\n", |
77 | 93 | "This code block defines a Python dictionary named QUERY_STRING that sets up the parameters for an API query to the ReversingLabs platform. When running this in a Jupyter Notebook, it forms the basis for the search request by specifying filters, pagination, and the desired response format.\n",
|
78 | 94 | "Addiditonal options available here: https://docs.reversinglabs.com/SpectraIntelligence/API/MalwareHunting/tca-0320"
|
79 | 95 | ]
|
80 | 96 | },
|
81 | 97 | {
|
82 | 98 | "cell_type": "code",
|
83 |
| - "execution_count": 3, |
| 99 | + "execution_count": 10, |
84 | 100 | "id": "791783de",
|
85 |
| - "metadata": {}, |
| 101 | + "metadata": { |
| 102 | + "ExecuteTime": { |
| 103 | + "end_time": "2025-09-30T22:38:25.551755262Z", |
| 104 | + "start_time": "2025-09-30T22:38:25.511153908Z" |
| 105 | + } |
| 106 | + }, |
86 | 107 | "outputs": [],
|
87 | 108 | "source": [
|
88 | 109 | "QUERY_STRING = 'firstseen:[2025-02-20T00:00:00Z TO *] classification:[malicious, suspicious] filetype:EXE uri:\"https://api.telegram.org/bot*\" size:[0 TO *]'\n",
|
|
102 | 123 | },
|
103 | 124 | {
|
104 | 125 | "cell_type": "code",
|
105 |
| - "execution_count": 4, |
| 126 | + "execution_count": 11, |
106 | 127 | "id": "dbdf8739",
|
107 |
| - "metadata": {}, |
| 128 | + "metadata": { |
| 129 | + "ExecuteTime": { |
| 130 | + "end_time": "2025-09-30T22:38:28.047287138Z", |
| 131 | + "start_time": "2025-09-30T22:38:28.035230497Z" |
| 132 | + } |
| 133 | + }, |
108 | 134 | "outputs": [],
|
109 | 135 | "source": [
|
110 | 136 | "\n",
|
|
130 | 156 | },
|
131 | 157 | {
|
132 | 158 | "cell_type": "code",
|
133 |
| - "execution_count": 5, |
| 159 | + "execution_count": 12, |
134 | 160 | "id": "067c7c95",
|
135 |
| - "metadata": {}, |
| 161 | + "metadata": { |
| 162 | + "ExecuteTime": { |
| 163 | + "end_time": "2025-09-30T22:38:30.576112670Z", |
| 164 | + "start_time": "2025-09-30T22:38:30.567537234Z" |
| 165 | + } |
| 166 | + }, |
136 | 167 | "outputs": [],
|
137 | 168 | "source": [
|
138 | 169 | "def recursive_search_for_urls(obj, prefix):\n",
|
|
179 | 210 | " query_string = QUERY_STRING\n",
|
180 | 211 | " url_prefix = extract_url_prefix_from_string_query(query_string)\n",
|
181 | 212 | " \n",
|
182 |
| - " search_client = AdvancedSearch(\n", |
183 |
| - " host=SERVER,\n", |
184 |
| - " username=USERNAME,\n", |
185 |
| - " password=PASSWORD,\n", |
186 |
| - " verify=True,\n", |
187 |
| - " proxies=None,\n", |
188 |
| - " user_agent=\"USER_AGENT\",\n", |
189 |
| - " allow_none_return=False\n", |
190 |
| - " )\n", |
| 213 | + " search_client = AdvancedSearch(**config)\n", |
191 | 214 | "\n",
|
192 | 215 | " try:\n",
|
193 | 216 | " results = search_client.search_aggregated(\n",
|
|
206 | 229 | " print(\"No samples found.\")\n",
|
207 | 230 | " return\n",
|
208 | 231 | "\n",
|
209 |
| - " actions = AdvancedActions(\n", |
210 |
| - " host=SERVER,\n", |
211 |
| - " username=USERNAME,\n", |
212 |
| - " password=PASSWORD,\n", |
213 |
| - " verify=True,\n", |
214 |
| - " proxies=None,\n", |
215 |
| - " user_agent=\"USER_AGENT\",\n", |
216 |
| - " allow_none_return=False\n", |
217 |
| - " )\n", |
| 232 | + " actions = AdvancedActions(**config)\n", |
218 | 233 | "\n",
|
219 | 234 | " minimal_results = []\n",
|
220 | 235 | " enrichment_success_count = 0\n",
|
|
0 commit comments