ç®åï¼ç½ç»æ¸¸æç夿ä»ç¨åºè§åº¦ä¸»è¦åä¸ºè¾ å©åçå¨ä½å¤æåå æ ¸åçåè®®å夿ãå¨ä½å¤æä¸»è¦å¸®å©ç©å®¶è¿è¡ä¸äºé夿§çå³å¨éï¼ç½ç»ä¸æè®¸å¤ä»ç»è¿æ¹é¢çç¨åºï¼æé®ç²¾çµå°±æ¯ä¸ä¸ªå¾å¥½çä¾åãåè®®å夿åç»äººä¸ä¸ªå¾ç¥ç§çæè§ï¼è¿æ¹é¢å¨ç½ç»æ¸¸æä¸æå¤çæææ¯ä¼ å¥çè±æºå¤æï¼è¿ä¹æ¯å ä¸ºä¼ å¥æåæ¬¢è¿èå·²ã
å¨å ·ä½ç讲解åï¼æå¾æ³æ¯ç¹å«çäºæ ï¼æ¯ç«å¦é¢ä¸æ¯æç飿 ¼ï¼ææ´å欢èªç±ä¸ç¹çãæ¢ç¶æä»¬ä¸»è¦æ¯é对åè®®å夿çå¶ä½æç¨ï¼å°±å æ¯æ¯ç½ç»æ¸¸æçæµç¨åä¸äºä¹±å ¶å «ç³çäºæ ï¼å¦ææåç¯ä½ 们çå°æ¹æ¬äººåä¸èææ¿ãå¦æä½ æå°ç¦çè¯å¯ä»¥ç´æ¥è·³å°ä½ æå ´è¶£çå°æ¹ã
æç©ç½æ¸¸çåå²å¾çï¼åå¼å§ç©å¾æ¯éåå®è´ï¼æ»æ¯å¨å è´¹çæ¶åç©ï¼å¨ä¸ä¸ªæå¡å¨éé¢åçæé¿çå°±æ¯å¨åå·å§é¾äºï¼ç°å¨æå¡å¨å¤§æ¦æ©å°±è¯¥åæè å¹¶ç»äºå§ï¼å¨é颿çååå«Blueroseï¼åååé¢å¸¦çæ¯æçèä¸,å°å·ä¸å¤§å ï¼ä¸è¿åå齿¯ä¸æ ·çãç¨è¿ä¸ªå忝å 为æå说æå¾å¿§éï¼ä½å´æ»æ±çå¸æï¼æä»¥å°±ç¨è¿ä¸ªååäºã忥ç©çæ¯å¤§è¯è¥¿æ¸¸IIï¼æ¯æåæçç©çï¼ç°å¨è½ç¶ä¸äºçï¼ä½å¶å°è¿ç©ï¼éé¢çååå«ææ³ªï¼ç¨çæ¯å¥³æ§ç©å®¶ï¼å 为è¿ä¸ªåå太女æ§åäºãå¨åå¼å§ç©å¾æ¶åï¼æè§å¾èªå·±å¥½å¤ç¬ï¼é£æ¶åå¨å¤§å¦è½ç¶æè¾¹é½æ¯å妿åï¼ä½å å¿ä»ç¶å¤ç¬ï¼ï¼æåææç©å¤§è¯çæ¶åï¼é£å¤©æä¸æå åä¸éï¼æ´ä¸çæªé¦æ¢¦èè«é¹æå¾å²¬æ¯è¯é °??è·å¾å¸æ¦æ»¦æ¢å´è?è¿?è¯è·½é£§é?ç?æµå®?å¾?æ¦é²?ç§©ãµè¢ æ?
ç±äºç©å¤§è¯è¥¿æ¸¸IIçå岿¯è¾é¿ï¼èä¸å¯¹å¤§è¯è¥¿æ¸¸ç游æä¹æ¯è¾çæï¼æä»¥è¿æ¬¡çæç¨å°±ç¨å¤§è¯è¥¿æ¸¸IIåä¸ºç®æ äºï¼ä½æç¨å°½å¯è½èèéç¨æ§ãä¸è¿æå声æï¼æ¬äººå¯¹ç½ç»æ¸¸æå¹¶ä¸çæï¼å æ¤è¯·å¿åæ¬äººè°è®ºç½ç»æ¸¸æçåå åæååå±ä»¥åç½æ¸¸å¤æå¯¹ç½ç»æ¸¸æçå²å»çä¹±å ¶å «ç³çäºæ ãæå¯¹ç½ç»ç¼ç¨ä¹æ¯ä¸ç¥åè§£ï¼å æ¤æå°½å¯è½çé¿å 嫿ç½ç»ç代ç ï¼åæ¶ï¼ç±äºåè®®åç夿éè¦åéæ°æ®ï¼ä½å¯ä»¥éè¿å ¶å®çåæ³æ¥è¿è¡ï¼æ¯å¦éè¿ç½æ¸¸å®¢æ·ç«¯æ¥ä»£çï¼ã
å 说说æå¡å¨å客æ·ç«¯çé讯ï¼ç±äºæå¡å¨åæ¬å°ç客æ·ç«¯ä¸å¨åä¸ä¸ªå°çä½ç½®ï¼ç¸è·æ¯è¾é¥è¿ï¼å æ¤æ°æ®çä¼ è¾å°±éè¦ä¸å®çæ¶é´ï¼è¿å°±å³å®äºå¨ç½æ¸¸ä¸æ°æ®åªè½è¿è¡éæ ·çæ¶éå¤çèä¸è½è¿è¡çæ£å®æ¶çæ°æ®å¤çã䏾便¥è¯´ï¼å±åç½C-Sï¼åæç²¾è±ï¼çæ°æ®å¤çï¼å½ä½ ç§»å¨çæ¶åï¼å¿ é¡»åç¥å«ççµèç©å®¶èªå·±çç§»å¨ï¼è¿ä¸ªæ°æ®çä¼ è¾ç±äºå¨å±åç½å é¨ï¼æ°æ®çä¼ è¾æ¯è¾å¿«ï¼é乿¯è¾å°ï¼çµèå¯ä»¥è¿è¡å¿«éçéæ ·åæ°æ®å¤çæ¥è¿è¡å¤ææ¯å¦æä¸æè ç§»å¨æ¯å¦è¿åè§åï¼æ¯å¦åç©ºå¾æ¥ï¼ççï¼ä½å¨ç½ç»ä¸è¿è¡ç©çæ¶åï¼å¯¹æ°æ®çéæ ·å°±ä¸åæ¬å°å±åç½é£ä¹å¿«äºï¼ä»¥å¤§è¯è¥¿æ¸¸IIï¼ä»¥åç®ç§°å¤§è¯å§ï¼å°æå 个åï¼ä¸ºä¾ï¼å¨ç§»å¨çæ¶åï¼å¹¶ä¸æ¯å°æ¯ä¸æ¥çæ°æ®ä¸ä¸ªä¸ä¸ªä¼ éç»æå¡å¨ï¼èæ¯å°æ¬æ¬¡ç§»å¨è§åæææ°æ®å æäº¤ç»æå¡å¨ï¼è®©å客æ·ç«¯å¼å§ææ¾å¨ç»ï¼å½æå¡å¨å¤ç宿°æ®ä¹åï¼å°±ä¼å°ä½ç½®åä¼ ç»å®¢æ·ç«¯ï¼å®¢æ·ç«¯ä»¥è¿ä¸ªä½ç½®æ°æ®ä¸ºåºç¹ï¼è¿è¡äººç©ç䏿¬¡ç§»å¨ï¼è¿ä¸ªæ°æ®çéééè¦é䏿®µæ¶é´æ¥è½è¿è¡ä¸æ¬¡ééï¼ç¸å¯¹äºCSæ¥è¯´ï¼è¿ä¸ªééå¯åº¦è¦æ¯CSééå¯åº¦å°ã
彿å¡å¨å客æ·ç«¯è¿è¡éè®¯çæ¶åï¼æ°æ®å æ¯è³å ³éè¦çãæ°æ®å 䏿°æ®çè§å忝åè®®å夿æéè¦çåºç¡ä¹ä¸ãç±äºç½ç»æ°æ®å¯ä»¥è¿è¡æ¦æªï¼ä¸ºäºé²æ¢æ°æ®è¢«ä¿®æ¹ï¼æ°æ®å ä¸çæ°æ®é½æ¯å å¯è¿è¡ï¼è³äºå¦ä½å å¯ï¼è¿ç±æå¡å¨å客æ·ç«¯éè¿ä¸å®çç®æ³æ¥æ§è¡ãå æ¤ï¼æå¡å¨å客æ·ç«¯çé讯大æ¦å°±æ¯ä¸é¢è¿ä¸ªæ ·åï¼
客æ·ç«¯è¿è¡æ°æ®çéé===ãæ°æ®æå ==ãæ°æ®å å¯==ãåéæ°æ®å°æå¡å¨==ãæå¡å¨è¿è¡æ°æ®è§£å¯====ãæå¡å¨å¤çæ°æ®å ==ï¼å¤ç宿¯åä¼ æ°æ®ï¼==ãåä¼ æ°æ®æå ==ãåä¼ æ°æ®å å¯==ãæ°æ®åä¼ ==ã客æ·ç«¯æ¥æ¶æ°æ®==ã客æ·ç«¯è§£å¯æ°æ®==ã客æ·ç«¯æ°æ®å¤ç
大æ¦çæµç¨å°±æ¯ä¸é¢çï¼æ¬æ¥æ³ç¨å¾çï¼ç±äºæå两天ç©å åä¸å°å¿å¼åäºä¸æ ¹å åæ¡ï¼å¤§æ¦å åæ¡ææçæ¶åé¢ç²éåäºå§ï¼ï¼ç°å¨çµè128MBçå åï¼è¿è¡ä¸ä¸ªWord 2003é½ä¸æ¯é常çå¿«äºï¼å æ¤å°±æ¾å¼äºå¨Photoshopä¸ç»å¾äºï¼æ±ææ±æã
æä»¬çç®æ å°±æ¯æ°æ®å ï¼å³æ¦æªæ¸¸æé讯é´çæ°æ®æ¥è¿è¡ç¸åºçä¿®æ¹æè è¿è¡åéä¼ªæ°æ®å ãæå¤§æ¦å®äºä¸ä¸ªè®¡åï¼ä¸è¿è¿ä¸èè¯å®ä¸è½å ¨é¨è®²å®ï¼æåªè½å¨ä¸çä¹ååä¸ä¸ç¹ï¼æ¶é´æéï¼è½åå¤å°å°±åå¤å°å§ã
ç®æ ç¨åºï¼å¤§è¯è¥¿æ¸¸II客æ·ç«¯ãï¼ä½ æä¸ææå¡å¨ç«¯åï¼æçè¯æä¹æ³è¦^_^ï¼
ç®æ ï¼æ°æ®å
ç®çï¼æ°æ®å æ¦æªï¼ä¿®æ¹ï¼ä¼ªåé
ç¼ç¨è½¯ä»¶ï¼è¿ä¸ªæ æè°å§ï¼ä¸è¿æè¿éç¨çæ¯C++ Builder 6,åæ®µæ¶é´åCB 6ç¸å ³ç项ç®ï¼èä¸CB 对äºç¨åºçé¢çç¼åæ¯ææ¹ä¾¿ä¸è¿çäºï¼å°±æ¯ç¼è¯çæç¹æ ¢åçæçç¨åºæç¹å¤§ãï¼æç½ï¼å䏿¯åææºé¡¹ç®ï¼æ å¿å®¹éåï¼ï¼æååéç¨åºåæ¯äºï¼å »æäºä¸è¯ä¹ æ¯ï¼æ²¡åæ³äºã
æè·¯ï¼æä»¬çç¨åºè¦å¹²æ°å«çç¨åºçè¿è¡ï¼æå¥½çåæ³æ¯ä½¿ç¨debugçåæ³ï¼ä¸è¿ï¼æå¹¶æ²¡ææç®ä½¿ç¨debugçåæ³ï¼æå¯¹ç¨åºçdebugå¹¶ä¸å¤ªçæï¼èä¸è®¨åç¼å没ç¨ç代ç ãæåå¤éç¨çº¿ç¨æ³¨å ¥çåæ³ï¼è³äºçº¿ç¨æ³¨å ¥ï¼å为ä»ä¹è¦çº¿ç¨æ³¨å ¥æè½å¹²é¢ï¼è¿æ¹é¢çç¥è¯æå¥½èªå·±ççãWindows æ ¸å¿ç¼ç¨ãéé¢è®²çï¼å¦åè¿ä¸ªæç¨è¦æ²¡å®æ²¡äºäºã彿们ççº¿ç¨æ³¨å ¥å°ç®æ ç¨åºä¹åå°±æ¹ä¾¿å¤äºï¼å°±å¯ä»¥ä¸ºææ¬²ä¸ºäºãå æ¤æä»¬ç第ä¸ç®çæ¯å°çº¿ç¨æ³¨å ¥å°ç®æ ç¨åºä¸ã
é¢å¤æ´»å¨ï¼
çº¿ç¨æ³¨å ¥æç®åçè«è¿äºhookäºï¼å¦æè¿è¿é½ä¸ç¥éçè¯ï¼æå¥½èµ¶å¿«å°ç½ä¸æ¥æ¥æè 翻翻ãWindowsæ ¸å¿ç¼ç¨ãã为äºé²æ¢æ¸¸æå é¨åå¨åhookçåå¨åå¤æçæ£æµï¼æå°ç¨èªå·±çç¨åºæ¥å¯å¨ç®æ ç¨åºãç±äºç½æ¸¸çä¸å®ææ´æ°ï¼å æ¤å¨å¯å¨ç¨åºçæ¶åæå¥½å°å级跳è¿å»ï¼è³å°å¨å¤§è¯è¿æ ·çç¨åºä¸ææ¯è¿æ ·åçï¼å 为é¢ç¹å级åçæ¬æ£æµæ»è®©æççæ¶é´å¤ªé¿ã
ä¸é¢æ¥è¿è¡å ·ä½çåæ³ï¼æå°½å¯è½çå¼åºè¯¦ç»çæ¥éª¤ï¼å¦æä½ ç¨çæ¯VCæè å ¶å®çè¯ï¼åªè¦æ³¨ææ ¸å¿ç代ç å°±å¯ä»¥äºã
æ°å»ºä¸ä¸ªå·¥ç¨ï¼å¨çªä½ä¸æ·»å 两个æé®(TButtonæè å ¶å®ç±»åçæé®)ï¼ä¸ä¸ªå°æ 颿¹ä¸ºå¯å¨æ¸¸æï¼å¦ä¸ä¸ªæ 颿¹ä¸ºå¯å¨å¤æãåæ·»å ä¸ä¸ªTOpenDialogã对äºé»è®¤ççªä½é£ä¹å¤§ççé¢æç¹æµªè´¹ï¼å æ¤å°çªä½å¼å¾å°ç¹ï¼å«å¤§å¤§çæªå人çã
åç¹å¯å¨æ¸¸æçæé®å°±å¯ä»¥è¿è¡ç¼å该æé®çäºä»¶äºï¼é»è®¤çæ¯OnClickäºä»¶ãä¸é¢å°±æ¯äºä»¶ç代ç ï¼
if(FileExists(ExtractFileDir(Application->ExeName)+"\\path.ini")==FALSE)
{ /*æå°ç®æ ç¨åºçè·¯å¾ä¿åå°äºå½åç¨åºç®å½ä¸çpath.iniæä»¶ä¸ï¼ä½å¦æå½åç¨åºç¬¬ä¸æ¬¡è¿è¡çè¯ï¼æ¯ä¸åå¨è¿ä¸ªæä»¶çï¼æä»¥å°±å¯ä»¥ç¨TOpdnDialogæ¥æå¼äºï¼åè¿ç¹åªæ¯ä¸ºäºæ¹ä¾¿ï¼ä¸ç¨æ¯æ¬¡é½å¾ç¹ç®æ ç¨åº*/
if(OpenFile->Execute())
{
AnsiString AppPath="path="+ExtractFilePath(OpenFile->FileName);
WritePrivateProfileSection("XY2PATH",AppPath.c_str(),(ExtractFileDir(Application->ExeName)+"\\path.ini").c_str());//èç®æ ç¨åºçè·¯å¾åå°path.iniæä»¶ä¸ã
}else
{
return;
}
}
//ä¸é¢ç代ç å¼å§å¯å¨ç®æ ç¨åº
PROCESS_INFORMATION pi;
STARTUPINFO si;
si.cb=sizeof(si);
si.lpReserved=NULL;
si.lpDesktop=NULL;
si.lpTitle=NULL;
si.cbReserved2=0;
si.lpReserved2=NULL;
si.dwFlags=STARTF_USEPOSITION;
si.dwX=0;
si.dwY=0;
char Appname[300];
GetPrivateProfileString("XY2PATH","path","",Appname,250,(ExtractFileDir(Application->ExeName)+"\\path.ini").c_str());
strcat(Appname,"\\xy2.exe");
/*以ä¸é½å¨æå»ºç®æ ç¨åºçç¯å¢è®¾ç½®ï¼ä¸é¢è°ç¨CreateProcessæ¥å¯å¨ç®æ ç¨åºï¼æ³¨æå°åæ°ç¬¬3ä¸ªåæ°è¦å¡«ä¸ºç®æ ç¨åºçè·¯å¾ï¼ç¬¬6ä¸ªåæ°ä¸ºCREATE_SUSPENDEDæ¯ä¸ºäºå°ç¨åºå è½½å°å åä¸ä¹åå¯ä»¥è¿è¡ä¸äºä¿®æ¹ï¼ä»¥æ´å¥½çé å夿ç¨åºçè¿è¡*/
if(CreateProcess(Appname,NULL,NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,ExtractFileDir(Appname).c_str(),&si,&pi)==0)
{
//å¯å¨ç®æ ç¨åºå¤±è´¥
ShowMessage("error open exe file");
return;
}
gamehandle=pi.hProcess;
/*卿¬èä¸è¦æ§è¡ç¨åºçè¯ï¼æå¥½å°è¿ä¸ªæ¡ä»¶æ³¨éæï¼æå°å¨ä»¥åçæç¨ä¸è¿è¡è®²è§£ï¼è¿é大æ¦è¯´ä¸ä¸åè½ï¼ç¬¬ä¸ä¸ªWriteæ¯ä¸ºäºè·³è¿Update,第äºä¸ªæ¯ä¸ºäºéåºçæ¶å䏿å¼ç½é¡µï¼æççµèè¦æ¯éåºå¤§è¯çæ¶åæå¼ç½é¡µçè¯ï¼ä¸é´çæ¶é´å¯ä»¥æ½ä¸å æ ¹çäºï¼æä»¥å°ç¨åºæ¹äº*/
if(WriteProcessMemory(gamehandle,(void*)0x0042BC13,No_Update,1,NULL)==false
||WriteProcessMemory(gamehandle,(void*)0x00430a80,No_HTML,2,NULL)==false
)
return;
threadhand=pi.hThread;
gamethreadid=pi.dwThreadId;
//æ¢å¤ç¨åºï¼è®©ç¨åºæ§è¡
ResumeThread(pi.hThread);
/*ä¸é¢ç代ç 乿¯æ¬èä¸ä¸éè¦çï¼æå°ç©åçæå ³ä¿¡æ¯åå°äºå½åç®å½ï¼å¤æå¯å¨ç¨åºç®å½ï¼ä¸çitem.iniæä»¶ä¸ï¼ä½ç®æ ç¨åºä¸å¹¶ä¸ç¥é夿å¯å¨ç¨åºçè·¯å¾ï¼å æ¤æå¨ç®æ ç¨åºæä»¶å¤¹ä¸å»ºç«äºä¸ä¸ªååå«path.iniæä»¶ï¼éé¢å å«äºitem.iniçè·¯å¾*/
String inipath= "path="+ExtractFileDir(Application->ExeName)+"\\item.ini";
WritePrivateProfileSection("ITEM",inipath.c_str(),(ExtractFileDir(OpenFile->FileName)+"\\path.ini").c_str());
å¯å¨ç¨åºä¸å°å¯å¨å±æ§è®¾ç½®ä¸ºCREATE_SUSPENDED屿§æ¯ä¸ºäºèèå°ç¨åºçéç¨æ§åç¨³å®æ§ï¼å¨è¯¥å½æ°ä¹åï¼å¦æç®æ ç¨åºä¸åå¨æå¿ è¦ä¿®æ¹ç代ç çè¯ï¼å¯ä»¥å¨è¿éè¿è¡ä¿®æ¹ï¼ä¹å¯ä»¥å¯¹ç®æ ç¨åºè¿è¡åå夿çå¤çãå ¶å®ï¼debugå½¢å¼ç夿就å¯ä»¥å¨è¿éè¿è¡debugç¯å¢ç建ç«ï¼ä»¥åå¨ç®æ ç¨åºä¸æå ¥Int 3æä»¤æ¥è¿è¡æ¦æªå¤çäºï¼ææä¹è¶æ¥è¶æè§å°èªå·±å¨åè°è¯å¨çæç¨ï¼ï¼ï¼ã
è¿è就讲å°è¿éï¼å¦æåæçè¯ï¼æå°±æ²¡åæ³èµ¶ä¸å ¬äº¤è½¦äºï¼ç¶åè¿å¾èµ°åå®¶ï¼å¤©åªï¼è¿ä¹å·ç天~~~~èµ¶ç´§ä¸ä¼ åå®¶å§ãCSDNä¸çBlogä¸ç¥éæä¹è´´éä»¶ï¼æè¿å¾èèéä»¶æ¾å°ä»ä¹å°æ¹ï¼å 为æäºæä»¶æ²¡åæ³è´´åºæ¥äºãä¸è¿gameresä¸å¯ä»¥è´´ä¸300Kçéä»¶ï¼å¸æè½å¤ç¨çã
ä¸ä¸æ¬¡æä»¬è¯´äºç®æ ç¨åºçå¯å¨ï¼ä»¥åå¯¹ç®æ ç¨åºçé¢å¤çãè¿ä¸èä¸äºåå¯ä»¥å°å¤æççªå£æ¾åºæ¥ï¼å ·ä½è½ä¸è½è¯´è¿ä¹å¤ï¼åªè½ççåäºã
å 为æå³å®éç¨æä¿çåæ³Hookæ¥æ³¨å ¥çº¿ç¨ï¼ææ¶åæé½è§å¾èªå·±æ¯å¦æå¿ è¦è¿ä¹åï¼å 为Debugçåæ³ä¹ä¸éï¼ï¼ä¸ºäºç¨åºçæ´æ®éæ§åæ´å¿«çç§»æ¤ï¼ä»¥åç®åä¸ç¹ï¼æå³å®è¿æ¯éç¨Hookãè¿éæå说ä¸ä¸ï¼å¦æä¸ææ±ç¼åç¨åºè°è¯çè¯ï¼æå¥½å è¡¥ä¸ä¸è¯¾ï¼è¿å¨ä»¥åè¦ç¨çã
æä»¬å æ¥ç¼åHook.dllé¨åï¼ç¨åºçå¯å¨é¨åææ¶ä¸ç¨çä¼äºï¼æä»¥åå°±å°é£é¨åå«åwg.exeå§ï¼ï¼æ¨å¤©çæ¥å¿äºè¯´ä¸å£°äºï¼æè®©å±è½çWriteProcessMemoryä¸çæ°æ®å°åæ¯å¤§è¯9.16æ´æ°ä¹åçæåä¸ä¸ªçæ¬ï¼å¨9.16æ´æ°ä¹åççæ¬ä¸éè¦å å°ç¨åºè±å£³ï¼è¿é¨åæå¨ä»¥åä¼è¯´çï¼æä»¥è®©å¤§å®¶å±è½æé£ä¸¤ä¸ªåå åçæä½ã
对äºHook.dllæ¥è¯´ï¼æä»¬åå¤ä½¿ç¨F12鮿¥æ¿æ´»å¤æï¼å¨CBä¸ç¼ådllé常ç®åï¼å»ºç«ä¸ä¸ªdll项ç®å·¥ç¨ï¼ç¶åå°±å¯ä»¥æ·»å 代ç äºã建ç«å·¥ç¨çæ¶åä¸ç¹è®°å¾éä¸ä½¿ç¨C++,使ç¨VCL,Multi Threadè¿å 个é项ï¼çç±ï¼
1ã使ç¨C++æ¯ä¸ºäºè®©æçç¹å£æ°´ï¼æå°APIHOOKå°è£ å°äºä¸ä¸ªç±»éé¢ï¼ã
2ã使ç¨VCLæ¯å 为æå¤ªææ°ï¼ä¸æ³ç¼åçé¢ä»£ç ã
3ã使ç¨å¤çº¿ç¨æ¯å 为ç¨åºå¿ é¡»ã
ç±äºå¤æä¸»çªä½å¨dllä¸ï¼å æ¤çæçdll就伿¯ä¸è¬çdll大ãçªä½å ¶å®å¯ä»¥æ¾å°ä»»ä½å°æ¹çï¼åªæ¯æ¾å°dll䏿¯è¾æ¹ä¾¿è以ï¼èä¸å¨è¯´çæ¶åå¯ä»¥æ´å¥½çåå¼ã
以䏿¯Hook.cppç代ç ï¼
//---------------------------------------------------------------------------
#include
#include
#include "hookapi.h"
#include "hookform.h"
#pragma hdrstop
#pragma argsused
HHOOK g_hHook = NULL;//Hookç奿
HINSTANCE DllHinst = NULL; //Dllç奿
HWND gamehWnd; //游æå¥æ
HANDLE hThread = NULL; //线ç¨å¥æ
HWND wghandle = NULL; //夿çªå£å¥æ
HANDLE gamehandle; //游æçªå£å¥æï¼å¿äºææ²¡æç¨
HINSTANCE gameInstance; //游æçï¼ä¹ä¸ç¥éç¨äºæ²¡ç¨
DWORD ThreadID; //线ç¨ID
LRESULT CALLBACK KeyBoardHook(int nCode, WPARAM wParam, LPARAM lParam);//é®çHook
extern "C" __declspec(dllexport)bool EnableHook(DWORD dwThreadId);//å¯å¨Hookç彿°
extern "C" __declspec(dllexport)bool DisableHook();//å¸è½½Hookç彿°ï¼åä¸é¢ç彿°ä¸æ ·é½æ¯ä¸ºäºå¤é¨å¯ä»¥æ§å¶
DWORD WINAPI Thread1(PVOID param);//线ç¨å½æ°ï¼å¨è¯¥å½æ°ä¸ï¼å°å¯å¨å¤æçªå£
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
DllHinst = hinst;//è½½å ¥Dll
return 1;
}
extern "C" __declspec(dllexport)bool EnableHook(DWORD dwThreadId)
// 导åºå½æ°EnableHook()
{
if (g_hHook == NULL)
// å®è£ æ°é©å
{
g_hHook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyBoardHook, DllHinst,
dwThreadId);/*è®°å¾CreateProcessä¸çåæ°åï¼æä»¬ä¼ è¿çåæ°æ¯ç®æ ç¨åºç主线ç¨ID,表示æä»¬å¯å¨çæ¯çº¿ç¨Hookï¼è䏿¯å ¨å±Hook,è¿æ ·ä¸ä¼å¯¹å ¶ä»ç¨åºäº§çä»»ä½å½±å*/
}
if (g_hHook)
{
return true;
}
return false;
}
extern "C" __declspec(dllexport)bool DisableHook() // 导åºå½æ°DisableHook()
{
/*å¸è½½Hook,ç°å¨ææ¶å è¿æ ·äºï¼å ¶å®å¨çå®çæ åµä¸å¦æè¦åçå®ç¾çè¯ï¼éè¦å许å¤äºæ ï¼å¦æç´æ¥å ³é客æ·ç«¯çè¯ï¼è¿æ ·å°±è¶³å¤äºï¼è¿ä¸ªå½æ°å ¶å®å¹¶æ²¡æä»»ä½çç¨å¤ï¼è¿éä» ä» æ¯ä¸ºäºè¯´æå¤é¨å¯ä»¥ä¸»å¨æ§å¶å¤æçå¯å¨åå ³éèå·²*/
if (g_hHook != NULL)
{
UnhookWindowsHookEx(g_hHook);
g_hHook = NULL; // 叿æ°é©å
return true;
}
return false;
}
LRESULT CALLBACK KeyBoardHook(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode >= 0)
{
if (wParam == 123)//123为F12çé®ç ï¼å¯ä»¥æ¥çMSDNæè Windows APIåèæ¹é¢ç书æ¾å°ï¼èªå·±å个å°ç¨åºæµè¯ä¹å¯ä»¥
{
if (hThread == NULL)//è¿éç¡®ä¿çº¿ç¨å¯å¨ä¸æ¬¡ï¼è䏿¯å¤æ¬¡ï¼æ¯ä¸æ¬¡çå¯å¨é½åå¼å ¥ä¸ä¸ªå¤æçªå£
{
hThread = CreateThread(NULL, 0, Thread1, NULL, NULL, &ThreadID);//å¯å¨çº¿ç¨ï¼è¯¥çº¿ç¨å¾å¿«æ§è¡å®æ¯
}
}
}
return (CallNextHookEx(g_hHook, nCode, wParam, lParam));//å©ä¸çè®©ç®æ ç¨åºå»å¤ç
}
Dllä¸ç彿°æ¯å¤æç¨åºçæ ¸å¿ãå¨çº¿ç¨å¯å¨æåä¹åï¼å°±å¯ä»¥å¸è½½Hookäºï¼è¿éåªæ¯ä¸ºäºç®ä¾¿ï¼æä»¥å°Hookä»ç¶ä¿çã
å¨CBä¸ç¼ç¨çæ¶åï¼æå¥½å°ç¨åºçæä»¶åä¿åæä½ æ³è¦çååï¼å«ç¨é»è®¤çååï¼é»è®¤çå忝Unit+æ°åç»æï¼è䏿¯ç±»åä¹ç±»çï¼è¿æ¯æä¸å欢CBçä¸ä¸ªåå ï¼å¦å¤ä¸ä¸ªåå æ¯æ²¡æå ¨å±å¹ä¸å®¶çé¢ï¼ç¼å代ç çæ¶åå ¶ä»ç太ç¢äºï¼ç¬¬ä¸ä¸ªåå æ¯å¯ä»¥å¨ä»»æçå°æ¹å代ç ï¼æç代ç åæ²¡æå ·ä½ç飿 ¼ï¼ç»å¸¸é æè«åå ¶å¦çé误ã忬¢ä»çåå æ¯å 为ç¨å®å¼åä¸è¥¿å¤ªå¿«äºï¼è䏿¹ä¾¿ï¼æ¯å¨VCä¸é»åä»£ç æ¹ä¾¿å¤äºã
åºè¯è¯´å®ï¼å¯ä»¥æ·»å 夿çªå£çè§å¾ï¼å¨Newèåä¸éæ©New Formï¼å¦æä½ æ³Newå ¶ä»çè¯æä¸å对ï¼è½ä¸è½å¾å°æ£ç¡®çç»ææå°±ä¸ç¥éäºã
ç½ä¸æä¸å°äººé®æä¹å¨æ¸¸æä¸å¼¹åºå¤æçªå£ï¼æå·²ç»åççæç¹ä¸èç¦äºãå¨CBä¸åæ¯ææ¹ä¾¿çäºæ äºï¼ä½å¾è®¾ç½®å¥½æ§ä»¶ç屿§ï¼å 为æå¯¹ä½¿ç¨VCæ¥ç¼åçé¢ä¸çæï¼æ´å¤çæ¶åæé½æ¯ç´æ¥ä½¿ç¨APIæ¥ç¼åçï¼ææ²¡æå¦ä¹ MFCçæç®ï¼ï¼æä»¥å¯¹äºå欢VCçæå们åªè½è¯´æ±æäºã
å¯¹äºæ°çªä½ç屿§è®¾ç½®æ¯æéè¦çï¼è¦ä¸ç¶è«åå ¶å¦çé误åç»æè®©äººåå¾ç¥ç»ãä¸é¢æ¯æå¯¹dllä¸çªä½å±æ§çä¸äºæ»ç»ï¼å¦æä½ æå ¶ä»ä¸æçå°æ¹ï¼å¯ä»¥ç»æE-Mailæè MSNæè QQã
1ã Visible屿§ä¸å®è¦ä¸ºfalseï¼å¦åçªä½æ²¡åæ³ç§»å¨
2ã FormStyle屿§æå¥½ä¸ºfsNormal,ä½ä¸å®ä¸è¦æ¯fsMDIChildæè fsMDIFormï¼è¿ä¸¤ä¸ªä¼å¼èµ·è«åå ¶å¦çé误ã
3ã 妿åå¼å§å¼¹ä¸åºæ¥çè¯ï¼å°BorderStyle屿§æ¹ä¸ºbsDialogãæå¨åé¢çæç¨ä¸ç±äºè¦éè½½TFormç彿°ï¼å æ¤è¿éæ¯ä¸æ¯å¿ 须为bsDialogä¸å¤ªæ¸ æ¥äºï¼æ¯ç«æ¯å¾æ©ä»¥åç代ç äºã
å ¶ä»ç注æç¹å¥½å没æäºãä¸é¢æ¯CreateThreadè°ç¨ä¸çThread1彿°å®ç°ï¼
DWORD WINAPI Thread1(PVOID param)
{
TwgHookForm* wgHookForm;
wgHookForm = new TwgHookForm(NULL);
wghandle = wgHookForm->Handle;
/*ææ¶å°ä¸é¢çåéæ¶æ¯å±è½æï¼æå¨çªä½å建ä¹åéè¦çªä½åä¸é¨åå¿ è¦å¨ä½ï¼æä»¥éç¨åéæ¶æ¯çæºå¶æ¥äºï¼å ¶å®å¹¶ä¸æ¯å¿ éè¿ä¹åçï¼ç±è®¸åå¼å§ç¼åçæ¶åï¼APIHOOKä¸çå 容齿¯éè¿Messageçæ¹å¼æ¥åçï¼è¿éä¸ºäºæ¹ä¾¿å°±éè¿Messageæ¥å¼äºï¼ç®æ¯ç¹åå²åå å§*/
SendMessage(wghandle, WM_USER + 2, NULL, NULL);
wgHookForm->ShowModal();
delete wgHookForm;
return 1;
}
å°ç°å¨ä¸ºæ¢åºè¯¥å¯ä»¥å¨æ¸¸æä¸å¼¹åºå¤æçªå£äºï¼æä»¬çç¬¬ä¸æ¥ä¹ç®å®æäºï¼å¤æç¨åºçå¹³å°å°ç°å¨ä¸ºæ¢æå»ºå®äºï¼å©ä¸çå°±æ¯å·¥å ·çå¶ä½åå¿ è¦ä»£ç çç¼åãå¨ä¸ä¸è䏿åå¤è¯´ä¸ä¸APIHOOKçæ¹æ³ã
ä¸ä¸èä¸æä»¬è¯´äºå¤æå¹³å°çæå»ºï¼æä»¬åå®äºHook.dllåwg.exe,ä½å¦ä½è®©wg.exeè°ç¨Hook.dllä¸ç彿°ï¼å¯ä»¥èªå·±æ¥çCBçæç¨æè å°ç½ä¸æ¥æ¥ãå¨è¿éææ¯å¨wg.exeçHookæé®äºä»¶ä¸æ·»å äºä¸é¢çè¯å¥æ¥å®ç°ï¼
if(gamethreadid)
{
if(EnableHook(gamethreadid)==false)
ShowMessage("error");
}
ä½ å¯ä»¥ç¹å»Hookæé®å¨æ¸¸æçé¢åºæ¥ä¹åï¼ç¶å卿¸¸æçé¢ä¸æF12é®è°åºå¤æççªå£ã
æ¨å¤©ç尾巴å®äºä¹åï¼å¼å§ä»å¤©çæç¨ãä»å¤©ææ³è¯´è¯´APIHOOKãè½ç¶APIHOOKå¨å¤§è¯æ¸¸æç夿å¶ä½ä¸ä¸æ¯å¿ é¡»çï¼ä½ä¸ºäºæç §ä¸è¬çå¶ä½æµç¨é¡ºåºï¼å°±å å°è¿é¨åå å ¥å°éé¢å»äºã
使ç¨APIHOOKçåå ä¹å¾ç®åï¼æ¸¸æè¯å®è¦è°ç¨æäºç³»ç»å½æ°ï¼ä½¿ç¨APIHOOKå¯ä»¥ç®åçæ¥çä¸äºå ³é®çä¿¡æ¯å¹¶è¿è¡ä¿®æ¹ï¼å°±è¿ä¹ç®åççç±ï¼æ¯çï¼æä»¬ä¸ååç¨æççå宰鸡çãããï¼ã
Jeffrey Richterç¨äºå¤§éçç¯å¹ æ¥è®²å¦ä½æå ¥DLLåææ¥API,å¦æä½ ä¸ç¥éJeffrey Richteræ¯è°çè¯ï¼æ»è¯¥ç¥éãWindowsæ ¸å¿ç¼ç¨ãçä½è å§ï¼å¦æä¸ç¥éï¼æåï¼ç³»ç»æåºä¾å¤ï¼ä½ æ¯å¤æäººå§ãæä»¬çç¨åºè¿è¡å¨ç¨æ·å±ä¸ï¼JãRæåºäºä¸¤ç§åæ³ï¼ä¸ç§æ¯æ¹å代ç ï¼æåå¼å§ä¹è¯å¾ç¨è¿ç§åæ³ï¼åæ¥åç°è¿ç§åæ³ç¡®å®åå¨çæ¼æ´å¤å¤ï¼åJãR说ç䏿 ·ãæåè¿æ¯éç¨æä½æ¨¡åçè¾å ¥èäºã
卿¥çèµæçè¿ç¨ä¸ï¼æåç°JãRç代ç å¨ä¸æWindows 2000ä¸å¹¶ä¸è½è¿è¡ï¼é¾éæ¯å¤å½äººç¨çç³»ç»åä¸å½çä¸ä¸æ ·ï¼ï¼ï¼åæ¥åªå¥½JãRçæè·¯ï¼éæ°å®æäºä¸ä¸å½æ°ï¼ä½å¤§é¨å彿°é½ä¸æ ·çãä¸ºäºæ¹ä¾¿ï¼ææ²¡æå¨ç±»ä¸æè·LoadLibraryAãLoadLibraryWãLoadLibraryExAåLoadLibraryExW,乿¯å 为æä»¬ç夿ç¨åºè¿è¡çæ¶å游æççªå£å·²ç»åºæ¥äºï¼è¯¥å è½½çä¸è¬é½å è½½äºã
ä¸é¢æ¯æçAPIHOOKç±»çæºä»£ç ï¼è¯¥æºä»£ç æ¯æ ¹æ®J.Rçæè·¯éæ°æ´çä»çæºä»£ç æ¥çï¼
/*HookAPI.h*/
#include "windows.h"
class CAPIHOOK
{
public:
CAPIHOOK(PSTR pszCalleeModName,PSTR pszFuncName,PROC pfnHook,HANDLE prochandle,HMODULE hmod);
~CAPIHOOK();
operator PROC(){return (m_pfnOrig);};
public:
static PVOID sm_pvMaxAppAddr;
static CAPIHOOK* sm_pHead;
CAPIHOOK* m_pNext;
PCSTR m_pszCalleeModName;
PCSTR m_pszFuncName;
PROC m_pfnOrig;
PROC m_pfnHook;
BOOL m_fExcludeAPIHookMod;
HMODULE m_module;
HANDLE m_handle;
private:
pfnOrig,PROC pfnHook,BOOL fExcludeAPIHookMod);
void WINAPI ReplaceIATEntryInOneMod(PCSTR pszCalleeModName,PROC pfnOrig,PROC pfnHook,HMODULE hmodcaller,HANDLE handle);
void WINAPI FixupNewlyLoadedModule(HMODULE hmod,DWORD dwFlags);
FARPROC WINAPI GetProcAddress(HMODULE hmod,PCSTR pszProcName);
};
/*HookApi.cpp*/
#include "hookapi.h"
#include
#include "imagehlp.h"
PVOID CAPIHOOK::sm_pvMaxAppAddr = NULL;
const BYTE cPushOpCode = 0x68;
CAPIHOOK *CAPIHOOK::sm_pHead = NULL;
CAPIHOOK::CAPIHOOK(PSTR pszCalleeModName, PSTR pszFuncName, PROC pfnHook,
HANDLE prochandle, HMODULE hmod)
{
m_handle = prochandle;
if (sm_pvMaxAppAddr == NULL)
{
SYSTEM_INFO si;
GetSystemInfo(&si);
sm_pvMaxAppAddr = si.lpMaximumApplicationAddress;
}
m_pNext = sm_pHead;
sm_pHead = this;
m_pszCalleeModName = pszCalleeModName;
m_pszFuncName = pszFuncName;
m_pfnHook = pfnHook;
m_pfnOrig = ::GetProcAddress(GetModuleHandleA(pszCalleeModName),
m_pszFuncName);
assert(m_pfnOrig != NULL);
if (m_pfnOrig == NULL)
{
return;
}
if (m_pfnOrig > sm_pvMaxAppAddr)
{
PBYTE pb = (PBYTE)m_pfnOrig;
if (pb[0] == cPushOpCode)
{
PVOID pv = *(PVOID*) &pb[1];
m_pfnOrig = (PROC)pv;
}
}
m_module = GetModuleHandle(pszCalleeModName);
ReplaceIATEntryInOneMod(m_pszCalleeModName, m_pfnOrig, m_pfnHook, m_module,
prochandle);
}
CAPIHOOK::~CAPIHOOK()
{
ReplaceIATEntryInOneMod(m_pszCalleeModName, m_pfnHook, m_pfnOrig, m_module,
m_handle);
CAPIHOOK *p = sm_pHead;
if (p == this)
{
sm_pHead = p->m_pNext;
}
else
{
BOOL fFound = FALSE;
for (; !fFound && (p->m_pNext != NULL); p = p->m_pNext)
{
if (p->m_pNext == this)
{
p->m_pNext = p->m_pNext->m_pNext;
break;
}
}
assert(fFound);
}
}
void WINAPI CAPIHOOK::FixupNewlyLoadedModule(HMODULE hmod, DWORD dwFlags)
{
if ((hmod != NULL) && ((dwFlags &LOAD_LIBRARY_AS_DATAFILE) == 0))
{
for (CAPIHOOK *p = sm_pHead; p != NULL; p = p->m_pNext)
{
ReplaceIATEntryInOneMod(p->m_pszCalleeModName, p->m_pfnOrig, p->m_pfnHook,
hmod, m_handle);
}
}
}
FARPROC WINAPI CAPIHOOK::GetProcAddress(HMODULE hmod, PCSTR pszProcName)
{
FARPROC pfn = ::GetProcAddress(hmod, pszProcName);
CAPIHOOK *p = sm_pHead;
for (; (pfn != NULL) && (p != NULL); p = p->m_pNext)
{
if (pfn == p->m_pfnOrig)
{
pfn = p->m_pfnHook;
break;
}
}
return (pfn);
}
void WINAPI CAPIHOOK::ReplaceIATEntryInOneMod(PCSTR pszCalleeModName, PROC
pfnCurrent, PROC pfnHook, HMODULE hmodcaller, HANDLE handle)
{
ULONG ulSize;
PIMAGE_IMPORT_DESCRIPTOR pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)
ImageDirectoryEntryToData(hmodcaller, TRUE, IMAGE_DIRECTORY_ENTRY_IMPORT,
&ulSize);
if (pImportDesc == NULL)
{
return ;
}
for (; pImportDesc->Name; pImportDesc++)
{
PSTR pszModName = (PSTR)((PBYTE)hmodcaller + pImportDesc->Name);
if (lstrcmpiA(pszModName, pszCalleeModName) == 0)
{
break;
}
}
if (pImportDesc->Name == 0)
{
return ;
}
PIMAGE_THUNK_DATA pThunk = (PIMAGE_THUNK_DATA)((PBYTE)hmodcaller +
pImportDesc->FirstThunk);
for (; pThunk->u1.Function; pThunk++)
{
PROC *ppfn = (PROC*) &pThunk->u1.Function;
BOOL fFound = (*ppfn == pfnCurrent);
if (!fFound && (*ppfn > sm_pvMaxAppAddr))
{
PBYTE pbInFunc = (PBYTE) *ppfn;
if (pbInFunc[0] == cPushOpCode)
{
ppfn = (PROC*) &pbInFunc[1];
fFound = (*ppfn == pfnCurrent);
}
}
if (fFound)
{
HANDLE handle1 = OpenProcess(PROCESS_ALL_ACCESS, FALSE,
GetCurrentProcessId());
DWORD dwIdOld;
VirtualProtectEx(handle1, ppfn, sizeof(pfnHook), PAGE_READWRITE, &dwIdOld)
;
if (WriteProcessMemory(handle1, ppfn, &pfnHook, sizeof(pfnHook), NULL) ==
false)
{
return ;
}
else
{
VirtualProtectEx(handle1, ppfn, sizeof(pfnHook), dwIdOld, &dwIdOld);
return ;
}
}
}
}
ä¸é¢æ¯APIHOOKç宿´ä»£ç ãä¸é¢æ¯ä½¿ç¨çä¾åï¼æ¦æªWString2ID彿°ï¼ï¼
typedef unsigned long(__stdcall *WString2ID)(char const*);
unsigned long __stdcall myWString2ID(char const*);
CAPIHOOK *My_WString2ID;
My_WString2ID = new CAPIHOOK("windsoul.dll", "?WString2ID@@YGKPBD@Z",
(PROC)myWString2ID, gamehandle, gameInstance);
èªå·±çmyWString2IDçå®ç°ï¼
unsigned long __stdcall myWString2ID(char const *a)
{
// SendMessage(wghandle,WM_USER+1,(WPARAM)a,NULL);
return (((WString2ID)My_WString2ID->m_pfnOrig)(a));
}
ä¸é¢æ¯ç¨æ¥æ¦æªæ¸¸æçWndProc彿°çï¼å½æ¶åçæ¶å为äºå ¨é¢ï¼è³äºå¦ä½å»ç¨ï¼é便èªå·±äºï¼åæ£ææ²¡æç¨ã
gamehWnd = GetActiveWindow();
gamehandle =GetCurrentProcess();
gameInstance = (HINSTANCE)GetWindowLong(gamehWnd, GWL_HINSTANCE);
gameproc = (WNDPROC)SetWindowLong(gamehWnd, GWL_WNDPROC, (LONG)
MyMsgProc);
èªå·±ç¨æ¥æ¿æ¢æ¸¸æçWndProc彿°ï¼
LRESULT APIENTRY MyMsgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM
lParam)
{
/*å¨è¿éåèªå·±æ³åçäºæ ï¼å©ä¸ç让游æçWndProcæ¥å¤ç*/
return CallWindowProc(gameproc, hwnd, message, wParam, lParam);
}
è¿ä¸èå°è¿éå°±ç»æäºï¼ä¸ä¸èå¼å§æ¸¸æç¨åºçç ç©¶ãæå¥½åå¤å¤§è¯å®¢æ·ç«¯9.16æ´æ°ä¹åçæåä¸ä¸ªçæ¬ï¼ä¸ä½¿ç¨ææ°ççæ¬æä¸é¢çåå ï¼
1ã 妿坹ç°å¨å®¢æ·ç«¯ä½è¿å¤çéæ¼çè¯ï¼å°ä¼åç°åçå·ç±»çç¨åºæ¯å夿è¦ç®åï¼è¿ä¸æ¯ææå¸æçå°çã
2ã æ°çæ¬éç¨çå å¯åæ³ï¼åç²¾åº¦æµ®ç¹æ°å å¯ï¼å¨è®²è§£ä¸é常ç麻ç¦ï¼ä¸æ¯ä¸è¬äººå®¹æå ¥é¨çï¼ä½è§£å³çåæ³å9.16ä¹åççæ¬ä¸æ ·ï¼åªæ¯ç¹çè以ã
3ã è±å£³åçç¨åºææ´å¤çéè¦äººå·¥è¯å«çé¨åï¼è¿ä¼é æä¸å¿ è¦ç麻ç¦ï¼å å¾è¯¯å¯¼å¤§å®¶ã
ä¸ä¸æ¬¡æä»¬è¯´äºå¤æä¸APIHOOKååºæ¬å¹³å°çæå»ºï¼ä½ä» ä» åªç¨APIHOOKå¨å¤§å¤æ°çæ¶åå¹¶ä¸è½è¾¾å°ç®çï¼æ²¡æåªä¸ªå ¬å¸ä¼å°ç½ç»æå å å¯è§£å¯è§£å çç¨åºæ¾å¨dllä¸ä»¥å½æ°çå½¢å¼å°±å¯ä»¥æ¥çãæä»¥è¿èæ¥è®²è§£ä¸ºç®æ ç¨åºæå åè¡¥ä¸æ¥ä¿®æ¹ç¨åºçæ§è¡è·¯å¾ï¼éè¿è¿ç§åæ³è®©ç®æ ç¨åºæä¸ºæä»¬ç奴é¶ã
å两天ç±äºé¡¹ç®çå ³ç³»ï¼è½æäºä¸¤å¤©æç¨ï¼å¯¹ä¸èµ·å¤§å®¶ãä»å¤©åæç¨æ¶æåç°ï¼æå½æ¶ç ç©¶ç¨åºæä»¶ç¨çæ¯ida 4.17ççæ¬ï¼å段æ¶é´å忢æäº4.7çæ¬ãè½ç¶ç°å¨ççæ¬æ¯ä»¥åæ´å¥½ç¨ï¼ä½çæ¬çä¸å ¼å®¹å´è®©æå¤´çï¼æåæ²¡åæ³åæ¾äºä¸ª4.17ççæ¬æ¥ç¨ãè¿èä¸è¿éè¦ä½¿ç¨çå¦å¤ä¸ä¸ªå·¥å ·æ¯W32dasm,W32dasmçå¿«æ·å为ç¨åºæè¡¥ä¸çæ¹ä¾¿æ¯ææå欢ä»çåå ï¼ida 4.7æ¯å¦æ¯æåW32dasm飿 ·çåè½æè¿ä¸ç¥éï¼æ¯ç«æååè£ ä¸ï¼è¿æ²¡æä¹ç¨è¿å¢ã
åºè¯å°±ä¸è¯´äºï¼ä¸ºç¨åºæå åè¡¥ä¸å忏¸æä¿®æ¹å¨å·®çä¸å¤ªå¤ï¼åªæ¯æ¸¸æä¿®æ¹å¨ä¿®æ¹çæ¯æ°æ®ï¼èå åè¡¥ä¸ä¿®æ¹çæ¯æä»¤ï¼å¨åä¹åï¼è¯·ä¸å®è¦å好ç¥ç¥·ï¼è½ç¶æä¼å°½å¯è½çå°ææç¥éçæ³¨æç¹è¯´åºæ¥ï¼ä½ä»ç¶ä¸æ¢ä¿è¯ä½ æ¯å¦ä¼åºç°éæ³æä»¤ãå åè¶çççï¼å¦æåºç°èå±ä¸å®è¦ä¹°å½©ç¥¨é¿ï¼åæ£ææ¯æ²¡æéå°è¿ã
å ³äºå¦ä½åå åè¡¥ä¸ï¼å¨çéªåºç飿¬ãå å¯ä¸è§£å¯ãä¸æè¯¦ç»ç讨论ï¼è¿éç®å说ä¸ä¸æ³¨æç¹ï¼
1ã å°½å¯è½çè°ç¨ç¨åºæ¬èº«ç彿°ï¼é¤é没æåæ³åèªå·±å è½½å½æ°ã
2ã å¨è°ç¨å½æ°ä¹åï¼ä¸å®è¦å°ç¸å ³å½æ°çå¯åå¨å 容ä¿åï¼å¨è°ç¨ç»æåï¼è¦å°å ¶å 容æ¢å¤ã
3ã æ³¨æå æ 平衡ã
4ã ç±äºæä»¬è¦ç»æºç¨åºæ·»å 代ç ï¼å æ¤å°½å¯è½çæ¾ä¸å空ä½çä¸ä¼è¢«ä¿®æ¹å åï¼å å页4K对é½ï¼è¿æ ·çå ååºè¯¥ä¸é¾æ¾ï¼ï¼å¦æè¿æ°å·®çè¯ï¼åªè½èªå·±æ¥ç³è¯·å åäºã
对äºxy2.exeçç¨åºæ¥è¯´ï¼ç¨åºéé¢ä½¿ç¨äºSendMessage彿°ï¼è¿ä¸ªå½æ°ä½¿ç¨æ¹ä¾¿ï¼å± æå¾å¤§çå¹¿æ³æ§å°±ä¸ç¨è¯´äºãå æ¤æä»¬åå¤ä½¿ç¨è¯¥å½æ°æ¥å°ç¸å ³å 容åéç»å¤æç¨åºãä¸è¿å¨åè¿é¨åä¹åï¼æåå¤å ç»ç¨åºæè¡¥ä¸æ¥é²æ¢ç®æ ç¨åºå级æ¥ç»ç»æã
ä½å¤ææä¸»è¦ç工使¯å¯¹ç®æ ç¨åºçåæç¨åº¦ï¼åæç¨åºä¸»è¦ç¨çæ¯æ±ç¼çç¥è¯ï¼ææ¶åææ³å°æ±ç¼è¯´ææ¯è°è¯ç¨åºæ´ç¡®åäºï¼å 为æå¤§é¨åæ¶é´é½æ¯å¨ç¨æ±ç¼è°è¯ï¼åªæå¾å°ä¸é¨åæ¶é´æ¥ç¨æ±ç¼åç¨åºã
å°xy2.exeçç¨åºç¨idaåç¼è¯ï¼è¿éç¨çxy2.exeççæ¬æ¯9.16ä¹åççæ¬ï¼ä»8.12ä¹åå°9.16ä¹åxy2.exeçç¨åºé½æ²¡æå任使¹å¨ï¼å æ¤è¿æ®µæ¶é´çä»»æä¸ä¸ªé½æ¯å¯ä»¥çã
ç§»å°å°å.text:0042BB80å¤ï¼è¿éå°±ä¸ç»åºä»£ç äºï¼ä»£ç 太é¿äºï¼è¶³è¶³æ8个页é¢ãè¿é大æ¦å°±æ¯WinMain彿°ï¼æä¸ç¥éIda4.7ä¼å°è¿éä½ä¸ºé£ä¸ªå½æ°åï¼æç¨çæ¯4.17ï¼ç»ç彿°åæ¯ï¼sub_0_42BB80 proc nearãéè¿ç 究该段代ç ï¼æä»¬å¯ä»¥åç°è¿æ®µä»£ç æ¯å½æ°ç主ç¨åºï¼åè½æä¸é¢çå ç¹ï¼
1ã æ£æ¥æ´æ°ï¼å¯å¨æ´æ°ç¨åºã
2ã æ¥çæ¯å¦ææ¾å½åæä»¶ï¼å¹¶å°ç¨åºè®¾ç½®ä¸ºç¸åºçç¶æã
3ã 设置ç¨åºè¿è¡çé度ã
ç¨åºæ´çåçCä»£ç æå°±ä¸åäºï¼æ ¹æ®idaç»åºçç¨åºæµç¨å¾å¾å®¹æååºæ¥çã
ç ç©¶ç¨åºå¯ä»¥åç°å¨å°å.text:0042BC13å¤ç»è¿å¤æä¹åï¼å°±ä¼æ£æ¥å¤§è¯ç¨åºç5ä¸ªä¸»çæ¬çæä»¶ï¼éè¿è°ç¨ä¸é¢ç彿°ï¼
.text:0042BC15 0B8 call sub_0_4480E0
.text:0042BC1A 0B8 call sub_0_4481C0
.text:0042BC1F 0B8 call sub_0_4482A0
.text:0042BC24 0B8 call sub_0_448380
.text:0042BC29 0B8 call sub_0_448460
.text:0042BC2E 0B8 push ebx
.text:0042BC2F 0BC call sub_0_4488E0
.text:0042BC34 0BC add esp, 4
对äºä¹åçè¿ä¸ªå¤æï¼ææ³å¯è½æ¯ææ¾å½åç¨çã卿¥ä¸æ¥ç5个callä¹åï¼è°ç¨sub_0_4488e0æ¥è°ç¨å级ç¨çå¯¹è¯æ¡ãè¦ä¿®æ¹ç¨åºé¿å å级就ç®åå¤äºï¼åªç¨å°è¿ä¸ªè·³è½¬è·³è¿å»å°±è¡äºãè¿éä¸ç¨èèå æ ç平衡ï¼ä»idaç»åºçå æ æéæ¥çï¼è·³è½¬ååçå æ æ¯ä¸æ ·çã
å æ¤å¨æä»¬è°ç¨CreateProcessä¹åï¼å°±å¯ä»¥éè¿WriteProcessMemoryæ¥è¿è¡ä¿®æ¹äºï¼å°è·³è½¬æä»¤çåä¸ä¸ªåèæ¹ä¸º0xEBï¼åé¢çé£ä¸ªåèä¸ç¨å¨äºï¼åé¢çé£ä¸ªåèæ¯ç¨æ¥æ§å¶è·³è½¬çè·ç¦»çãè¿æ ·åæ¥ç代ç å°±ç±ï¼
.text:0042BBE9 0B8 jz short loc_0_42BBF1
å为
.text:0042BBE9 0B8 jmp short loc_0_42BBF1
äºã
å¦æä½ ä¸æ¿æéè¿ç¨åºæ¥è°ç¨ï¼ä¹å¯ä»¥ç´æ¥ä¿®æ¹xy2.exeæä»¶æ¥åå°ï¼ä¸è¿å»ºè®®å°xy2.exeæä»¶å¤ä»½ä¸ä¸ªï¼æ¹ä¾¿ä»¥åå级ç¨ã
对äºé¿å å¼¹åºä¸»é¡µï¼ä¹å¯ä»¥éè¿ç¸åçåæ³ï¼ä½ä¿®æ¹ç䏿¯ä¸ä¸ªè·³è½¬æä»¤äºãè¿éä» ä» ç»åºä¸ç¹ç¹æç¤ºï¼å¯ä»¥èªå·±å»å°è¯ï¼
1ã xy2.exeéè¿è°ç¨ShellExecute彿°æ¥å¼¹åºä¸»é¡µï¼å¯ä»¥æ ¹æ®å¼ç¨æ®µæ¥å¿«éæ¾å°è°ç¨çåæ³ã
2ã å¨ä¿®æ¹çæ¶åï¼æ³¨æå æ ç平衡ç¹ã
ä¸é¢ç齿¯å¯¹äº9.16ä¹åççæ¬ï¼ä¹åççæ¬æ²¡æç»ç¨åºå 壳ï¼å¯ä»¥è¿ä¹æ¥åãä½9.16ä¹åçç¨åºé½æ¯è¢«å äºå£³çï¼è¿æ ·åå°±ä¸å¯ä»¥äºãä¸è¿å¯ä»¥å å°ç¨åºè±å£³ã大è¯ç注ç¨åºä½¿ç¨çæ¯PECompactç壳ï¼è±è¿ä¸ªå£³æä¸ªæå¿«éçåæ³ï¼è¿ä¹æ¯æå¨éé·äºå å°æ¶ä¹åæåç°çãåå¼å§çæ¶åæç¨peidçæ¬å¤ªä½ï¼ç«ç¶ä¸è®¤è¯è¿ä¸ªå£³ï¼èå®çæåªå¥½æå¨è±å£³ãè±å®ä¹åå¨çéªçç«ä¸è½¬è½¬ï¼çæä»ä¹æ°çç¹å没æï¼åç°peidçV.92çæ¬ï¼æ¯æçæ°å¤äºï¼å°±ä¸è½½ä¸æ¥ççï¼åç°æ¯PECompact2.Xçå£³ï¼æ´éè¦çåç°æ¯è¿ä¸ªçæ¬çpeidå¯ä»¥è±æ¯è¾ç®åç壳äºï¼å°±å¨æä»¶éé¢èººçï¼é便ä¸è¯ï¼åç°ç«ç¶å¯ä»¥ç´æ¥è±æï¼è¿æ´è¿ç¨ä¸ç¨1åéãè±å£³ä¹åå°±å¯ä»¥æç §ä¹åçåæ³å¼äºï¼ä¸è¿ç®æ ç¨åºæ¹ä¸ºäºè±å£³åçæä»¶ï¼ææ°çæ¬çxy2.exeç¨åºï¼10.30ä¹åï¼çå å级跳转ç¹å¨
.text:0042BA7B jnz short loc_42BAA8
ãå å¼¹åºä¸»é¡µä¿®æ¹å°åå¨ï¼
.text:00444840 mov eax, [esp+8+var_8]
ä»å¤©è¿è就讲解è¿äºï¼å¹¶æ²¡æç¨å°w32dasm,ä¸ä¸è主è¦è®²è§£ç¨äºæ¦æªæ°æ®çå åè¡¥ä¸ï¼å°ä¼é¢ç¹ä½¿ç¨w32dasmã
é常æè°¢çå¿ç½åalanå°ä¹åçæç¨æ´çæä¸ºVCççæ¬ï¼å¦æå¯¹æ¤çæ¬æä»ä¹çé®çè¯ï¼å¯ä»¥ç»ä»åE-mail:tyr_alan@hotmal.comãalanæ´çåºæ¥çæºæä»¶æä¼éçæç¨åææ¿å°ççæ¬ç²è´´å¨www.gameres.comä¸ï¼æºæä»¶ççæ¬å¯è½åæç¨çå 容ä¸ç¬¦å^_^ã
Alançæä»¶å°åï¼http://blog.gameres.com/upload/sf_20041030104834.rar
第ä¸èå°ç¬¬ä¸èæä»¬è¯´äºåºæ¬å·¥å ·çåå¤ï¼ç¬¬åè使ç¨å å级åå å¼¹åºä¸»é¡µæ¥åäºä¸ä¸åºæ¬çç»ä¹ ã第åèä¸åæ®éçæ¸¸æä¿®æ¹å¨æ²¡æå¤ªå¤§çåºå«ï¼åªæ¯ä¸ä¸ªä¿®æ¹çæ¯æ°æ®ï¼ä¸ä¸ªä¿®æ¹çæ¯ä»£ç ãè¿ä¸è䏿们å°éè¿å¨dllä¸ä¿®æ¹å¤§è¯çä»£ç æ¥è¿è¡å¤æçå¶ä½ãå ¶å®å¨dllä¸å¨æä¿®æ¹ä»£ç åä¸ä¸èç¨çæ¹æ³ä¸æ ·ï¼åªæ¯è¦æ¹åçä¸è¥¿æ´å¤äºèå·²ã
åçåä¸ä¸èä¸ç彿°ä¸æ ·ï¼é½æ¯è°ç¨WriteProcessMemoryã
è¿ä¸èç任塿¯æ¦æªæ¥æ¶å°çæ°æ®ï¼å ³äºåéçæ°æ®å¯ä»¥è¿è¡ç¸ç±»ä¼¼çå¤çãä¸è¬å¨åæç½ç»æ¸¸æçæ¶åï¼é½æ¯å åææ¥æ¶å°çæ°æ®ã对äºå¤§è¯çç¨åºï¼ä¸é´å¦ä½å»åæçè¿ç¨å°±ä¸è¯´äºï¼è¿è¦çèªå·±çè°éè½åäºãä¸è¿å¯¹äº9.16ä¹åç大è¯å®¢æ·ç«¯ç¨åºï¼éé¢å«æå¤§éçè°è¯ä¿¡æ¯ï¼ä¹å¯è½æ¯èæ¬ä¿¡æ¯ï¼ï¼å¤§è´åæç¨åºå¯ä»¥åç°ï¼ç¨åºæ»æ¯å¨æå°è°è¯ä¿¡æ¯ä¹åï¼ç¶ååå®é çå·¥ä½ãå ¶ä¸å¯¹äº"rx_decodeâè¿ä¸ªåæ®µå¾æå ´è¶£ï¼ççè°ç¨çå°æ¹ï¼
.text:00449D4F 154 push offset aRx_decode ; "rx_decode"
å¨åæ¹ä¸ä¹ çå°æ¹å°±æ¯ç½ç»å½æ°recvï¼å æ¤å¯ä»¥è¿æ ·æ¥çè§£ï¼ç¨åºæ¥æ¶å°æ°æ®ä¹åï¼æå°åºè°è¯ä¿¡æ¯ï¼ç¶å跳转å°ï¼
.text:00449D95 154 push ebp
çå°æ¹ç»§ç»æ§è¡ï¼éè¿ä¸æçè·è¸ªåç°ï¼å¤§é¨åæ¶åç¨åºé½æ§è¡å°å°åï¼
.text:00449DED 154 mov [eax], edi
èä¸ï¼[edi]ä¸çå 容å¨ç¸åçæ¶å»å 乿¯ç¸ä¼¼çï¼éè¿å¨æ¸¸æä¸éæºçæå¼ä¸æï¼å°[edi]ä¸çå 容dumpåºæ¥ï¼ç¶åç»æASCIIç 便å¯ä»¥åç°ï¼éé¢çå 容ç¸å¯¹æ¥è¯´æ¯ä¸åçï¼å¦æä½ è¿æ°å¥½å好å¯ä»¥æ¦æªå°èå¤©æ°æ®çè¯ï¼å°±ä¼åç°éé¢çå 容就æ¯è天çå 容ãè¿æç¹åç¢°è¿æ°ãä¸è¿ï¼å¦æéç¨ä¸é¢çæ¹æ³çè¯ï¼å°±å¯ä»¥ä¸ç¨ç¢°è¿æ°äºãé¦å ï¼æä»¬åç°ediæ¯ä¸ä¸ªæ°æ®çå°åï¼ebp䏿¯æä»¬æ¥æ¶å°çæ°æ®çé¿åº¦ãå½å¯¹å ¶ä¸çå 容æå°æççæ¶åï¼æä»¬å°±æ³å°è¯¥è
2006-12-27 11:12:35
Views(976)
Comments