调戏木马病毒的正确姿势-基础篇

本文介绍了如何调戏木马病毒的基础知识,并预告将在后续章节中通过PeDoll进行实战演示。警告:作者不负责因模仿操作产生的任何后果。此文章为i春秋原创,未经授权禁止转载。
摘要由CSDN通过智能技术生成
目录

----------------------理论基础篇-------------------   
从科幻小说说起:        
危险的潘多拉盒子        
来说说应用程序编程接口        
工欲善其事必先利其器        
(*)正确地作死        
(*)被劫持的应用程序接口        
(***)Hook与QQ密码的战争        
(***)DLL注入与Hook        
1:被篡改的名单,导入表注入        
2 被劫持的OEP        
3.不怀好意的插班生,远程注入        
(**)基于inline Hook的行为监视PeDoll        
(**)调戏木马病毒前的准备工作        
----------------------实战正式篇-------------------
第一章:使用PEDoll调戏cmd调用类型的锁机程序        
第二章:使用PEDoll调戏磁盘锁(MBR)锁机程序        
第三章:使用PEDoll调戏钓鱼程序        
第四章:栈中的明文陷阱,使用PeDoll堆栈功能获取软件中的注册码
第五章:使用PeDoll调戏远控木马
后记



从科幻小说说起:

如果要对病毒讲故事,显然计算机的从业者或者是程序猿总能搬出一大堆的专业术语,他们从一开始的计算机病毒如何破坏,到计算机病毒如何隐藏自己保护自己复制自己总是津津乐道,但显然的,在开篇的文字中我并不打算说的太深入。因为这些太专业的话题对没有相关基础的业外人士并不特别的友好,它除了让人想打瞌睡和让女神感觉你就是个工科男“屌丝”之外,对科普什么是计算机病毒并没有什么帮助。

不过幸运的是,最初的计算机病毒不是程序猿写的,它的出身相当的有文艺范儿,1977年,一个叫雷恩的小说家虚构了一个叫《P-1的青春》的科幻小说,小说中讲述了一种计算机病毒,它能够从第一台传染到另一台,最终控制所有的电脑,当然在那个年代,砖家和叫兽们都认为这是瞎扯淡。

可惜在1988年仅仅过了十年,美国国防部和各大学的6000台计算机,因为一名计算机专业学生编制的计算机病毒而歇菜,显然这一回,砖家和叫兽的脸被打的不轻

那么问题来了,这名学生编写计算机的技巧是哪来的,学编写计算机病毒,哪家强?可惜那年蓝翔还不存在,否者他们会在挖掘机上移植个病毒,让你见识下这玩意有多厉害,但那些年,没有培训班,却流行个游戏叫磁芯大战(Core War)。

正如其名,这游戏在电脑上玩,为了尽量避免涉及更多的专业术语而让文章读起来更有趣味性,我打个并不完全恰当的比方这有点像“养蛊”,有些人相信找来个坛子在坛子里放上各种毒虫,几周以后,坛中的毒虫互相残杀,最后留下来的那只就是所谓的蛊,我不知道这样养出来的玩意是否真有某些神奇功效,但这和磁芯大战确实有不少的相似之处,首先计算机的内存是有限的,你需要做的就是,让你的程序尽量占满这个内存区域,同时避免对对面干掉,当你最终终结了对手把对手从内存中抹除,并且自己占据在内存中,你就获得了胜利。

当然,玩的人多了,花样品种就变的多了,程序猿们开发出了爬行者(Cerrper),侏儒(Dwarf),印普(Imp)…投入这场虚拟的战争中,这看起来有点像生化危机或者是终结者里的场景,爬行者每次运行都会复制自身,很快计算机中就全是密密麻麻的爬行者了,而侏儒重在破坏对手,它的理念是,干掉对手就是存活,最有特色的应该是印普这玩意,它只有一条指令,就是把自己的程序复制到下面一条,这样既能让自己不断复制,还有机会干掉对方。磁性大战显然在那个年代的计算机领域相当的流行,就连比尔盖茨也热衷于玩这款游戏,可惜的是,这款游戏的好玩程度似乎不足以让他留在大学,大二,“大学就是个没点屌用的地方”,比尔盖茨这样抱怨着,然后就退学了。不管怎么说,磁芯大战给了一群程序猿们足够的灵感,千千万万的程序猿为了在自己或者是别人的电脑上留下“到此一游”的印记而绞尽脑汁,那么,在计算机普及到民用的年代,他们的机会来了!。

危险的潘多拉盒子

