Matthew Profile picture
Mar 16, 2023 14 tweets 8 min read Read on X
Ursnif Loader (Javascript) - Manual Decoding Using Cyberchef

[1/13] 👇🧵

#Cyberchef #Decoding #Ursnif #Malware
[1.1] A quick summary/TLDR before we get started

- Remove comments (manually or using regex)
- Remove "split" strings (manually or using regex)
- Remove obfuscated numbers
- (optional) Rename Variables
- Apply beautifier and syntax highlight
[2] First, I downloaded the sample from Malware Bazaar and loaded it into a safe analysis VM.

You can find the same sample here
bazaar.abuse.ch/sample/2a72302…
[3] Next, I unzipped and loaded the file into #cyberchef.
Immediately I noticed a few things...

1. The file is very large (Almost 7MB)
2. The file begins with a long comment, which appears to contain junk text.
3. There is some "real" code inbetween the comments
[4] To proceed, I used a regex to remove the long text junk between the comment markers /* and */.

This would remove any sequence of 1000 or more characters.

This reduced the #obfuscated script to 939 bytes.
[5] Next, I used a regex to remove the remaining comments.

The #regex I used would remove any comment markers /* or */, as well as any whitespace (\s) inbetween.

Note that I had to escape (\) the (*) in the comment markers to prevent them being interpreted as wildcards.
[6] At this point, several IOC's are visible and the code is mostly readable.

But there are some annoying spaces that remain inside the C2 url, and more scattered throughout the code
[7] To fix the C2 string, I used a regex to remove any instances of plus (\+) surrounded by double quotes ("). Allowing for any (*) whitespace (\s) inbetween.

(The escape (\+) is needed as + is a special character in regex)
[8] At this point, you could apply "javascript beautifier" and "syntax highlighter" and have a pretty readable script with easy to recognize IOC's.

You could very comfortably stop here in a real life analysis situation.
[9] Bonus Tip: Dealing with math

There are some mildly obfuscated numbers remaining within the code.
[10] These are relatively simple to recognize and fix manually.

But thanks to a tip from @mattnotmax, I found that you can instead do this in bulk using cyberchef.

Below is a simple subtract operation using #cyberchef.
[11] Using Regex, it's possible to locate all of these obfuscated numbers automatically.

"Regular Expression + Highlight Matches" is a great way to test out that a regex is working as intended
[12] Once you have a working #regex - "Subsection" can be used to apply future operations to ONLY items matching your regex

TLDR: We can execute math on only the math parts within the code.

Below, we can see this in action.
[13] At this point, the code is essentially clean. Albeit for a few obfuscated variable names.

This is a relatively manual process, which *can* be done in cyberchef, but is better suited for a text editor. I'll leave this as an exercise and a potential future thread :)

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Matthew

Matthew Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @embee_research

May 28
Three Simple Methods For Analysing Malicious Documents

A quick overview of olevba, Microsoft Word, and Procmon for analysing malware documents and extracting embedded macro content.

[1/10] 🧵

#malware #maldocs


Image
Image
Image
Image
2/ You first need to obtain a maldoc.

For this analysis we'll be using a malicious document related to #MuddyWater. Which was initially shared in a post by @suyog41.

bazaar.abuse.ch/sample/d2809e3…
3/ Obtaining Macros With Olevba

The most simple method for maldoc analysis is to use the olevba tool provided with FlareVM.

This tool will automatically extract macro content and highlight any relevant IOC's. All in one short and simple command.

github.com/decalage2/olet…

Image
Image
Read 9 tweets
May 21
🚩Malware Analysis - Decoding a Latrodectus Loader Script

➡️Let's look at a recent Latrodectus loader that uses junk comments to confuse analysis and hide malicious code.

[1/11] 🧵
#malware #cyberchef


Image
Image
Image
Image
2/ Obtaining The Sample

The initial script can be found on Malware Bazaar with SHA256: 71fb25cc4c05ce9dd94614ed781d85a50dccf69042521abc6782d48df85e6de9
3/ Opening the script in a text editor reveals a large number of junk comments.

In-between comments, are occasional lines of "real" code which make up the malware functionality.

Your first step is to remove the junk comments so that you can focus on the "real" code.
Image
Image
Read 11 tweets
Mar 24
Malware Deobfuscation With DnSpy and CyberChef 👨‍🍳

Let's look at some beginner tips for identifying encrypted data with DnSpy.

We'll then utilise CyberChef to recreate the decryption and obtain the address of the C2 server.

[1/12] 🧵

#malware #cyberchef
Image
Image
[2/] Finding encrypted strings

Config values are often initialised (and decrypted) early in execution. Hence the Entry Point is a great place to begin looking.

(In Dnspy, we can select a loaded file and use "Go To Entry Point")

Image
Image
Image
3/ Identifying Config Values

After locating the entry point, we can begin looking for signs of encrypted or obfuscated values.

The first method "Run" contains suspicious references to “”, as well as Arguments.IP and Arguments.Key StringDecrypt.Read
Image
Read 13 tweets
Jan 2
🔥Lumma Stealer - Manually Unpacking and Extracting C2's 🔥

Let's analyse a Lumma malware sample and manually unpack it with Dnspy and x32dbg.

We'll then leverage Ghidra and x32dbg to locate and decrypt four C2 addresses.

[1/24] 🖊️

#Malwareanalysis #Ghidra


Image
Image
Image
Image
1/ The initial sample can be found on Malware Bazaar

You can download it here if you'd like to follow along

bazaar.abuse.ch/sample/0ee580f…
2/ Checking What Were Up Against

Prior to manual analysis, we can submit the hash on @unpacme. This gives us an idea of how many "layers" of packing are present.

The initial sample is .NET based, but the payload is not. (This means we'll need both Dnspy and #Ghidra)
Image
Image
Read 25 tweets
Dec 30, 2023
How to Increase Your Engagement on Cyber-related Twitter Content ✏️

Tips and tricks learnt from writing about #malware on Twitter for 18 months😄

[1/9]
1/ Optimal Post Structure

Statement -> Explanation -> Conclusion

I've found this general flow is the easiest to create and for readers to follow. It follows the 1-2-1 structure by @Nicolascole77

If you don't yet have a post style/structure, this is a great place to start. Image
2/ Aim for Reposts Over Followers

The highest engagement posts are those that get reshared by large accounts.

You don't need a lot of followers for high engagement, as long as you can get reposted by someone who does. Image
Read 10 tweets
Dec 21, 2023
🔬Defeating Obfuscated .HTA Scripts to Obtain Cobalt Strike Shellcode 🔬

Let's look at Cyberchef, Manual Deobfuscation, Multi-stage script analysis and finally emulation to obtain a decoded C2.

[1/17]


Image
Image
Image
Image
2/ The analysis begins with obfuscated .hta script obtained from Malware Bazaar.

You can obtain the file here if you want to follow along.

bazaar.abuse.ch/sample/2c683d1…
3/ Initial Script Review.

The initial script contains multiple obfuscated strings, a partial powershell command, and a large blob of base64 text.
Image
Image
Read 17 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us!

:(