Èç¹ûÔÚº¯Êýµ÷Óùý³ÌÖУ¬¶ÑÕ»²Ù×÷ÎÞ·¨ÊµÏÖÆ½ºâ£¬¸²¸ÇÁË·µ»ØµÄµØÖ·£¬º¯Êý¾ÍÎÞ·¨·µ »ØÁË¡£
Àý3-11Òç³ö´úÂëµÄʵÏÖ¡£ #include
test(); label1:
cout<<\label2: _asmnop; _asmnop; _asmnop; _asmnop;
cout<<\return0; }
inttest() {
inttest[2]; inttemp;
cout< for(inti=0;i<=3;i++) { cin>>temp; test[i]=temp; } cout<<&temp; cout<<&test[0]; cout<<&test[1]; cout<<&test[2]; cout<<&test[3]; cout< cout<<\return0; } ÔÚtestº¯ÊýÖУ¬¶¨ÒåÁËÒ»¸ö¿ÉÒÔ´æ´¢2¸ö32λÕûÊýµÄtestÊý×飬Ȼ¶øÏÂÃæµÄÑ»· ´úÂëÈ´ÏòÕâ¸öµØÖ·Ð´ÈëÁË4¸öÔªËØ¡£ºóÃæµÄÁ½¸öÔªËØÎÞÇ鵨¸²¸ÇÁË·µ»ØµÄµØÖ·£¬µ¼Ö º¯ÊýÖ´ÐкóÎÞ·¨·µ»Ø¡£testº¯ÊýÄÚ²¿¶¨ÒåÁËÁ½¸ö¾Ö²¿±äÁ¿£¬testÊý×éÔªËØÕ¼ÓöÑÕ»8 ¸ö×Ö½Ú£¬¶øtempÕ¼ÁË4¸ö×Ö½Ú¡£ÕâÑù¶ÑÕ»Öд洢µÄÔªËØ×ÔÉ϶øÏÂÒÀ´ÎΪtemp¡¢test[0]¡¢ test[1]¡¢test[2]ºÍº¯Êý·µ»ØµÄµØÖ·¡£ÓÉÓÚ¶ÑÕ»Ö¸ÕëÊÇ»ùÓÚÄÚ´æÏßÐÔ·Ö²¼µÄ£¬forÑ»·Ë³ ÐòдÈëÁË4¸öÔªËØ£¬È´°Ñº¯Êý·µ»ØµÄµØÖ·ÎÞÇ鸲¸ÇÁË¡£ÆäÖÐtest[3]´æ·Å×Åtest·µ»ØµÄ µØÖ·¡£ ÓÉ´Ë¿ÉÒÔͨ¹ý¸Ä±ä²ÎÊýµÄÊäÈë¸Ä±äº¯ÊýµÄÖ´ÐÐÁ÷³Ì¡£ÕâÑù¿ÉÒÔÍÆ¶ø¹ãÖ®£¬Èç¹ûÒç ³öÁ˸ü¶àµÄ´úÂ룬¿ÉÒÔͨ¹ý²éÕÒº¯ÊýµÄ·µ»ØµØÖ·±£´æÔÚÄĸö¶ÑÕ»Ö¸ÕëÇøÓò£¬¾«ÐÄÐÞ¸Ä Õâ¸öÇøÓòµÄÖµ£¬Ê¹ÆäÖ¸ÏòÒ»¸öÌØÊâµÄÖ¸Áî¡£±ÈÈçjmpesp£¬ÕâÑùº¯Êý·µ»Øºó£¬½«Ìø×ªµ½ Õâ¸öµØÖ·ÔËÐУ¬¶øjmpespÖ¸Áî¿ÉÒÔʹÓöÑÕ»µÄÊý¾ÝÀ´µ±×÷Ö¸ÁîÔËÐС£ÎªÁË¶ÔÆë£¬¿É ÒÔÔÚÒç³ö´úÂëÖмÓÈëÒ»Ð©ÌØÊâÖ¸Áî±ÈÈçnopÖ¸Áî¡£ µ±È»Òç³öÇé¿ö×î³£¼ûµÄÊÇ×Ö·û´®Êý×éÒç³ö¡£³öÏÖÕâÖÖÇé¿öµÄ¸ù±¾ÔÒòÊÇûÓжԲΠÊýÖеÄ×Ö·û´®³¤¶È×÷ÏÞÖÆ£¬µ¼Ö¶à³öÀ´µÄ×Ö·û´®Öаüº¬Á˶ñÒâ´úÂë¡£ÓÉÓÚC×Ö·û´®Ò» °ã¶¼ÊDzÉÓÃÁã½áβµÄ£¬Òò´Ë×Ö·û´®²Ù×÷º¯ÊýÒ»¼ûµ½Á㣬¾ÍÈÏΪ×Ö·û´®½áÊøÁË£¬¶ø¾«ÐÄ ±àдµÄÒç³ö´úÂë²»¿É±ÜÃâµØ»áÅöµ½Ö¸ÁîÖаüº¬ÁãµÄÇé¿ö¡£ÎªÁ˲»Ï£Íû°ÑÖ¸Áî½Ø¶Ï£¬ÓРʱ»¹ÐèÒª¶ÔÕâЩָÁî½øÐÐÌØÊâ±àÂ룬±ÈÈçºÍÒ»¸öÖµ½øÐÐÒì»ò²Ù×÷¡£×¢Èë´úÂë½øÈëÒ»¸ö İÉúµÄ»·¾³ÖÐÔËÐУ¬»¹ÐèÒª½â¾öÖî¶àµÄÎÊÌ⣬±ÈÈçAPIº¯Êýµ÷Óõȡ£×ÜÖ®£¬Òç³ö´úÂë µÄ±àдÐèÒª±È½Ï¸ßµÄ±à³Ì¼¼ÄÜ¡£ ¶ÔÓÚ×¢Èëµ½Win32Ó¦ÓóÌÐò½ø³ÌÖеĴúÂë¶øÑÔ£¬Æä´úÂëµÄʵÏÖµ¥¿¿Ò»Ð©»ã±àÖ¸Áî ÊÇÔ¶Ô¶²»¹»µÄ£¬ËüÖ»ÓÐͨ¹ýµ÷ÓÃWindowsAPIº¯Êý²ÅÄÜÍê³É±ØÒªµÄ¹¦ÄÜ¡£±ÈÈçÏò WindowsÌí¼ÓÓû§£¬ÉèÖÃÓû§ÃÜÂ룬°ÑÓû§¼ÓÈëµ½¹ÜÀíÔ±×飬´ò¿ªÒ»¸öShell´°¿Ú£¬ Æô¶¯Telnet·þÎñ£¬µ÷ÓÃSocketº¯Êý½ÓÊպͷ¢ËÍÊý¾ÝµÈ¡£Íê³ÉÕâЩ¹¦Äܶ¼ÐèÒªµ÷Óà WindowsAPIº¯Êý¡£È»¶ø×¢ÈëµÄ´úÂëÊÇÎÞ·¨Ö±½ÓÖªµÀÕâЩAPIµÄº¯ÊýµØÖ·µÄ£¬ÉõÖÁ×¢ ÈëµÄ½ø³Ì¸ù±¾¾ÍûÓÐʹÓÃÕâЩº¯ÊýµÄ¶¯Ì¬Á´½Ó¿â£¬ËùÒÔ×¢Èë´úÂëºÍ´´½¨Ô¶³ÌÏß³ÌÒ»Ñù£¬ ÐèÒªÖªµÀÕâЩº¯ÊýµÄÈë¿ÚµØÖ·£¬±ØÒªµÄÇé¿öÏ»¹ÐèÒªÊÖ¹¤¼ÓÔØ¶¯Ì¬Á´½Ó¿â¡£ ¼ÓÔØÒ»¸ö¶¯Ì¬Á´½Ó¿âÐèÒªµ÷ÓÃWindowsÖеÄLoadLibraryºÍGetProcAddressº¯Êý£¬ ÕâÁ½¸öº¯ÊýÊÇKernel32.DLLµÄÊä³öº¯Êý£¬¶ø¼¸ºõËùÓеÄWin32Ó¦ÓóÌÐò¶¼»áʹÓÃÕâ ¸ö¶¯Ì¬Á´½Ó¿â¡£ÎÒÃÇÖ»ÒªµÃµ½Õâ¸ö¶¯Ì¬Á´½Ó¿âµÄ»ùµØÖ·¡£µÃµ½Õâ¸ö¶¯Ì¬Á´½Ó¿âµÄ»ùµØ Ö·Ö®ºó£¬¾Í¿ÉÒÔͨ¹ý±éÀúÕâ¸ö¿âµÄexport±íµÃµ½ËüÌṩµÄLoadLibraryºÍ GetProcAddressº¯ÊýµØÖ·¡£ÓÐÁËÕâÁ½¸öº¯Êý£¬¾Í¿ÉÒÔ¼ÓÔØÈκεĶ¯Ì¬Á´½Ó¿â£¬²¢µ÷Óà ËüÌṩµÄÊä³öº¯Êý¡£ ËÑË÷Kernel32»ùµØÖ·µÄ·½·¨Óкܶ࣬µ«ÊÇÕâЩ·½·¨Ò»°ã¶¼ÊÇͨ¹ýËüÌṩµÄAPI º¯Êý¼ä½ÓµÃµ½µÄ¡£±ÈÈç˵ÌṩÁËkernel32.dllµÄÒ»¸öÌØÊâµÄUnhandledExceptionFilter Êä³öº¯Êý¡£Õâ¸öº¯ÊýµÄµØÖ·±È½ÏÌØÊ⣬Ëü¿ÉÒÔͨ¹ýÏÂÃæµÄ»ã±àÖ¸Áî»ñµÃ£ºmovesi,fs:0 lodsd retry: cmp[eax],0xffffffff jeexit//Èç¹ûµ½´ï×îºóÒ»¸ö½Úµã(ËüµÄpfnHandlerÖ¸ÏòUnhandledExceptionFilter) moveax,[eax]//·ñÔòÍùºó±éÀú£¬Ò»Ö±µ½×îºóÒ»¸ö½Úµã jmpretry exit: ÓÐÁËÕâ¸öµØÖ·Ö®ºó£¬¾Í¿ÉÒÔͨ¹ýÏÂÃæµÄ´úÂëµÃµ½kernel32.dllµÄ»ùµØÖ·ÁË¡£ ÏÂÃæÊÇÍêÕû´úÂ룺 #include __inline__declspec(naked)unsignedintGetKernel32() { __asm { pushesi pushecx movesi,fs:0 lodsd retry: cmp[eax],0xffffffff jeexit//Èç¹ûµ½´ï×îºóÒ»¸ö½Úµã(ËüµÄpfnHandlerÖ¸ÏòUnhandledExceptionFilter) moveax,[eax]//·ñÔòÍùºó±éÀú,Ò»Ö±µ½×îºóÒ»¸ö½Úµã jmpretry exit: moveax,[eax+4] FindMZ: andeax,0xffff0000//¸ù¾ÝPEÖ´ÐÐÎļþÒÔ64k¶Ô½çµÄÌØÕ÷¼Ó¿ì²éÕÒËÙ¶È cmpwordptr[eax],'ZM'//¸ù¾ÝPE¿ÉÖ´ÐÐÎļþÌØÕ÷²éÕÒKERNEL32.DLLµÄ»ùÖ· jneMoveUp//Èç¹ûµ±Ç°µØÖ·²»·ûºÏMZÍ·²¿ÌØÕ÷,ÔòÏòÉϲéÕÒ movecx,[eax+0x3c] addecx,eax cmpwordptr[ecx],'EP'//¸ù¾ÝPE¿ÉÖ´ÐÐÎļþÌØÕ÷²éÕÒKERNEL32.DLLµÄ»ùÖ· jeFound//Èç¹û·ûºÏMZ¼°PEÍ·²¿ÌØÕ÷,ÔòÈÏΪÒѾÕÒµ½,²¢Í¨¹ýEax·µ»Ø¸øµ÷ÓÃÕß MoveUp: deceax//×¼±¸Ö¸ÏòÏÂÒ»¸ö½çÆðʼµØÖ· jmpFindMZ Found: popecx popesi ret } } voidmain(void) { printf(\getch(); } Õâ¸ö³ÌÐòÔËÐкó»áµÃµ½Ò»¸ö77E60000µÄÊä³ö½á¹û£¬Õâ¸ö½á¹ûÊǺÍKernel32ÔÚÕâ ¸ö±àÒëºó³ÌÐòµÄµ¼Èë»ùµØÖ·Ïà·ûµÄ¡£Èçͼ3-5Ëùʾ¡£ ÓÐÁËÄ£¿é¼ÓÔØµÄ»ùµØÖ·£¬¾Í¿ÉÒÔ¸ù¾Ýº¯ÊýÃûµÃµ½¾ßÌ庯ÊýµÄÈë¿ÚµØÖ·ÁË¡£ÊµÏÖÕâ ¸öÄ¿µÄÐèÒªÁ˽âWin32µÄ´æ´¢½á¹¹¡£²éÕÒ²½ÖèÈçÏ£º (1)¶¨Î»µ½PEÎļþÍ·(»ùµØÖ·)¡£ (2)´ÓPEÎļþÍ·²¿µÄ¿ÉÑ¡ÎļþÍ·(OptionHeader)µÃµ½datadirectory(Êý¾ÝĿ¼)µÄµÚ Ò»ÏµÃµ½µ¼³ö±íµÄµØÖ·VirtualAddress¡£ (3)´ÓAddressOfNames×Ö¶ÎָʾµÄº¯ÊýÃû³Æ±íµÄµÚÒ»Ïʼ£¬½«Ã¿Ò»ÏîµÄº¯ÊýÃû ÓëGetProcAddressº¯ÊýÃû½øÐбȽϣ¬Ö±µ½ÕÒµ½Æ¥Å亯ÊýΪֹ¡£ (4)¸ù¾ÝÆ¥ÅäÏîÔÚÊä³öº¯Êý±íÖеÄË÷ÒýÖµ£¬ÔÚAddressOfFunctionsÖвéÕÒº¯ÊýµÄÈë ¿ÚµØÖ·¡£ Movedx,edi Assumeedx:ptrImage_DOS_HEADER Addedx,[edx].e_lfanew AssumeEdx:ptrIMAGE_NT_HEADERS Movedx,[edx].OptionHeader.DataDireectory.VirtualAddress AddEdx,hKernel32;//hKernel32ΪÉÏÃæ²éµ½µÄº¯Êý»ùµØÖ·¡£ Assumeedx:ptrImage_Export_Directory Movebp,[edx].AddressOfNames Addebp,hKernel32 Xoreax,eax .Repeat movecx,14;//GetProcAddressº¯ÊýµÄ³¤¶È movedi,[ebp] addedi,hKernel32 leaesi,szGetProcAddress;//º¯ÊýÃû³Æ repzcomsb .IfZero? .Break .Endif

