Skip to content

Commit 0bf1586

Browse files
committed
LummaStealer writeup
1 parent 594cebc commit 0bf1586

1 file changed

Lines changed: 13 additions & 13 deletions

File tree

_posts/2025-07-15-lummastealer.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ bu Project3+0x18c7 "r $t0 = eax; g";
319319
bu Project3+0x18da "r $t0 = eax; g";
320320
```
321321
322-
Then, you can dump with `.writemem`:
322+
Finally, set one at `Project3+0x1a2c` and run (or rerun) the dropper. Once it breaks, you can dump LummaStealer with `.writemem`:
323323
324324
```
325325
# Write from (buffer_addr, buffer_addr+size-1).
@@ -347,16 +347,16 @@ We can also use a tool like `pedis` (PE disassembler) to confirm that this disas
347347
348348
```
349349
$ pedis -r -e 0x400000 -o 0xb610 -m 32 dump.bin | head -n 10
350-
b610: 55 push ebp
351-
b611: 53 push ebx
352-
b612: 57 push edi
353-
b613: 56 push esi
354-
b614: 81 ec 20 02 00 00 sub esp, 0x220
355-
b61a: e8 11 8f 03 00 call 0x444530
356-
b61f: 84 c0 test al, al
357-
b621: 0f 84 8e 02 00 00 jz 0x40b8b5
358-
b627: e8 b4 0a 03 00 call 0x43c0e0
359-
b62c: 84 c0 test al, al
350+
b610: 55 push ebp
351+
b611: 53 push ebx
352+
b612: 57 push edi
353+
b613: 56 push esi
354+
b614: 81 ec 20 02 00 00 sub esp, 0x220
355+
b61a: e8 11 8f 03 00 call 0x444530
356+
b61f: 84 c0 test al, al
357+
b621: 0f 84 8e 02 00 00 jz 0x40b8b5
358+
b627: e8 b4 0a 03 00 call 0x43c0e0
359+
b62c: 84 c0 test al, al
360360
```
361361
362362
The dump even has a valid PE header:
@@ -455,13 +455,13 @@ In addition, Ghidra should correctly decompile the switch statements. (There are
455455
456456
The disassembly and decompilation is not without its blind spots. First, all context of imported library functions is lost; the references appear only as their raw file addresses without labels. Second, because we also lose the stack and heap, the values of obfuscated call styles (calling registers or memory offsets) is also lost.
457457
458-
An interesting obfuscation technique involves the use of a custom syscall wrapper. This is always located at `$t0+0x5446`. You can set a breakpoint prior to the main program's execution for analysis:
458+
An interesting obfuscation technique involves the use of a custom syscall wrapper. This is always located at `$t0+0x40000+0x5446`. You can set a breakpoint prior to the main program's execution for analysis:
459459
460460
```
461461
bu Project3+0x1a2c "bu $t0+0x00040000+0x5446; g"
462462
```
463463
464-
I chose to break at `0x1a2c` because that's the call site of the injected code.
464+
Again, I chose to break at `0x1a2c` because that's the call site of the injected code.
465465
466466
The call site uses its own custom logic to make syscalls directly instead of using the higher-level function wrappers.
467467

0 commit comments

Comments
 (0)