⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chap8-1-6.htm.primary

📁 加密与解密,软件加密保护技术与解决方案,看雪文档!
💻 PRIMARY
📖 第 1 页 / 共 5 页
字号:
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov hMapping, eax <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke MapViewOfFile,hMapping,FILE_MAP_READ,0,0,0 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .if eax!=NULL <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov pMapping,eax <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; assume fs:nothing <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push fs:[0] <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop seh.PrevLink <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov seh.CurrentHandler,offset 
  SEHHandler <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov seh.SafeOffset,offset 
  FinalExit <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lea eax,seh <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov fs:[0], eax <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov seh.PrevEsp,esp <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov seh.PrevEbp,ebp <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov edi, pMapping <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; assume edi:ptr IMAGE_DOS_HEADER 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .if [edi].e_magic==IMAGE_DOS_SIGNATURE 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add edi, 
  [edi].e_lfanew <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; assume edi:ptr 
  IMAGE_NT_HEADERS <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .if [edi].Signature==IMAGE_NT_SIGNATURE 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 
  ValidPE, TRUE <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.else 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  mov ValidPE, FALSE <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .endif <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .else <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov ValidPE,FALSE 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .endif <br>
  FinalExit: <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push seh.PrevLink <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop fs:[0] <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .if ValidPE==TRUE <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke ShowTheFunctions, 
  hDlg, edi <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .else <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke MessageBox,0, 
  addr NotValidPE, addr AppName, MB_OK+MB_ICONERROR <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.endif <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke UnmapViewOfFile, 
  pMapping <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.else <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke MessageBox, 0, 
  addr FileMappingError, addr AppName, MB_OK+MB_ICONERROR <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.endif <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;invoke CloseHandle,hMapping <br>
  &nbsp;&nbsp;&nbsp;&nbsp;.else <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke MessageBox, 0, addr FileOpenMappingError, 
  addr AppName, MB_OK+MB_ICONERROR <br>
  &nbsp;&nbsp;&nbsp; .endif <br>
  &nbsp;&nbsp;&nbsp; invoke CloseHandle, hFile <br>
  &nbsp;&nbsp; .else <br>
  &nbsp;&nbsp;&nbsp;invoke MessageBox, 0, addr FileOpenError, addr AppName, MB_OK+MB_ICONERROR 
  <br>
  &nbsp;&nbsp; .endif <br>
  &nbsp;.endif <br>
  &nbsp;ret <br>
  ShowImportFunctions endp <br>
  <br>
  AppendText proc hDlg:DWORD,pText:DWORD <br>
  &nbsp;&nbsp; invoke SendDlgItemMessage,hDlg,IDC_EDIT,EM_REPLACESEL,0,pText <br>
  &nbsp;&nbsp; invoke SendDlgItemMessage,hDlg,IDC_EDIT,EM_REPLACESEL,0,addr CRLF 
  <br>
  &nbsp;&nbsp; invoke SendDlgItemMessage,hDlg,IDC_EDIT,EM_SETSEL,-1,0 <br>
  &nbsp;&nbsp;&nbsp;ret <br>
  AppendText endp <br>
  <br>
  RVAToOffset PROC uses edi esi edx ecx pFileMap:DWORD,RVA:DWORD <br>
  &nbsp;&nbsp; mov esi,pFileMap <br>
  &nbsp;&nbsp; assume esi:ptr IMAGE_DOS_HEADER <br>
  &nbsp;&nbsp; add esi,[esi].e_lfanew <br>
  &nbsp;&nbsp; assume esi:ptr IMAGE_NT_HEADERS <br>
  &nbsp;&nbsp; mov edi,RVA ; edi == RVA <br>
  &nbsp;&nbsp; mov edx,esi <br>
  &nbsp;&nbsp; add edx,sizeof IMAGE_NT_HEADERS <br>
  &nbsp;&nbsp; mov cx,[esi].FileHeader.NumberOfSections <br>
  &nbsp;&nbsp; movzx ecx,cx <br>
  &nbsp;&nbsp; assume edx:ptr IMAGE_SECTION_HEADER <br>
  &nbsp;&nbsp; .while ecx&gt;0 ; check all sections <br>
  &nbsp;&nbsp;&nbsp;&nbsp; .if edi&gt;=[edx].VirtualAddress <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov eax,[edx].VirtualAddress <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add eax,[edx].SizeOfRawData <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .if edi&lt;eax ; The address is in this 
  section <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov eax,[edx].VirtualAddress 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sub edi,eax<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov eax,[edx].PointerToRawData 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add eax,edi ; eax == file offset 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .endif <br>
  &nbsp;&nbsp;&nbsp;&nbsp; .endif <br>
  &nbsp;&nbsp;&nbsp;&nbsp; add edx,sizeof IMAGE_SECTION_HEADER <br>
  &nbsp;&nbsp;&nbsp;&nbsp; dec ecx <br>
  &nbsp;&nbsp; .endw <br>
  &nbsp;&nbsp; assume edx:nothing <br>
  &nbsp;&nbsp; assume esi:nothing <br>
  &nbsp;&nbsp; mov eax,edi <br>
  &nbsp;&nbsp; ret <br>
  RVAToOffset endp <br>
  <br>
  ShowTheFunctions proc uses esi ecx ebx hDlg:DWORD, pNTHdr:DWORD <br>
  &nbsp;&nbsp; LOCAL temp[512]:BYTE <br>
  &nbsp;&nbsp; invoke SetDlgItemText,hDlg,IDC_EDIT,0 <br>
  &nbsp;&nbsp; invoke AppendText,hDlg,addr buffer <br>
  &nbsp;&nbsp; mov edi,pNTHdr <br>
  &nbsp;&nbsp; assume edi:ptr IMAGE_NT_HEADERS <br>
  &nbsp;&nbsp; mov edi, [edi].OptionalHeader.DataDirectory[sizeof IMAGE_DATA_DIRECTORY].VirtualAddress 
  <br>
  &nbsp;&nbsp; invoke RVAToOffset,pMapping,edi <br>
  &nbsp;&nbsp; mov edi,eax <br>
  &nbsp;&nbsp; add edi,pMapping <br>
  &nbsp;&nbsp; assume edi:ptr IMAGE_IMPORT_DESCRIPTOR <br>
  &nbsp;&nbsp; .while !([edi].OriginalFirstThunk==0 &amp;&amp; [edi].TimeDateStamp==0 
  &amp;&amp; [edi].ForwarderChain==0 &amp;&amp; [edi].Name1==0 &amp;&amp; [edi].FirstThunk==0) 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp; invoke AppendText,hDlg,addr ImportDescriptor <br>
  &nbsp;&nbsp;&nbsp;&nbsp; invoke RVAToOffset,pMapping, [edi].Name1 <br>
  &nbsp;&nbsp;&nbsp;&nbsp; mov edx,eax <br>
  &nbsp;&nbsp;&nbsp;&nbsp; add edx,pMapping <br>
  &nbsp;&nbsp;&nbsp;&nbsp; invoke wsprintf, addr temp, addr IDTemplate, [edi].OriginalFirstThunk,[edi].TimeDateStamp,[edi].ForwarderChain,edx,[edi].FirstThunk 
  &nbsp;&nbsp;&nbsp;&nbsp; invoke AppendText,hDlg,addr temp <br>
  &nbsp;&nbsp;&nbsp;&nbsp; .if [edi].OriginalFirstThunk==0 <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov esi,[edi].FirstThunk <br>
  &nbsp;&nbsp;&nbsp;&nbsp; .else <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov esi,[edi].OriginalFirstThunk 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp; .endif <br>
  &nbsp;&nbsp;&nbsp;&nbsp; invoke RVAToOffset,pMapping,esi <br>
  &nbsp;&nbsp;&nbsp;&nbsp; add eax,pMapping <br>
  &nbsp;&nbsp;&nbsp;&nbsp; mov esi,eax <br>
  &nbsp;&nbsp;&nbsp;&nbsp; invoke AppendText,hDlg,addr NameHeader <br>
  &nbsp;&nbsp;&nbsp;&nbsp; .while dword ptr [esi]!=0 <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test dword ptr [esi],IMAGE_ORDINAL_FLAG32 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jnz ImportByOrdinal <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke RVAToOffset,pMapping,dword ptr [esi] 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov edx,eax <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add edx,pMapping <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; assume edx:ptr IMAGE_IMPORT_BY_NAME <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov cx, [edx].Hint <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; movzx ecx,cx <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke wsprintf,addr temp,addr NameTemplate,ecx,addr 
  [edx].Name1 <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp ShowTheText <br>
  ImportByOrdinal: <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov edx,dword ptr [esi] <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and edx,0FFFFh <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke wsprintf,addr temp,addr OrdinalTemplate,edx 
  <br>
  ShowTheText: <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke AppendText,hDlg,addr temp <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add esi,4 <br>
  &nbsp;&nbsp;&nbsp; .endw <br>
  &nbsp;&nbsp;&nbsp; add edi,sizeof IMAGE_IMPORT_DESCRIPTOR <br>
  &nbsp; .endw <br>
  &nbsp;&nbsp;ret <br>
  ShowTheFunctions endp <br>
  end start </font></p>