当然我不能在整篇文章就讲故事,否者我就该把这篇文章发表在“科幻天地”或者是“xxx的人物传记”了,很多人对计算机病毒抱有一种恐惧的心态,我喜欢把它比喻成潘多拉盒子,尽管它外表精巧,盒子的制作者也总是想方设法让你去打开它,但假如你不去打开这个盒子,潘多拉盒子和你家里的饼干盒并没有什么不同,(当然假如你不小心打开了它,而又不了解它,那你只能听天由命了,正所谓不作死就不会死),计算机病毒也一样,归根结底它也是计算机程序,没有运行的话,它也只是存储在你电脑上的一堆数据,排除掉一些操作系统的设计缺陷外(例如以前lnk文件解析中缺乏对路径长度的检查而造成的溢出,当然现在存在这些问题的可能性几乎没有了),他最多占据你一些小小的磁盘空间,当然为了保险起见避免某天手抖运行了它,最保险的应该是把他从你的磁盘中也删了。

当然大部分对计算机并不感冒的人总是希望多一事不如少一事,所以他们巴不得不再有人去设计病毒程序,就算设计了病毒程序也别影响到自己的电脑上,正所谓如果有人让你挑个地方长痔疮,大多人都会挑长在别人身上,但是一些狂热的计算机爱好者或者是恶意程序分析师都喜欢收集大批的计算机病毒,在他们看来,这些木马病毒就像是设计精巧的宝箱一样,在一个可控的环境中窥探它们,总是能获取到更多的知识与技巧,这说起来有点像魔窟探险,尽管里面拥有各种各样的妖魔鬼怪甚至处理不当能让你的电脑领便当,但是当它们最终分析出当中的逻辑与技巧,这感觉就是像征服了恶龙的勇士一样,带着荣耀打开潜藏在宝库中的宝箱。

我想这也就是本篇文章最终行文的目的,我希望有更多的人能够用更加简单的方式享受到这种乐趣。为此,我逛遍了各大大小小所谓的“hacker”群(大多是中二病),在各类网盘和网站中下载了一堆似乎是老司机留下的福利。当然经过筛选,我将选出一些比较有代表性的恶意程序甚至是自己编写一些恶意程序作为分析样本。在阅读完全文后,我希望及是是一些刚进门不就的新手,不懂od,不懂x86,不懂编程,同样也能够使用给出的工具享受这种乐趣。

当然,接下来的内容就可能让一些非计算机相关人士感受到不适,那么我做了一些折中的选择,假如你喜欢看我讲故事而不希望了解当中的技术细节那么你可以挑选那些你感兴趣的东西看,这并不影响你对全文的阅读体验。如果你希望了解更多的相关细节,你可能需要通过MSDN Google baidu甚至是stackover flow,github(俗称gayhub,世界上最大的同性交友网站)来获取更多的相关知识。
我将会在文中标注出内容的深度,(*)表示这是一个老少咸宜的内容,你不需要什么基础就能够轻松读懂,(**)可能表示你需要基本的计算机知识与基础的编程技巧,(***)表示以下的内容可能会更深一步,需要你在相关的领域有更深入的了解。当然在这个难度阶级以上,即时你不阅读,也不影响你理解全文。(*x)则表示,这是需要查阅相关文档例如User Manual,DataSheet,即时是我本人也是在相关文档的帮助下行文,如果你希望打破砂锅问到底的话,你可以查阅之后标注出来的reference documents。

当然如果你是十几年的码神老妖怪或者是常年混迹在52pojie甚至China UNIX的远古飙车老司机,你就可以想方设法在文中找找茬了,本人即非圣贤也非全才,文中疏漏,仍望各位指正。

来说说应用程序编程接口


在码农界广泛流传着一个黄段子,说的是两只程序猿去海边钓鱼,其中一个程序猿居然钓上来了一只美人鱼,这个美人鱼,上半身是人,下半身是鱼,于是这个程序猿就把它给放了,另一个程序猿问:Why?,答:没有API。


这是个略带点专业性质的笑话,当中所说到的API(Application Programming Interface)也就是我们中文所说的应用程序编程接口,当然专业人士看到自然蛤蛤大笑起来,老司机自然也能够领会当中的一二。


那么到底什么是API呢,打个比方就像微波炉,你需要加热食物,你只需要把食物放进微波炉然后告诉微波炉加热多少时间然后摁下启动键就可以了,至于到底微波炉的工作原理是什么,如何防止辐射,需要耗多少电,你一概不需要知道。API就像这个微波炉一样,你只需要给出你的加热时间(参数),你就能得到你想要的热腾腾的食物(结果)


当然上述这个比方并不是那么的准确,我更喜欢使用数学公式来表达这个API,假设我们现在回到了初中,继续来学习那个求圆的面积公式

图(1.1)
没错,就是这玩意(图1.1),S等于PI-R的平方,也就是PI乘以面积,当然这个方程我们往往这么来写

