<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>DownWithUp's Github Site</title><link>https://downwithup.github.io/</link><description>Recent content on DownWithUp's Github Site</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 03 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://downwithup.github.io/index.xml" rel="self" type="application/rss+xml"/><item><title>An Example of Vibe Malware Analysis</title><link>https://downwithup.github.io/posts/2026-05-03-post11/</link><pubDate>Sun, 03 May 2026 00:00:00 +0000</pubDate><guid>https://downwithup.github.io/posts/2026-05-03-post11/</guid><description>&lt;h1 id="introduction">Introduction&lt;/h1>
&lt;p>While talking with a friend he recently mentioned having found a suspicious process running on his server. It was strange because he had gotten high network activity warnings a few days prior and then there was a process named &lt;code>softirq&lt;/code> eating up almost 100% of the server&amp;rsquo;s CPU. Thankfully he had a copy of the server&amp;rsquo;s state and I was able to get a copy. Turns out there were actually three very suspicious binaries. This presented an interesting opportunity to try something like &amp;ldquo;vibe reversing&amp;rdquo; which I&amp;rsquo;ve been interested in testing. I used &lt;a href="https://github.com/mrexodia/ida-pro-mcp">IDAPro-MCP&lt;/a> with OpenAI&amp;rsquo;s codex agent using GPT-5.4. While it would be interesting to 100% understand this malware, the real goal of this post is to see how well AI can analyze it.&lt;/p></description></item><item><title>AWStrace: Another Windows Strace</title><link>https://downwithup.github.io/posts/2026-03-29-post10/</link><pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate><guid>https://downwithup.github.io/posts/2026-03-29-post10/</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>There have been a lot of open source atteptms to creating something like &lt;code>strace&lt;/code> for Windows. Many have drawbacks or specific/customized setup requirements. This is simply my attempt to make a quick system call tracer that&amp;rsquo;s easy to use and doesn&amp;rsquo;t require any complex setup. The code AWStrace is &lt;a href="https://github.com/DownWithUp/AWSTrace">here&lt;/a>.&lt;/p>
&lt;hr>
&lt;h2 id="previous-work">Previous Work&lt;/h2>
&lt;p>Here are some of the previous attempts at making an &lt;code>strace&lt;/code> for Windows:&lt;/p>
&lt;ul>
&lt;li>NtTrace: Debugger Engine COM Objects - Software Breakpoints &lt;a href="https://github.com/rogerorr/NtTrace">https://github.com/rogerorr/NtTrace&lt;/a>&lt;/li>
&lt;li>stracent: IAT patching. Pressuembly redirecting to some type of logging - &lt;a href="https://github.com/ipankajg/stracent">https://github.com/ipankajg/stracent&lt;/a>&lt;/li>
&lt;li>STrace: Kernel module and DTrace - &lt;a href="https://github.com/mandiant/STrace">https://github.com/mandiant/STrace&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>I&amp;rsquo;m sure there are many others I&amp;rsquo;ve missed.&lt;/p></description></item><item><title>Example of Windows Warbird Encryption/Decryption</title><link>https://downwithup.github.io/posts/2023-04-23-post9/</link><pubDate>Sun, 23 Apr 2023 00:00:00 +0000</pubDate><guid>https://downwithup.github.io/posts/2023-04-23-post9/</guid><description>&lt;blockquote>
&lt;p>Everything in this post was done on a Windows 10 22H2 machine. Kernel version was: 10.0.19041.2486&lt;br>&lt;/p>&lt;/blockquote>
&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>Microsoft Warbird is an undocumented encryption technology generally used for things relating to software licensing (DRM) and security mechanisms. There has been some, but not much, previous open source research. Some links which provide further insight:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/KiFilterFiberContext/warbird-obfuscator">https://github.com/KiFilterFiberContext/warbird-obfuscator&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/KiFilterFiberContext/microsoft-warbird/">https://github.com/KiFilterFiberContext/microsoft-warbird/&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>In addition, &lt;a href="https://twitter.com/aionescu">Alex Ionescu&lt;/a> talked about Warbird in depth during this &lt;a href="https://www.youtube.com/watch?v=gu_i6LYuePg">presentation&lt;/a>.&lt;/p>
&lt;p>The Warbird technology is appears to be designed to be integrated at compile time, and could function either as an obfuscation approach on the existing code, or as some type of &amp;ldquo;enclave&amp;rdquo; block encryptor. This second approach is what this post will dive into.&lt;/p></description></item><item><title>What is NtPssCaptureVaSpaceBulk</title><link>https://downwithup.github.io/posts/2021-05-14-post8/</link><pubDate>Fri, 14 May 2021 16:51:46 +0000</pubDate><guid>https://downwithup.github.io/posts/2021-05-14-post8/</guid><description>&lt;h2 id="the-api">The API&lt;/h2>
&lt;p>Just a quick post about something I found quite interesting. In Windows 10 version 2004+ (according to &lt;a href="https://j00ru.vexillium.org/syscalls/nt/64/">this&lt;/a>) there is a new system call which caught my attention: &lt;code>NtPssCaptureVaSpaceBulk&lt;/code>.
Specifically the caputing &amp;ldquo;bulk&amp;rdquo; referenced in the name made me think it could be useful. Looking at the API in the kernel, I quickly noticed several calls using the &lt;code>PsProcessType&lt;/code> type as the first parameter, so I looked at the prototype of &lt;code>NtQueryVirtualMemory&lt;/code> and went from there.
My Google searching skills discovered that there is no offical prototype for this function, and so my final definition looks like this:&lt;/p></description></item><item><title>The Win32k Import Mystery</title><link>https://downwithup.github.io/posts/2020-11-12-post7/</link><pubDate>Thu, 12 Nov 2020 16:51:46 +0000</pubDate><guid>https://downwithup.github.io/posts/2020-11-12-post7/</guid><description>&lt;h2 id="the-crash">The Crash&lt;/h2>
&lt;p>This all began when I was playing around with the PE file format and ended up tinkering with the loading process of drivers. Upon loading a particularly simple driver the OS crashed with the following error:&lt;/p>
&lt;p>&lt;img src="https://downwithup.github.io/assets/img/P7-Image1.png" alt="IMG1">&lt;/p>
&lt;p>The stack clearly shows the bugcheck occuring within the driver loading process.&lt;/p>
&lt;p>&lt;img src="https://downwithup.github.io/assets/img/P7-Image2.png" alt="IMG1">&lt;/p>
&lt;p>I instantly suspected that the issue was with the imports as the driver I loaded only imported functions from Win32k.&lt;/p></description></item><item><title>When Downloads Lead to LPE</title><link>https://downwithup.github.io/posts/2020-03-25-post6/</link><pubDate>Wed, 25 Mar 2020 16:51:46 +0000</pubDate><guid>https://downwithup.github.io/posts/2020-03-25-post6/</guid><description>&lt;h2 id="observations">Observations&lt;/h2>
&lt;p>In the world of privlige escalation, 3rd party elevated service programs are espically interesting to look at. One such program is Sophos&amp;rsquo; &lt;code>HitmanPro.Alert (HMPA)&lt;/code>.
This program is designed to work with an additional AV product to provide &amp;ldquo;advanced&amp;rdquo; detection and prevention capabilities against malware and exploits.&lt;/p>
&lt;p>However, this HMPA became interesting when I observed this message in my kernel debugger:&lt;/p>
&lt;p>&lt;img src="https://downwithup.github.io/assets/img/P6-Image1.png" alt="IMG1">&lt;/p>
&lt;p>Just from this message there are a couple of issues I had to research. Are downloads really over HTTP? What does an update look like (full exe or just dll plugin)? Is the directory really a low privileged controlled directory?
Using Wireshark I was able to identify that the downloads were really HTTP (they use &lt;code>URLDownloadToFile&lt;/code>). Secondly, using a proxy I was able to get a file to appear in user&amp;rsquo;s temp directory. The &amp;ldquo;update&amp;rdquo; is just the full hmpalert.exe (yes, the one that is downloaded when you first install). Depending on which flag was used in the command line &lt;code>/service&lt;/code> for the service, &lt;code>/tray&lt;/code> for the tray icon and user interactive version, etc&amp;hellip; But they are all the same executable.&lt;/p></description></item><item><title>Creating Fake Drivers</title><link>https://downwithup.github.io/posts/2020-01-24-post5/</link><pubDate>Fri, 24 Jan 2020 16:51:46 +0000</pubDate><guid>https://downwithup.github.io/posts/2020-01-24-post5/</guid><description>&lt;h2 id="research">Research&lt;/h2>
&lt;p>Drivers commanly use IOCTLs for communication from user and kernel mode, but what really goes on behind the scene. &lt;code>DeviceIoControl&lt;/code> is the API responsible for sending an &lt;code>IRP_MJ_DEVICE_CONTROL&lt;/code> request (along with an IOCTL and buffers of data) to a driver.
The driver specifies the address of the funciton that then handles these requests. This is done through the array &lt;code>DRIVER_OBJECT.MajorFunction[]&lt;/code>. Continuing to trace back, the &lt;code>DRIVER_OBJECT&lt;/code> comes from the DriverEntry which is the entry point on a WDM driver. It&amp;rsquo;s clear that the &lt;code>DRIVER_OBJECT&lt;/code> needed for IOCTL communication comes from the kerenl, but where?
Following at &lt;code>NtLoadDriver&lt;/code> eventually leads to IopLoadDriver which calls &lt;code>ObCreateObject&lt;/code> with &lt;code>IoDriverObjectType&lt;/code> as the &lt;code>OBJECT_TYPE&lt;/code>. It&amp;rsquo;s worth noting that driver objects can be viewed in the NT object manager under the &amp;ldquo;Driver&amp;rdquo; subdirectory with tools such as &lt;a href="https://github.com/hfiref0x/WinObjEx64">WinObjEx&lt;/a>.&lt;/p></description></item><item><title>Qualcomm Service Vulnerability</title><link>https://downwithup.github.io/posts/2019-06-04-post4/</link><pubDate>Tue, 04 Jun 2019 16:51:46 +0000</pubDate><guid>https://downwithup.github.io/posts/2019-06-04-post4/</guid><description>&lt;h2 id="discovery">Discovery&lt;/h2>
&lt;p>Qualcomm has a serivce program named AdminService.exe which runs on Windows machines with the Qualcomm Atheros QCA61x4 Bluethooth device. Other devices possibly have this service. You can download the entire service and driver package &lt;a href="https://www.ath-drivers.eu/atheros-wireless-drivers.html">here&lt;/a>. In a real world situation, the package would be installed by Windows.&lt;/p>
&lt;p>So, what is wrong with this AdminService? Well, services can receive control codes from other applications. This is done with the &lt;a href="https://docs.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-controlservice">ControlService&lt;/a> API. Looking at the MSDN documentation the control codes after 128 (up to 255) are used by 3rd party services for their own purposes. This is what originally piqued my interest. I figured that custom control codes might preform privileged operations and these could possibly be exploited.
By chance, AdminService.exe (service name AtherosSvc) handles a bunch of custom control codes. I went down each control code case until I found code 133 (0x85). Like many of the other codes, 133 posts a message to another thread. The message code for 133 is 24162 (0x5E62). This case in the thread&amp;rsquo;s &lt;code>GetMessage&lt;/code> loop calls &lt;code>OutputDebugString&lt;/code> with &amp;ldquo;Enter case CUSTOM_THREAD_EVENT_REG_MODIFY&amp;rdquo;.&lt;/p></description></item><item><title>Vulnerabilities In Similar Software</title><link>https://downwithup.github.io/posts/2019-03-19-post3/</link><pubDate>Tue, 19 Mar 2019 16:51:46 +0000</pubDate><guid>https://downwithup.github.io/posts/2019-03-19-post3/</guid><description>&lt;p>SoftEther VPN is a VPN program by the university of Tsukba in Japan. Users can use the client program to connect to servers, or use theserver program to host servers. &lt;a href="https://www.softether-download.com/en.aspx">The Server Manager&lt;/a> for Windows used a driver named See.sys for low level operations. This driver (&lt;code>See.sys&lt;/code>) was actually part of SoftEther&amp;rsquo;s github repository which can be found &lt;a href="https://github.com/SoftEtherVPN/SoftEtherVPN/tree/master/src/See">here&lt;/a>.&lt;/p>
&lt;p>The driver is based off the old WinPcap driver which had an issue (CVE-2007-3681) with &lt;code>malfourmed IRP Parameters&lt;/code>. Here are &lt;a href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-3681">More Details&lt;/a>.
When a user program sends an IOCTL to a driver it is packaged, along with buffers, sizes, and other information inside of an IRP. IRPs have a field that named UserBuffer. This is the output buffer in a &lt;code>DeviceIoControl&lt;/code> call. When a device is created with &lt;code>DO_DIRECT_IO&lt;/code> (as this one does) there is no &lt;code>Irp-&amp;gt;AssociatedIrp.SystemBuffer&lt;/code>, so output data is usually copied to the &lt;code>UserBuffer&lt;/code>.
The issue is that no checks are preformed on the &lt;code>UserBuffer&lt;/code> by the IO Manager. Obviously, a &lt;code>ProbeForWrite&lt;/code> could be used on &lt;code>IRP.UserBuffer&lt;/code>, but the programmers of WinPcap didn&amp;rsquo;t. The WinPcap driver had this issue fixed quite a while ago, but the &lt;code>See.sys&lt;/code> driver, based on the WinPcap driver, was forgotten.&lt;/p></description></item><item><title>The Search For Drivers</title><link>https://downwithup.github.io/posts/2018-12-18-post2/</link><pubDate>Tue, 18 Dec 2018 16:51:46 +0000</pubDate><guid>https://downwithup.github.io/posts/2018-12-18-post2/</guid><description>&lt;p>Lately I&amp;rsquo;ve been digging into driver exploitation in Windows. One of the hardest parts is actually finding the drivers to decompile, debug, and experiment with. This led me to look for easy to find drivers. I found &lt;a href="https://www.drivereasy.com">Driver Easy&lt;/a>.&lt;/p>
&lt;p>Driver Easy seems to have a large database of drivers, and I thought I could access them for experimentation purposes. I discovered that the files are retrieved by HTTP requests but the data is encrypted. Coincidentally the program is a .NET and therefore extremely easy to open up and peek at the inner workings.&lt;/p></description></item><item><title>Spoofing the Windows 10's Task Manager</title><link>https://downwithup.github.io/posts/2018-03-03-post1/</link><pubDate>Sat, 03 Mar 2018 16:51:46 +0000</pubDate><guid>https://downwithup.github.io/posts/2018-03-03-post1/</guid><description>&lt;p>Observant Windows 10 users will notice that some of the new metro apps can only run as a single instance. Examples include Settings and Task Manager. Attempting to open another instance of these processes will result in the already opened one being focused.&lt;/p>
&lt;p>I focused on Task Manager. Initially, I began looking for calls to either mutexes or semaphores, which can (if a name argument is passed) be stored in the Windows&amp;rsquo;s object manager. Calls to create a mutex or semaphore with a name that already exists will return &lt;code>ERROR_ALREADY_EXISTS&lt;/code>. In one such instance &lt;code>CreateMutexW&lt;/code> used the wide string: &lt;code>Local\\TM.750ce7b0-e5fd-454f-9fad-2f66513dfa1bTerminal&lt;/code> Having another process create a mutex with this same name will result in &lt;code>ERROR_ALREADY_EXISTS&lt;/code> being returned whenever the second process calls &lt;code>CreateMutexW&lt;/code>. The second process, in this case, would be Task Manager&lt;/p></description></item><item><title/><link>https://downwithup.github.io/old_cves/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://downwithup.github.io/old_cves/</guid><description>&lt;html>
	&lt;link href="https://fonts.googleapis.com/css?family=Oxygen:300,400" rel="stylesheet">
 &lt;link href="https://downwithup.github.io/assets/css/style.css" rel="stylesheet" />
 &lt;link href="https://downwithup.github.io/assets/css/colors-dark.css" rel="stylesheet" />
	&lt;link rel="icon" href="./favicon.png" type="image/x-icon" />
	&lt;head>
		&lt;title>DownWithUp's Github Website&lt;/title>
	&lt;/head>
	&lt;h1>CVE Security Posts&lt;/h1>
	&lt;h4>The discoveries listed here are provided without any warranty&lt;/h4>
 &lt;hr class="cve_hr">

	&lt;div class="display">
 &lt;p class="p_display" id="p_display24">
 About CVE-2020-9540 | Sophos HitmanPro.Alert's 3.7.12 service insecure downloads: &lt;br>
 HitmanPro.Alert, versions 3.7.12 and earlier, download files over http as a normal user, then are run as SYSTEM. The connection is proxyable.&lt;br>
 Security Risk Level: &lt;br>
 CVSS (v3.0) = 7.2 High&lt;br>
 Possible Solution(s) / Fixe(s): &lt;br>
 Use HTTPS or download via the privileged process which would not allow normal users to proxy.&lt;br>
 Exploit Code / Vulnerable Software Source(s) [In Stockpile] : &lt;br>
 &lt;a target="_parent" href="https://github.com/DownWithUp/CVE-Stockpile" style="color: #42bcf4;">Github PoC Link&lt;/a>&lt;br>
 Reported to Sophos's bug bounty and coordinated public disclosure. Future releases are patched.&lt;br>
 &lt;/p></description></item><item><title>CVEs &amp; Vulnerabilities</title><link>https://downwithup.github.io/cves.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://downwithup.github.io/cves.html</guid><description>&lt;p>A collection of my vulnerability research and published disclosures.&lt;/p>
