{"id":2023,"date":"2023-05-22T07:10:00","date_gmt":"2023-05-22T05:10:00","guid":{"rendered":"https:\/\/lab52.io\/blog\/?p=2023"},"modified":"2023-05-22T14:25:41","modified_gmt":"2023-05-22T12:25:41","slug":"2023-2","status":"publish","type":"post","link":"https:\/\/lab52.io\/blog\/2023-2\/","title":{"rendered":"GuLoader as the Gatekeeper of AgentTesla: A Comprehensive Analysis"},"content":{"rendered":"\n<p>The malware team at Lab52 has a saying that our colleages know well: &#8220;We want your malware&#8221;. On this occasion, the Theat Intelligence team gifted us a file that appeared to be a dropper. The file was already flagged by 15 antivirus engines on VirusTotal as malicious. <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"994\" height=\"529\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f1-1.png\" alt=\"\" class=\"wp-image-2024\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f1-1.png 994w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f1-1-300x160.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f1-1-768x409.png 768w\" sizes=\"(max-width: 994px) 100vw, 994px\" \/><figcaption>Target file in VirusTotal<\/figcaption><\/figure><\/div>\n\n\n\n<p>Among the open files, the results of specific calls to Powershell.exe are displayed.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"508\" height=\"141\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f2-1.png\" alt=\"\" class=\"wp-image-2025\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f2-1.png 508w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f2-1-300x83.png 300w\" sizes=\"(max-width: 508px) 100vw, 508px\" \/><figcaption>VirusTotal information from the sandboxes<\/figcaption><\/figure><\/div>\n\n\n\n<p>Due to its context, it could be interesting to investigate it further, so we eagerly began analyzing it with a curious mindset.<\/p>\n\n\n\n<p>This post provides a comprehensive analysis of the GuLoader malware, its role as a gatekeeper for the notorious AgentTesla stealer, and the entire infection process from start to finish. GuLoader employs sophisticated anti-analysis techniques, which pose challenges to researchers. However, through diligent analysis, the stages leading to the final payload, AgentTesla, are uncovered. While the initial sample is publicly accessible, the subsequent artifacts used to trigger different stages remain elusive in public sources.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"744\" height=\"326\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/attack_chain.png\" alt=\"\" class=\"wp-image-2155\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/attack_chain.png 744w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/attack_chain-300x131.png 300w\" sizes=\"(max-width: 744px) 100vw, 744px\" \/><figcaption>Attack chain analysed in this post<\/figcaption><\/figure><\/div>\n\n\n\n<h1 class=\"wp-block-heading\">First checks on the initial script<\/h1>\n\n\n\n<p>The original name of the .vbs file is &#8220;Hitni zahtjev za prijedlog za programski ured Vijeca Europe u Skoplju 26.04.2023&#8221;, meaning &#8220;<strong>Urgent request for proposal for the program office of the Council of Europe in Skopje 26.04.2023<\/strong>&#8220;. <\/p>\n\n\n\n<p>The code consists of nearly 900 lines, including comments scattered throughout. The first noticeable element in the script is a variable named &#8220;Hent,&#8221; which corresponds to &#8220;<strong>WScript.Shell<\/strong>&#8221; This suggests that the variable may be invoked later for code execution purposes.<\/p>\n\n\n\n<p>Throughout the script, there is repeated concatenation of new strings to the variable V8. <strong>This technique can be employed to make the task of the analyzing analyst more challenging<\/strong>.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"544\" height=\"584\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f3-1.png\" alt=\"\" class=\"wp-image-2029\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f3-1.png 544w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f3-1-279x300.png 279w\" sizes=\"(max-width: 544px) 100vw, 544px\" \/><figcaption>WScript.Shell<\/figcaption><\/figure><\/div>\n\n\n\n<p>When searching through the document for the variable name &#8220;Hent,&#8221; a match is found on line <strong>666<\/strong> &#8211; the number of the beast. In this line, an assignment to the variable &#8220;Foret&#8221; is observed, which, like &#8220;Hent,&#8221; is equivalent to &#8220;WScript.Shell&#8221;<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"319\" height=\"56\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f4-1.png\" alt=\"\" class=\"wp-image-2030\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f4-1.png 319w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f4-1-300x53.png 300w\" sizes=\"(max-width: 319px) 100vw, 319px\" \/><figcaption>Foret<\/figcaption><\/figure><\/div>\n\n\n\n<p>After this, the variable &#8220;Teleg&#8221; is found, in which the concatenated string &#8220;powershell&#8221; is observed followed by the variable &#8220;V8&#8221; enclosed in quotes.<\/p>\n\n\n\n<p>Following that, the variable &#8220;Foret&#8221; is present, which will execute the content of the variable &#8220;Teleg&#8221;.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"563\" height=\"156\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f5-1.png\" alt=\"\" class=\"wp-image-2032\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f5-1.png 563w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f5-1-300x83.png 300w\" sizes=\"(max-width: 563px) 100vw, 563px\" \/><figcaption>Teleg assignation<\/figcaption><\/figure><\/div>\n\n\n\n<p>Therefore, it is expected that the script will execute PowerShell commands, which aligns with the preliminary information from VirusTotal.<\/p>\n\n\n\n<p>At the end of the code, there is a signature that has also been used to search for related files in VirusTotal. However, in this case, nothing notable has been found that would expedite this analysis. This means that there is manual analysis work to be done.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Stage 1 &#8211; Downloader<\/h1>\n\n\n\n<p>When double-clicking on the &#8220;Hitni zahtjev za prijedlog za programski ured Vijeca Europe u Skoplju 26.04.2023.vbs&#8221; file, a &#8220;wscript&#8221; process is launched, which ultimately executes &#8220;powershell.exe&#8221;.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"601\" height=\"314\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f10-1.png\" alt=\"\" class=\"wp-image-2039\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f10-1.png 601w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f10-1-300x157.png 300w\" sizes=\"(max-width: 601px) 100vw, 601px\" \/><figcaption>Script powershell (ProcessHacker)<\/figcaption><\/figure><\/div>\n\n\n\n<p>In order to make the code more readable, it has been formatted into a separate document. Upon observing the code, an evident alteration of the strings can be noticed. The &#8220;Regent9&#8221; function will be responsible for converting the strings, making them readable.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"480\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f11-1-1024x480.png\" alt=\"\" class=\"wp-image-2040\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f11-1-1024x480.png 1024w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f11-1-300x141.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f11-1-768x360.png 768w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f11-1-1536x720.png 1536w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f11-1.png 1624w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>Regent9<\/figcaption><\/figure><\/div>\n\n\n\n<p>Starting from the first variable &#8220;Pluvine,&#8221; the resulting string is a URL.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"850\" height=\"74\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f12.png\" alt=\"\" class=\"wp-image-2041\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f12.png 850w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f12-300x26.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f12-768x67.png 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><figcaption>Pluvine variable and URL<\/figcaption><\/figure><\/div>\n\n\n\n<p>A successful download of the file referenced in the URL has been completed. <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"729\" height=\"366\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f13.png\" alt=\"\" class=\"wp-image-2042\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f13.png 729w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f13-300x151.png 300w\" sizes=\"(max-width: 729px) 100vw, 729px\" \/><figcaption>Downloading Genicula.prm<\/figcaption><\/figure><\/div>\n\n\n\n<p>The domain melsicon.com (195.191.148.219) is a legitimate domain created 12 years ago, which does not have visible history of being used by malware in utilities such as VirusTotal, at the time of creating this post. When reviewing the content of the downloaded file, it is observed that it is encoded in base64.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"729\" height=\"343\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f14-1.png\" alt=\"\" class=\"wp-image-2044\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f14-1.png 729w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f14-1-300x141.png 300w\" sizes=\"(max-width: 729px) 100vw, 729px\" \/><figcaption>Genicula.prm<\/figcaption><\/figure><\/div>\n\n\n\n<p>The downloaded file remains the same across different executions and maintains the same hash, therefore, it can be considered as an Indicator of Compromise (IOC).<\/p>\n\n\n\n<figure class=\"wp-block-table aligncenter\"><table><thead><tr><th class=\"has-text-align-center\" data-align=\"center\">Name<\/th><th class=\"has-text-align-center\" data-align=\"center\">Hash(256)<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Genicula.prm<\/td><td class=\"has-text-align-center\" data-align=\"center\">3f0a012d75144686917f5a1ac151b03894c662783c2b9ed4867c02d39e682545<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>However, the execution does not continue, and a typical message representative of anti-analysis techniques is displayed.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"466\" height=\"155\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f7-1.png\" alt=\"\" class=\"wp-image-2034\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f7-1.png 466w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f7-1-300x100.png 300w\" sizes=\"(max-width: 466px) 100vw, 466px\" \/><figcaption>Message displayed during the execution<\/figcaption><\/figure><\/div>\n\n\n\n<p>This type of message has been seen, for example, with <a href=\"https:\/\/elis531989.medium.com\/dancing-with-shellcodes-cracking-the-latest-version-of-guloader-75083fb15cb4\">GuLoader malware<\/a>. If that is the case, it&#8217;s important to note that such malware often employs sophisticated anti-analysis techniques that are challenging to overcome.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Stage 2 &#8211; Deployment<\/h1>\n\n\n\n<p>Once &#8220;Genicula.prm&#8221; is decoded, it can be analyzed in more detail in an attempt to understand it and allow the malware to proceed with its execution. Indeed, as part of the script, a new PowerShell script is detected. There are numerous comments and a function that appears to be responsible for decrypting the strings.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"824\" height=\"461\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f18.png\" alt=\"\" class=\"wp-image-2045\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f18.png 824w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f18-300x168.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f18-768x430.png 768w\" sizes=\"(max-width: 824px) 100vw, 824px\" \/><figcaption>Script powershell<\/figcaption><\/figure><\/div>\n\n\n\n<p>As seen in the previous capture, <strong>the function &#8220;Udskressv02&#8221; is responsible for decrypting strings<\/strong> included in the download itself, being invoked a total of 45 times throughout the execution. All the decrypted strings have been extracted:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1020\" height=\"274\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f19.png\" alt=\"\" class=\"wp-image-2047\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f19.png 1020w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f19-300x81.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f19-768x206.png 768w\" sizes=\"(max-width: 1020px) 100vw, 1020px\" \/><figcaption>Decrypted strings<\/figcaption><\/figure><\/div>\n\n\n\n<p>Among the strings, references to variables already present in the script can be found. The lines that stand out the most are the last ones, where copy operations can be observed, as well as the use of &#8220;Invoke&#8221; to execute commands.<\/p>\n\n\n\n<p>The variable &#8220;Conjuga&#8221; will load the VirtualAlloc function, which will be used to store the handle of the memory stored in the variables &#8220;Minefa3&#8221; and &#8220;Maudlinlyh&#8221;. The sections will have write, read, and execute permissions.<\/p>\n\n\n\n<p>Following this, there are two copy operations from the variable &#8220;Tsarit&#8221;. This last was part of the first PowerShell script as one of the encrypted strings. The content of &#8220;Tsarit&#8221; represents the second stage, already converted from base64.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"536\" height=\"62\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f21.png\" alt=\"\" class=\"wp-image-2048\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f21.png 536w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f21-300x35.png 300w\" sizes=\"(max-width: 536px) 100vw, 536px\" \/><figcaption>Tsarit assignation<\/figcaption><\/figure><\/div>\n\n\n\n<p>Following the execution, it is possible to determine that it will copy the following bytes to the following variables:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>&#8220;Minefa3&#8221;: The first 665 bytes of the second stage.<\/li><li>&#8220;Maudlinlyh&#8221;: Starting from byte 665, it will copy the next 192528 bytes.<\/li><\/ul>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"756\" height=\"63\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f22.png\" alt=\"\" class=\"wp-image-2049\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f22.png 756w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f22-300x25.png 300w\" sizes=\"(max-width: 756px) 100vw, 756px\" \/><figcaption>Bytes copied<\/figcaption><\/figure><\/div>\n\n\n\n<p>Afterward, the variable &#8220;Anthemi&#8221; will be invoked, which corresponds to <strong>CallWindowProcA<\/strong>, taking as parameters the variables assigned earlier, and the variable &#8220;Signasvrm,&#8221; which corresponds to the native function <strong>NtProtectVirtualMemory<\/strong>.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"489\" height=\"50\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f23.png\" alt=\"\" class=\"wp-image-2051\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f23.png 489w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f23-300x31.png 300w\" sizes=\"(max-width: 489px) 100vw, 489px\" \/><figcaption>Final execution<\/figcaption><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"898\" height=\"760\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f24.png\" alt=\"\" class=\"wp-image-2052\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f24.png 898w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f24-300x254.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f24-768x650.png 768w\" sizes=\"(max-width: 898px) 100vw, 898px\" \/><figcaption>Parameter $Maudlinlyh loaded into the memory of a PowerShell process<\/figcaption><\/figure><\/div>\n\n\n\n<p>The parameter <strong>$Minefa3<\/strong> will contain the shellcode that initiates stage 3.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Stage3 &#8211; GuLoader shellcodes<\/h1>\n\n\n\n<p>This phase consists of two shellcodes. The first one, corresponding to $Minefa3, serves as a &#8220;trampoline&#8221; and is <strong>responsible for decrypting various sections of the second shellcode and obtaining the entry point<\/strong>. <\/p>\n\n\n\n<p>The second shellcode exhibits characteristics associated with <strong>GuLoader execution<\/strong>. As an anti-analysis technique, both shellcodes employ jumps to <strong>unaligned bytes<\/strong>.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"604\" height=\"38\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f25.png\" alt=\"\" class=\"wp-image-2055\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f25.png 604w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f25-300x19.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f25-600x38.png 600w\" sizes=\"(max-width: 604px) 100vw, 604px\" \/><figcaption>Example of jmp to unaligned instructions in memory<\/figcaption><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">$Minefa: preparing the second shellcode<\/h2>\n\n\n\n<p>As mentioned, it is observed that the first shellcode, referred to as $Minefa3, is used to decrypt sections of the second shellcode and obtain its entry point. In the end, the first shellcode will jump to the offset 0381E336 of the second shellcode. <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"725\" height=\"166\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f26.png\" alt=\"\" class=\"wp-image-2060\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f26.png 725w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f26-300x69.png 300w\" sizes=\"(max-width: 725px) 100vw, 725px\" \/><figcaption>Entry point shellcode2<\/figcaption><\/figure><\/div>\n\n\n\n<p>Neither of the shellcodes is found on VirusTotal at the time of conducting this analysis.<\/p>\n\n\n\n<figure class=\"wp-block-table aligncenter\"><table><thead><tr><th class=\"has-text-align-center\" data-align=\"center\">Name<\/th><th class=\"has-text-align-center\" data-align=\"center\">Hash(256)<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">$Minefa3<\/td><td class=\"has-text-align-center\" data-align=\"center\">f724e9ded6f84e572248f4a51bff05d5ea53f8cab3a93db5cdc1455f3d1100b7<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Shellcode2<\/td><td class=\"has-text-align-center\" data-align=\"center\">1CC9F1BCE50563E8FCD2A4B77CD53A7AF3CB0B69CA51D33DD2DF70599B3DF46A<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>In the end, the first shellcode will jump to the offset 0381E336 of the second shellcode. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Shellcode2 &#8211; Anti-analysis techniques<\/h2>\n\n\n\n<p>Is not the first time that we have to talk about anti-analysis techniques and for sure it will be not the last one. Once inside the second shellcode, <strong>characteristics closely related to the Guloader malware are identified<\/strong>. This malware employs several anti-analysis techniques that have been described in other reports. Some of the anti-analysis techniques used by GuLoader are so complex that some researchers focus solely on dissecting one or a subset of them. Some are listed bellow. A complete list can be found in <a href=\"https:\/\/www.crowdstrike.com\/blog\/guloader-dissection-reveals-new-anti-analysis-techniques-and-code-injection-redundancy\/\">the following article.<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Vectored Exception Handler<\/h3>\n\n\n\n<p>To slow down the analysis, the malware utilizes the VEH (Vectored Exception Handler) technique. This method is used by malware to <strong>hinder the debugging and analysis process<\/strong>. It involves setting up a custom exception handler that intercepts specific types of exceptions, such as breakpoints or access violations, before they are handled by the operating system&#8217;s default exception handling mechanism.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"606\" height=\"179\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f27.png\" alt=\"\" class=\"wp-image-2063\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f27.png 606w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f27-300x89.png 300w\" sizes=\"(max-width: 606px) 100vw, 606px\" \/><figcaption>Breakpoints that gnerate exceptions when debugging<\/figcaption><\/figure><\/div>\n\n\n\n<p>When a debugger tries to set a breakpoint or debug the code, the malware detects the exception generated by the debugger and triggers its custom exception handler. This allows the malware to control the exception handling process and potentially alter the flow of execution, making it difficult for the debugger to accurately trace and analyze the malware&#8217;s behavior.<\/p>\n\n\n\n<p>By utilizing VEH, malware can effectively evade or delay analysis attempts, as it can detect and react to debugging activities, making it more challenging for analysts to analyze the malicious code and understand its behavior.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Anti-brute force<\/h3>\n\n\n\n<p>To decrypt the strings within the binary, the shellcode utilizes XOR encryption.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"313\" height=\"474\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f29.png\" alt=\"\" class=\"wp-image-2074\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f29.png 313w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f29-198x300.png 198w\" sizes=\"(max-width: 313px) 100vw, 313px\" \/><figcaption>Routine responsible for decrypting the strings<\/figcaption><\/figure><\/div>\n\n\n\n<p>The encrypted strings are placed in different memory sections. In some reports, brute-force techniques are suggested to obtain the strings. However, <strong>the sample being analysed in this post uses takes anti-brute force precautions<\/strong>: the encrypted strings are constructed using simple operations such as addition, subtraction, or XOR logical operation.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"561\" height=\"179\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f30.png\" alt=\"\" class=\"wp-image-2076\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f30.png 561w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f30-300x96.png 300w\" sizes=\"(max-width: 561px) 100vw, 561px\" \/><figcaption>Creation of encrypted strings using simple operations<\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Anti-VM checks<\/h3>\n\n\n\n<p>The malware utilizes the instructions &#8220;rdtsc&#8221; and &#8220;cpuid&#8221; to check if it is running on a virtual machine.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"553\" height=\"174\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f31.png\" alt=\"\" class=\"wp-image-2078\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f31.png 553w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f31-300x94.png 300w\" sizes=\"(max-width: 553px) 100vw, 553px\" \/><figcaption>rdtsc and cpuid instructions<\/figcaption><\/figure><\/div>\n\n\n\n<p>The &#8220;rdtsc&#8221; (Read Time Stamp Counter) instruction is used to read the CPU&#8217;s time stamp counter. In a virtualized environment, the behavior of this instruction may be different compared to a physical machine, allowing the malware to detect virtualization.<\/p>\n\n\n\n<p>The &#8220;cpuid&#8221; instruction is used to obtain information about the processor, such as the manufacturer, processor family, and supported features. By checking certain values returned by the &#8220;cpuid&#8221; instruction, the malware can identify if it is running on a virtual machine.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"584\" height=\"78\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f32.png\" alt=\"\" class=\"wp-image-2081\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f32.png 584w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f32-300x40.png 300w\" sizes=\"(max-width: 584px) 100vw, 584px\" \/><figcaption>Code responsible for overwriting the shellcode<\/figcaption><\/figure><\/div>\n\n\n\n<p>If it is detected that it is running on a virtual machine, part of the shellcode is overwritten by writing zeros. After this, the typical message &#8220;This program cannot be run under virtual environment or debugging software!&#8221; is shown and the execution stops.<\/p>\n\n\n\n<p>However, if it is not detected, the malware will use the function EnumWindow in order to check if the number of windows is <strong>greater than than 12<\/strong>. In other case, the execution is halted.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"285\" height=\"99\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f34.png\" alt=\"\" class=\"wp-image-2084\"\/><figcaption>EnumWindows<\/figcaption><\/figure><\/div>\n\n\n\n<p>It will also use the functions EnumDeviceDrivers and GetDeviceDriverBaseName to obtain the names of the drivers installed on the system, and the functions OpenScManagerA and EnumServicesStatusA to search for services related to virtual machines.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"368\" height=\"99\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f35.png\" alt=\"\" class=\"wp-image-2086\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f35.png 368w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f35-300x81.png 300w\" sizes=\"(max-width: 368px) 100vw, 368px\" \/><figcaption>GetDeviceDriverBaseNameA<\/figcaption><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"424\" height=\"99\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f36.png\" alt=\"\" class=\"wp-image-2087\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f36.png 424w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f36-300x70.png 300w\" sizes=\"(max-width: 424px) 100vw, 424px\" \/><figcaption>EumServiceStatusA<\/figcaption><\/figure><\/div>\n\n\n\n<p>As a summary, this malware uses the following anti-vm techniques:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>rdtsc and cpuid.<\/li><li>EnumWindow<\/li><li>List of drivers &#8211; EnumDeviceDrivers, GetDeviceDriverBaseName<\/li><li>Search for services related with virtual machines &#8211; OpenScManagerA, EnumServicesStatusA<\/li><\/ul>\n\n\n\n<p>If the malware analyst manages to overcome these obstacles, <strong>the shellcode will create the process &#8220;CasPol.exe&#8221; and inject another shellcode into it<\/strong>.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"601\" height=\"99\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f37.png\" alt=\"\" class=\"wp-image-2088\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f37.png 601w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f37-300x49.png 300w\" sizes=\"(max-width: 601px) 100vw, 601px\" \/><figcaption>capsol.exe<\/figcaption><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"438\" height=\"40\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f38.png\" alt=\"\" class=\"wp-image-2090\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f38.png 438w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f38-300x27.png 300w\" sizes=\"(max-width: 438px) 100vw, 438px\" \/><figcaption>CasPol.exe (ProcessHacker)<\/figcaption><\/figure><\/div>\n\n\n\n<p>Within this new process, the malware contacts the domain &#8220;melsicon&#8221; again, this time using the URL <strong>https:\/\/melsicon[.]com\/PUPWI75.bin<\/strong> to search for a new stage.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"395\" height=\"188\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f39.png\" alt=\"\" class=\"wp-image-2091\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f39.png 395w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/f39-300x143.png 300w\" sizes=\"(max-width: 395px) 100vw, 395px\" \/><figcaption>URL for download the new stage<\/figcaption><\/figure><\/div>\n\n\n\n<h1 class=\"wp-block-heading\">Stage4 &#8211; AgentTesla<\/h1>\n\n\n\n<p>The downloaded file corresponds to a ciphered binary, which we will refer to as PUPWI75.bin based on the name it is downloaded with.<\/p>\n\n\n\n<figure class=\"wp-block-table aligncenter\"><table><thead><tr><th class=\"has-text-align-center\" data-align=\"center\">Name<\/th><th class=\"has-text-align-center\" data-align=\"center\">Hash(256)<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">PUPWI75.bin<\/td><td class=\"has-text-align-center\" data-align=\"center\">7f6866693efe3ffa4e35433e180298daa5c11b94535625c6a243ba854e10c909<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>This file will be loaded into memory, decrypted and executed within the legitimate CasPol system process.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"647\" height=\"371\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/cff.png\" alt=\"\" class=\"wp-image-2093\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/cff.png 647w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/cff-300x172.png 300w\" sizes=\"(max-width: 647px) 100vw, 647px\" \/><figcaption>PUPWI75.bin (CFF Explorer)<\/figcaption><\/figure><\/div>\n\n\n\n<p>Once the binary is decrypted, the resulting executable exhibits distinct characteristics of <strong>AgentTesla<\/strong>. For example, two modules &#8220;a&#8221; and &#8220;A&#8221;, where the configuration is in A.b.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"236\" height=\"138\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/Image20230519120206.png\" alt=\"\" class=\"wp-image-2095\"\/><figcaption>Visualization of AgentTesla&#8217;s characteristic modules<\/figcaption><\/figure><\/div>\n\n\n\n<p>Moreover, the module has several classes of the same style observed in previous AgentTesla samples, responsible for decrypting the credentials of each program.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"548\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/image-8.png\" alt=\"\" class=\"wp-image-2097\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/image-8.png 778w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/image-8-300x211.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/image-8-768x541.png 768w\" sizes=\"(max-width: 778px) 100vw, 778px\" \/><figcaption>Example of  class responsible for decrypting the credentials of each program.<\/figcaption><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"548\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/image-9.png\" alt=\"\" class=\"wp-image-2098\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/image-9.png 778w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/image-9-300x211.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/image-9-768x541.png 768w\" sizes=\"(max-width: 778px) 100vw, 778px\" \/><figcaption>Configuration class<\/figcaption><\/figure><\/div>\n\n\n\n<p>And finally, the strings are decrypted using the <a href=\"https:\/\/github.com\/dr4k0nia\/XorStringsNET\">XORStrings tool by <strong>dr4k0nia<\/strong><\/a>, which is a characteristic of the new versions of AgentTesla.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"548\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/image-11.png\" alt=\"\" class=\"wp-image-2100\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/image-11.png 778w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/image-11-300x211.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/image-11-768x541.png 768w\" sizes=\"(max-width: 778px) 100vw, 778px\" \/><figcaption>Function in charge of decoding text strings<\/figcaption><\/figure><\/div>\n\n\n\n<p>As it is known, AgentTesla is a type of stealer malware. In this case, the malware exfiltrates data via FTP using the domain <strong>larrysteaks.com<\/strong>. <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"394\" height=\"89\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/Captura-desde-2023-05-19-11-56-59-1.png\" alt=\"\" class=\"wp-image-2147\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/Captura-desde-2023-05-19-11-56-59-1.png 394w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/Captura-desde-2023-05-19-11-56-59-1-300x68.png 300w\" sizes=\"(max-width: 394px) 100vw, 394px\" \/><figcaption>Exfiltration method<\/figcaption><\/figure><\/div>\n\n\n\n<p>So far, this domain has not been linked to malicious activity according to the sources consulted. <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"961\" height=\"647\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/image-13.png\" alt=\"\" class=\"wp-image-2102\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/image-13.png 961w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/image-13-300x202.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/image-13-768x517.png 768w\" sizes=\"(max-width: 961px) 100vw, 961px\" \/><figcaption>Information about larrysteaks.com in VirusTotal<\/figcaption><\/figure><\/div>\n\n\n\n<h1 class=\"wp-block-heading\">Conclusions<\/h1>\n\n\n\n<p>This post details the complete infection process starting from a VBS file received via email. The anti-analysis techniques used by GuLoader have made the analysis challenging, but once overcome, the analysis reaches the final stage where AgentTesla is downloaded. While the initial sample is public, the other artifacts that trigger the different stages have not been found in the publicly available sources consulted.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Summary of artifacts<\/h1>\n\n\n\n<figure class=\"wp-block-table aligncenter\"><table><thead><tr><th class=\"has-text-align-center\" data-align=\"center\">Name<\/th><th class=\"has-text-align-center\" data-align=\"center\">Hash(256)<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">infected.vbs<\/td><td class=\"has-text-align-center\" data-align=\"center\">6c2a68a45a4c25c8058bd440e86e4a36e730cfd1e1844f4083a334d901fb3b5d<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Genicula.prm<\/td><td class=\"has-text-align-center\" data-align=\"center\">3f0a012d75144686917f5a1ac151b03894c662783c2b9ed4867c02d39e682545<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">$Minefa3<\/td><td class=\"has-text-align-center\" data-align=\"center\">f724e9ded6f84e572248f4a51bff05d5ea53f8cab3a93db5cdc1455f3d1100b7<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Shellcode2<\/td><td class=\"has-text-align-center\" data-align=\"center\">1CC9F1BCE50563E8FCD2A4B77CD53A7AF3CB0B69CA51D33DD2DF70599B3DF46A<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">PUPWI75.bin<\/td><td class=\"has-text-align-center\" data-align=\"center\">7f6866693efe3ffa4e35433e180298daa5c11b94535625c6a243ba854e10c909<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">Summary of Indicators of Compromise (IOCs)<\/h1>\n\n\n\n<figure class=\"wp-block-table aligncenter\"><table><thead><tr><th class=\"has-text-align-center\" data-align=\"center\">IOC<\/th><th class=\"has-text-align-center\" data-align=\"center\">Description<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">hxxps:\/\/melsicon[.]com\/Genicula.prm<\/td><td class=\"has-text-align-center\" data-align=\"center\">Downloads GuLoader binary<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">hxxps:\/\/melsicon[.]com\/PUPWI75.bin<\/td><td class=\"has-text-align-center\" data-align=\"center\">Downloads AgentTesla binary<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">ftp:\/\/ftp.larrysteaks.com<\/td><td class=\"has-text-align-center\" data-align=\"center\">AgentTesla &#8211; exfiltration method<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The malware team at Lab52 has a saying that our colleages know well: &#8220;We want your malware&#8221;. On this occasion, the Theat Intelligence team gifted us a file that appeared to be a dropper. The file was already flagged by 15 antivirus engines on VirusTotal as malicious. Among the open files, the results of specific [&hellip;]<\/p>\n","protected":false},"author":28,"featured_media":2140,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[1],"tags":[65,64],"class_list":{"0":"post-2023","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-uncategorised","8":"tag-agenttesla","9":"tag-guloader","10":"entry"},"featured_image_src":"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/Image20230519150317-600x400.jpg","featured_image_src_square":"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2023\/05\/Image20230519150317-600x600.jpg","author_info":{"display_name":"3722304989","author_link":"https:\/\/lab52.io\/blog\/author\/3722304989\/"},"_links":{"self":[{"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/posts\/2023"}],"collection":[{"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/comments?post=2023"}],"version-history":[{"count":48,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/posts\/2023\/revisions"}],"predecessor-version":[{"id":2160,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/posts\/2023\/revisions\/2160"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/media\/2140"}],"wp:attachment":[{"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/media?parent=2023"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/categories?post=2023"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/tags?post=2023"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}