<h3><font color="#000000">分析<font face="Arial, Helvetica, sans-serif">:</font></font></h3>
<p><font size="2" color="#000000">本例中,用户点击打开菜单显示文件打开对话框,检验文件的</font><font size="2" face="MS Sans Serif" color="#000000">PE</font><font size="2" color="#000000">有效性后调用 
  </font><font color="#000000" size="2" face="MS Sans Serif"><b>ShowTheFunctions</b></font><font size="2" color="#000000">。</font></p>
<p><font face="Fixedsys" color="#000000">ShowTheFunctions proc uses esi ecx ebx 
  hDlg:DWORD, pNTHdr:DWORD <br>
  &nbsp;&nbsp; LOCAL temp[512]:BYTE </font></p>
<p><font size="2" color="#000000">保留</font><font size="2" face="MS Sans Serif" color="#000000">512</font><font size="2" color="#000000">字节堆栈空间用于字符串操作。</font></p>
<p><font face="Fixedsys" color="#000000">&nbsp;&nbsp; invoke SetDlgItemText,hDlg,IDC_EDIT,0 
  </font></p>
<p><font size="2" color="#000000">清除编辑控件内容。</font></p>
<p><font face="Fixedsys" color="#000000">&nbsp;&nbsp; invoke AppendText,hDlg,addr 
  buffer </font></p>
