Èí¼þµØÖ·: http://goldsun.ys168.com ¶ÔÍ⹫²¼\mjcs_ori_unpack.zip 1.5MB
ÎÄÕ³ö×Ô:PeaceClub Goldsun[at]84823714[dot]qq
¹¤¾ß: Ollydbg,kerberos API spy,Imprec,HideOD
Çé¿ö˵Ã÷:Ò»¸öÅóÓÑÈÃÎÒ¼ì²éһϴËÈí¼þÊÇ·ñÓкóÃÅ,ËùÒÔ¾ÍÄÃÀ´Ñо¿ÁËÒ»ÏÂ.
·ÖÎö:PeidÒ»¿´ÊÇδ֪¿Ç,¶øÇÒÊÇ×Ô´´½ø³ÌÐ͵Ä.ÓÃollydbgÔØÈë,·¢ÏÖÓÐanti,ËùÒÔÓÃÁË¿´Ñ©µÄHideOD²å¼þ,ÔËÐÐ
ºóÖ÷½ø³ÌExitProcessÍ˳ö,CreateProcessA´´½¨µÄ×Ó½ø³ÌÔËÐÐÖÐ.
POEP:
ÒýÓÃ:
00575000 > 74 07 JE SHORT mjcs.00575009
00575002 75 05 JNZ SHORT mjcs.00575009
00575004 1932 SBB DWORD PTR DS:[EDX],ESI
00575006 67:E8 E8741F75 CALL 7576C4F4 ; Superfluous prefix
0057500C 1D E8683944 SBB EAX,443968E8
00575011 CD 00 INT 0
00575013 59 POP ECX
00575014 9C PUSHFD
00575015 50 PUSH EAX
00575016 74 0A JE SHORT mjcs.00575022
00575018 75 08 JNZ SHORT mjcs.00575022
0057501A E8 59C20400 CALL 005C1278
0057501F 55 PUSH EBP
00575020 8BEC MOV EBP,ESP
00575022 E8 F4FFFFFF CALL mjcs.0057501B
00575027 56 PUSH ESI
00575028 57 PUSH EDI
00575029 53 PUSH EBX
0057502A 78 0F JS SHORT mjcs.0057503B
0057502C 79 0D JNS SHORT mjcs.0057503B
0057502E E8 34994749 CALL 499EE967
00575033 34 33 XOR AL,33
²»ÖªµÀʲô¿Ç,»¨Ö¸Áî¶à¡£
µÚÒ»²½:ͨ¹ý͵¿úÉ跨תµ¥½ø³Ì
Ïë¿´¿´´ËÈí¼þµ½µ×ͨ¹ýʲô±êÖ¾À´½øÐнø³Ìת»».ËùÒÔżÓÃ
kerberos API spyµ÷Èë³ÌÐò,ÔËÐкóµÃµ½log:
ÒýÓÃ:
This file generated by kerberos API spy v1.02
(C) 2004-2005 Rustem Fasihov <fasihov@mail.ru>
Sat Dec 10 9:47:03 2005
Plugin not installed
Analyzing database...
OK...
Installing hooks
OK...
DLL's in database: 2
DLL's failed to load: 0
Functions in database: 1312
Functions failed to initialize: 0
======================================================================================
======================================================================================
============================
MODULE_NAME RET_ADDR FUNCTION_NAME
======================================================================================
======================================================================================
============================
kernel32.dll | 7C801BE6 | HeapFree(00250000, 00000000, 00253370) returns: 00253901
msvcrt.dll | 77C09FC2 | TlsGetValue(00000001) returns: 003E1E90
msvcrt.dll | 77BFC2DE | HeapFree(003E0000, 00000000, 003E1E90) returns: 00000001
msvcrt.dll | 77C0A0E8 | TlsSetValue(00000001, 00000000) returns: 00000001
IMM32.DLL | 763027A3 | GetKeyboardLayout(00000000) returns: 08040804
ntdll.dll | 7C948571 | HeapFree(00250000, 00000000, 00253028) returns: 00000001
ntdll.dll | 7C948589 | HeapFree(00250000, 00000000, 00253018) returns: 00000001
ntdll.dll | 7C938DAB | TryEnterCriticalSection(7C99C0D8) returns: 00000001
ntdll.dll | 7C948619 | HeapAlloc(00250000, 000C0000, 00000004) returns: 00253018
ntdll.dll | 7C948662 | HeapAlloc(00250000, 000C0000, 00000014) returns: 00253028
kernel32.dll | 7C80B5B1 | GetModuleHandleA(00000000) returns: 00400000
msvcrt.dll | 77BEF0C0 | TlsGetValue(00000001) returns: 00000000
msvcrt.dll | 77BFC1DB | HeapAlloc(003E0000, 00000008, 00000088) returns: 003E1E90
msvcrt.dll | 77BEF0E5 | TlsSetValue(00000001, 003E1E90) returns: 00000001
msvcrt.dll | 77BEF0F6 | GetCurrentThreadId() returns: 00000B40
ntdll.dll | 7C957942 | TryEnterCriticalSection(7C99C0D8) returns: 00000001
mjcs.exe | 0057CA5E | LoadLibraryA(0057BA7E: "kernel32.dll") returns: 7C800000
mjcs.exe | 0057CA81 | LoadLibraryA(0057BA7E: "kernel32.dll") returns: 7C800000
mjcs.exe | 0057B801 | GetProcAddress(7C800000, 0057C8CE: "HeapAlloc") returns: 7C9305D4
mjcs.exe | 0057CAA1 | GetProcessHeap() returns: 00250000
mjcs.exe | 0057CAA4 | HeapAlloc(00250000, 00000008, 00000320) returns: 00253048
mjcs.exe | 0057C7A9 | GetModuleHandleA(0057BA7E: "kernel32.dll") returns: 7C800000
mjcs.exe | 0057CB03 | GetModuleHandleA(00000000) returns: 00400000
mjcs.exe | 0057B47B | GetModuleHandleA(00000000) returns: 00400000
mjcs.exe | 0057B47B | GetModuleHandleA(00000000) returns: 00400000
mjcs.exe | 0057B47B | GetModuleHandleA(00000000) returns: 00400000
mjcs.exe | 0057C7C2 | GetModuleHandleA(0057ECC6: "kernel32.dll") returns: 7C800000
mjcs.exe | 0057B47B | GetModuleHandleA(00000000) returns: 00400000
mjcs.exe | 0057B801 | GetProcAddress(7C800000, 0057EEB6: "SetLastError") returns: 7C930340
mjcs.exe | 0057B801 | GetProcAddress(7C800000, 0057EFA4: "HeapAlloc") returns: 7C9305D4
mjcs.exe | 0057B801 | GetProcAddress(7C800000, 0057EFBD: "HeapFree") returns: 7C93043D
mjcs.exe | 0057B801 | GetProcAddress(7C800000, 0057F06A: "GetLastError") returns: 7C930331
mjcs.exe | 0057B47B | GetModuleHandleA(00000000) returns: 00400000
mjcs.exe | 0057B47B | GetModuleHandleA(00000000) returns: 00400000
mjcs.exe | 0057B47B | GetModuleHandleA(00000000) returns: 00400000
mjcs.exe | 0057C7C2 | GetModuleHandleA(0057ECD3: "user32.dll") returns: 77D10000
mjcs.exe | 0057B47B | GetModuleHandleA(00000000) returns: 00400000
mjcs.exe | 0057B47B | GetModuleHandleA(00000000) returns: 00400000
mjcs.exe | 0057B47B | GetModuleHandleA(00000000) returns: 00400000
mjcs.exe | 0057B47B | GetModuleHandleA(00000000) returns: 00400000
mjcs.exe | 0057C7C2 | GetModuleHandleA(0057ECDE: "advapi32.dll") returns: 77DA0000
mjcs.exe | 0057B47B | GetModuleHandleA(00000000) returns: 00400000
mjcs.exe | 0057B47B | GetModuleHandleA(00000000) returns: 00400000
mjcs.exe | 0057B840 | GetProcessHeap() returns: 00250000
mjcs.exe | 0057B846 | HeapAlloc(00250000, 00000008, 0000000C) returns: 002552E8
mjcs.exe | 0057B86B | GetProcessHeap() returns: 00250000
mjcs.exe | 0057B871 | HeapAlloc(00250000, 00000008, 00004000) returns: 00255300
mjcs.exe | 0057B89E | VirtualProtect(00255300, 00004000, 00000040, 0012FFB8) returns: 00000001
mjcs.exe | 00575437 | GetVersion() returns: 0A280105
mjcs.exe | 0057C2F9 | GetModuleHandleA(00000000) returns: 00400000
ntdll.dll | 7C957942 | TryEnterCriticalSection(7C99C0D8) returns: 00000001
mjcs.exe | 005759D1 | GetTickCount() returns: 00401EDA
mjcs.exe | 00575834 | GetTickCount() returns: 00401EDA
mjcs.exe | 00575869 | GetTickCount() returns: 00401EDA
ntdll.dll | 7C957942 | TryEnterCriticalSection(7C99C0D8) returns: 00000001
mjcs.exe | 00575A91 | GetTickCount() returns: 00401EDA
mjcs.exe | 0057C48E | GetVersionExA(0012FF2C) returns: 00000000
mjcs.exe | 0057C2F9 | GetModuleHandleA(00000000) returns: 00400000
mjcs.exe | 0057D369 | GetVersion() returns: 0A280105
mjcs.exe | 0057D38B | LoadLibraryA(0057D353: "Kernel32.dll") returns: 7C800000
mjcs.exe | 0057D3B3 | GetProcessTimes(FFFFFFFF, 0012FFB8, 0012FFB0, 0012FFB0, 0012FFB0)
returns: 00000001
mjcs.exe | 0057D3C1 | GetSystemTimeAsFileTime(0012FFB0) returns: 01C5FD2B
mjcs.exe | 0057D53B | GetVersion() returns: 0A280105
mjcs.exe | 0057D549 | GetTickCount() returns: 00401EDA
mjcs.exe | 0057D566 | LoadLibraryA(0057D52B: "ntdll.dll") returns: 7C920000
mjcs.exe | 0057C572 | wsprintfA(0012FE8C) returns: 00000014
mjcs.exe | 0057C584 | GetTempPathA(00000104, 0012FEBC) returns: 00000023
mjcs.exe | 0057C5B2 | CreateFileA(0012FEBC: "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\~temp0-
26013477...", C0000000, 00000003, 00000000, 00000004, 00000002, 00000000) returns: 00000010
mjcs.exe | 0057C5D1 | ReadFile(00000010, 0012FE80, 00000004, 0012FE88, 00000000) returns:
00000001
mjcs.exe | 0057C5E8 | GetTickCount() returns: 00401EDA
mjcs.exe | 0057C61C | SetFilePointer(00000010, 00000000, 00000000, 00000000) returns: 00000000
mjcs.exe | 0057C630 | WriteFile(00000010, 0012FE80, 00000004, 0012FE88, 00000000) returns:
00000001
mjcs.exe | 0057C6C3 | CloseHandle(00000010) returns: 00000001
mjcs.exe | 00575D53 | GetCommandLineA() returns: 00252398
mjcs.exe | 00575DBF | CreateProcessA(00000000, 0057524C: ""C:\Documents and
Settings\Administrator\", 00000000, 00000000, 00000001, 00000000, 00000000, 00000000, 00575350,
0057523C) returns: 00000001
mjcs.exe | 00575DD7 | ExitProcess(00000000)
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\~temp0
Ŷ,ÔÀ´Í¨¹ýÁÙʱÎļþÀ´×öFlag.
ÎÒÃÇÔÚCreateProcessAÍùÉÏ¿´,ÕÒ±êÖ¾,Ç¿ÐÐתµ¥½ø³Ì
ollydbgÔØÈë,he 575d53 (GetCommandLineAºó,ÒªÓÃÓ²¼þ¶Ïµã,¿Ç±¾Éí¼ì²â5¸ö³¤¶ÈµÄcc)
ÖжϺóÏòÉϹ۲ì:
ÒýÓÃ:
00575D2E 75 07 JNZ SHORT mjcs.00575D37
00575D30 74 05 JE SHORT mjcs.00575D37
00575D32 0010 ADD BYTE PTR DS:[EAX],DL
00575D34 40 INC EAX
00575D35 00E8 ADD AL,CH
00575D37 0F84 9A000000 JE mjcs.00575DD7 //*****×¢ÒâÕâÀï****
00575D3D E8 01000000 CALL mjcs.00575D43
00575D42 FF58 05 CALL FAR FWORD PTR DS:[EAX+5] ; Far call
00575D45 1100 ADC DWORD PTR DS:[EAX],EAX
00575D47 0000 ADD BYTE PTR DS:[EAX],AL
00575D49 50 PUSH EAX
00575D4A E9 77890000 JMP mjcs.0057E6C6
00575D4F 0010 ADD BYTE PTR DS:[EAX],DL
00575D51 40 INC EAX
00575D52 0050 8B ADD BYTE PTR DS:[EAX-75],DL
00575D55 F8 CLC
00575D56 32C0 XOR AL,AL
HOHO,575d37ÕâÀï¾ÍÊÇMagic Jump,ÖØÀ´Ç¿ÐÐÌø¼´¿ÉתΪÔËÐнâÂë½ø³Ì.
µÚ¶þ²½: OEP :
ͨ¹ý¹Û²ì´úÂëÈ·¶¨ÊÇDelphiµÄ³ÌÐò,Ñ°ÕÒOEP£¬ÎÒÃÇhe GetModuleHandleA
¿´¶ÑÕ»esp´¦£¬µ±·¢ÏÖ£º
ÒýÓÃ:
0012FF94 004066D9 /CALL to GetModuleHandleA from mjcs.004066D4
0012FF98 00000000 \pModule = NULL
ÊÇ´Ó4066d9µ÷ÓõÄʱºò£¬ÎÒÃÇÖªµÀoepÒѾ¹ýÁË¡£
Öð²½·µ»Ø
ÒýÓÃ:
004C80DF 0055 8B ADD BYTE PTR SS:[EBP-75],DL
004C80E2 EC IN AL,DX ; I/O command
004C80E3 83C4 F0 ADD ESP,-10
004C80E6 53 PUSH EBX
004C80E7 56 PUSH ESI
004C80E8 57 PUSH EDI
004C80E9 B8 387D4C00 MOV EAX,mjcs.004C7D38
004C80EE E8 D5E5F3FF CALL mjcs.004066C8
004C80F3 8B35 50FF4D00 MOV ESI,DWORD PTR DS:[4DFF50] ; mjcs.004E0BF0 ****·µ»Øµ½ÕâÀï
004C80F9 8B3D 80FD4D00 MOV EDI,DWORD PTR DS:[4DFD80] ; mjcs.004E0BEC
004C80FF B2 01 MOV DL,1
004C8101 A1 A8354200 MOV EAX,DWORD PTR DS:[4235A8]
004C8106 E8 11CCF5FF CALL mjcs.00424D1C
004C810B 8BD8 MOV EBX,EAX
004C810D BA 94824C00 MOV EDX,mjcs.004C8294 ; ASCII "MS Sans Serif"
004C8112 8BC3 MOV EAX,EBX
004C8114 E8 FFCFF5FF CALL mjcs.00425118
004C8119 BA 3C000000 MOV EDX,3C
ÍùÉÏ¿´£¬¿´µ½ÁËadd esp,-10,HOHO,¿ÉÒÔÈ·¶¨4c80e0¾ÍÊÇOEPÁË
Dump°É!
µÚÈý²½: IAT´¦Àí
ollydbgÖØÐÂÔØÈë,ת³É±¾½ø³ÌÔËÐÐ,he 4c80e0 µ½ÁËoepºó,ImprecÉϳ¡¡£
IAT¼ì²â·¶Î§Îª: RVA e218c Size 7B8
ÔØÈëÒ»¿´»ù±¾¶¼Ê¶±ð²»ÁË£¬¿´À´IAT×öÁË´¦Àí¡£
µ½4e218c¿´¿´È¥£¡
ÒýÓÃ:
004E218C 00 00 00 00 A0 4D 14 00 C0 4D 14 00 E0 4D 14 00 ...._M.ÀM.àM.
004E219C 00 4E 14 00 20 4E 14 00 40 4E 14 00 60 4E 14 00 .N. N.@N.`N.
004E21AC 80 4E 14 00 42 B9 57 00 A0 4E 14 00 C0 4E 14 00 €N.B¹W._N.ÀN.
004E21BC E0 4E 14 00 00 4F 14 00 20 4F 14 00 40 4F 14 00 àN..O. O.@O.
004E21CC 60 4F 14 00 80 4F 14 00 A0 4F 14 00 C0 4F 14 00 `O.€O._O.ÀO.
004E21DC 3A BA 57 00 E0 4F 14 00 00 50 14 00 20 50 14 00 :ºW.àO..P. P.
004E21EC 40 50 14 00 60 50 14 00 29 BA 57 00 80 50 14 00 @P.`P.)ºW.€P.
004E21FC A0 50 14 00 C0 50 14 00 E0 50 14 00 00 51 14 00 _P.ÀP.àP..Q.
004E220C 20 51 14 00 40 51 14 00 60 51 14 00 80 51 14 00 Q.@Q.`Q.€Q.
004E221C A0 51 14 00 C0 51 14 00 E0 51 14 00 00 52 14 00 _Q.ÀQ.àQ..R.
004E222C 20 52 14 00 40 52 14 00 60 52 14 00 80 52 14 00 R.@R.`R.€R.
004E223C A0 52 14 00 00 00 00 00 C0 52 14 00 E0 52 14 00 _R.....ÀR.àR.
ͨ¹ý¹Û²ì£¬»ù±¾±»Ö¸ÏòÁ˶¯Ì¬ÉêÇëµÄÄÚ´æÇøÓò 14xxxx
ÀýÈ磬½á¹¹ÈçÏ£º
00406604 -FF25 84224E00 JMP DWORD PTR DS:[4E2284]
=> 4e2284ÀïµÄֵΪ 145400
145400´¦´úÂëΪ:
00145400 74 0E JE SHORT 00145410 ; JMP to kernel32.GetModuleHandleA
00145402 75 0C JNZ SHORT 00145410 ; JMP to kernel32.GetModuleHandleA
00145404 E8 1A32534E CALL 4E678623
00145409 A6 CMPS BYTE PTR DS:[ESI],BYTE PTR ES:[EDI]
0014540A 40 INC EAX
0014540B 009A A54000FF ADD BYTE PTR DS:[EDX+FF0040A5],BL
00145411 25 16541400 AND EAX,145416
00145416 29B5 807C0000 SUB DWORD PTR SS:[EBP+7C80],ESI
0014541C 0000 ADD BYTE PTR DS:[EAX],AL
0014541E 0000 ADD BYTE PTR DS:[EAX],AL
×öÁ˱äÐΣ¬ËùÒÔµÃд´úÂëÐÞ¸´¡£
ÕÒ¸öÇøÓòд´úÂ룬ÎÒµ½140000´¦£º
ÒýÓÃ:
00140000 60 PUSHAD
00140001 9C PUSHFD
00140002 BF 8C214E00 MOV EDI,4E218C
00140007 66:837F 02 14 CMP WORD PTR DS:[EDI+2],14
0014000C 75 22 JNZ SHORT 00140030
0014000E 8B17 MOV EDX,DWORD PTR DS:[EDI]
00140010 90 NOP
00140011 90 NOP
00140012 90 NOP
00140013 8B42 12 MOV EAX,DWORD PTR DS:[EDX+12]
00140016 8B18 MOV EBX,DWORD PTR DS:[EAX]
00140018 891F MOV DWORD PTR DS:[EDI],EBX
0014001A 90 NOP
0014001B EB 13 JMP SHORT 00140030
0014001D 90 NOP
0014001E 90 NOP
0014001F 90 NOP
00140020 90 NOP
00140021 90 NOP
00140022 90 NOP
00140023 90 NOP
00140024 90 NOP
00140025 90 NOP
00140026 90 NOP
00140027 90 NOP
00140028 90 NOP
00140029 90 NOP
0014002A 90 NOP
0014002B 90 NOP
0014002C 90 NOP
0014002D 90 NOP
0014002E 90 NOP
0014002F 90 NOP
00140030 83C7 04 ADD EDI,4
00140033 81FF 00304E00 CMP EDI,4E3000
00140039 7D 02 JGE SHORT 0014003D
0014003B ^EB CA JMP SHORT 00140007
0014003D 9D POPFD
0014003E 61 POPAD
¶þ½øÖÆ´úÂë:
60 9C BF 8C 21 4E 00 66 83 7F 02 14 75 22 8B 17 90 90 90 8B 42 12 8B 18 89 1F 90 EB 13 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 83 C7 04 81 FF 00 30 4E 00 7D 02 EB CA 9D 61
140000´¦Ð½¨EIP,ÔÚ 14003e popad´¦Éè¶ÏµãÔËÐС£
ÔËÐкó£¬ÓÃimprecÔØÈëIAT,·¢ÏÖ»¹ÓÐ8¸öÊÇ»µµÄ¡£
Õâ8¸ö¿Ç×öÁËÌØÊâ´¦Àí£¬Òò´ËÎÒÒ²À´ÌØÊâ´¦Àí¡¡£º£©
ÕÒ¸ödelphiµÄ³ÌÐò°Ñiat±í±£´æÏÂÀ´ºÍËü¶ÔÕÕһϣ¬ÕýÈ·¾ÀÕýÕâ8¸ö£º
e21b0 57b942 GetTickCount
e21dc 57ba3a GetStartupInfoA
e21f4 57ba29 GetCommandLineA
e22dc 57bca8 SearchPathA
e2328 57b9ec GetVersionExA
e232c 57b942 GetVersion
e237c 57ba5a GetCurrentProcessId
e2380 57bba0 GetCurrentDirectoryA
µÚËIJ½: Í깤,ÓÅ»¯:
ÕâÀï¿ÉÒÔÊÖ¹¤°Ñdump.exeÎļþÀïµÄ¿Çsection´úÂë¸øÈ¥µô,È»ºó¸ù¾Ýoffsetɾ³ýÀ¬»ø´úÂë,ÐÞÀíºÃÒÔºó¾Í¿ÉÒÔImprec Fix IATÁË.
ºÃÁË,²âÊÔÔËÐÐÕý³£.
ÎÒдÎÄÕÂÄ¿µÄ,ÊÇÈôó¼ÒÒ»Æð̽ÌÖ½â¿Ç˼·,»¹Çë¸÷·´óÏÀÖ¸½Ì¼¸·¬.