图(1.2)
是的,我们把圆的面积公式定义为f(r),这个函数接收一个参数r也就是圆的半径,现在不如让我们假设这个求圆面积公式是个机密,我们不想让别人知道,圆的面积是怎么求的,这样我们就可以开个公司叫《专业求圆面积有限公司》,我们只告诉外界我们有一个叫f(r)的函数,就是你只需把这个圆的半径告诉我们,我们就可以把圆的面积告诉给你,不要998现价求一次只要188,这样客户蜂拥而至,给出我们f(1),f(2),f(3),我们马上给出答案,面积分别约是3.14,6.28,9.42
当然,最准确的说法应该是用C语言了
float __stdcall getAreaofCircle(float r)
{
        Return 3.14f*r*r;
}


我们将代码编译为DLL,别人就无法直接知道我们到底是怎么求出圆的面积了,而别人需要使用我们的DLL的话,也只需要导入float __stdcall getAreaofCircle(float r)这个函数声明然后把参数传递进来,就可以得出结果了,这就是API。简单来说,它就是一个没必要告诉我们怎么实现,只告诉我们如何调用的函数。


那么问题又来了,API能做什么,实际上我们在使用电脑的过程中,无时不刻在调用着这些API函数,例如在桌面上创建文件,我们就调用了创建文件的API,在QQ上发送消息,就调用了网络发送数据的相关API,修改注册表,就调用了修改注册表相关的API。


实际上你可以打开你的系统盘,找到windows目录下的system32中的kernel32.dll,user32.dll,winmm.dll,ntdll.dll……当中就包含着海量我们经常调用的API,我们使用PeLord来查看它的导出表,能看到一大堆的API函数,例如在User32.dll中的MessageBoxA,就是一个弹窗的API,假如你在桌面上看到一个弹窗告诉你哪里哪里又错了,那么基本是它就是调用了这个API函数



<
  
API函数
  
作用
备注
RegOpenKeyExA
打开一个注册表以便操作
 
RegSetKeyValueA
设置注册表键值
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2009-02-16 0.20版本: 1.支持windows 7(由于win7还处于beta阶段,我也不知道它的确切Build号,现在默认大于6900是win7,目前程序可以在Build:7000的系统上正常运行) 2.加入数字签名,进程部分右键菜单--->查找没有数字签名的模块,会扫描系统中所有进程的模块 3.线程部分也有点改动,加了线程入口所在模块 4.防了消息钩子模块对XueTr的注入(可能会导致一些美化的系统中,XueTr的界面变丑,暂时不想处理这个问题了),另目前无法防止App_Inits模块的注入,这个暂时不想加了(加这个需要大改动,以后有时间会考虑) 5.对抗伪进程Id 6.XueTr启动的时候,会检测是否有线程注入到XueTr,并给出提示 7.内核模块部分,对有对应服务的,显示的时候会显示出其服务名 8.还修改了几个Bug,不表 2009-02-05 0.19版本: 1.新支持对exFAT文件系统的解析 2.新增了结束进程时候删除进程文件 3.对一些有文件全路径的地方,增添了文件厂商属性 2009-02-02 0.18版本:(本版更新纯是为了解决系统挂机Bug而临时升级的一个版本) 1.增强了启动项检测 2.进程部分右键菜单增加了查找进程模块功能 3.解决了内核模块检测部分的误报可疑驱动对象Bug(感谢dl123100指出) 4.解决了程序非正常结束,下一次启动系统死掉Bug(感谢dl123100和angel13th指出) 2009-01-30 0.17版本: 1.增加了卸载消息钩子 2.增加了枚举窗口,和对窗口的操作 3.增加了禁止待机、注销、关机和重启功能 2009-01-26 0.16版本: 1.界面语言自适应(在中文操作系统上是中文,其它操作系统是英文) 2.注册表部分引入了Hive分析,默认是不开启,如果要使用可以用"使用Hive分析"菜单,选择了这个就不会用驱动获取注册表了 3.加了自我保护 4.增加禁止创建进程、线程、文件以及禁止加载模块和消息钩子模块注入功能 5.改了几个界面的小问题,我的界面写作能力很菜,不表了 6.还增强了下内核模块钩子检测(还有提升空间,不想搞了) 2009-01-17 0.15版本: 1.进程部分,加入了挂起、恢复进程(线程)功能 2.文件部分加入了NTFS、FAT32、FAT16文件磁盘解析,本功能默认开启,可以用"开启物理磁盘分析"菜单关闭 2009-01-06 0.14版本: 1.新增ObjectType Hook检测功能(这个功能的实现参考了sudami写的文章,感激) 2.修正无法列举移动存储介质(U盘等)里的文件bug(感谢annybaby指出) 3.修正File和Rigister显示界面,当多次最小化最大化后,树形控件宽度逐渐变窄bug(感谢li58指出) 2009-01-02 0.13版本: 1.调整界面 2.新增操作IE插件、SPI、启动项、服务、映像劫持、Host文件等功能 3.修正一处filter显示bug(感谢dl123100指出) 2008-12-22 0.12版本: 1.解决在装有微点机器下全是白板的问题 2008-12-11 0.11版本: 1.修正有些机器全是白板问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值