&lt;h2 id="cves">CVEs&lt;/h2>
&lt;hr>
&lt;h3 id="cve-2021-1892">CVE-2021-1892&lt;/h3>
&lt;p>&lt;em>&lt;strong>Qualcomm WLAN Driver Privilege Escalation&lt;/strong>&lt;/em>&lt;br>
The Qcamain10x64.sys WLAN driver uses the insecure &amp;ldquo;UserBuffer&amp;rdquo; member of the IRP allowing attackers to specify arbitrary addresses for usermode buffers.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Security Risk Level: CVSS (v3.0) = 7.2 High&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Possible Solution(s) / Fixe(s):&lt;/p>
&lt;ul>
&lt;li>Use buffered IO&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>Exploit Code / Vulnerable Software Source(s) [In Stockpile]: [Private]&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Reported to Qualcomm&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://docs.qualcomm.com/securitybulletin/april-2021-bulletin.html">https://docs.qualcomm.com/securitybulletin/april-2021-bulletin.html&lt;/a>&lt;/p>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="cve-2020-9540">CVE-2020-9540&lt;/h3>
&lt;p>&lt;em>&lt;strong>Sophos HitmanPro.Alert&amp;rsquo;s 3.7.12 service insecure downloads&lt;/strong>&lt;/em>&lt;br>
HitmanPro.Alert, versions 3.7.12 and earlier, download files over http as a normal user, then are run as SYSTEM. The connection is proxyable.&lt;/p></description></item></channel></rss>