首页
社区
课程
招聘
[原创]Delphi Virus.Win32.Induc.a 专杀
发表于: 2009-8-20 00:22 12832

[原创]Delphi Virus.Win32.Induc.a 专杀

2009-8-20 00:22
12832

不知道那个大侠写的这个病毒
还好没破坏性
写了个小工具查找和修复EXE,DLL文件

入口代码
004062A4  /$  55                     PUSH    EBP
004062A5  |.  8BEC                   MOV     EBP, ESP
004062A7  |.  81C4 DCFEFFFF          ADD     ESP, -124
004062AD  |.  53                     PUSH    EBX
004062AE  |.  56                     PUSH    ESI
004062AF  |.  33C0                   XOR     EAX, EAX
004062B1  |.  8985 E4FEFFFF          MOV     DWORD PTR SS:[EBP-11C], EAX
004062B7  |.  8985 E0FEFFFF          MOV     DWORD PTR SS:[EBP-120], EAX
004062BD  |.  8985 DCFEFFFF          MOV     DWORD PTR SS:[EBP-124], EAX
004062C3  |.  8985 E8FEFFFF          MOV     DWORD PTR SS:[EBP-118], EAX
004062C9  |.  8985 F0FEFFFF          MOV     DWORD PTR SS:[EBP-110], EAX
004062CF  |.  8985 ECFEFFFF          MOV     DWORD PTR SS:[EBP-114], EAX
004062D5  |.  8945 F4                MOV     DWORD PTR SS:[EBP-C], EAX
004062D8  |.  8D75 F8                LEA     ESI, DWORD PTR SS:[EBP-8]
004062DB  |.  33C0                   XOR     EAX, EAX
004062DD  |.  55                     PUSH    EBP
004062DE  |.  68 49644000            PUSH    test.00406449
004062E3  |.  64:FF30                PUSH    DWORD PTR FS:[EAX]
004062E6  |.  64:8920                MOV     DWORD PTR FS:[EAX], ESP
004062E9  |.  B3 34                  MOV     BL, 34
004062EB  |>  8D45 FC                /LEA     EAX, DWORD PTR SS:[EBP-4]
004062EE  |.  50                     |PUSH    EAX
004062EF  |.  68 19000200            |PUSH    20019
004062F4  |.  6A 00                  |PUSH    0
004062F6  |.  68 60644000            |PUSH    test.00406460                   ;  Software\Borland\Delphi\
004062FB  |.  8D85 ECFEFFFF          |LEA     EAX, DWORD PTR SS:[EBP-114]
00406301  |.  8BD3                   |MOV     EDX, EBX
00406303  |.  E8 68DFFFFF            |CALL    test.00404270
00406308  |.  FFB5 ECFEFFFF          |PUSH    DWORD PTR SS:[EBP-114]
0040630E  |.  68 84644000            |PUSH    test.00406484                   ;  .0
00406313  |.  8D85 F0FEFFFF          |LEA     EAX, DWORD PTR SS:[EBP-110]
00406319  |.  BA 03000000            |MOV     EDX, 3
0040631E  |.  E8 C1E0FFFF            |CALL    test.004043E4
00406323  |.  8B85 F0FEFFFF          |MOV     EAX, DWORD PTR SS:[EBP-110]
00406329  |.  E8 52E1FFFF            |CALL    test.00404480
0040632E  |.  50                     |PUSH    EAX                             ; |Subkey
0040632F  |.  68 02000080            |PUSH    80000002                        ; |hKey = HKEY_LOCAL_MACHINE
00406334  |.  E8 37EEFFFF            |CALL    <JMP.&advapi32.RegOpenKeyExA>   ; \RegOpenKeyExA
00406339  |.  85C0                   |TEST    EAX, EAX
0040633B  |.  0F85 D8000000          |JNZ     test.00406419
00406341  |.  C706 FF000000          |MOV     DWORD PTR DS:[ESI], 0FF
00406347  |.  56                     |PUSH    ESI                             ; /pBufSize
00406348  |.  8D85 F5FEFFFF          |LEA     EAX, DWORD PTR SS:[EBP-10B]     ; |
0040634E  |.  50                     |PUSH    EAX                             ; |Buffer
0040634F  |.  56                     |PUSH    ESI                             ; |pValueType
00406350  |.  6A 00                  |PUSH    0                               ; |Reserved = NULL
00406352  |.  68 88644000            |PUSH    test.00406488                   ; |RootDir
00406357  |.  8B45 FC                |MOV     EAX, DWORD PTR SS:[EBP-4]       ; |
0040635A  |.  50                     |PUSH    EAX                             ; |hKey
0040635B  |.  E8 18EEFFFF            |CALL    <JMP.&advapi32.RegQueryValueExA>; \RegQueryValueExA
00406360  |.  85C0                   |TEST    EAX, EAX
00406362  |.  0F85 A8000000          |JNZ     test.00406410
00406368  |.  8D45 F4                |LEA     EAX, DWORD PTR SS:[EBP-C]
0040636B  |.  E8 34DDFFFF            |CALL    test.004040A4
00406370  |.  C706 01000000          |MOV     DWORD PTR DS:[ESI], 1
00406376  |.  EB 24                  |JMP     SHORT test.0040639C
00406378  |>  8D85 E8FEFFFF          |/LEA     EAX, DWORD PTR SS:[EBP-118]
0040637E  |.  8B16                   ||MOV     EDX, DWORD PTR DS:[ESI]
00406380  |.  8A9415 F4FEFFFF        ||MOV     DL, BYTE PTR SS:[EBP+EDX-10C]
00406387  |.  E8 E4DEFFFF            ||CALL    test.00404270
0040638C  |.  8B95 E8FEFFFF          ||MOV     EDX, DWORD PTR SS:[EBP-118]
00406392  |.  8D45 F4                ||LEA     EAX, DWORD PTR SS:[EBP-C]
00406395  |.  E8 92DFFFFF            ||CALL    test.0040432C
0040639A  |.  FF06                   ||INC     DWORD PTR DS:[ESI]
0040639C  |>  8B06                   | MOV     EAX, DWORD PTR DS:[ESI]
0040639E  |.  80BC05 F4FEFFFF 00     ||CMP     BYTE PTR SS:[EBP+EAX-10C], 0
004063A6  |.^ 75 D0                  |\JNZ     SHORT test.00406378
004063A8  |.  68 98644000            |PUSH    test.00406498                   ;  "
004063AD  |.  FF75 F4                |PUSH    DWORD PTR SS:[EBP-C]
004063B0  |.  68 A4644000            |PUSH    test.004064A4                   ;  \bin\dcc32.exe"
004063B5  |.  8D85 E4FEFFFF          |LEA     EAX, DWORD PTR SS:[EBP-11C]
004063BB  |.  BA 03000000            |MOV     EDX, 3
004063C0  |.  E8 1FE0FFFF            |CALL    test.004043E4
004063C5  |.  8B85 E4FEFFFF          |MOV     EAX, DWORD PTR SS:[EBP-11C]
004063CB  |.  50                     |PUSH    EAX
004063CC  |.  8D85 E0FEFFFF          |LEA     EAX, DWORD PTR SS:[EBP-120]
004063D2  |.  B9 C0644000            |MOV     ECX, test.004064C0              ;  \lib\sysconst.
004063D7  |.  8B55 F4                |MOV     EDX, DWORD PTR SS:[EBP-C]
004063DA  |.  E8 91DFFFFF            |CALL    test.00404370
004063DF  |.  8B85 E0FEFFFF          |MOV     EAX, DWORD PTR SS:[EBP-120]
004063E5  |.  50                     |PUSH    EAX
004063E6  |.  FF75 F4                |PUSH    DWORD PTR SS:[EBP-C]
004063E9  |.  68 D8644000            |PUSH    test.004064D8                   ;  \source\rtl\sys\SysConst
004063EE  |.  68 FC644000            |PUSH    test.004064FC                   ;  .pas
004063F3  |.  8D85 DCFEFFFF          |LEA     EAX, DWORD PTR SS:[EBP-124]
004063F9  |.  BA 03000000            |MOV     EDX, 3
004063FE  |.  E8 E1DFFFFF            |CALL    test.004043E4
00406403  |.  8B85 DCFEFFFF          |MOV     EAX, DWORD PTR SS:[EBP-124]
00406409  |.  5A                     |POP     EDX
0040640A  |.  59                     |POP     ECX
0040640B  |.  E8 B8F9FFFF            |CALL    test.00405DC8
00406410  |>  8B45 FC                |MOV     EAX, DWORD PTR SS:[EBP-4]
00406413  |.  50                     |PUSH    EAX                             ; /hKey
00406414  |.  E8 4FEDFFFF            |CALL    <JMP.&advapi32.RegCloseKey>     ; \RegCloseKey
00406419  |>  43                     |INC     EBX
0040641A  |.  80FB 38                |CMP     BL, 38
0040641D  |.^ 0F85 C8FEFFFF          \JNZ     test.004062EB
00406423  |.  33C0                   XOR     EAX, EAX
00406425  |.  5A                     POP     EDX
00406426  |.  59                     POP     ECX
00406427  |.  59                     POP     ECX
00406428  |.  64:8910                MOV     DWORD PTR FS:[EAX], EDX
0040642B  |.  68 50644000            PUSH    test.00406450
00406430  |>  8D85 DCFEFFFF          LEA     EAX, DWORD PTR SS:[EBP-124]
00406436  |.  BA 06000000            MOV     EDX, 6
0040643B  |.  E8 88DCFFFF            CALL    test.004040C8
00406440  |.  8D45 F4                LEA     EAX, DWORD PTR SS:[EBP-C]
00406443  |.  E8 5CDCFFFF            CALL    test.004040A4
00406448  \.  C3                     RETN

