跟蹤aspr殼的pre-dip,解除使用限制

看雪資料發表於2004-06-28

解除aspr殼的使用限制有多種方法,方法之一就是追蹤pre-dip

用od載入程式後按Shift+F9跳過異常,直到出現硬碟指紋

程式碼:
0012FF2C   0012FF34  指標到下一個 SEH 記錄 0012FF30   00CFA898  SE 控制程式碼 0012FF34   0012FF40  指標到下一個 SEH 記錄 0012FF38   00CFB236  SE 控制程式碼 0012FF3C   0012FF90 0012FF40   0012FFE0  指標到下一個 SEH 記錄 0012FF44   00CFB25B  SE 控制程式碼 0012FF48   0012FF90 0012FF4C   00CE0000 0012FF50   00B60000 0012FF54   00CFA684 0012FF58   00000000 0012FF5C   00D823DC  ASCII "mIjMiACQQJ8="     <<==硬碟指紋 0012FF60   00CE0000 0012FF64   00B60000


以硬碟指紋為第一部分,相對位置如下。
程式碼:
按Shift+F9  註冊名                       (第二部分) 按Shift+F9  使用限制                     (第三部分) 按Shift+F9  生死轉折                     (第四部分)


以下為第三部分
程式碼:
000CFAEBD   58               POP EAX                                   00CFAEBE   8B15 ECC5CF00    MOV EDX,DWORD PTR DS:[CFC5EC] 00CFAEC4   A1 54C6CF00      MOV EAX,DWORD PTR DS:[CFC654] 00CFAEC9   E8 8A06FFFF      CALL 00CEB558                 <<==檢測是否過期,對記憶體00CFC5EC區域設定標誌 00CFAECE   A1 1CC7CF00      MOV EAX,DWORD PTR DS:[CFC71C] 00CFAED3   8378 10 00       CMP DWORD PTR DS:[EAX+10],0   <<==是否有時間限制 00CFAED7   74 2D            JE SHORT 00CFAF06 00CFAED9   A1 ECC5CF00      MOV EAX,DWORD PTR DS:[CFC5EC] 00CFAEDE   8078 31 00       CMP BYTE PTR DS:[EAX+31],0 00CFAEE2   74 04            JE SHORT 00CFAEE8 00CFAEE4   33C0             XOR EAX,EAX 00CFAEE6   EB 09            JMP SHORT 00CFAEF1 00CFAEE8   A1 ECC5CF00      MOV EAX,DWORD PTR DS:[CFC5EC] 00CFAEED   0FB740 0C        MOVZX EAX,WORD PTR DS:[EAX+C] <<==取限制的時間 00CFAEF1   50               PUSH EAX                      <<==入棧 00CFAEF2   A1 ECC5CF00      MOV EAX,DWORD PTR DS:[CFC5EC] 00CFAEF7   0FB740 08        MOVZX EAX,WORD PTR DS:[EAX+8] <<==取剩餘的時間 00CFAEFB   50               PUSH EAX                      <<==剩餘時間入棧 00CFAEFC   A1 1CC7CF00      MOV EAX,DWORD PTR DS:[CFC71C] 00CFAF01   8B40 10          MOV EAX,DWORD PTR DS:[EAX+10] 00CFAF04   FFD0             CALL EAX                      <<==pre-dip時間限制 00CFAF06   A1 1CC7CF00      MOV EAX,DWORD PTR DS:[CFC71C] 00CFAF0B   8378 14 00       CMP DWORD PTR DS:[EAX+14],0   <<==是否有次數限制 00CFAF0F   74 1E            JE SHORT 00CFAF2F 00CFAF11   A1 ECC5CF00      MOV EAX,DWORD PTR DS:[CFC5EC] 00CFAF16   0FB740 12        MOVZX EAX,WORD PTR DS:[EAX+12] 00CFAF1A   50               PUSH EAX 00CFAF1B   A1 ECC5CF00      MOV EAX,DWORD PTR DS:[CFC5EC] 00CFAF20   0FB740 0E        MOVZX EAX,WORD PTR DS:[EAX+E] 00CFAF24   50               PUSH EAX 00CFAF25   A1 1CC7CF00      MOV EAX,DWORD PTR DS:[CFC71C] 00CFAF2A   8B40 14          MOV EAX,DWORD PTR DS:[EAX+14] 00CFAF2D   FFD0             CALL EAX                     <<==pre-dip次數限制 00CFAF2F   A1 1CC7CF00      MOV EAX,DWORD PTR DS:[CFC71C] 00CFAF34   8378 18 00       CMP DWORD PTR DS:[EAX+18],0 00CFAF38   74 57            JE SHORT 00CFAF91


執行00CFAEC9   CALL 00CEB558  執行後00CFDDDC處的記憶體資料
程式碼:
00CFDDDC  00 00 00 00 00 00 00 00 1E 00 37 00 1E 00 00 00  .........7.... 00CFDDEC  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................ 00CFDDFC  3C 08 8A 16 0D 9C E2 40 1A 6A 8A 54 CE A2 E2 40  <?.@jT微@ 00CFDE0C  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................


