Autor
|
Tema: Saltarse un tipo de heurística (Leído 4,332 veces)
|
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
|
|
|
En línea
|
"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.
|
|
|
En línea
|
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 . 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.
|
|
|
En línea
|
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
Desconectado
Mensajes: 1.678
Máximo exponente 9DB9F1AEED2FADBDE 997BBE20FEDA92
|
Ahhmm...de esta manera puedo usar APIs sin declararlas antes no? que bien 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
|
|
|
En línea
|
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 . 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 . Aquí me quedo . Espero que tengas suerte con el tema. Saludos.
|
|
|
En línea
|
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
|
|
|
En línea
|
"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
Desconectado
Mensajes: 1.678
Máximo exponente 9DB9F1AEED2FADBDE 997BBE20FEDA92
|
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
|
|
|
En línea
|
StasFodidoCrypter 1.0 - 100% (old) | StasFodidoCrypter 2.0 - 85% (deserted) | Fire AV/FW-Killer - 97% (deserted) | R-WlanXDecrypter 1.0- 100% |
|
|
|
|
|