{"id":2981,"date":"2025-10-24T13:35:31","date_gmt":"2025-10-24T11:35:31","guid":{"rendered":"https:\/\/lab52.io\/blog\/?p=2981"},"modified":"2026-03-01T17:21:53","modified_gmt":"2026-03-01T16:21:53","slug":"dreamloaders","status":"publish","type":"post","link":"https:\/\/lab52.io\/blog\/dreamloaders\/","title":{"rendered":"From Dream Job to Malware: DreamLoaders in Lazarus\u2019 Recent Campaign"},"content":{"rendered":"\n<p>During August 2025, Lab52 gained access to artifacts linked to Lazarus through DreamJob campaigns. Some of these artifacts and their operational details were recently highlighted by <a href=\"https:\/\/www.welivesecurity.com\/en\/eset-research\/gotta-fly-lazarus-targets-uav-sector\/\">ESET (e.g., <em>radcui.dll<\/em>, <em>HideFirstLetter.dll<\/em>)<\/a>.<br>From our perspective, one of the most notable aspects of this campaign is the use of various types of loaders \u2014 components capable of deploying different payloads depending on the actors\u2019 needs.<br>These loaders are used in the DreamJob campaign, but we believe they could also appear in other operations. For us, they truly are <em><strong>dream loaders<\/strong><\/em>.<br>The operational flow observed by our team is shown in the following diagram.<\/p>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"601\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/DREAMLOADERS-1024x601.png\" alt=\"\" class=\"wp-image-3148\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/DREAMLOADERS-1024x601.png 1024w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/DREAMLOADERS-300x176.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/DREAMLOADERS-768x451.png 768w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/DREAMLOADERS.png 1345w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p class=\"has-text-align-left\">In this article, we describe the relationship between these artifacts and also detail the characteristics of <strong>TSVIPSrv.dll<\/strong>, a loader used by the group in the analyzed case.<\/p>\n\n\n\n<p class=\"has-text-align-left\"><br>During the investigation, two deployment methods were observed, one of them involving the use of <strong>legitimate system executables<\/strong> to load the various loaders through <strong>DLL sideloading<\/strong>.<br>Given the diversity of loading mechanisms and their connection to the <strong>DreamJobs<\/strong> campaigns, we internally coined the term <strong>\u201cDreamLoaders\u201d<\/strong> to refer to this type of loader.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Findings summary<\/h1>\n\n\n\n<p>As in other <strong>DreamJob<\/strong> cases, the attackers\u2014in this case, the <strong>Lazarus<\/strong> group\u2014aim for administrators of the targeted organizations to execute malware in order to extract credentials or other types of information, which are later used to gain access and perform further actions on the compromised systems.<\/p>\n\n\n\n<p>The analyzed case is particularly interesting because <strong>three deployment variants of the same loader<\/strong> were observed, which is the focus of this report.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Tnsviewer.exe<\/strong><\/h2>\n\n\n\n<p>A trojanized version of the TightVNC client, distributed inside a <strong>password-protected ZIP file<\/strong> along with a README.txt file containing instructions about the IP address the victim (i.e., the administrator) should connect to.<\/p>\n\n\n\n<p>This <a href=\"https:\/\/www.virustotal.com\/gui\/file\/aefc12b500b58fbc09ebbf34fe64b34cb32a27513478f4769447280ad23af4d2\">binary was already available on VirusTotal<\/a> at the start of the analysis. Behavioral data, contacted domains, and a memory dump of the process (executed via sandbox) were collected. This allowed analysts to retrieve a payload whose structure and characteristics are very similar to another identified artifact: <strong>TSVIPSrv.dll<\/strong>.<\/p>\n\n\n\n<p>Executing this artifact creates registry keys used by TightVNC and triggers the malware\u2019s operation, which is equivalent to the functionality of the <strong>HideFirstLetter.dll<\/strong> artifact described below.<\/p>\n\n\n\n<p>It is designed as a <strong>decoy<\/strong>, intended to be executed by an administrator.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Webservices.dll and radcui.dll<\/strong><\/h2>\n\n\n\n<p>Webservices.dll and radcui.dll were identified on compromised user systems. They are <strong>equivalent DLL loaders<\/strong> that are executed through <strong>DLL sideloading<\/strong>, using the legitimate binaries <strong>wkspbroker.exe<\/strong> and <strong>wksprt.exe<\/strong> (copied beforehand from C:\\Windows\\System32) and a password following a <strong>SID-like pattern<\/strong>, likely to blend in.<\/p>\n\n\n\n<p>These DLLs differ only in that each contains an <strong>encrypted payload<\/strong>, encoded in Base64 and decrypted using a different key (the SID-pattern argument passed at execution). Once decrypted and injected into memory, the payload is a DLL named <strong>HideFirstLetter.dll<\/strong>.<\/p>\n\n\n\n<p><strong>HideFirstLetter.dll<\/strong> performs the same malicious activity observed when executing tnsviewer.exe:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>It attempts to authenticate to the tenant using the legitimate Microsoft URL. https:\/\/login.microsoftonline.com\/common\/oauth2\/v2.0\/token, leveraging an access token embedded in the binary.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"812\" height=\"133\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/imagen.png\" alt=\"\" class=\"wp-image-3022\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/imagen.png 812w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/imagen-300x49.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/imagen-768x126.png 768w\" sizes=\"(max-width: 812px) 100vw, 812px\" \/><\/figure><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li>Then, it sends a request to the <strong>Microsoft Graph API<\/strong> to retrieve the URL of the compromised <strong>SharePoint<\/strong> server.<\/li>\n\n\n\n<li>Two Microsoft API URLs were found, although only one was reachable at the time of analysis.<\/li>\n\n\n\n<li>The returned value could serve as a key to decompress another payload, presumably obtained from the second URL. This hypothesis is based on the behavior of the other artifacts and their relationships\u2014particularly between the payload extracted from tnsviewer.exe and <strong>TSVIPSrv.dll<\/strong>.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"994\" height=\"238\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-1.png\" alt=\"\" class=\"wp-image-2994\" style=\"width:882px;height:auto\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-1.png 994w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-1-300x72.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-1-768x184.png 768w\" sizes=\"(max-width: 994px) 100vw, 994px\" \/><\/figure><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>TSVIPSrv.dll<\/strong> <\/h2>\n\n\n\n<p>TSVIPSrv.dll is a loader identified on compromised servers. It is a DLL that is executed via a <strong>malicious service created by the attackers<\/strong>, named <strong>sessionenv<\/strong>. It also relies on two additional files previously placed by the attackers\u2014<strong>wordpad.dll.mui<\/strong> and <strong>msinfo32.dll.mui<\/strong>\u2014which contain the payloads to be loaded. During the investigation, only <strong>wordpad.dll.mui <\/strong>was accessible.<\/p>\n\n\n\n<p>It includes two Base64-encoded resources: the first contains a password, and the second contains a file path to the next payload.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"240\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-7-1024x240.png\" alt=\"\" class=\"wp-image-3000\" style=\"width:620px;height:auto\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-7-1024x240.png 1024w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-7-300x70.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-7-768x180.png 768w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-7-1536x360.png 1536w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-7.png 1566w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"390\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-8-1024x390.png\" alt=\"\" class=\"wp-image-3001\" style=\"width:892px;height:auto\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-8-1024x390.png 1024w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-8-300x114.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-8-768x293.png 768w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-8.png 1420w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>It uses <strong>RC4<\/strong> to decrypt the file path (pointing to <strong>wordpad.dll.mui<\/strong>).<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"170\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-9-1024x170.png\" alt=\"\" class=\"wp-image-3002\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-9-1024x170.png 1024w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-9-300x50.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-9-768x128.png 768w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-9.png 1427w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>It then decrypts and loads the contents of <strong>wordpad.dll.mui<\/strong>, which is again a variant of <strong>TSVIPSrv.dll<\/strong> that performs the same actions: read its own resources (this time in a different order), decrypt them with RC4, access the file, and attempt to load it.<\/p>\n\n\n\n<p>Similarly, when this resource is decrypted, a path will be obtained that will load the following file into memory: <strong>C:\\Program Files\\Common Files\\Microsoft Shared\\MSInfo\\en-US\\msinfo32.dll.mui<\/strong>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"994\" height=\"111\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-10.png\" alt=\"\" class=\"wp-image-3003\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-10.png 994w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-10-300x34.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-10-768x86.png 768w\" sizes=\"(max-width: 994px) 100vw, 994px\" \/><\/figure><\/div>\n\n\n<p>An important detail is that TSVIPSrv.dll, can be used to load different modular payloads, since <strong>the content is independent and stored in other files (the .mui files)<\/strong>. Therefore, it is significant that, for the two DLLs found on two different machines, the collected .mui files are identical. This implies that the same payload was deployed on both machines.<\/p>\n\n\n\n<p>So, TSVIPSrv.dll decrypts the file wordpad.dll.mui, which in turn is another DLL very similar to TSVIPSrv.dll. A comparison between that DLL once decrypted and the payload of tnsviewer.exe shows an 85% code similarity, suggesting that the final DLL might be even more similar.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"524\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-11-1024x524.png\" alt=\"\" class=\"wp-image-3004\" style=\"width:552px;height:auto\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-11-1024x524.png 1024w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-11-300x153.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-11-768x393.png 768w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-11.png 1083w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"881\" height=\"375\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-12.png\" alt=\"\" class=\"wp-image-3005\" style=\"width:558px;height:auto\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-12.png 881w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-12-300x128.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/image-12-768x327.png 768w\" sizes=\"(max-width: 881px) 100vw, 881px\" \/><\/figure><\/div>\n\n\n<h1 class=\"wp-block-heading\">Conclusion<\/h1>\n\n\n\n<p>The investigation into Lazarus group\u2019s DreamJobs campaign reveals a sophisticated and modular malware deployment strategy, leveraging legitimate system binaries and encrypted payloads to evade detection. Through the analysis of artifacts like TSVIPSrv.dll, HideFirstLetter.dll, and trojanized tools such as tnsviewer.exe, it is possible to see a high degree of code reuse and stealthy sideloading techniques. The presence of identical payloads across different systems is part of a coordinated and targeted effort.<\/p>\n\n\n\n<p>This case underscores a critical lesson: attackers continuously refine their methods, often hiding in plain sight by mimicking legitimate processes. Therefore, vigilance, proactive threat hunting, and deep technical analysis remain essential in defending against advanced persistent threats.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">IOC<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Files<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Name<\/strong><\/td><td><strong>Hash sha256<\/strong><\/td><\/tr><tr><td>tnviewer.exe<\/td><td>aefc12b500b58fbc09ebbf34fe64b34cb32a27513478f4769447280ad23af4d2 0fdd97a597380498f6b2d491f8f50da8f903def4ea6e624b89757456c287f92d<\/td><\/tr><tr><td>radcui.dll<\/td><td>fa014db2936da21af5943cc8f3656adb9800173ad86af196f71c6052295fff97<\/td><\/tr><tr><td>webservices.dll<\/td><td>26bd4aab63563e77ca426c23b11d18d894eef9a727e111be79336e099b22bdd1<\/td><\/tr><tr><td>TSVIPSrv.dll<\/td><td>473726dd9bc034564c4c7b951df12d102ff24f7b17b8356f55d36ed6d908882d&nbsp;&nbsp;&nbsp;<\/td><\/tr><tr><td>wordpad.dll.mui<\/td><td>b3d7a3c3dedaa873e81b1676b6c0027ae1fd164587299bf65c02bd067ae1a972<\/td><\/tr><tr><td>wordpad.dll.mui  decyphered (only in memory)<\/td><td>855baa2ff0c3e958a660ae84a048ce006e07cf51ce5192c0de364ee62873980c<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Comunications<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Artifact name<\/strong><\/td><td><strong>Domain<\/strong><\/td><\/tr><tr><td>tnviewer.exe<\/td><td>alex2moe-my.sharepoint[.com coralsunmarine[.com<\/td><\/tr><tr><td>HideFirstLetter.exe<\/td><td>cseabrahamlincoln-my[.sharepoint.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/td><\/tr><\/tbody><\/table><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>During August 2025, Lab52 gained access to artifacts linked to Lazarus through DreamJob campaigns. Some of these artifacts and their operational details were recently highlighted by ESET (e.g., radcui.dll, HideFirstLetter.dll).From our perspective, one of the most notable aspects of this campaign is the use of various types of loaders \u2014 components capable of deploying different [&hellip;]<\/p>\n","protected":false},"author":31,"featured_media":3020,"comment_status":"closed","ping_status":"closed","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":[21],"tags":[86,85],"class_list":{"0":"post-2981","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-apt","8":"tag-dreamloader","9":"tag-lazarus","10":"entry"},"featured_image_src":"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/lobo-600x400.jpg","featured_image_src_square":"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2025\/10\/lobo-600x600.jpg","author_info":{"display_name":"10ba","author_link":"https:\/\/lab52.io\/blog\/author\/10ba\/"},"_links":{"self":[{"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/posts\/2981"}],"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\/31"}],"replies":[{"embeddable":true,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/comments?post=2981"}],"version-history":[{"count":18,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/posts\/2981\/revisions"}],"predecessor-version":[{"id":3149,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/posts\/2981\/revisions\/3149"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/media\/3020"}],"wp:attachment":[{"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/media?parent=2981"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/categories?post=2981"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/tags?post=2981"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}