<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>vshell on Himanshu Anand :: Security &amp; Other Notes</title>
    <link>https://blog.himanshuanand.com/tags/vshell/</link>
    <description>Recent content in vshell on Himanshu Anand :: Security &amp; Other Notes</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 27 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.himanshuanand.com/tags/vshell/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>a fake resume invoked China&#39;s defence-tech elite, then installed VShell</title>
      <link>https://blog.himanshuanand.com/2026/08/a-fake-resume-invoked-chinas-defence-tech-elite-then-installed-vshell/</link>
      <pubDate>Thu, 27 Aug 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blog.himanshuanand.com/2026/08/a-fake-resume-invoked-chinas-defence-tech-elite-then-installed-vshell/</guid>
      <description>Disclosure: this research was conducted using an ANY.RUN account provided as part of a collaboration. All analysis and conclusions are my own. I did not execute the malware locally. Local work was limited to archive extraction, parsing, disassembly and decoding traffic already captured by the sandbox.
TLDR I found a Chinese-language &amp;ldquo;resume&amp;rdquo; that is actually a Windows executable. It claims to come from a student at one of China&amp;rsquo;s Seven Sons of National Defence, opens a real Word document, which is nice of it and quietly delivers SNOWLIGHT and the VShell remote-access trojan, which is less nice.</description>
      <content>&lt;p&gt;&lt;em&gt;Disclosure: this research was conducted using an ANY.RUN account provided as part of a collaboration. All analysis and conclusions are my own. I did not execute the malware locally. Local work was limited to archive extraction, parsing, disassembly and decoding traffic already captured by the sandbox.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;tldr&#34;&gt;TLDR&lt;/h2&gt;
