api hashs redux
Author: David Zimmer
Date: 01.10.11 - 6:04am
here is a little hindsight is 20/20 moment.
previous posts I have talked about live extraction of hashs with run time logging. If you are talking about run time decryption functions, run time logging is the easiest way because decryption functions are more than you want to extract and reverse and it just works without much fuss comparitivly. I have done a lot of this, so this is the hammer i applied to the hash gen nail.
But the api hashers are usually pretty simple, like 10 lines of asm. The real work is in parsing the PE structure to get all the api names. From the stuff i did for that last post i realized, we dont need to parse the export table to generate all these hashs, we know the strings its going after, we can supply them ot the hasher in anyway we want.
This little side step makes extracting the hasher and running it over the strings list much much easier. Here is the export name string list of all the exports for common dlls.
There are a couple online hash lists for the harmony and FireEye posted a nice table of rorD hashs.
The next thing we need to do is make an online database of the different hash values we have found, and hasher implementations. Its also pretty easy to make a known hash brute forcer to figure out both the API name and bit shift used if the hasher follows the basic pattern and you have a list of possible api
tmp = Split(txtKnownAPI, vbCrLf) For Each X In tmp For i = 0 To 254 If UCase(GetHash(CStr(X), CLng(i))) = UCase(txtHash2Match) Then MsgBox "Found it: " & X & " ror: " & i Exit Sub End If Next NextThis looks to be what MS did in their MSEC Debugger Extension