µ±Ç°Î»ÖãºÊ×Ò³ > OllyDBG ÈëÃÅ - ͼÎÄ
µ½Ëû˵µÄÄǼҷ¹µêÈ¥²ä·¹ÁË£¡^_^£©ÕâÀïµÄ ThunkRVA ¾ÍÏ൱ÓÚÄãÅóÓѵÄÊÖ»úºÅÂ룬 SendMessageA ¾ÍÏ൱ÓÚÄãÄǸöÅóÓÑ¡£¶ø FirstThunk ¾ÍÊÇÄãÊÖ»úÀïµÄºÅÂë·Ö×é¡£Äã°ÑÄãµÄ¶à¸öÅóÓѶ¼·ÅÔÚ FirstThunk ÕâÑùµÄºÅÂë·Ö×éÀÿ¸ö ThunkRVA ¾ÍÊÇÄãÒ»¸öÅóÓѵÄÊÖ»úºÅÂë¡£ÄãÒªÕÒËûÃÇ£¬¾ÍÊÇͨ¹ý ThunkRVA ÕâÑùµÄÊÖ»úºÅÂëÀ´ºÍËûÃÇÁªÏµ£¬Ö±½ÓÈ¥Ëû¼ÒÕÒËûÄãºÜ¿ÉÄÜÒªÅö±Ú¡£¶øÒƶ¯»òÁªÍ¨¾ÍÏ൱ÓÚ²Ù×÷ϵͳ£¬ËûÃǸºÔð°ÑÄãµÄÊÖ»úºÅÂëºÍÄãµÄÅóÓѶÔÓ¦ÉÏ¡£¶ø FirstThunk ÕâÑùµÄºÅÂë·Ö×黹ÓÐÒ»¸öºÃ´¦¾ÍÊÇÄã¿ÉÒÔ²»¼ÇÄãij¸öÅóÓѵľßÌåºÅÂ룬ֻҪ¼ÇµÃ FirstThunk ºÅÂë·Ö×éµÄÖµ£¬ÄãµÄÅóÓѻᰴ˳ÐòÔÚÀïÃæÅÅÁС£±ÈÈçÉÏͼÖÐ USER32.dll ÖеĵÚÒ»¸öº¯ÊýÊÇ SendMessageA£¬ËüµÄ ThunkRVA Öµ¾ÍÊÇ FirstThunk Öµ¡£Èç¹û»¹Óеڶþ¸öº¯Êý£¬±ÈÈçÊÇ MessageBoxA£¬ËüµÄÖµ¾ÍÊÇ FirstThunk Öµ¼ÓÉÏ 4£¬ÆäÓàÀàÍÆ¡£ÄãÖ»Òª¼Çס¸÷¸öº¯ÊýµÄλÖã¬Ò²¿ÉÒÔͨ¹ý FirstThunk ¼ÓÉÏλÖöÔÓ¦ÖµÀ´ÕÒµ½Ëü¡£µ±È»Õâ±È²»ÉÏÖ±½Ó¿´ ThunkRVA À´µÃ·½±ã¡£ËµÁËÉÏÃæÕâЩ£¬ÎÒÃǾÍÒª¿¼ÂÇÔõôÔÚ³ÌÐòÖе÷ÓÃÁË¡£Äã¿ÉÄÜ»á˵£¬ÎÒÔÚ OllyDBG ÖÐÖ±½ÓÔÚÎÒÃÇÒªÐ޸ĵijÌÐòÖÐÕâÑùµ÷ÓãºCALL SendMessageA¡£Å¶£¬±ðÕâÑù¡£ÕâµÈÓÚÎÒÉÏÃæËµµÄ¶¼ÊÇ·Ï»°£¬»áÈÃÎҸе½ÉËÐĵġ£ÄãÕâÀïµÄ CALL SendMessageA ¾ÍÏ൱ÓÚÒ²²»¸úÄãÅóÓÑ´ò¸öÕкô¾ÍÖ±½ÓÈ¥Ëû¼ÒÕÒËû£¬ºÜÓпÉÄÜÄã»á³ËÐ˶øÈ¥£¬°ÜÐ˶ø¹é¡£±ðÍüÁËËûµÄÊÖ»úºÅÂ룬ÎÒÃÇÖ»ÓÐͨ¹ýºÅÂë²ÅÖªµÀËûµ½µ×ÔÚʲôµØ·½¡£ÎÒÃÇÓ¦¸ÃÕâÑù£ºCALL DWORD PTR [40B01A]£¬ÕâÀïµÄ 40B01A ¾ÍÊÇÉÏÃæµÄ SendMessageA ÔÚ³ÌÐòÔØÈëºóµÄËùÔڵĵط½£¬ÓÉ»ùÖ· 00400000 ¼ÓÉÏ ThunkRVA 0000B01A µÃµ½µÄ¡£Õâ¾ÍÊÇÄãÒªÕÒµÄÈËËùÔڵĵط½£¬²»¹ÜËûÅܵ½ÄÄ£¬ÄãÓÐËûµÄÊÖ»úºÅÂë¾ÍÄÜÕÒµ½Ëû¡£Í¬ÑùµÀÀí£¬ÄãÖ»Òª¼ÇסÁË ThunkRVA Öµ£¬¾Í°´Õâ¸öÀ´µ÷ÓÃÄãÐèÒªµÄº¯Êý£¬ÔÚ±ðµÄ Windows ϵͳÏÂÒ²ÊÇûÓÐÎÊÌâµÄ¡£ÏµÍ³»á×Ô¶¯°ÑÄãÒªÕÒµ½º¯ÊýºÍ ThunkRVA Öµ¶ÔÓ¦ÉÏ¡£¶øÄãÔÚ OllyDBG ÖÐд CALL SendMessageA£¬¿ÉÄÜÄãÔÚÄãµÄϵͳÉϳɹ¦ÁË£¬¿É·Åµ½±ðµÄϵͳϾÍÒª³ö´íÁË¡£ÎªÊ²Ã´£¿ÒòΪÄãÕÒµÄÈËÒѾ²»ÔÚÔÀ´µÄλÖÃÁË£¬ËûÅܵ½±ðµÄµØ·½È¥ÁË¡£Ä㻹µ½Àϵط½ÕÒËû£¬µ±È»¿´²»¼ûÈËÁË¡£ËµÁËÕâô¶à·Ï»°£¬Ò²²»Öª´ó¼ÒÌýÃ÷°×ÁËûÓУ¬±ðÔ½ÌýÔ½ºýÍ¿¾ÍÐÐÁË¡£×ÜÖ®Ò»¾ä»°£¬±ðÏñ CALL SendMessageA ÕâÑùÖ±½Óµ÷ÓÃij¸öº¯Êý£¬¶øÓ¦¸Ãͨ¹ý ThunkRVA ÖµÀ´µ÷ÓÃËü¡£ÏÂÃæÎÒÃǻص½ÎÒÃÇÒªÐÞ¸ÄµÄ MyUninstaller ÉÏÀ´£¬ÏÈÓà LordPE ´ò¿ª¿´Ò»Ï£¬ºÇºÇ£¬ÔÀ´ CreateFontIndirectA ºÍ SendMessageA Ô³ÌÐòÀïÃæ¶¼ÓÐÁË£¬Ê¡ÁËÎÒÃDz»ÉÙÊÂÇé¡£¿´Ò»ÏÂÕâÁ½¸öº¯ÊýµÄ ThunkRVA Öµ£¬CreateFontIndirectA ÔÚ GDI32.dll ÀïÃæ£¬ThunkRVA ÖµÊÇ 0000B044£¬ÕâÑùÎÒÃǾÍÖªµÀÔÚ³ÌÐòÖе÷ÓÃËüµÄʱºò¾ÍÊÇ CALL DWORD PTR [0040B044]¡£Í¬Ñù£¬SendMessageA µÄThunkRVA ÖµÊÇ 0000B23C£¬µ÷ÓÃʱӦ¸ÃÊÇÕâÑù£ºCALL DWORD PTR [0040B23C]¡£Á˽âÁËÕâЩ¶«Î÷ÎÒÃǾÍÀ´¿¼ÂÇÔõôд´úÂëÁË¡£Ê×ÏÈÎÒÃÇÀ´¿´Ò»Ï CreateFontIndirectA ºÍ SendMessageA ÕâÁ½¸öº¯ÊýµÄ¶¨Ò壺
CreateFontIndirectA£º
HFONT CreateFontIndirect(
CONST LOGFONT *lplf // pointer to logical font structure );
CreateFontIndirectµÄ·µ»ØÖµ¾ÍÊÇ×ÖÌåµÄ¾ä±ú¡£
¶ÔÓÚÕâ¸öº¯ÊýÎÒÃÇÐèÒªµÄ²ÎÊý¾ÍÊǸøËüÒ»¸ö LOGFONT µÄ×ÖÌå½á¹¹Ö¸Õ룬ÎÒÃÇÖ»ÒªÔÚÒªÐ޸ijÌÐòµÄ¿Õ°×´¦½¨Ò»¸ö±ê×¼µÄ9ºÅ£¨Ð¡Î壩ËÎÌåµÄ LOGFONT ×ÖÌå½á¹¹£¬ÔÙ°ÑÖ¸Õë¸ø CreateFontIndirectA ¾Í¿ÉÒÔÁË¡£
SendMessageA£º
LRESULT SendMessage(
HWND hWnd, // handle of destination window UINT Msg, // message to send
WPARAM wParam, // first message parameter LPARAM lParam // second message parameter );
ÉÏÃæµÄµÚÒ»¸ö²ÎÊýÊÇ´°¿Ú¾ä±ú£¬ÎÒÃÇÖªµÀ CreateWindowExA ·µ»ØµÄ¾ÍÊÇ´°¿Ú¾ä±ú£¬ÎÒÃÇ¿ÉÒÔÖ±½ÓÄÃÀ´Óᣵڶþ¸öÏûÏ¢²ÎÊýÎÒÃÇÕâÀïÊÇÉèÖÃ×ÖÌ壬ѡWM_SETFONT£¬Õâ¸öÖµÊÇ 30H¡£µÚÈý¸ö²ÎÊýÊÇ×ÖÌå¾ä±ú£¬¿ÉÒÔÓÉÉÏÃæµÄ CreateFontIndirectA »ñµÃ¡£µÚËĸö²ÎÊýÎÒÃDz»ÐèÒª£¬Áô¿Õ¡£ÏÖÔÚÎÒÃÇ×¼±¸¿ªÊ¼Ð´´úÂ룬Ê×ÏÈÎÒÃÇÒªÔÚ³ÌÐòÖн¨Ò»¸ö±ê×¼9ºÅËÎÌåµÄ LOGFONT£¬ÒÔ±ãÓÚÎÒÃǵ÷Ó᣶ÔÓÚ LOGFONT£¬ÎÒÃÇÔÙÀ´¿´Ò»Ï¶¨Ò壺
typedef struct tagLOGFONT { // lf LONG lfHeight; LONG lfWidth;
LONG lfEscapement; LONG lfOrientation; LONG lfWeight; BYTE lfItalic;
BYTE lfUnderline; BYTE lfStrikeOut; BYTE lfCharSet;
BYTE lfOutPrecision; BYTE lfClipPrecision; BYTE lfQuality;
BYTE lfPitchAndFamily;
TCHAR lfFaceName[LF_FACESIZE]; } LOGFONT;
ÕâÑùÎÒÃǵıê×¼9ºÅËÎÌåµÄ LOGFONT ÖµÓ¦¸ÃÊÇ32×Ö½Ú£¬16½øÖƾÍÏñÕâÑù£ºF4FFFFFF000000000000000000000000900100000000008600000000CBCECCE5¡£ÏÖÔÚÔÚ³ÌÐòÖÐÕÒ¸ö¿ÕµØ¡£ÎÒÃÇÓà PEiD À´°ïÖúÎÒÃÇѰÕÒ£¬Óà PEiD ´ò¿ª³ÌÐò£¬µã EP ¶ÎºóÃæµÄÄǸö > ºÅ£¬Ëæ±ãÑ¡ÔñÒ»¸öÇø¶ÎÓÒ»÷£¬Ñ¡¡°ËÑË÷È«0´¦¡±£¨Ô°æºÃÏñÊÇcaveʲôµÄ£©£º
ÎÒÃÇ¿´µ½ PEiD °ÑËÑË÷µ½µÄ¿Õ¼ä¶¼¸øÎÒÃÇÁгöÀ´ÁË£º
ÏÖÔÚÎÒÃÇÓà WinHEX ´ò¿ªÎÒÃÇÒªÐ޸ĵijÌÐò£¬×ªµ½Æ«ÒÆ 9815 ´¦£¬´Ó 9815 ´¦Ñ¡Ôñ 32 ×Ö½Ú£¨16½øÖÆÊÇ0X20£©µÄÒ»¸öÑ¡¿é£¬°Ñ¹â±ê¶¨Î»µ½ 9815 ´¦£¬ÓÒ¼üÑ¡Ôñ²Ëµ¥ ¼ôÌù°åÊý¾Ý->дÈë(´Óµ±Ç°Î»Öø²Ð´)£¬ËæºóµÄ¸ñʽѡÔñ ASCII Hex£¬°ÑÎÒÃÇ LOGFONT µÄ 16 ½øÖÆÖµ
F4FFFFFF000000000000000000000000900100000000008600000000CBCECCE5
дÈë±£´æ¡£ÏÖÔÚÎÒÃÇÓà OllyDBG ÔØÈëÒÑÌí¼ÓÁË LOGFONT Êý¾ÝµÄ³ÌÐò£¬ÏÈתµ½ VA 40A415 ´¦£¨´ÓÉÏͼÖп´µ½µÄ£©ÍùÏ¿´Ò»Ï£º
ÒòΪ SendMessageA »¹ÒªÓõ½Ò»¸ö´°¿Ú¾ä±ú£¬ÎÒÃÇ¿ÉÒÔͨ¹ýÇ°ÃæµÄ CreateWindowExA À´»ñµÃ¡£ÏÖÔÚÎÒÃǾͰÑǰһÕÅͼÖÐµÄ .rdata Çø¶ÎÖеĵØÖ· 0040C56E ×÷ΪÎÒÃDZ£´æ´°¿Ú¾ä±ú HWND ÖµµÄÁÙʱ¿Õ¼ä¡£Ò»ÇоÍÐ÷£¬¿ªÊ¼Ð´´úÂë¡£ÏȻعËÒ»ÏÂÎÒÃÇ×îÏÈ˵µÄÄÇÁ½¸öÒªÐ޸ĵĵط½£º
µÚÒ»¸öÒª¸ÄµÄµØ·½£º
00408F5E |. FF15 98B24000 |CALL DWORD PTR DS:[<&USER32.CreateWindowExA>] ; \\CreateWindowExA 00408F64 6A 00 PUSH 0 ; ÐÞ¸Äǰ
00408F66 8945 F4 MOV DWORD PTR SS:[EBP-C],EAX 00408F69 |. E8 A098FFFF |CALL
Ð޸ĺó£º
00408F5E |. FF15 98B24000 |CALL DWORD PTR DS:[<&USER32.CreateWindowExA>] ; \\CreateWindowExA
00408F64 E9 D5140000 JMP myuninst.0040A43E ; Ìø×ªµ½ÎÒÃǵIJ¹¶¡´úÂë´¦ 00408F69 |. E8 A098FFFF |CALL
µÚ¶þ¸öÒª¸ÄµÄµØ·½£º
00408F91 |. FF15 98B24000 |CALL DWORD PTR DS:[<&USER32.CreateWindowExA>] ; \\CreateWindowExA
00408F97 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX ; ¸ÄÕâÀï 00408F9A 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] 00408F9D |. FF30 |PUSH DWORD PTR DS:[EAX] ; /<%s>
00408F9F |. 8D85 B0FEFFFF |LEA EAX,DWORD PTR SS:[EBP-150] ; | 00408FA5 |. 68 D0D94000 |PUSH myuninst.0040D9D0 ; |format = \00408FAA |. 50 |PUSH EAX ; |s
00408FAB |. FF15 90B14000 |CALL DWORD PTR DS:[<&MSVCRT.sprintf>] ; \\sprintf
¹²·ÖÏí92ƪÏà¹ØÎĵµ