Featured image of post Pikabot malware analysis

Pikabot malware analysis

Unpacking and analyzing a Pikabot malware sample

Sample Info

7e26c4f6f313e5248898a1dbe706ae5b998e12ff16947cb3bfda690ca62612c4

Initial Analysis

Based on low number of imports, plus a large and high entropy .rsrc section, this sample is likely packed.

 Signs of packing

Among the imports are IsDebuggerPresent and GetTickCount which could be signs of anti-vm techniques that are present in this sample as well. There were also a large number of exports, all named after some drawing related functionality.

Loader

In the DLLMain that binja finds, there is a call to DisableThreadLibraryCalls which is a tactic that increases the invisibility of the DLL. It will disable the DLL_THREAD_ATTACH and DLL_THREAD_DETACH notifications.

 Nothing much here

However, there isn’t much more to see within this main function. Due to the massive amount of exports, and not having access to the delivery method part of the sample, figuring out the function responsible for unpacking is going to be difficult. However, Pikabot is known to use a lot of anti analysis, so a good place to start would be to look for usage of IsDebuggerPresent, since the locations in where it appears are likely part of the unpacking process. And fortunately, it only appears once, making this idea a success. This gives me a starting point from where I can start unraveling this sample.

 Turning the table on their anti-anlysis

Unfortunately, following up the call history still results in a lot of options for arriving to this check, so I decide to use process of elimination to start getting rid of some of the exported functions.

** WORK IN PROGRESS **

Payload

I jumped ahead with unpac.me to unpack the sample and start looking at the main payload. Right away, we can see that there is some multiplication of values (maybe a potential key), and data is being copied into some buffers. There are also references to chrome extensions in some of the strings in this _start function.

 Pretty straightforward

There does seem to be some level of obfuscation when determining the indices of the arrays by using while loops with 2 conditions, one of them being impossible.

comments powered by Disqus