<p><font size="2" color="#000000">将</font><font size="2" face="MS Sans Serif" color="#000000">PE</font><font size="2" color="#000000">文件名插入编辑控件。 
  </font><font color="#000000" size="2" face="MS Sans Serif"><b>AppendText </b></font><font size="2" color="#000000">通过传递一个 
  </font><font color="#000000" size="2" face="MS Sans Serif"><b>EM_REPLACESEL 
  </b></font><font size="2" color="#000000">消息以通知向编辑控件添加文本。然后它又向编辑控件发送一个设置了 </font><font size="2" face="MS Sans Serif" color="#000000">wParam=-1</font><font size="2" color="#000000">和</font><font size="2" face="MS Sans Serif" color="#000000">lParam=0</font><font size="2" color="#000000">的</font><font color="#000000" size="2" face="MS Sans Serif"><b>EM_SETSEL</b> 
  </font><font size="2" color="#000000">消息,使光标定位到文本末。</font></p>
<p><font face="Fixedsys" color="#000000">&nbsp;&nbsp; mov edi,pNTHdr <br>
  &nbsp;&nbsp; assume edi:ptr IMAGE_NT_HEADERS <br>
  &nbsp;&nbsp; mov edi, [edi].OptionalHeader.DataDirectory[sizeof IMAGE_DATA_DIRECTORY].VirtualAddress 
  </font></p>
<p><font size="2" color="#000000">获取</font><font size="2" face="MS Sans Serif" color="#000000">import 
  symbols</font><font size="2" color="#000000">的</font><font size="2" face="MS Sans Serif" color="#000000">RVA</font><font size="2" color="#

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -