惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
Microsoft Azure Blog
Microsoft Azure Blog
aimingoo的专栏
aimingoo的专栏
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
阮一峰的网络日志
阮一峰的网络日志
Martin Fowler
Martin Fowler
B
Blog
The GitHub Blog
The GitHub Blog
T
Tailwind CSS Blog
Stack Overflow Blog
Stack Overflow Blog
L
LangChain Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
DataBreaches.Net
月光博客
月光博客
人人都是产品经理
人人都是产品经理
IT之家
IT之家
GbyAI
GbyAI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
博客园 - Franky
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Cloudflare Blog
C
Check Point Blog
罗磊的独立博客

SANS Internet Storm Center, InfoCON: green

From a VHDX File to a Remcos RAT - SANS Internet Storm Center ISC Stormcast For Tuesday, June 16th, 2026 https://isc.sans.edu/podcastdetail/9974 ISC Stormcast For Monday, June 15th, 2026 https://isc.sans.edu/podcastdetail/9972 ISC Stormcast For Friday, June 12th, 2026 https://isc.sans.edu/podcastdetail/9970 ISC Stormcast For Thursday, June 11th, 2026 https://isc.sans.edu/podcastdetail/9968 How has use of framing protection security headers changed in the past 3 years? ISC Stormcast For Wednesday, June 10th, 2026 https://isc.sans.edu/podcastdetail/9966 Microsoft June 2026 Patch Tuesday - SANS Internet Storm Center ISC Stormcast For Tuesday, June 9th, 2026 https://isc.sans.edu/podcastdetail/9964 TeamPCP Supply Chain Campaign: Activity Through 2026-06-07 ISC Stormcast For Monday, June 8th, 2026 https://isc.sans.edu/podcastdetail/9962 The Evil MSI Background is Back! - SANS Internet Storm Center ISC Stormcast For Friday, June 5th, 2026 https://isc.sans.edu/podcastdetail/9960 Microsoft's Coreutils for Windows - SANS Internet Storm Center ISC Stormcast For Thursday, June 4th, 2026 https://isc.sans.edu/podcastdetail/9958 Continuing Scans for swagger.json - SANS Internet Storm Center ISC Stormcast For Wednesday, June 3rd, 2026 https://isc.sans.edu/podcastdetail/9956 New Wave Of Phishing Emails with SVG Files - SANS ISC ISC Stormcast For Tuesday, June 2nd, 2026 https://isc.sans.edu/podcastdetail/9954 ISC Stormcast For Monday, June 1st, 2026 https://isc.sans.edu/podcastdetail/9952 Unidentified RAT pushes NetSupport RAT - SANS ISC YARA-X 1.17.0 Release - SANS Internet Storm Center ISC Stormcast For Friday, May 29th, 2026 https://isc.sans.edu/podcastdetail/9950 Analysis of a Year of Files Uploaded to DShield Sensors ISC Stormcast For Thursday, May 28th, 2026 https://isc.sans.edu/podcastdetail/9948 Reconstructing an Akira Ransomware Kill Chain from Perimeter and Endpoint Logs ISC Stormcast For Wednesday, May 27th, 2026 https://isc.sans.edu/podcastdetail/9946 ISC Stormcast For Tuesday, May 26th, 2026 https://isc.sans.edu/podcastdetail/9944 Possible ACR Stealer From Page Impersonating Claude Microsoft Access VBA - SANS Internet Storm Center
Evil MSI Background: BASE64 Statistical Analysis - SANS ISC
SANS Internet Storm Center · 2026-06-15 · via SANS Internet Storm Center, InfoCON: green

I like it when a fellow handler posts a diary entry about images with malicious content. Last one is Xavier: "The Evil MSI Background is Back!".

I like to have a go at the sample with my tools, and see if there are any improvements I can make to my tools.

Let's take a look at the bytes present in this suspicious JPEG file, using my tool byte-stats.py:

The results: almost half of the content (45.65%) is BASE64 characters, and the longest BASE64 string is 1000 characters.

And the longest string is almost 1 million characters long.

Let's take a look with base64dump.py:

The longest BASE64 string is indeed 1000 characters long but doesn't seem to decode to something recognizable.

A special encoding must have been used, and this is something you typically figure out by looking at the script or program that extracts and decodes the payload from this JPEG file.

But what if you don't have that script, what if you just have the JPEG file?

Then you need a bit of skills and luck to figure out what encoding was used.

You can try out all the encodings supported by base64dump.py:

We see long BASE85 encoded strings, but still no string close to 1 million character. So this must be a custom encoding.

To try to figure out what custom encoding is used, I've added a --stats option to base64dump.py:

We see that all BASE64 characters appear in the detected BASE64 strings, but that the letter A appears significantly less than other letters.

If we use a minimum length for the detected BASE64 strings, the letter A is even missing:

Notice that the = character is also missing, but the = character is a padding character in BASE64, not a normal character: it can only appear once or twice at the end of a BASE64 string.

So this statistics feature of base64dump.py helps us to detect that we might be dealing with a custom encoding, based on BASE64, where the letter A has been replaced with another character. Which character would that be? Let's take another look at out first analysis:

Character # is the most frequent. So probably A has been replaced with #.

Let's try that out:

Still no succes.

Let's run byte-stats.py:

This time we have a very long BASE64 string, almost 1 million characters long. But why isn't base64dump.py detecting it?

byte-stats.py looks for longest strings, for example the longest string of consecutive BASE64 characters. But it doesn't check if that string length is a multiple of 4 (that's a requirement for BASE64). While base64dump.py does check this.

So there must still be some kind of encoding we haven't figured out. Let's take a look at the string:

If you are a bit familiar with BASE64 encoding, you will notice that the string has been reversed: == appears at the beginning, and not at the end. And the end is ...qVT, which is TVq reversed, and that's a marker for MZ, e.g., a Windows executable.

So let's reverse the encoded payload with translate.py:

That's indeed a PE file. And it has the same hash as the file Xavier extracted:

This new feature of base64dump.py, --stats, can help with the reversing of custom encodings by providing statistics of the encoding characters.

Didier Stevens
Senior handler
blog.DidierStevens.com