搜索
55 8B EC 81 C4 DC FE FF FF 53 56 33 C0 89 85 E4 FE FF FF 89 85 E0 FE FF FF 89 85 DC FE FF FF 89
85 E8 FE FF FF 89 85 F0 FE FF FF 89 85 EC FE FF FF 89 45 F4 8D 75 F8 33 C0 55 68 49 64 40 00 64
FF 30 64 89 20 B3 34 8D 45 FC 50 68 19 00 02 00 6A 00

替换
55 = C3


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (8)
雪    币: 231
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
支持下大半夜发帖的群众.
2009-8-20 00:45
0
雪    币: 0
活跃值: (984)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
楼主的专杀有反汇编引擎,代码能给我一份吗?
2009-8-20 09:02
0
雪    币: 1610
活跃值: (1054)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
治标不治本啊,特征不去除杀软还是会报毒,况且加了壳怎么办......还是从程序员自身抓起~
2009-8-20 10:52
0
雪    币: 67
活跃值: (66)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
5
function TWorkThread.ScanFile(const FileName: string): Boolean;
var
  hFile, hFileMapping:THandle;
  FileSizeHigh:LongWord;
  pMemory:Pointer;
  MemorySize:Cardinal;
  foundAddr:Cardinal;
begin
  {功能: 扫描文件, 检查文件是否包含病毒}
  inc( FCount); //增加扫描文件计数
  Synchronize( UpdateUICount);
  Result := False;
  hFile := CreateFile( PChar( FileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING,  FILE_ATTRIBUTE_NORMAL, 0);
  if hFile <> INVALID_HANDLE_VALUE then
  begin
    //获得文件大小
    MemorySize := GetFileSize(hFile, @FileSizeHigh);
    if MemorySize <> INVALID_FILE_SIZE then
    begin
      hFileMapping := CreateFileMapping( hFile, nil, PAGE_READONLY,0,0,nil);
      if hFileMapping <> 0 then
      begin
        pMemory := MapViewOfFile(hFileMapping, FILE_MAP_READ, 0, 0, 0);
        if pMemory <> nil then
        begin
           //扫描打开文件
           foundAddr := SearchEx(pMemory, @SearchPattern[0],
              @SearchMask[0], Length( SearchPattern), MemorySize);
           if foundAddr <> 0 then
           begin
             Inc( FFoundCount);
             FVirusFileName := FileName;
             FFoundAddr := foundAddr - Cardinal(pMemory);
             Result := True;
           end;  
           UnmapViewOfFile( pMemory);
        end;  
        CloseHandle( hFileMapping);
      end;
    end;
    CloseHandle( hFile);
  end;
end;

SearchEx直接用的国外某大侠的 没涉及到pe文件验证
;**********************************************************************************************
;* Example (how to use)                                                                       *
;* ------------------------------------------------------------------------------------------ *
;* search : 2A 45 EB ?? C3 ?? EF                                                              *
;* replace: 2A ?? ?? 10 33 C0 ??                                                              *
;*                                                                                            *
;* .data                                                                                      *
;* SearchPattern   db 02Ah, 045h, 0EBh, 000h, 0C3h, 000h, 0EFh                                *
;* SearchMask      db    0,    0,    0,    1,    0,    1,    0         ;(1=Ignore Byte)             *
;*                                                                                            *
;* ReplacePattern  db 02Ah, 000h, 000h, 010h, 033h, 0C0h, 000h                                *
;* ReplaceMask     db    0,    1,    1,    0,    0,    0,    1         ;(1=Ignore Byte)             *
;*                                                                                            *
;* .const                                                                                     *
;* PatternSize     equ 7                                                                      *
;*                                                                                            *
;* .code                                                                                      *
;* push FileSize                ;how many bytes to search from beginning from TargetAdress    *
;* push PatternSize             ;lenght of Pattern                                            *
;* push offset SearchMask                                                                     *
;* push offset SearchPattern                                                                  *
;* push TargetAddress           ;the memory address where the search starts                   *
;* call SearchAndReplace                                                                      *
;*                                                                                            *
;* ReturnValue in eax (1=Success 0=Failed)                                                    *
;**********************************************************************************************

.586               
;locals
;jumps
.model flat, stdcall
option casemap :none

SearchEx PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD

.code
public SearchEx
SearchEx proc         _targetadress:dword,_searchpattern:dword,_searchmask:dword,_patternsize:dword,_searchsize:dword
                       
        LOCAL local_returnvalue        :dword         ;returns Address
       
        pushad
        mov local_returnvalue,0

       
        mov edi,_targetadress
        mov esi,_searchpattern
        mov edx,_searchmask
        mov ebx,_patternsize
        xor ecx,ecx
       
        .while ecx!=_searchsize
                @search_again:
                ;---check if pattern exceed memory---
                mov eax,ecx                ;ecx=raw offset
                add eax,ebx                ;raw offset + patternsize
                cmp eax,_searchsize
                ja @return                ;if (raw offset + patternsize) > searchsize then bad!
               
                push ecx                ;counter
                push esi                ;searchpattern
                push edi                ;targetaddress
                push edx                ;searchmask
               
                mov ecx,ebx                ;ebx=patternsize
                @cmp_mask:
                test ecx,ecx
                je @pattern_found
                cmp byte ptr[edx],1        ;searchmask
                je @ignore
                lodsb                        ;load searchbyte to al & inc esi
                scasb                        ;cmp al,targetadressbyte & inc edi
                jne @skip
                inc edx                        ;searchmask
                dec ecx                        ;patternsize
                jmp @cmp_mask
                @ignore:
                inc edi                        ;targetadress
                inc esi                        ;searchpattern
                inc edx                        ;searchmask
                dec ecx                        ;patternsize
                jmp @cmp_mask
               
                @skip:
                pop edx
                pop edi                        ;targetadress
                pop esi                        ;searchpattern
                pop ecx
               
                inc edi                        ;targetadress
                inc ecx                        ;counter
        .endw
        ;---scanned whole memory size---
        jmp @return       

        @pattern_found:
        pop edx
        pop edi                                ;targetadress
        pop esi
        pop ecx       
        mov local_returnvalue, edi
        jmp @return

        ;---return---
        @return:
        popad
        mov eax,local_returnvalue
        ret
SearchEx endp

end
2009-8-20 12:08
0
雪    币: 259
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
杀完后,nod32 还会报毒!
2009-8-20 13:21
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我也中了

解决方法见地址
2feK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0T1M7#2)9J5k6e0f1J5M7r3!0B7K9h3g2Q4x3X3g2U0L8W2)9J5c8Y4k6A6k6i4N6@1K9s2u0W2j5h3c8Q4x3X3g2H3K9s2m8Q4x3@1k6@1K9h3c8Q4x3@1b7K6x3e0p5H3y4R3`.`.

上传个没有被感染的D7   SysConst 以备需要的朋友下载
上传的附件:
2009-8-20 18:28
0
雪    币: 220
活跃值: (886)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我也中了,奇怪,是不是某人发的东西里面带的?
2009-8-20 20:56
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这个工具只能杀简单的, 很多感染了Induc的Delphi程序都是加了壳的, 最麻烦的就是怎么清除这些加了壳的Induc
2009-9-2 02:52
0
游客
登录 | 注册 方可回帖
返回