&lt;p&gt;I found a Chinese-language &amp;ldquo;resume&amp;rdquo; that is actually a Windows executable. It claims to come from a student at one of China&amp;rsquo;s &lt;strong&gt;Seven Sons of National Defence&lt;/strong&gt;, opens a real Word document, which is nice of it and quietly delivers &lt;strong&gt;SNOWLIGHT and the VShell remote-access trojan&lt;/strong&gt;, which is less nice.&lt;/p&gt;
&lt;p&gt;The chain is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A fake Beijing Institute of Technology graduate-school resume is opened.&lt;/li&gt;
&lt;li&gt;A custom Go loader checks for sandboxes, verifies the machine has at least four CPU cores and uses &lt;code&gt;Beep&lt;/code&gt; as a sleep timer.&lt;/li&gt;
&lt;li&gt;It downloads and opens a genuine DOCX decoy so the victim sees the document they expected.&lt;/li&gt;
&lt;li&gt;It reflectively runs a 1,454-byte Windows SNOWLIGHT stager.&lt;/li&gt;
&lt;li&gt;SNOWLIGHT connects to &lt;code&gt;38.207.178[.]192:50812&lt;/code&gt;, downloads 4.65 MB, XOR-decodes it with &lt;code&gt;0x99&lt;/code&gt; and jumps into a fileless VShell RAT.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;What is it meant to do? &lt;strong&gt;Give an operator quiet, interactive access to a professor or research-lab workstation: command execution, file access, screen capture and a route further into the victim network.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That is the most defensible objective. The malware proves remote access. The decoy tells us why that access was packaged as this particular document.&lt;/p&gt;
&lt;p&gt;The lure is most consistent with a &lt;strong&gt;mainland Chinese academic recipient&lt;/strong&gt;, at moderate confidence. That describes the intended victim, not the attacker. Attribution is less exciting: this is best described as an &lt;strong&gt;unattributed actor using a mainland-China-oriented academic lure and the now widely available SNOWLIGHT/VShell ecosystem&lt;/strong&gt;. The evidence does not establish the operator&amp;rsquo;s language, nationality, employer or government sponsor. UNC5174 is relevant history, not a conclusion.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.himanshuanand.com/images/vshell-resume/attack-chain.svg&#34;&gt;&lt;img src=&#34;https://blog.himanshuanand.com/images/vshell-resume/attack-chain.svg&#34; alt=&#34;The complete resume-to-RAT chain&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;how-this-started&#34;&gt;how this started&lt;/h2&gt;
&lt;p&gt;The sample appeared in ANY.RUN with a filename that translates roughly to:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Beijing Institute of Technology_network engineering major_
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fresh graduate_Zhang Yuguang_personal resume (2)(1).zip
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Inside the archive was an executable carrying nearly the same name. Windows hides known extensions by default, document icons remain a thing and humans remain human. This business model has survived more Windows releases than Internet Explorer.&lt;/p&gt;
&lt;p&gt;ANY.RUN gave it a 100/100 malicious score, labeled the process &lt;code&gt;vshell&lt;/code&gt; and showed the executable launching &lt;code&gt;cmd.exe&lt;/code&gt;, opening a DOCX in Word and talking to one IP in a Hong Kong-registered netblock over two ports. Public geolocation sources disagree about where the server was physically located, so the registration is the claim I can actually support.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.himanshuanand.com/images/vshell-resume/anyrun-analysis.png&#34;&gt;&lt;img src=&#34;https://blog.himanshuanand.com/images/vshell-resume/anyrun-analysis.png&#34; alt=&#34;ANY.RUN process tree showing the resume executable, Word decoy and VShell detection&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Public task: &lt;a href=&#34;https://app.any.run/tasks/8d27f4bf-ed8c-461d-96e6-86968464dd86/&#34;&gt;ANY.RUN analysis 8d27f4bf-ed8c-461d-96e6-86968464dd86&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The obvious answer was &amp;ldquo;it is a RAT.&amp;rdquo; The useful question was &lt;strong&gt;what does each stage do and what does the combination tell us about the operator&amp;rsquo;s objective?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So I took it apart.&lt;/p&gt;
&lt;h2 id=&#34;the-document-that-was-trying-a-little-too-hard&#34;&gt;the document that was trying a little too hard&lt;/h2&gt;
&lt;p&gt;The malware downloads a real Word document from:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http://38.207.178[.]192:50813/MySQL_LOG.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It saves it as:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;C:\Windows\Temp\Beijing Institute of Technology_..._personal resume (2).docx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then it launches Word. The victim gets the thing they clicked for, while the interesting part continues in memory.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.himanshuanand.com/images/vshell-resume/decoy-resume.jpeg&#34;&gt;&lt;img src=&#34;https://blog.himanshuanand.com/images/vshell-resume/decoy-resume.jpeg&#34; alt=&#34;The genuine DOCX decoy opened by the malware inside ANY.RUN&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;At first glance it looks normal: Zhang Yuguang, male, Beijing Institute of Technology, class of 2026, network engineering.&lt;/p&gt;
&lt;p&gt;Then you read past the first paragraph.&lt;/p&gt;
&lt;p&gt;The education section says the major is &lt;strong&gt;Electrical Engineering and Automation&lt;/strong&gt;, not Network Engineering. The grades field is blank. The honors say &amp;ldquo;delete as needed.&amp;rdquo; The certificates say &amp;ldquo;adjust as needed.&amp;rdquo; There is no phone number, email address, employer or verifiable internship. It is a three-page resume that forgot the small detail of telling the reader how to contact the applicant.&lt;/p&gt;
&lt;p&gt;The research interests are much more specific:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI-based power-grid fault diagnosis&lt;/li&gt;
&lt;li&gt;intelligent electrical systems&lt;/li&gt;
&lt;li&gt;renewable-energy converter control&lt;/li&gt;
&lt;li&gt;power-system automation&lt;/li&gt;
&lt;li&gt;joining &amp;ldquo;your research group&amp;rdquo; and completing experiments and papers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is not really a corporate job application. It reads like an unfinished template for contacting a &lt;strong&gt;prospective graduate supervisor&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;That changes the victim model. The named university is probably the applicant&amp;rsquo;s claimed school, not the target. The likely recipient is a professor or research group working on electrical engineering, energy systems or applied AI, possibly at another institution.&lt;/p&gt;
&lt;h2 id=&#34;the-university-name-is-doing-a-lot-of-work&#34;&gt;the university name is doing a lot of work&lt;/h2&gt;
&lt;p&gt;Beijing Institute of Technology is not just a convenient university name copied from a rankings table.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://unitracker.aspi.org.au/universities/beijing-institute-of-technology/&#34;&gt;ASPI&amp;rsquo;s China Defence Universities Tracker&lt;/a&gt; categorizes BIT as one of the &lt;strong&gt;Seven Sons of National Defence&lt;/strong&gt;, a group of universities administered by China&amp;rsquo;s Ministry of Industry and Information Technology and closely associated with the country&amp;rsquo;s defence research ecosystem. The tracker lists BIT research areas including armament science, control systems, communications, optical engineering and unmanned aerial vehicles.&lt;/p&gt;
&lt;p&gt;BIT&amp;rsquo;s &lt;a href=&#34;https://english.bit.edu.cn/labsandcenters.html&#34;&gt;own laboratories page&lt;/a&gt; prominently lists the State Key Laboratory of Explosion Science and Technology and the Key Laboratory of Intelligent Control and Decision of Complex System. Subtle institution. Very difficult to imagine why a social engineer might consider the name technically prestigious.&lt;/p&gt;
&lt;p&gt;The harder-edged fact comes from the U.S. government. In December 2020, the Commerce Department &lt;a href=&#34;https://www.federalregister.gov/documents/2020/12/22/2020-28031/addition-of-entities-to-the-entity-list-revision-of-entry-on-the-entity-list-and-removal-of-entities&#34;&gt;added BIT to the Entity List&lt;/a&gt;. The published rule says BIT was added for &amp;ldquo;acquiring and attempting to acquire U.S.-origin items in support of programs for the People&amp;rsquo;s Liberation Army.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;That makes the lure more interesting. A supposed student from a prestigious, defence-linked technical university is a credible reason for a professor working on power systems, intelligent control or applied AI to open a research statement. The affiliation adds authority and may signal that the sender&amp;rsquo;s work is worth reading.&lt;/p&gt;
&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt; prove any of the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;That the applicant is real or has any connection to BIT&lt;/li&gt;
&lt;li&gt;That BIT created, distributed or knew about the file&lt;/li&gt;
&lt;li&gt;That BIT itself was the intended victim&lt;/li&gt;
&lt;li&gt;That defence research was the confirmed collection target&lt;/li&gt;
&lt;li&gt;That the operator was foreign to China, state-sponsored or conducting espionage&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The malware gives us a claimed affiliation, not an enrollment record. The accurate headline is that the lure &lt;strong&gt;invoked the name of a defence-linked university&lt;/strong&gt;. Anything stronger would turn an excellent hook into a false allegation.&lt;/p&gt;
&lt;p&gt;Metadata supports recent preparation but does not identify an operator:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Created:       2026-06-05 07:27 UTC
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Modified:      2026-08-13 05:42 UTC
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Application:   WPS Office 12.1.0.28043
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Creator:       Work let me happyyy
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Last editor:   Fifty-one (Chinese: wu shi yi)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;WPS locale:    2052 (Simplified Chinese, PRC)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Document:      3 pages, 923 words, 986 characters
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Template UID:  1319704924
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The sample ran on 21 August, eight days after the last edit. The WPS user ID and author fields may have come from a template. Treating inherited Office metadata as an operator passport is how threat-intel fan fiction begins.&lt;/p&gt;
&lt;h2 id=&#34;who-was-this-written-for&#34;&gt;who was this written for?&lt;/h2&gt;
&lt;p&gt;There are four different questions here and combining them produces bad attribution very efficiently:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;What language and theme does the lure use?&lt;/li&gt;
&lt;li&gt;Who does the document claim the applicant is?&lt;/li&gt;
&lt;li&gt;Where is the likely recipient?&lt;/li&gt;
&lt;li&gt;Who built or operated the malware?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The first two are directly observable. The document uses Simplified Chinese and claims to be from a Beijing Institute of Technology student. The claim is unverified. The fourth is unknown. The third can be assessed, but only probabilistically.&lt;/p&gt;
&lt;p&gt;The mainland-China hypothesis is strongest because the document combines several local academic markers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;应届毕业生&lt;/code&gt;, the standard mainland term for a fresh graduate&lt;/li&gt;
&lt;li&gt;&lt;code&gt;个人简历&lt;/code&gt;, &lt;code&gt;课题组&lt;/code&gt;, &lt;code&gt;读研&lt;/code&gt; and the deferential phrase &lt;code&gt;贵课题组&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;大学英语六级&lt;/code&gt;, the mainland College English Test Band 6&lt;/li&gt;
&lt;li&gt;&lt;code&gt;计算机二级&lt;/code&gt;, the National Computer Rank Examination&amp;rsquo;s second level&lt;/li&gt;
&lt;li&gt;&lt;code&gt;三好学生&lt;/code&gt;, a PRC education-system honor&lt;/li&gt;
&lt;li&gt;WPS locale &lt;code&gt;2052&lt;/code&gt;, plus &lt;code&gt;宋体&lt;/code&gt; and &lt;code&gt;黑体&lt;/code&gt; fonts&lt;/li&gt;
&lt;li&gt;A supervisor-centered pitch promising to follow the research group&amp;rsquo;s arrangements, complete experiments and publish papers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A Taiwan-oriented version would be expected to use Traditional Chinese forms such as &lt;code&gt;應屆畢業生&lt;/code&gt;, &lt;code&gt;履歷&lt;/code&gt;, &lt;code&gt;研究室&lt;/code&gt; or &lt;code&gt;指導教授&lt;/code&gt;. It does not. Hong Kong, Macau, Singapore and overseas Chinese-speaking supervisors remain possible, but an English-language, department- or laboratory-framed application would be less surprising in those settings.&lt;/p&gt;
&lt;p&gt;None of this proves the server operator was in mainland China. It says the lure writer wanted the file to look native to a mainland academic workflow. The likely recipient is a professor or research-group leader working on power systems, electrical engineering, renewable-energy control or applied AI. Beijing Institute of Technology is the claimed applicant&amp;rsquo;s institution, not necessarily the victim&amp;rsquo;s.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Assessment: mainland China is the leading intended-victim geography at moderate confidence; attacker geography remains unknown.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;stage-1-a-go-loader-with-trust-issues&#34;&gt;stage 1: a Go loader with trust issues&lt;/h2&gt;
&lt;p&gt;The first executable is a 5,073,728-byte, 32-bit Go binary built with Go 1.22.0 for Windows &lt;code&gt;386&lt;/code&gt;, with &lt;code&gt;CGO_ENABLED=0&lt;/code&gt;, a zeroed linker timestamp and a nominal Kingsoft signature that fails validation with &lt;code&gt;HashMismatch&lt;/code&gt;. Its internal project name is &lt;code&gt;pdfrehuai&lt;/code&gt; and unlike the final payload it left useful symbols and source paths behind:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pdfrehuai/sandbox.AntiWeibu
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pdfrehuai/sandbox.BeepSleep
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pdfrehuai/loder.ADsMemLoad
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pdfrehuai/crypto.Base64XorAesBase32Decode
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pdfrehuai/mylib.DownloadFile
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./main-Base64XorAesBase32-encrpurl.go
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The spelling is not mine. Malware developers also ship on Fridays.&lt;/p&gt;
&lt;h3 id=&#34;threatbook-sandbox-check&#34;&gt;ThreatBook sandbox check&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;AntiWeibu&lt;/code&gt; refers to &lt;strong&gt;Weibu / ThreatBook&lt;/strong&gt;, a Chinese threat-intelligence and sandbox provider. The function obtains its own executable directory, lowercases it and checks whether it contains:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;C:\Users\Administrator\Desktop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If that sandbox-like path is present, it enumerates the directory and looks for a filename containing &lt;code&gt;2016&lt;/code&gt;. Matching the condition terminates execution. If the path is absent, the function returns and execution continues.&lt;/p&gt;
&lt;p&gt;This is not generic &amp;ldquo;maybe I am in a VM&amp;rdquo; behavior. It is a check written for a particular analysis environment.&lt;/p&gt;
&lt;h3 id=&#34;cpu-check&#34;&gt;CPU check&lt;/h3&gt;
&lt;p&gt;The loader reads Go&amp;rsquo;s cached logical-processor count and exits when the machine has fewer than four. Small sandbox VMs often receive one or two. A real professor&amp;rsquo;s workstation probably has more. Very scientific threat model: if the computer can handle MATLAB, it can handle malware.&lt;/p&gt;
&lt;h3 id=&#34;beepsleep&#34;&gt;BeepSleep&lt;/h3&gt;
&lt;p&gt;Instead of trusting &lt;code&gt;Sleep&lt;/code&gt;, the loader dynamically resolves &lt;code&gt;kernel32!Beep&lt;/code&gt;, calls it at 30,000 Hz for ten seconds, records the time before and after and checks that ten whole seconds elapsed. If the sandbox accelerates time, it exits. On normal desktops that frequency is inaudible; the function name is funnier than the user experience.&lt;/p&gt;
&lt;h3 id=&#34;encrypted-configuration&#34;&gt;encrypted configuration&lt;/h3&gt;
&lt;p&gt;The loader&amp;rsquo;s strings are not stored as normal URLs. The decoding pipeline is:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Base32hex decode
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -&amp;gt; AES-CBC decrypt
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -&amp;gt; PKCS#7 unpad
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -&amp;gt; bitwise NOT every byte
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -&amp;gt; Base64 decode
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;AES key and IV:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;YtWzxwZimsZoeMen
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Decoded values:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http://38.207.178[.]192:50813/EasyConnectUpdata_Log.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http://38.207.178[.]192:50813/MySQL_LOG.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;C:\Windows\Temp\Beijing Institute of Technology_..._personal resume (2).docx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is reproducible directly from the embedded bytes. The first value begins as 128 printable Base32hex characters, becomes 80 bytes after Base32hex decoding, 72 after AES-CBC and padding removal, then 53 bytes after inversion and Base64 decoding: the full staging URL. The other two values follow the same pipeline. No live request is required to recover them.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;MySQL_LOG.txt&lt;/code&gt; is the Word decoy. &lt;code&gt;EasyConnectUpdata_Log.txt&lt;/code&gt; is encrypted shellcode. The names are camouflage for anyone glancing at HTTP logs and apparently losing interest after the file extension.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.himanshuanand.com/images/vshell-resume/anyrun-staging-row.png&#34;&gt;&lt;img src=&#34;https://blog.himanshuanand.com/images/vshell-resume/anyrun-staging-row.png&#34; alt=&#34;ANY.RUN showing the HTTP staging connection on port 50813&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;memory-execution&#34;&gt;memory execution&lt;/h3&gt;
&lt;p&gt;The function named &lt;code&gt;ADsMemLoad&lt;/code&gt; dynamically resolves:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Activeds.dll!AllocADsMem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Activeds.dll!ReallocADsMem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kernel32.dll!VirtualProtect
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kernel32.dll!RtlMoveMemory
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kernel32.dll!CreateThread
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kernel32.dll!WaitForSingleObject
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It allocates memory, copies the downloaded bytes, marks them executable, creates a thread at the payload and waits. The shellcode never needs to become a normal executable on disk.&lt;/p&gt;
&lt;p&gt;At this point the user is reading a resume and the loader is starting stage 2. Multitasking.&lt;/p&gt;
&lt;h2 id=&#34;stage-2-snowlight-now-with-windows&#34;&gt;stage 2: SNOWLIGHT, now with Windows&lt;/h2&gt;
&lt;p&gt;The HTTP server identifies itself as &lt;code&gt;SimpleHTTP/0.6 Python/3.11.0&lt;/code&gt;. Its 6,224-byte response decodes to &lt;strong&gt;1,454 bytes of x86 shellcode&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SHA-256: 0524619d2471d77aba4b7993f5ffbaa4b8be6d2c0d91e63a02943851dc4b6404
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It uses a classic ROR-13 API resolver and loads functions without a useful import table. All 16 hashes resolve to &lt;code&gt;WSAStartup&lt;/code&gt;, &lt;code&gt;WSASocketA&lt;/code&gt;, &lt;code&gt;connect&lt;/code&gt;, &lt;code&gt;send&lt;/code&gt;, &lt;code&gt;recv&lt;/code&gt;, &lt;code&gt;closesocket&lt;/code&gt;, &lt;code&gt;inet_addr&lt;/code&gt;, &lt;code&gt;gethostbyname&lt;/code&gt;, &lt;code&gt;VirtualAlloc&lt;/code&gt;, &lt;code&gt;GetTempPathA&lt;/code&gt;, &lt;code&gt;_access&lt;/code&gt;, &lt;code&gt;strcpy&lt;/code&gt;, &lt;code&gt;strcat&lt;/code&gt;, &lt;code&gt;strlen&lt;/code&gt;, &lt;code&gt;printf&lt;/code&gt; and &lt;code&gt;wsprintfA&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The behavior is a byte-for-byte conceptual match for the Windows SNOWLIGHT stager documented by &lt;a href=&#34;https://socradar.io/blog/snowlight-government-chinese-campaign/&#34;&gt;SOCRadar&lt;/a&gt;, &lt;a href=&#34;https://www.sekoia.com/blog/advent-of-configuration-extraction-part-3-mapping-got-plt-and-disassembling-the-snowlight-loader&#34;&gt;Sekoia&lt;/a&gt; and &lt;a href=&#34;https://community.hpe.com/t5/hpe-threat-labs/unmasking-the-snowlight-stager-from-pypi-supply-chain-to-the/ba-p/7270744&#34;&gt;HPE Threat Labs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Its job is intentionally small:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Build &lt;code&gt;%TEMP%\log_de.log&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Exit if that file exists. It is a kill switch or operator exclusion marker.&lt;/li&gt;
&lt;li&gt;Connect to &lt;code&gt;38.207.178[.]192:50812&lt;/code&gt;, retrying every ten seconds.&lt;/li&gt;
&lt;li&gt;Send a 40-byte architecture and server check-in.&lt;/li&gt;
&lt;li&gt;Allocate exactly 30,000,000 bytes of executable memory.&lt;/li&gt;
&lt;li&gt;Receive the next payload in &lt;code&gt;0x64000&lt;/code&gt;-byte chunks.&lt;/li&gt;
&lt;li&gt;XOR every byte with &lt;code&gt;0x99&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Close the socket and call the decoded buffer.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The exact client check-in was captured in the PCAP:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.himanshuanand.com/images/vshell-resume/snowlight-handshake.svg&#34;&gt;&lt;img src=&#34;https://blog.himanshuanand.com/images/vshell-resume/snowlight-handshake.svg&#34; alt=&#34;Decoded layout of the SNOWLIGHT w32 check-in&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;That 40-byte packet is useful for detection because it is much more specific than &amp;ldquo;a Windows computer used TCP.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;SNOWLIGHT does not authenticate the server, verify a signature or hash, validate an &lt;code&gt;MZ&lt;/code&gt; header or receive an explicit payload size. It keeps copying &lt;code&gt;recv&lt;/code&gt; results into the fixed 30,000,000-byte region and appears not to enforce that boundary. The panel stager is small because it delegates both trust and memory safety to whoever answered the socket. What could go wrong has been scheduled for the next stage.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.himanshuanand.com/images/vshell-resume/anyrun-c2-row.png&#34;&gt;&lt;img src=&#34;https://blog.himanshuanand.com/images/vshell-resume/anyrun-c2-row.png&#34; alt=&#34;ANY.RUN showing the 40-byte check-in and 4 MB response on port 50812&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;stage-3-the-payload-the-server-did-not-want-us-to-keep&#34;&gt;stage 3: the payload the server did not want us to keep&lt;/h2&gt;
&lt;p&gt;The sandbox network table showed a 4 MB response, but no file appeared in the dropped-file list. That makes sense: SNOWLIGHT receives the payload directly into executable memory.&lt;/p&gt;
&lt;p&gt;The PCAP still had it.&lt;/p&gt;
&lt;p&gt;I downloaded the recorded PCAP from ANY.RUN, reassembled only the server-to-client stream for &lt;code&gt;38.207.178[.]192:50812&lt;/code&gt; and XORed it with &lt;code&gt;0x99&lt;/code&gt;. No connection to the live server was made.&lt;/p&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Encoded stream size:  4,649,984 bytes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Encoded SHA-256:      ed2eaa6ef3eda95383b6efc35b88acbca742ad7bd118931f74727a3139ff7e97
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Decoded magic:        MZ
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Architecture:         Windows x86
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Decoded SHA-256:      c666ac4f1a1b8df7ccfe8b19705279acd8b7eb7a4d0b3802bb3465064883ab25
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The result is a valid nine-section, 32-bit Go PE with image base &lt;code&gt;0x00400000&lt;/code&gt;, entry point &lt;code&gt;0x00401480&lt;/code&gt;, image size 4,648,960 and a zeroed timestamp. Its 3,088,384-byte &lt;code&gt;.data&lt;/code&gt; section has entropy &lt;code&gt;7.984&lt;/code&gt;, almost the theoretical maximum of 8, which is consistent with the embedded configuration and much of the program being encrypted or obfuscated. Go build information exists but reports &lt;code&gt;unknown&lt;/code&gt;; symbols are obfuscated and there is no helpful plaintext &lt;code&gt;VShell&lt;/code&gt; label. The author did not leave a README inside the implant. Disappointing.&lt;/p&gt;
&lt;p&gt;Windows Defender blocked the cleartext PE immediately after reconstruction. I did not disable or bypass it. Further inspection decoded the captured stream only in the analysis process&amp;rsquo;s memory.&lt;/p&gt;
&lt;p&gt;Why call it VShell if the string is hidden?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ANY.RUN&amp;rsquo;s Suricata rules identified the protocol as VShell.&lt;/li&gt;
&lt;li&gt;The delivery stub is the exact SNOWLIGHT family used to stage VShell.&lt;/li&gt;
&lt;li&gt;The final payload has the expected obfuscated Go core structure.&lt;/li&gt;
&lt;li&gt;The panel behavior, &lt;code&gt;w32&lt;/code&gt; architecture tag, &lt;code&gt;%TEMP%\log_de.log&lt;/code&gt;, &lt;code&gt;0x99&lt;/code&gt; XOR and cross-platform stager design all match public VShell/SNOWLIGHT research.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is stronger than trusting one antivirus label. Independent static and network features all land on the same family.&lt;/p&gt;
&lt;h3 id=&#34;the-rat-checked-in-again&#34;&gt;the RAT checked in again&lt;/h3&gt;
&lt;p&gt;Execution did not stop at the final PE. Immediately after the 4.65 MB transfer, the host opened three new TCP sessions to the same &lt;code&gt;50812&lt;/code&gt; listener from local ports &lt;code&gt;49805&lt;/code&gt;, &lt;code&gt;49806&lt;/code&gt; and &lt;code&gt;49807&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I reassembled both directions and parsed &lt;strong&gt;198 complete VShell frames&lt;/strong&gt;. Every frame uses the public protocol&amp;rsquo;s four-byte little-endian length followed by a 12-byte nonce, AES-GCM ciphertext and a 16-byte tag. Subtracting that 28-byte encryption overhead exposes a very recognizable startup sequence:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Encrypted size  Plaintext size  Protocol role
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;37 bytes        9 bytes         length + five-byte VShell version
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;60 bytes        32 bytes        MD5 challenge or response
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;32 bytes        4 bytes         channel type, such as conf/main
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;433 bytes       405 bytes       client host-registration record
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;35 bytes        7 bytes         repeated health message
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;55-58 bytes     27-30 bytes     repeated health response/data
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The first connection is consistent with completing registration, including the 405-byte client record. The second performs another channel handshake. The third repeats small, nearly mirrored health frames for about 142 seconds. &lt;a href=&#34;https://github.com/Esonhugh/How-AI-Kills-the-VShell/blob/Skyworship/Killing_that_VShell.md&#34;&gt;Public VShell protocol research&lt;/a&gt; documents the same version negotiation, MD5 verification, &lt;code&gt;conf&lt;/code&gt; registration and heartbeat loop.&lt;/p&gt;
&lt;p&gt;VShell derives its AES-256-GCM key as the ASCII hex digest of &lt;code&gt;MD5(salt)&lt;/code&gt;. The salt is obfuscated inside this final payload. Default and common values including &lt;code&gt;qwe123qwe&lt;/code&gt;, &lt;code&gt;qwe123&lt;/code&gt;, &lt;code&gt;123456&lt;/code&gt;, &lt;code&gt;vshell&lt;/code&gt;, &lt;code&gt;veo&lt;/code&gt;, &lt;code&gt;admin&lt;/code&gt; and an empty string failed authentication, so I cannot show the plaintext fields.&lt;/p&gt;
&lt;p&gt;The sizes, ordering, direction-marked nonces and cadence nevertheless prove that the RAT initialized and exchanged its normal control protocol. They do &lt;strong&gt;not&lt;/strong&gt; prove a human was at the console. I found no unusual frame sizes, file transfer, shell stream or other break from registration and health traffic.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Observed: successful VShell registration and C2 health traffic. Not observed: an operator issuing a command.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.himanshuanand.com/images/vshell-resume/vshell-session.svg&#34;&gt;&lt;img src=&#34;https://blog.himanshuanand.com/images/vshell-resume/vshell-session.svg&#34; alt=&#34;The three post-stage VShell sessions and their observed protocol roles&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;okay-but-what-does-the-malware-actually-do&#34;&gt;okay, but what does the malware actually do?&lt;/h2&gt;
&lt;p&gt;There are two answers: what this sample &lt;strong&gt;demonstrably does&lt;/strong&gt; and what the delivered VShell platform &lt;strong&gt;allows the operator to do&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&#34;confirmed-directly-in-this-sample&#34;&gt;confirmed directly in this sample&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Detect and avoid analysis environments&lt;/li&gt;
&lt;li&gt;Refuse low-CPU systems&lt;/li&gt;
&lt;li&gt;Detect accelerated sleep behavior&lt;/li&gt;
&lt;li&gt;Decrypt hidden network configuration&lt;/li&gt;
&lt;li&gt;Download a benign-looking decoy&lt;/li&gt;
&lt;li&gt;Open the decoy in Word to preserve the illusion&lt;/li&gt;
&lt;li&gt;Download shellcode from remote infrastructure&lt;/li&gt;
&lt;li&gt;Execute shellcode in its own memory&lt;/li&gt;
&lt;li&gt;Establish a raw TCP staging connection&lt;/li&gt;
&lt;li&gt;Download and decode a full RAT without writing it normally to disk&lt;/li&gt;
&lt;li&gt;Transfer execution into the VShell core&lt;/li&gt;
&lt;li&gt;Complete VShell registration and exchange sustained encrypted health traffic&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;available-to-the-vshell-operator&#34;&gt;available to the VShell operator&lt;/h3&gt;
&lt;p&gt;Public VShell analysis and recovered console material document:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Interactive terminal and arbitrary command execution&lt;/li&gt;
&lt;li&gt;File browsing, upload and download&lt;/li&gt;
&lt;li&gt;Screenshot capture and interactive screen access&lt;/li&gt;
&lt;li&gt;Host, user, process and network reconnaissance&lt;/li&gt;
&lt;li&gt;Reverse proxying and tunneling into otherwise unreachable systems&lt;/li&gt;
&lt;li&gt;Multiple C2 transports, including raw TCP, WebSocket, KCP and others&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This matters because VShell is not a one-shot password stealer. It is an &lt;strong&gt;operator platform&lt;/strong&gt;. The initial executable does not need to know which documents are valuable or which neighboring machine should be targeted. A human can decide after the victim checks in.&lt;/p&gt;
&lt;p&gt;I did not observe an operator issuing commands in this sandbox run. I also did not prove persistence, document theft or lateral movement on this particular host. Those are capabilities and plausible follow-on actions, not facts I am going to promote to &amp;ldquo;observed&amp;rdquo; because the conclusion sounds cooler.&lt;/p&gt;
&lt;h2 id=&#34;showing-the-objective-without-making-things-up&#34;&gt;showing the objective without making things up&lt;/h2&gt;
&lt;p&gt;Malware rarely contains a string saying &lt;code&gt;OBJECTIVE=STEAL_PROFESSOR_RESEARCH&lt;/code&gt;. You infer objective by combining behavior, access level, targeting and concealment.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Full VShell RAT, not a simple downloader:&lt;/strong&gt; the operator wants interactive control after infection. That supports continued access, collection and human-directed follow-on decisions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fileless staged execution:&lt;/strong&gt; reducing obvious disk artifacts helps the implant stay quiet long enough for somebody to use the access.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Real DOCX opened after infection:&lt;/strong&gt; keeping the victim from suspecting failure is part of the operation, not a side effect.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Graduate-supervisor language:&lt;/strong&gt; the document is written for an academic recipient, making professor or research-group targeting more likely than corporate recruiting.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AI, power-grid and renewable-energy themes:&lt;/strong&gt; research data, institutional accounts and access to technical networks are all plausible targets.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Screen, file, shell and proxy capabilities:&lt;/strong&gt; the workstation is a foothold. It does not have to be the operator&amp;rsquo;s final destination.&lt;/p&gt;
&lt;p&gt;My confidence-graded assessment:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;High confidence:&lt;/strong&gt; the immediate objective is remote access to the victim machine.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Moderate confidence:&lt;/strong&gt; the intended victim is mainland Chinese university faculty or a technical research group, not ordinary corporate HR.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Moderate confidence:&lt;/strong&gt; likely follow-on goals include collecting research material, credentials and internal access, with lateral movement available if the host is valuable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Low confidence:&lt;/strong&gt; whether the ultimate motivation is state-directed espionage, commercial theft or access brokerage.&lt;/p&gt;
&lt;p&gt;One-line version: &lt;strong&gt;turn a believable academic document into quiet, full-featured control of a research workstation, then let the operator decide what is worth stealing.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;attribution-please-keep-your-red-string-on-the-corkboard&#34;&gt;attribution: please keep your red string on the corkboard&lt;/h2&gt;
&lt;p&gt;SNOWLIGHT has history. Mandiant named it while tracking UNC5174 and &lt;a href=&#34;https://www.sysdig.com/blog/unc5174-chinese-threat-actor-vshell&#34;&gt;Sysdig linked SNOWLIGHT-delivered VShell to UNC5174&lt;/a&gt;, a China-nexus contractor associated with espionage and access brokering.&lt;/p&gt;
&lt;p&gt;If this analysis stopped in 2025, &amp;ldquo;possible UNC5174&amp;rdquo; would be tempting.&lt;/p&gt;
&lt;p&gt;But the ecosystem changed. Cracked VShell releases and loader-generation panels circulated widely. More importantly, SNOWLIGHT is not merely malware that several actors happened to copy. It is a &lt;strong&gt;default stager generated by the VShell management panel&lt;/strong&gt;. The operator selects Windows 32-bit, TCP and staged delivery; the framework produces the same broad implementation seen here.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.trendmicro.com/en_us/research/25/e/earth-lamia.html&#34;&gt;Trend Micro demonstrated why that distinction matters&lt;/a&gt;. Another report had assigned a SNOWLIGHT-to-VShell intrusion to UNC5174. Trend instead tied it to Earth Lamia with actor-specific VOIDMAW packaging and a repeated PDB path, while explicitly warning that SNOWLIGHT alone was unreliable because any VShell user could generate it. The panel-generated stager invalidated the tool-only attribution; the packaging artifacts supplied the positive one.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://community.hpe.com/t5/hpe-threat-labs/unmasking-the-snowlight-stager-from-pypi-supply-chain-to-the/ba-p/7270744&#34;&gt;HPE reached the same practical conclusion&lt;/a&gt; in a 2026 PyPI investigation: leaked and cracked VShell builds have moved the framework beyond an exclusive APT toolkit.&lt;/p&gt;
&lt;p&gt;What supports a mainland-China-oriented &lt;strong&gt;victim context&lt;/strong&gt; here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Simplified-Chinese academic lure and PRC-specific education vocabulary&lt;/li&gt;
&lt;li&gt;WPS Office locale &lt;code&gt;2052&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Supervisor-centered research-group language&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Separate facts place parts of the &lt;strong&gt;development and tooling context&lt;/strong&gt; in Chinese-language security communities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A function specifically named &lt;code&gt;AntiWeibu&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Evasion tailored to the Chinese ThreatBook sandbox&lt;/li&gt;
&lt;li&gt;VShell&amp;rsquo;s origin and popularity in Chinese-language offensive-security communities&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Neither category is a nationality test. The lure describes the intended social context; it does not tell us who sat behind the panel. The tooling facts may belong to an upstream loader author, copied source or a commodity framework rather than this operator. The &lt;code&gt;AntiWeibu&lt;/code&gt; technique was also published in Chinese offensive-development material before this sample, so copying it does not identify a private toolmaker.&lt;/p&gt;
&lt;h3 id=&#34;actor-comparison&#34;&gt;actor comparison&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Candidate      Meaningful overlap                 Contradicting or missing evidence
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;UNC5174        Historical SNOWLIGHT/VShell use    Published chains were mainly Linux,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                                  exploitation-led; no IOC/lure match
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Earth Lamia    Windows VShell; universities       Published access uses public-facing
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                                  exploits and VOIDMAW/DLL artifacts
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;UAT-8302       Windows SNOWLIGHT -&amp;gt; VShell, 0x99  Government intrusions, sideloading and
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                                  different malware/IOCs; no lure match
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;UNC6586        SNOWLIGHT/VShell component          Linux React2Shell chain; no Windows,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                                  phishing or infrastructure match
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Commodity      Exact panel-generated w32/TCP      Does not identify one operator, but needs
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;VShell user    stager; cracked builds available   no unsupported actor-specific assumption
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The last row requires the fewest leaps. Cisco Talos calls SNOWLIGHT a generic VShell stager in its &lt;a href=&#34;https://blog.talosintelligence.com/uat-8302/&#34;&gt;UAT-8302 research&lt;/a&gt; and Google describes VShell as publicly available and used by actors with varying motivations in its &lt;a href=&#34;https://cloud.google.com/blog/topics/threat-intelligence/threat-actors-exploit-react2shell-cve-2025-55182&#34;&gt;UNC6586 reporting&lt;/a&gt;. Neither source links this campaign to those groups.&lt;/p&gt;
&lt;p&gt;What is missing for actor-level attribution:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A unique UNC5174 domain or known C2&lt;/li&gt;
&lt;li&gt;A matching cryptographic configuration&lt;/li&gt;
&lt;li&gt;A reused final-payload hash&lt;/li&gt;
&lt;li&gt;Operator logs or identity artifacts&lt;/li&gt;
&lt;li&gt;A campaign-specific overlap stronger than commodity tooling&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The infrastructure adds one useful but limited fact. A ThreatFox-derived feed listed &lt;code&gt;38.207.178[.]192:40010&lt;/code&gt; as VShell on 15 April 2026, months before this sample used &lt;code&gt;50812&lt;/code&gt; and &lt;code&gt;50813&lt;/code&gt;. That supports repeated VShell use of the host. The original historical ThreatFox record is no longer available through the unauthenticated API, so I treat it as secondary-source evidence, not a campaign bridge.&lt;/p&gt;
&lt;p&gt;Best label: &lt;strong&gt;unattributed actor using a mainland-China-oriented academic lure and the leaked/commodity SNOWLIGHT and VShell ecosystem.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Less exciting than naming an APT. More likely to survive contact with evidence.&lt;/p&gt;
&lt;h2 id=&#34;infrastructure-one-server-several-stories&#34;&gt;infrastructure: one server, several stories&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.himanshuanand.com/images/vshell-resume/infrastructure-graph.svg&#34;&gt;&lt;img src=&#34;https://blog.himanshuanand.com/images/vshell-resume/infrastructure-graph.svg&#34; alt=&#34;Evidence-graded infrastructure graph&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The exact campaign infrastructure is compact:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;HIGH confidence   38.207.178[.]192:50813   HTTP staging and DOCX decoy
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;HIGH confidence   38.207.178[.]192:50812   SNOWLIGHT check-in and VShell transfer
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MEDIUM confidence 38.207.178[.]192:40010   ThreatFox-derived VShell sighting, 2026-04-15
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;An ANY.RUN TI search for the exact destination IP across the available 180-day window returned one analysis: this one. It exposed the two staging URLs, three recorded connections and the VShell network alerts, but no second sample or campaign link.&lt;/p&gt;
&lt;p&gt;Passive DNS tells a longer and mostly unrelated hosting story:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2024-01-15              v.n.1.xcwanmei09[.]shop
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2024-05-03              d.d.edsxhbba06[.]shop
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2024-05-06              oa.muxmyee520[.]shop
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2024-06-04..2025-01-09  qlam[.]cc and www.qlam[.]cc
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2024-12-20              pan.qlam[.]cc observed on the IP with its own TLS certificate
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2026-04-15              secondary feed lists VShell on port 40010
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2026-08-21              this sample uses ports 50812 and 50813
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&#34;https://otx.alienvault.com/api/v1/indicators/IPv4/38.207.178.192/passive_dns&#34;&gt;OTX passive DNS&lt;/a&gt; directly supports the old DNS resolutions. &lt;a href=&#34;https://urlscan.io/result/acccd344-6035-4907-bc48-e55a454d667c/&#34;&gt;urlscan independently observed &lt;code&gt;pan.qlam.cc&lt;/code&gt;&lt;/a&gt; serving nginx content from this IP in December 2024 with a certificate valid only for that hostname. No named domain appears in the malware configuration or PCAP, the &lt;code&gt;.shop&lt;/code&gt; hosts have no matching public urlscan results and no certificate, sample or URL joins them to VShell.&lt;/p&gt;
&lt;p&gt;Classification: &lt;strong&gt;historical tenants of the same IP, not campaign IOCs&lt;/strong&gt;. The same applies to unrelated domains on the subnet or ASN. Infrastructure graphing becomes fiction if every former neighbor is invited to the conspiracy.&lt;/p&gt;
&lt;h3 id=&#34;confidence-ledger&#34;&gt;confidence ledger&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;HIGH         This sample delivered SNOWLIGHT and VShell from 38.207.178[.]192.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;HIGH         SNOWLIGHT is a standard VShell-generated stager, not actor-exclusive.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODERATE     The lure was customized for a mainland Chinese academic context.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODERATE     The IP hosted VShell before this run, based on a secondary feed.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;INSUFFICIENT The operator&amp;#39;s language, nationality or physical location.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;INSUFFICIENT Any named actor, state sponsor or continuity with old DNS tenants.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;detection-and-hunting&#34;&gt;detection and hunting&lt;/h2&gt;
&lt;h3 id=&#34;network&#34;&gt;network&lt;/h3&gt;
&lt;p&gt;Block or investigate:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;38.207.178[.]192:50812
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;38.207.178[.]192:50813
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;High-signal SNOWLIGHT check-in:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;77 33 32 20 20 20 c6 7c 33 38 2e 32 30 37 2e 31
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;37 38 2e 31 39 32 00 00 00 00 00 00 00 00 00 00
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00 00 00 00 00 00 00 00
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is &lt;code&gt;w32   &lt;/code&gt;, network-order port &lt;code&gt;50812&lt;/code&gt;, the ASCII IP and zero-filled fields. Adapt the IP and port portions if hunting generically across generated SNOWLIGHT samples.&lt;/p&gt;
&lt;h3 id=&#34;endpoint&#34;&gt;endpoint&lt;/h3&gt;
&lt;p&gt;Hunt for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;%TEMP%\log_de.log&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Resume-themed executables launching &lt;code&gt;cmd.exe&lt;/code&gt; and then Word&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AllocADsMem&lt;/code&gt; or &lt;code&gt;ReallocADsMem&lt;/code&gt; followed by &lt;code&gt;VirtualProtect&lt;/code&gt; and &lt;code&gt;CreateThread&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Processes allocating tens of megabytes as executable memory immediately after a large raw TCP receive&lt;/li&gt;
&lt;li&gt;Go binaries with an invalid or hash-mismatched certificate and document-style names&lt;/li&gt;
&lt;li&gt;Outbound TCP beginning with six-byte architecture tags such as &lt;code&gt;w32&lt;/code&gt;, &lt;code&gt;w64&lt;/code&gt;, &lt;code&gt;l32&lt;/code&gt;, &lt;code&gt;l64&lt;/code&gt;, &lt;code&gt;a32&lt;/code&gt; or &lt;code&gt;a64&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Post-stage TCP frames beginning with plausible little-endian lengths and direction-marked 12-byte AES-GCM nonces&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Kingsoft certificate attached to the first loader is invalid with &lt;code&gt;HashMismatch&lt;/code&gt;. It is camouflage, not evidence that Kingsoft or WPS participated in the operation.&lt;/p&gt;
&lt;h2 id=&#34;iocs&#34;&gt;iocs&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Original archive SHA-256
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;c25d4412f7f93e7de5b2aaf41747175d94cffd983ca20efbd0efcdd718b58c4d
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Go loader SHA-256
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;81c51138d5527ca7dcc258171eb36659c479f66c86a8947b6340d040b3860a30
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Go loader MD5
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;a7cc7e3cdd2f0f9210044911a483fa5d
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Encrypted HTTP response SHA-256
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;f6d4da5afc89bf9e536a9002c4d256c696df2389d77279f4c5daf6979557e74e
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SNOWLIGHT shellcode SHA-256
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;0524619d2471d77aba4b7993f5ffbaa4b8be6d2c0d91e63a02943851dc4b6404
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;XOR-encoded VShell stream SHA-256
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ed2eaa6ef3eda95383b6efc35b88acbca742ad7bd118931f74727a3139ff7e97
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Decoded VShell SHA-256
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;c666ac4f1a1b8df7ccfe8b19705279acd8b7eb7a4d0b3802bb3465064883ab25
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;DOCX decoy SHA-256
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;de3f56d0d5b71f2a1a1905f0b01b84fbab237e9d4c5179a05b127d806823f83c
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;C2 / staging IP       38.207.178[.]192
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;HTTP staging          38.207.178[.]192:50813
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SNOWLIGHT TCP         38.207.178[.]192:50812
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Loader AES key        YtWzxwZimsZoeMen
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SNOWLIGHT XOR key     0x99
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Kill-switch marker    %TEMP%\log_de.log
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;final-thoughts&#34;&gt;final thoughts&lt;/h2&gt;
&lt;p&gt;The interesting part of this sample is not that a resume delivered a RAT. We have been putting malware in job applications since recruiters first learned to double-click.&lt;/p&gt;
&lt;p&gt;The interesting part is how cleanly the &lt;strong&gt;behavior and lure answer different halves of the objective question&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The code says the operator wanted an interactive foothold. It spends effort on sandbox detection, time checks, encrypted staging and fileless execution, then installs a framework built for shells, files, screens and tunnels.&lt;/p&gt;
&lt;p&gt;The document says whose foothold might be useful: somebody reading graduate applications about AI, electrical systems, power grids and renewable energy, presented under the name of a university with real defence significance. Probably a professor or research lab. Not necessarily Beijing Institute of Technology and not necessarily a government target, but clearly more specific than &amp;ldquo;any Windows user with a mouse.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;That is how I would present the objective: not &amp;ldquo;VShell equals espionage,&amp;rdquo; and not &amp;ldquo;China lure equals APT.&amp;rdquo; Instead:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A targeted academic lure was used to establish stealthy VShell remote access, most likely enabling collection of research material and credentials and providing a pivot into the recipient institution. The exact operator and final motivation remain unconfirmed.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Precise enough to be useful. Honest enough not to become malware astrology.&lt;/p&gt;
&lt;p&gt;If you are a professor reading unsolicited resumes: the applicant may be excellent, the research statement may be inspiring and the file extension should still be visible.&lt;/p&gt;
&lt;p&gt;Stay safe. And maybe do not let &lt;code&gt;personal_resume.exe&lt;/code&gt; join the lab before the student does.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;references&#34;&gt;references&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://app.any.run/tasks/8d27f4bf-ed8c-461d-96e6-86968464dd86/&#34;&gt;ANY.RUN public analysis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://unitracker.aspi.org.au/universities/beijing-institute-of-technology/&#34;&gt;ASPI China Defence Universities Tracker: Beijing Institute of Technology&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.federalregister.gov/documents/2020/12/22/2020-28031/addition-of-entities-to-the-entity-list-revision-of-entry-on-the-entity-list-and-removal-of-entities&#34;&gt;U.S. Commerce Department: 2020 Entity List additions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://english.bit.edu.cn/labsandcenters.html&#34;&gt;Beijing Institute of Technology: research laboratories and centers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cet.neea.edu.cn/&#34;&gt;China Education Examinations Authority: College English Test&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ncre.neea.edu.cn/&#34;&gt;China Education Examinations Authority: National Computer Rank Examination&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.sysdig.com/blog/unc5174-chinese-threat-actor-vshell&#34;&gt;Sysdig: UNC5174&amp;rsquo;s evolution from SNOWLIGHT to VShell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.sekoia.com/blog/advent-of-configuration-extraction-part-3-mapping-got-plt-and-disassembling-the-snowlight-loader&#34;&gt;Sekoia: SNOWLIGHT configuration extraction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://community.hpe.com/t5/hpe-threat-labs/unmasking-the-snowlight-stager-from-pypi-supply-chain-to-the/ba-p/7270744&#34;&gt;HPE Threat Labs: Unmasking the SNOWLIGHT stager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://socradar.io/blog/snowlight-government-chinese-campaign/&#34;&gt;SOCRadar: Tracing SNOWLIGHT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/Esonhugh/How-AI-Kills-the-VShell/blob/Skyworship/Killing_that_VShell.md&#34;&gt;Esonhugh: reverse engineering the VShell client and protocol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.trendmicro.com/en_us/research/25/e/earth-lamia.html&#34;&gt;Trend Micro: Earth Lamia and why SNOWLIGHT is not attribution&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.talosintelligence.com/uat-8302/&#34;&gt;Cisco Talos: UAT-8302 and its SNOWLIGHT/VShell deployment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cloud.google.com/blog/topics/threat-intelligence/threat-actors-exploit-react2shell-cve-2025-55182&#34;&gt;Google Threat Intelligence: UNC6586 React2Shell activity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://otx.alienvault.com/api/v1/indicators/IPv4/38.207.178.192/passive_dns&#34;&gt;OTX: passive DNS for 38.207.178.192&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://urlscan.io/result/acccd344-6035-4907-bc48-e55a454d667c/&#34;&gt;urlscan: historical pan.qlam.cc result&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
    </item>
    
  </channel>
</rss>
