本类共有 70 篇文章,今日更新 0

ASProtect.SKE.2.11对部分系统函数的处理

[ 来源:http://www.91now.com/down/ | 作者: | 时间:2007-5-18 18:30:27 | 浏览: 人次 ]


外壳将部分系统函数的前几个字节放到用自己分配的空间,然后再转到系统函数运行  
如:  
003D0000    8BFF            mov     edi, edi  
003D0002    55              push    ebp  
003D0003    8BEC            mov     ebp, esp  
003D0005    837D 08 00      cmp     dword ptr [ebp+8], 0  
003D0009    53              push    ebx  
003D000A    56              push    esi  
003D000B    68 821D807C     push    7C801D82  
003D0010    C3              retn  

7C801D77 >  8BFF            mov     edi, edi  
7C801D79    55              push    ebp  
7C801D7A    8BEC            mov     ebp, esp  
7C801D7C    837D 08 00      cmp     dword ptr [ebp+8], 0  
7C801D80    53              push    ebx  
7C801D81    56              push    esi  
7C801D82    74 14           je      short 7C801D98  
以上两段是不是很象呢?第二段是系统函数LoadLibraryA的代码,第一段是外壳分配的空间,并将LoadLibraryA的前10个字节搬了进去,在地址003D000B处push    7C801D82,  
Retn后回到系统代码。  

怎样找到所有被这样处理过的函数呢?  
对VirtualAlloc设断,得到:  
返回地址  Address  Size    分配地址  
VirtualAlloc:  40A537    0    43000    A10000      
VirtualAlloc:  40A565    0    43000    A60000      
VirtualFree:  40A646    A10000      
VirtualAlloc:  AA10CA    0    546    3C0000      
VirtualFree:  AA1101    3C0000      
VirtualAlloc:  AA1349    0    31400    3C0000      
VirtualFree:  AA13E5    3C0000      
VirtualAlloc:  AA1349    0    A00    3C0000      
VirtualFree:  AA13E5    3C0000      
VirtualAlloc:  AA1349    0    1000    3C0000      
VirtualFree:  AA13E5    3C0000      
VirtualAlloc:  AA1349    0    2600    3C0000      
VirtualFree:  AA13E5    3C0000      
VirtualAlloc:  A61404    0    100000    AB0000      
VirtualAlloc:  A615D6    AB0000    4000    AB0000      
VirtualAlloc:  A615D6    AB4000    14000    AB4000      
VirtualFree:  A61657    AC4000      
VirtualAlloc:  A615D6    AC4000    8000    AC4000      
VirtualAlloc:  A615D6    ACC000    8000    ACC000      
VirtualFree:  A61657    AC4000      
VirtualAlloc:  A615D6    AD4000    8000    AD4000      
VirtualFree:  A61657    AD0000      
VirtualFree:  A61657    AC8000      
VirtualAlloc:  A7E7C2    0    1D    3C0000      
VirtualAlloc:  A7E7C2    0    15    3D0000      
VirtualAlloc:  A7E7C2    0    25    3E0000      
VirtualAlloc:  A7E7C2    0    16    3F0000      
VirtualAlloc:  A7E7C2    0    16    BB0000      
VirtualAlloc:  A7E7C2    0    22    BC0000      
VirtualAlloc:  A7E7C2    0    1E    BD0000      
VirtualAlloc:  A7E7C2    0    17    BE0000      
VirtualAlloc:  A7E7C2    0    17    BF0000      
VirtualAlloc:  A7E7C2    0    15    C00000      
VirtualAlloc:  A7E7C2    0    29    C10000      
VirtualAlloc:  A7E7C2    0    22    C20000      
看看最下面这几行,分配的空间不是很大,很可能是,事实确实这样。你可已找一两个地方看看嘛。。。  

随便找一个,比如对3D0000设内存写入断点(要确定它已分配),为此可写个脚本:  
var  VirtualAllocaddr  
                 
checkver:       
  //check ollyscript’s version  
  cmp  $VERSION,"0.9"  
  ja  start  
  msg  "version bad!"  
  ret  
    
start:  
         
          gpa  "VirtualAlloc","kernel32.dll"  
          mov  VirtualAllocaddr,$RESULT  
          bp  VirtualAllocaddr    //在VirtualAlloc设断  
      
continue:          
          run  
          
          rtr  
          cmp  eax,003D0000  
          jne  continue    
          ret  
虽然对3D0000设内存写入断点并断下,你不会知道它是哪个函数,只有在下一个VirtualAlloc调用前仔细跟踪。  
  Olly的run跟踪到调用下一个VirtualAlloc前的代码为:  
00A87337  主  cmp  &nbs

[1] [2] 下一页

广告位