Aura Stealer #1 36bytesmademelosemymind Published: 2025-10-22 · Archived: 2026-04-06 01:06:56 UTC Hello it’s me again today i gonna share my thought process and experience with aura stealer i was looking for some new malware with either a virtual machine or some neat obfuscation. lookin through some forums and news i saw a stealer named Aura Stealer mentioned couple of times. it does not seem to be a big stealer yet but lets see how lumma doing in the next couple of months with all the law enforcement on their asses. sooo i decided to focus on that one i got the hash from this blog https://foresiet.com/blog/aura-stealer-malware-analysis/ https://blog.xyris.mov/posts/aura-stealer-%231-36bytesmademelosemymind/ Page 1 of 15 the random generated icon looks kinda cool tho :3 https://blog.xyris.mov/posts/aura-stealer-%231-36bytesmademelosemymind/ Page 2 of 15 https://blog.xyris.mov/posts/aura-stealer-%231-36bytesmademelosemymind/ Page 3 of 15 after seeing this i was a bit overwhelmed. to make sure this was the real aurastealer and not some packer/crypter i ran it and dumped it with pd32 https://github.com/glmcdona/Process-Dump after dumping we can see that the file went from 2.40MB to 408B which gave me hope the binary is still obfuscated but much less. so after traveling some functions and examining the startin route i found this. https://blog.xyris.mov/posts/aura-stealer-%231-36bytesmademelosemymind/ Page 4 of 15 here we can see the return a1 this means that a1 is most likely important ;3 so lets look into that. https://blog.xyris.mov/posts/aura-stealer-%231-36bytesmademelosemymind/ Page 5 of 15 RunImage sounds good lets dig deeper. https://blog.xyris.mov/posts/aura-stealer-%231-36bytesmademelosemymind/ Page 6 of 15 https://blog.xyris.mov/posts/aura-stealer-%231-36bytesmademelosemymind/ Page 7 of 15 here we can see some xoring from some byte array going on nice. That is a good indicator ^-^ i assume this is decompression because of the size calculation and would fit into typical malware thingis. size_compressed = 285851 - dword_1349000 first i tried decrypt_xor -> decompress but that did not work o_O sooo lets find out why: if we look into our first file (right picture) we can find the same unpacking mechanism like in our dumped file (left picture) just with another key and another byte array. https://blog.xyris.mov/posts/aura-stealer-%231-36bytesmademelosemymind/ Page 8 of 15 lets write some python script to extract that. ^ for the pattern import sys import pefile import struct import os PATTERNS = [ { 'name': 'xor_decrypt_loop', 'asm': [ 'movzx eax, byte ptr [eax + KEY_ADDR]', 'xor al, byte ptr [edx + BLOB_ADDR]' ], 'sig': '0F B6 80 ?? ?? ?? ?? 32 82 ?? ?? ?? ??', 'key_offset': 3, 'blob_offset': 9, 'size_check': { 'asm': 'cmp edx, SIZE', 'sig': '81 FA ?? ?? ?? ??', 'value_offset': 2, 'search_range': 0x100 } } ] def parse_sig(sig): parts = sig.split() pat = [] for p in parts: if p == '??': pat.append(None) else: pat.append(int(p, 16)) return pat https://blog.xyris.mov/posts/aura-stealer-%231-36bytesmademelosemymind/ Page 9 of 15 def find_pat(data, sig): pat = parse_sig(sig) for i in range(len(data) - len(pat)): match = True for j, b in enumerate(pat): if b is not None and data[i + j] != b: match = False break if match: return i return -1 def find_addrs(exe_path): pe = pefile.PE(exe_path) for sec in pe.sections: if b'.text' not in sec.Name: continue data = sec.get_data() for pat in PATTERNS: off = find_pat(data, pat['sig']) if off == -1: continue key_start = off + pat['key_offset'] key_va = struct.unpack(':3 Source: https://blog.xyris.mov/posts/aura-stealer-%231-36bytesmademelosemymind/ https://blog.xyris.mov/posts/aura-stealer-%231-36bytesmademelosemymind/ Page 15 of 15