也談ASProtect 1.3之stolen code的修復

看雪資料發表於2015-11-15

標 題:也談ASProtect 1.3之stolen code的修復

發信人:tDasm

時 間:2004年3月20日 11:35

詳細資訊: 



也談ASProtect 1.3之stolen code的修復 

    ASProtect 1.23RC4因為stolen code沒有變形,可以不用分析得到,1.3開始變形了。blowfish把程式email給me後,對於其stolen code,偶不是去猜測,而是採用到殼中去找的辦法,現把分析報告如下: 
1、設定OllyDBG異常除“記憶體訪問異常”外全部鉤上。記下入口esp值,以備後用。 
2、25次異常後按原來的方法在ret處按F2設斷,斷下後然後根據入口esp在命令列設定tc ebp>=12ffc0 && ebp<12ffc4,停下後,即到變形的stolen code處。 
F7一步一步跟,並分析見每行尾部。 
0B22424B  PUSH -1                        //此處3行程式碼沒變,照抄 
0B22424D  PUSH 54E948 
0B224252  PUSH 542B94 
0B224257  MOV EAX,DWORD PTR FS:[0] 
0B22425D  JMP SHORT 0B224261 

0B22426E  PUSH 34 
0B224270  JMP SHORT 0B224275                      ; 多餘的字首 

0B224275  PUSH DWORD PTR FS:[0] 
0B22427C  MOV DWORD PTR SS:[ESP+4],EAX  //[esp+4]=eax 相當於把前面push 34變為push eax 

0B22428C  LEA ESP,DWORD PTR SS:[ESP+4]  //add esp,4 相當於去掉PUSH DWORD PTR FS:[0]
0B224290  MOV DWORD PTR FS:[0],ESP    //設定SEH,前面幾行可以簡化為push fs:[0],mov fs[0],esp 
0B224297  SUB ESP,58                  //不變,照抄 
0B22429A  JMP SHORT 0B22429E 

0B2242AB  PUSH 34 
0B2242AD  JMP SHORT 0B2242B2                      ; 多餘的字首 

0B2242B2  PUSH DWORD PTR FS:[0] 
0B2242B9  MOV DWORD PTR SS:[ESP+4],EBX  //[esp+4]=ebx 相當於前面push 34變為push ebx 

0B2242C9  LEA ESP,DWORD PTR SS:[ESP+4]  //add esp,4 相當於去掉PUSH DWORD PTR FS:[0],下同 
0B2242CD  JMP SHORT 0B2242D1 

0B2242DE  PUSH 34 
0B2242E0  JMP SHORT 0B2242E5                      ; 多餘的字首 

0B2242E5  PUSH DWORD PTR FS:[0] 
0B2242EC  MOV DWORD PTR SS:[ESP+4],ESI  // 相當於把前面push 34變為push esi 

0B2242FC  LEA ESP,DWORD PTR SS:[ESP+4] 
0B224300  JMP SHORT 0B224304 

0B224311  PUSH 34 
0B224313  JMP SHORT 0B224318                      ; 多餘的字首 

0B224318  PUSH DWORD PTR FS:[0] 
0B22431F  MOV DWORD PTR SS:[ESP+4],EDI  // 相當於把前面push 34變為push edi 

0B22432F  LEA ESP,DWORD PTR SS:[ESP+4] 
0B224333  MOV DWORD PTR SS:[EBP-18],ESP 
0B224336  JMP SHORT 0B22433A                      ; 多餘的字首 

0B22433E  PUSH 53F07B  //不變,照抄 
0B224343  PUSH 0B224131 
0B224348  RETN 

0B224131  JMP SHORT 0B224134 
以下打掃戰場: 
0B224134  PUSH ECX 
0B224135  PUSH EDI 
0B224136  PUSHFD 
0B224137  CLD 
0B224138  MOV EDI,0B224175 
0B22413D  MOV ECX,145E 
0B224142  REP STOS BYTE PTR ES:[EDI
0B224144  POPFD 
0B224145  POP EDI 
0B224146  POP ECX 
0B224147  RETN  
回到fake OEP: 
0053F07B  CALL DWORD PTR DS:[54D1DC] 
0053F081  XOR EDX,EDX 
0053F083  MOV DL,AH 
0053F085  MOV DWORD PTR DS:[88BAF10],EDX 
0053F08B  MOV ECX,EAX 
0053F08D  AND ECX,0FF 
0053F093  MOV DWORD PTR DS:[88BAF0C],ECX 
0053F099  SHL ECX,8 
0053F09C  ADD ECX,EDX 
0053F09E  MOV DWORD PTR DS:[88BAF08],ECX 
0053F0A4  SHR EAX,10 

3.透過以上跟蹤分析,得出正確的stolen code如下:(而且長度正好一致) 
0053F055 >PUSH EBP 
0053F056  MOV EBP,ESP 
0053F058  PUSH -1 
0053F05A  PUSH 0054E948 
0053F05F  PUSH 00542B94 
0053F064  PUSH DWORD PTR FS:[0] 
0053F06A  MOV DWORD PTR FS:[0],ESP 
0053F070  SUB ESP,58 
0053F073  PUSH EBX 
0053F074  PUSH ESI 
0053F075  PUSH EDI 
0053F076  PUSH 0053F07B 
0053F07B  CALL DWORD PTR DS:[54D1DC]

相關文章