Ⅰ C語言 注入到其他進程或隱藏進程
這個東西,不是C語言能實現的,
你必須好好學學WinSDK,調用Win32介面函數,去實現..C語言雖然強大,但沒強大到異想就能天開的地步!!!
那得去找比爾蓋茨,只有他有那1000多個,Win Api的內部實現代碼,不過那是他的命根子,估計殺了他,他也不會拿出來的..
要真去理解它的內部實現,估計 成千上百個奇形怪狀的結構,莫名奇妙的宏,面目可憎的指針的指針的指針的地址的指針就能嚇死人了..演算法就不提了.
Ⅱ 如何編譯C文件
編譯C文件用GCC。
編譯C文件常用方法:
單個文件:
g++
file.cpp
這是最簡單形式,預設輸出為a.out,可以用-o命令指定輸出文件,比如g++
file.cpp
f.out
多個文件:
g++
-c
1.cpp
-o
1.o
g++
-c
2.cpp
-o
2.o
g++
1.o
2.o
-o
prog.out
鏈接成可執行文件:
一般用g++
-o
file
file.cpp
多個文件是g++
-o
file
file1.cpp
file2.cpp
...
編譯C++不是用GCC而是G++.
如果用GCC能編譯但不能鏈接.
多個文件:
1.編譯多個文件,但不連接:
g++
file1.cpp
file2.cpp
會生成兩個文件:file1.o,
file2.o
2.連接:
g++
-o
outFileName
file1.o
file2.o
會生成一個可執行文件:outFileName。
如果想,一步就完成編譯和連接,那麼:
g++
-o
outFileName
file1.cpp
file2.cpp
-o選項控制是否連接。
Ⅲ vc2010怎麼進行c語言編譯
1,在windows桌面中Visual Studio打開軟體並新建項目。
Ⅳ C語言DLL 注入問題
把DLL注入到其它正常程序中這個行為會被殺毒軟體視為病毒行為, 被注入的程序不會自動調用DLL中的函數, 只有通過注入後讓DLL中的函數自動運行, 在DLL的入口函數dllmain()中自動調用.
Ⅳ c 語言關於dll 注入的問題
DLL的主函數不是這么寫的,當然會沖突了,因為基地址想同了
Ⅵ c/c++實現dll注入
#include<windows.h>
intDllInject(HANDLEhProcess,constchar*dllname){
unsignedlong(__stdcall*faddr)(void*);
intt;
size_tabc;
HMODULEhdll;
HANDLEhp,ht;
LPVOIDpaddr;
unsignedlongexitcode;
intdllnamelen;
hdll=GetMoleHandleA("kernel32.dll");
if(hdll==0)return0;
faddr=(unsignedlong(__stdcall*)(void*))GetProcAddress(hdll,"LoadLibraryA");
if(faddr==0)return0;
dllnamelen=strlen(dllname)+1;
paddr=VirtualAllocEx(hProcess,NULL,dllnamelen,MEM_COMMIT,PAGE_READWRITE);
if(paddr==0)return0;
WriteProcessMemory(hProcess,paddr,(void*)dllname,strlen(dllname)+1,(SIZE_T*)&abc);
ht=CreateRemoteThread(hProcess,NULL,0,faddr,paddr,0,NULL);
if(ht==0){
VirtualFreeEx(hProcess,paddr,dllnamelen,MEM_DECOMMIT);
return0;
}
WaitForSingleObject(ht,INFINITE);
GetExitCodeThread(ht,&exitcode);
CloseHandle(ht);
VirtualFreeEx(hProcess,paddr,dllnamelen,MEM_DECOMMIT);
return1;
}
intfun(char*exename,constchar*dllname){
STARTUPINFOAsi;
PROCESS_INFORMATIONpi;
if(exename==0)return0;
if(dllname==0)return0;
memset(&si,0,sizeof(si));
memset(&pi,0,sizeof(pi));
if(CreateProcessA(NULL,exename,NULL,NULL,0,CREATE_SUSPENDED,NULL,NULL,&si,&pi)==0)return0;
if(DllInject(pi.hProcess,dllname)==0)return0;
ResumeThread(pi.hThread);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
return1;
}
啟動程序並注入DLL的代碼。
Ⅶ 我的匯編在代碼注入器能注入,但是在VC編譯的程序下調用就崩潰了。
因為VC會額外的加一些代碼進去,所以......你要保證匯編,加到C函數後,預期的編譯後的函數不變化嘗試在函數前加入__decspec(nacked) 此時,VC將不對你聲明的這個函數做任何附加匯編指令,你只管寫你的匯編就成了
Ⅷ 怎樣用c語言編譯
C編譯的整個過程很復雜,大致可以分為以下四個階段:
預處理階段在該階段主要完成對源代碼的預處理工作,主要包括對宏定義指令,頭文件包含指令,預定義指令和特殊字元的處理,如對宏定義的替換以及文件頭中所包含的文件中預定義代碼的替換等,總之這步主要完成一些替換工作,輸出是同源文件含義相同但內容不同的文件。
編譯、優化階段編譯就是將第一階段處理得到的文件通過詞法語法分析等轉換為匯編語言。優化包括對中間代碼的優化,如刪除公共表達式,循環優化等;和對目標代碼的生成進行的優化,如如何充分利用機器的寄存器存放有關變數的值,以減少內存訪問次數。
匯編階段將匯編語言翻譯成機器指令。
鏈接階段鏈接階段的主要工作是將有關的目標文件連接起來,即將在一個文件中引用的符號同該符號在另外一個文件中的定義連接起來,使得所有的目標文件成為一個能夠被操作系統裝入執行的統一整體。
Ⅸ 如何用C實現給PE文件注入代碼
可以自己寫程序加殼,要注意PE文件的格式。
可能需要修改PE文件的頭部某些欄位,而且還要用到匯編代碼的,最後把寫的匯編的二進制數據寫入這個PE文件,以前看過一點簡單的注入代碼的,網上應該有很多教程的。
Ⅹ c語言匯編代碼注入
指定內存肯定是不行. 但是你可以通過函數調用或修改IP的值讓CPU跳轉到代碼塊, 當然函數調用肯定是更方便.
你只是一個程序, 不可能命令操作系統去分配一塊指定的內存.