黑客防线,在攻与防的对立统一中寻求突破!2001年创刊的黑客技术专业刊物!

设为首页
收藏本站
联系我们
网站导航

黑客文章 - 黑客工具免杀 - 浏览 - 打造不被杀的Topo工具程序

打造不被杀的Topo工具程序

黑客 发布日期:2008-2-16 0:58:47 共有 1954 人次浏览
打造不被杀的Topo工具程序




    -------------定位结果------------
  
    序号   起始偏移   大小   结束偏移
  
  0001   00000400   00000001   00000401    
  
  0002   00000402   00000003   00000405    

  
只有第1,3,4,5四个字节是特征码,(特征码可真短啊,难怪那么快)。所以,只要改掉前5个字节就行了。
  
topo12.exe的入口代码如下
    
00401000 >/$Content$nbsp;6A 00           push 0                     ; /pModule = NULL
  
00401002 │. E8 690E0000       call <jmp.&KERNEL32.GetModuleHandleA> ; \GetModuleHandleA
  
00401007 │. A3 A0384000       mov dword ptr ds:[4038A0],eax
  
0040100C │. 6A 00           push 0                     ; /lParam = NULL
  
0040100E │. 68 2C104000       push topo12.0040102C             ; │DlgProc = topo12.0040102C
  
00401013 │. 6A 00           push 0                     ; │hOwner = NULL
  
00401015 │. 68 E8030000       push 3E8                     ; │pTemplate = 3E8
  
0040101A │. FF35 A0384000     push dword ptr ds:[4038A0]         ; │hInst = NULL
  
00401020 │. E8 D90D0000       call <jmp.&USER32.DialogBoxParamA>   ; \DialogBoxParamA
  
00401025 │. 6A 00           push 0                     ; /ExitCode = 0
  
00401027 \. E8 380E0000       call <jmp.&KERNEL32.ExitProcess>     ; \ExitProcess
  
前五个字节是6A00E8690E然后我把它改成
    
00401000 >/$Content$nbsp;6A 00         push 0                     ; /lParam = NULL
  
00401002 │. 6A 00         push 0                     ; │/pModule = NULL
  
00401004 │. E8 670E0000     call <jmp.&KERNEL32.GetModuleHandleA> ; │\GetModuleHandleA
  
00401009 │. A3 A0384000     mov dword ptr ds:[4038A0],eax       ; │
  
0040100E │. 68 2C104000     push _topo12.0040102C           ; │DlgProc = topo12.0040102C
  
00401013 │. 6A 00         push 0                     ; │hOwner = NULL
  
00401015 │. 68 E8030000     push 3E8                     ; │pTemplate = 3E8
  
0040101A │. FF35 A0384000     push dword ptr ds:[4038A0]         ; │hInst = NULL
  
00401020 │. E8 D90D0000     call <jmp.&USER32.DialogBoxParamA>   ; \DialogBoxParamA
  
00401025 │. 6A 00         push 0                     ; /ExitCode = 0
  
00401027 \. E8 380E0000     call <jmp.&KERNEL32.ExitProcess>     ; \ExitProcess

  
一查,还是杀了。。。特征码定位一下
    
    -------------定位结果------------
  
    序号   起始偏移   大小   结束偏移
  
  0001   00000400   00000001   00000401    
  
  0002   00000402   00000001   00000403    
  
  0003   00000404   00000003   00000407  
  
第1,3,5,6,7五个字节是特征码,是6A006A00E8670E,猜测毒霸是搜索入口点是否有push 0/call GetModuleHandleA代码,但是这个不太容易改,呵呵,这两个代码是紧紧在一起的,不太可能分开。但看看结果定位中有输入表段,可能毒霸计算了GetModuleHandleA的偏移,所以当E8690E改成E8670E时也能查出来。用OllyDBG打开topo12.exe,在call <jmp.&KERNEL32.GetModuleHandleA>这行上按回车,来到
  
00401E70   .- FF25 2C204000   jmp dword ptr ds:[<&KERNEL32.GetModuleHandleA>] ; kernel32.GetModuleHandleA
  
在输入表最后添一行
  
00401E70   $- FF25 2C204000   jmp dword ptr ds:[<&KERNEL32.GetModuleHandleA>] ; kernel32.GetModuleHandleA★原来的
  
00401E76   $- FF25 20204000   jmp dword ptr ds:[<&KERNEL32.GlobalAlloc>]     ; kernel32.GlobalAlloc
  
00401E7C   $- FF25 1C204000   jmp dword ptr ds:[<&KERNEL32.GlobalFree>]     ; kernel32.GlobalFree
  
00401E82   $- FF25 24204000   jmp dword ptr ds:[<&KERNEL32.ReadFile>]       ; kernel32.ReadFile
  
00401E88   $- FF25 14204000   jmp dword ptr ds:[<&KERNEL32.SetFilePointer>]   ; kernel32.SetFilePointer
  
00401E8E   $- FF25 10204000   jmp dword ptr ds:[<&KERNEL32.WriteFile>]       ; kernel32.WriteFile
  
00401E94   $- FF25 18204000   jmp dword ptr ds:[<&KERNEL32.lstrcatA>]       ; kernel32.lstrcatA
  
00401E9A   $- FF25 0C204000   jmp dword ptr ds:[<&KERNEL32.lstrcpynA>]       ; kernel32.lstrcpynA
  
00401EA0   $- FF25 08204000   jmp dword ptr ds:[<&KERNEL32.lstrlenA>]       ; kernel32.lstrlenA
  
00401EA6   $- FF25 7C204000   jmp dword ptr ds:[<&comdlg32.GetOpenFileNameA>] ; comdlg32.GetOpenFileNameA
  
00401EAC   $- FF25 2C204000   jmp dword ptr ds:[<&KERNEL32.GetModuleHandleA>] ; kernel32.GetModuleHandleA★添加这行
  
然后再把call 401E70改成call 401EAC
  
00401002 │. E8 690E0000   call <jmp.&KERNEL32.GetModuleHandleA>   ; \GetModuleHandleA

  
改成
  
00401002 │. E8 A50E0000   call <jmp.&KERNEL32.GetModuleHandleA>   ; \GetModuleHandleA

  
69改成了A5,保存,查毒,已经查不到了^_^。这时就可以确定毒霸是查找push 0/call 401E70代码和其它特征码来确定的,所以我们改成push 0/call 401EAC就能躲过查杀了。
  
有兴趣的可以再用其它杀毒软件查一下,打造真正不被杀的topo。

  
后记:
  
第一次用病毒特征码定位器,用的不好,只是用了手动操作,自动操作还不会。确定病毒特征码是比较辛苦的,这个是比较简单的,还有复杂的就要经过很多次的判断才能确定位置,例如DNS那个屏幕抖动的恶作剧程序,要先脱壳,再确定,确定了一次特征码后修改还会出现第二次特征码(猜测可能是杀毒软件为了提高效率有个优先特征码,然后再搜其他特征码)。具体的情况大家多多摸索。
  
^_^
  
Have fun and enjoy it, Greetz to you all!
2/2页次 第一页 上一页 第1页 第2页
所属分类: 黑客工具免杀     网摘收藏: Google 雅虎 百度 POCO 365key 和讯 天极