00CFDDE4  試用的天數(1E = 30 天)
00CFDDE8  已經使用的天數,如過期改這裡00CFDDE8 = 00CFDDE4
00CFDE0C  是否過期標誌,(00 = 沒有過期,01 = 過期),設定00CFDE0C = 00 00

跟進 00CFAF04 CALL EAX      <<==EAX = 0048C6AC
程式碼:
0048C6AC   55               PUSH EBP                      <<==程式領空 0048C6AD   8BEC             MOV EBP,ESP 0048C6AF   A1 1C734E00      MOV EAX,DWORD PTR DS:[4E731C] <<==取標誌,這裡是FFFFFFFE 0048C6B4   A3 18734E00      MOV DWORD PTR DS:[4E7318],EAX <<==放入標誌,如沒有殼為0,這兩句較少見。 0048C6B9   8B45 08          MOV EAX,DWORD PTR SS:[EBP+8]  <<==取時間限制天數 0048C6BC   A3 1C734E00      MOV DWORD PTR DS:[4E731C],EAX 0048C6C1   8B45 0C          MOV EAX,DWORD PTR SS:[EBP+C]  <<==取剩餘天數 0048C6C4   A3 20734E00      MOV DWORD PTR DS:[4E7320],EAX 0048C6C9   5D               POP EBP 0048C6CA   C2 0800          RETN 8                        <<==返回殼 返回殼後按F9到達下一個異常。(第四部分) 00CFAFDF   3100             XOR DWORD PTR DS:[EAX],EAX  <<==異常 00CFAFE1   EB 01            JMP SHORT 00CFAFE4          <<==F2設斷點,按Shift+F9斷在此處。 單步跟蹤到 00CFAFEF   58               POP EAX                                   00CFAFF0   A1 ECC5CF00      MOV EAX,DWORD PTR DS:[CFC5EC] 00CFAFF5   8078 30 00       CMP BYTE PTR DS:[EAX+30],0   <<==是否超過時間限制 00CFAFF9   75 0B            JNZ SHORT 00CFB006           <<==跳則過期 00CFAFFB   A1 ECC5CF00      MOV EAX,DWORD PTR DS:[CFC5EC] 00CFB000   8078 31 00       CMP BYTE PTR DS:[EAX+31],0 00CFB004   74 3C            JE SHORT 00CFB042            <<==必須跳 00CFB006   A1 1CC7CF00      MOV EAX,DWORD PTR DS:[CFC71C] 00CFB00B   8378 24 00       CMP DWORD PTR DS:[EAX+24],0 00CFB00F   74 13            JE SHORT 00CFB024 00CFB011   A1 1CC7CF00      MOV EAX,DWORD PTR DS:[CFC71C] 00CFB016   8B40 20          MOV EAX,DWORD PTR DS:[EAX+20] 00CFB019   50               PUSH EAX 00CFB01A   A1 1CC7CF00      MOV EAX,DWORD PTR DS:[CFC71C] 00CFB01F   8B40 24          MOV EAX,DWORD PTR DS:[EAX+24] 00CFB022   FFD0             CALL EAX                     <<==過期pre-dip,使用工具脫殼,大部分會跳到這裡 00CFB024   A1 1CC7CF00      MOV EAX,DWORD PTR DS:[CFC71C] 00CFB029   8378 34 00       CMP DWORD PTR DS:[EAX+34],0 00CFB02D   74 31            JE SHORT 00CFB060 00CFB02F   6A 01            PUSH 1 00CFB031   68 E654CE00      PUSH 0CE54E6 00CFB036   832C24 02        SUB DWORD PTR SS:[ESP],2 00CFB03A   FF25 7CDBCF00    JMP DWORD PTR DS:[CFDB7C] 00CFB040   EB 1E            JMP SHORT 00CFB060 00CFB042   A1 1CC7CF00      MOV EAX,DWORD PTR DS:[CFC71C] 00CFB047   8378 24 00       CMP DWORD PTR DS:[EAX+24],0 00CFB04B   74 13            JE SHORT 00CFB060 00CFB04D   A1 1CC7CF00      MOV EAX,DWORD PTR DS:[CFC71C] 00CFB052   8B40 1C          MOV EAX,DWORD PTR DS:[EAX+1C] 00CFB055   50               PUSH EAX 00CFB056   A1 1CC7CF00      MOV EAX,DWORD PTR DS:[CFC71C] 00CFB05B   8B40 24          MOV EAX,DWORD PTR DS:[EAX+24] 00CFB05E   FFD0             CALL EAX                   <<==沒有超過限制,跳到此處。 00CFB060   33C9             XOR ECX,ECX 00CFB062   BA 78B2CF00      MOV EDX,0CFB278                           跟進00CFB05E  CALL EAX 0048C5E0   55               PUSH EBP 0048C5E1   8BEC             MOV EBP,ESP 0048C5E3   8B45 08          MOV EAX,DWORD PTR SS:[EBP+8] 0048C5E6   A3 40AC4E00      MOV DWORD PTR DS:[4EAC40],EAX <<==如果工具脫殼或在之前Dump,需修補此處 0048C5EB   5D               POP EBP 0048C5EC   C2 0400          RETN 4


使用限制的方法相同,這裡就不再重複
以上為跟蹤pre-dip過程,望對新手有所幫助
感謝Volx的指點。

相關文章