能力值:
( LV15,RANK:360 )
6 楼
360 牛人sudami的经历
西西哈哈:现在黑基里可能很多人都不认识你了,给大家介绍下自己吧。sudami: 网名: sudami (记得是5年前上高2时的泡泡堂游戏账号) 性别: 男 年龄: 20 爱好: WINDOWS内核、T足球、偶儿看点《萌芽》等文章西西哈哈:能说说您学计算机的历史吗?sudami: 高中时一直是班上的好学生,可惜在高考前最后一个月经常通宵玩泡泡堂,导致高考发挥一般般。考入浙江大学的希望破灭,于是进了北京的一所还算可以的一类大学(离清华大学最近.住在海淀区的可能知道是哪里了). 读的专业和计算机无缘,在开始的2年中没有目标, 虚度了2年光阴. 大1上半年(2005年10月)教了唯一一门计算机的课--C语言.学完了不知道C语言是干什么的,盯着古老的TC,不知道如何写代码. 这科理所当然的挂掉了; 大2上半年(2006年10月)又开了一门课--C++. 事过一年,有关C的东西全忘了.然后又混过了这半年的C++课时,考试的时候勉强得了60多分,算是过了...但是啥都不会,学了基本白学了. 但这时候也成了一个转折点. 平时在网上溜达,看了不少前辈门关于编程的经验,也期望着想成为一个编程牛人.萌发了重新学习C/C++的念头, 与是在这年的寒假, 在图书馆把所有关于C/C++的有价值的书都翻了一遍,找了其中的3本开始重新学起来.整个寒假在家过得很充实,对C/C++的理解也更深刻了一层.这个时候觉得C语言真的很有魅力. 开学之后,也就是大2下半年(2007年3月)开了一门数据结构的课,这半年是进步最快的时段, 一边上数据结构的课,一边学习 <WINDOWS程序设计>、 <WINDOWS核心编程>、 <操作系统原理>、 <编程高手箴言>、<深入浅析MFC>等乱七八糟的书,一有时间就打开熟悉的VC 6.0开始写代码.这样时间慢慢的过去了,我也学到了很多东西,对应用层的编程,WIN32 API, MFC等熟悉掌握了,也写了几个小软件,算是练练手. 当然这些东西都是利用业余时间去学的.专业课的压力也很大,但兴趣在,所以一直坚持着. 到了大3上半年(2007年10月),开始逐渐接触到一些WINDOWS底层的东西,当然这个时候多是在学习HOOK、DLL之类的老技术。在2007年9月份开始真正的学习WINDOWS内核了,到现在差不多有3个月。但是这段时间进步是最快的。图书馆没有任何关于驱动的书,仅有一本 武河安 编著 的 《WDM驱动程序设计》,讲的是用DS写驱动,当时真是摸不着头脑,配制那些东西超级麻烦(现在看来这本书真是垃圾,误导了不少人),然后不会配制DriverStudio,开始网上到处求助,最后在kanxue论坛了解了一些对偶来说起引导作用的信息,于是呼放弃了DS,开始用命令行编译驱动程序。无奈网上没有系统的关于驱动的教程,一切东西只能靠自己用google去搜索。从此以后google、baidu成了我最好的老师,遇到不懂的问题便搜索之,往往能在CSDN,DriverDevelop,kanxue还有一些国外网站找到解决方法. 就这样过了一个月,学了很多关于驱动的东西,看着别人的代码,自己加注释,不懂的查DDK,用Windbg,上google搜,然后纪录到笔记中。当编译的驱动被加载成功,进程被成功隐藏,文件在眼皮底下消失,注册表中也无痕迹时,偶觉得这些东西非常的有意思,兴趣越来越大,学的越来越多,越来越深. 一个月之后就开始接触WRK,OSreact。前者是W2K的源码,后者是一个开源的操作系统。没事的时候就读里面的代码。遇到未导出的函数,就在WRK中查,一行一行的读,一笔笔的纪下心得和理解过程。这样对好多东西有了一个更深层次的理解。 然后开始接触逆向,颤巍巍的拿着IDA,直接把ntfs.sys拖进去,看来看去,偶这个逆向刚入门的菜鸟也渐渐的对它熟悉起来。由于之前木有学过asm。只能硬着头皮把它搞定,到图书馆借了一些关于80x86的书,然后买了本 罗云杉的 汇编书,开始啃起来。有一段时间读的一本清华大学出版的原版英文资料,关于80x86汇编和单片机的东西,足足有1000多页,偶看了200多页实在是看不下去了,再到图书馆去借的时候发现它的旁边就是一本翻译过的中文版。晕死了,于是又把中文版的借回去读。 经过一个多月的断断续续的学习,终于对那些寄存器,堆栈等汇编有关的东西熟悉了。 但是此时只能看懂人家的asm代码,要偶自己完整的写出来,然后编译成程序,偶还没有去试验过。毕竟偶现在对C很熟悉,在C中镶嵌asm足以。逆向的时候就要看汇编功底了。所以偶还在不断的学习汇编中。 在学习别人逆向的驱动代码中,偶发先必须得学习文件过滤驱动了,于是在网上找到了绝对经典的NTFSI一英文原版资料。这本书在书店的很少,而且中文版的要100RMB。难买到又贵,偶只能硬着头皮看英文了。学了几章,感觉书中对WINDOWS底层的一些细节讲的非常好。学了 the caching manager。终于知道了I/O Manager、VMM、File System Driver之间的联系和操作,IRP是如何产生并向下传递的。 相应的也就学到了cnnic这个流氓的一些丑陋行径,在学习360SuperKill驱动的过程中,知道了如何恢复被cnnic劫持的FSD的IRP分发例程IRP_MJ_CREATE(0x00)、IRP_MJ_SET_INFORMATION(0x06)。在学习粉碎文件的过程中知道了MmFlushImageSection内部的实现过程(参考WRK),原来要删除正在运行的文件方法是很多的,直接发IRP删除,然后HOOK fastfat.sys Ntfs.sys中IAT的MmFlushImageSection即可.要么可以将ImageSectionObject、DataSectionObject 置空. 网上有很多资源,往往搜索一个问题的时候便附带把其他问题学习了,偶也就开始接触到了shellcode.在最近kanxue举办的软件漏洞分析中,要用到大量的shellcode和逆向的技巧,偶这个菜鸟就只能在一旁观战+学习了.... 然后陆续学习了其他的一些英文资料,eg: <Undocument WINNT> <Rootkit:Subverting the windows kernel> <Windows Internals> ... 这些资料真的是学习内核所必须的.偶还在学习中.也经常用代码去一些国外的网站看写文章,eg: Rootikit.com, codeproject.com, security.org... 在kanxue论坛学到了不少东西,因为大家都是相互学习,共享成果的.像内核监控,RING3和RING0间的同步通信, 文件隐藏, 进程隐藏, 过主动防御, 感染PE文件, 感染驱动文件, shellcode,无驱进RING0, VmProtect,逆向,F5... 偶现在对RootKit非常感兴趣.这是一个非常广阔的发展空间,谁对WINDOWS底层了解的更透彻,谁就能掌握更加深刻的技术.在RK 和ARK之间徘徊,在杀毒软件和主动防御间游击,在虚拟机和还原卡之间测试... 到现在,偶还很菜,需要继续加紧时间学习.因为要学的东西实在是太多了。 在内核群里面跟那些内核大牛们交流,真是觉得非常惭愧. 这里要严重向360safe 公司的核心开发者MJ0011 学习,这个牛MM不是一般的牛啊.内核界的绝对高手~~~西西哈哈:你是什么时候来到黑基的?sudami: 最早接触黑基是在06年5月份,那时候在玩网络游戏--泡泡堂,听说hack可以盗号,于是到baidu一搜,就进了黑基了. 放眼一望,自己什么都不会,于是看到一篇文章就拿来学习一回. 逐渐的,黑基成了偶每次上网第一打开的论坛. 刚开始什么都不懂,乱发帖,乱回复被斑竹扣过分. 呵呵, 先在想想自己真菜~~~真正开始喜欢上黑基是在06年10月份,那时在黑基的活动开始频繁起来, 当时对病毒木马比较感兴趣,于是有时间在泡在"病毒木马区", 接着熊猫烧香开始肆虐整个网络,偶从中也知道了病毒的厉害,第一次在原创区发表了手工清楚熊猫的过程,心中无比喜悦.06年是在黑基过的年,在水区很高兴,还中了个红包,被+了好多分,依稀记得猫, walker110, 疯子, 5046820, lyxn 和它的老婆,yyx... 到了07年, 逛的为数不多的几个论坛,黑基就像一个网上的家. 有段时间真是一天不上黑基,就很挂念.一种说不出的感觉. 眨眼的工夫,07年过去了,我在这里当了1.5个月的斑竹就此告辞. 我静下心来想了很多,最后还是决定离开这个曾经熟悉的地方. 别的什么都不说,至少这是我电脑方面的启蒙.真实她培养了我对电脑,对编程,对WINDWOS内核的兴趣.通过她我接触到了一些前辈,一些牛人.从他们那里学习到了很多宝贵的经验,这是我以后学习发展的一个基础西西哈哈:离开黑基后有经常回来看看吗?sudami:因为要学的东西很多,可能不回来了吧.不过我会一直记得这个地方的.红冰泪是个非常负责,非常出色的管理员.西西哈哈:你大学的专业不是计算机,有想过毕业以后从事计算机方面的工作吗?还是有其他的打算?sudami:这只能是个业余爱好,不能当饭吃. 我想不会从事吧西西哈哈:现在黑基上有非常多的新人都在问怎么入门,能不能谈谈你的看法或者说说你的经验?sudami:呵呵,我也是个菜鸟.大道理就不说了.关键几点:英文不用太好(能看懂MSDN WDK就行了);求知欲很重要;学习自己感兴趣的东西;baidu/google是最好的老师;要用时间和耐心去战胜一切;学习靠自己,不要依赖任何人;要勤快的做笔记.这是你以后的一笔巨大财富.经常和比自己牛的人交流, 不经意间你会有所获;学习是一个循序渐进的过程,需要不断温习不断巩固;...西西哈哈:对于现在的黑基,你有没有什么建议?sudami:呵呵, 我希望黑基能吸引更多的牛人进来.现在的黑基,我只能说是菜鸟的乐园.可能大家认为我说过了。但是从一个旁观者的角度,确实是这样的.好久不来黑基, 希望黑基能培养出更多的人才~~~~西西哈哈:离开这么久了,最想对朋友们说些什么?sudami:大家学习,生活,工作快乐,顺利.sudami正在加油的学习,希望有一天能将名字刻在黑基的名人堂上.
学习过程
若对Windows底层开发没有兴趣,不建议继续深究; 若有些兴趣可以继续 2. 先广泛打基础,比如C/MFC/C++/ASM,再学习Windows核心编程,对R3上的一些开发有所熟悉; 再系统的学习<操作系统>等书籍,理解整个系统的原理,构架,实现. 3. 有了以上基础,可以开始阅读一些驱动入门书籍,如 毛德草 的<Windows内核情景分析>, 多上google搜索资料; 下一份WRK/ReactOS,没事翻一翻,搭好驱动编译环境后,可以尝试写些小驱动,在实践蓝屏中摸索总结,从而积累初级的经验. 4. 等成了驱动开发初级工后,可开始学习Windbg,IDA的使用. 多看源码多F1看帮助文档. 5. 等熟练以上工具后,开始Windbg动态调试,IDA静态逆向其他驱动(包括微软自己的). 在这一过程中,你又会接触到脚本语言,汇编知识点,Intel手册,加密解密,Vmvare等一堆的东西,同样你需要熟悉它们. 6. 等你熟悉以上东西后,可以给自己提些需求,并实现该需求; 比如写个小型ARK; 在这个过程中,你可以切实感受到开发一个程序是一个系统的东西,你又需要回到R3写界面,重温MFC,WTL等设计与使用.当然又要写驱动程序,保证兼容性等问题; 这个过程是漫长的,期间你会发现写一小部分功能,你可以扩展收获很多知识点. 7. 等你熟悉以上东西后, 已经可以自己独立解决问题了.基本不需要到网上求助; 遇到问题,会利用WRK / Windbg / IDA / Google 等方式自行搞定; 如网上有现成的解决方法,借用之,取其精华,唾其糟粕; 若网上没有现成的,则需要你IDA 系统文件,load pdb; windbg动态调试内核等手段自行挖掘; 若网上只有类似的程序,你可以逆向其关键部分参考之,而后变成自己的东西. 8 ,等你经历了以上7个阶段,你可以开始系统的了解WINDOWS的构架,站在产品的角度思考问题,分析问题,解决问题. 对自己多提需求.进而再去实现之. 这阶段是积累经验的阶段... 9. 基本能够胜任大多数公司的项目需求了. 各个方面需要的书 http://bbs.pediy.com/showthread.php?t=130685
我也是刚入门 想学驱动程序设计
汇编方面
16位汇编曾经看了一阵,不用学太多,知道一下中断及其调用就行,还有寻址方式。重头戏是Windows环境下的汇编。这方面的参考书以<<Windows环境下32位汇编语言程序设计>>为主,寒假看过电子版,讲的非常好,罗云彬写的,自己买了本。以后用windbg以动态调试及IDA反汇编不能少了这方面的支持。汇编就硬着头皮上吧,幸亏以前看了一点16位汇编,有一点点帮助,这点比sudami好点。
Windows程序设计
学驱动之前必须要熟知R3下各种常见的API的调用,这方面的书以我买的<<Windows程序设计>>为主,着重看一下进程 线程 文件 内存 网络方面的API调用,MFC一定要学,文档、视类方面的需要的时候再看吧 不要把他们当重点, ATL WTL 只听过名字,调研一下,看需不需要像MFC一样学习,需要的话还是找与底层联系紧密的方面当重点。
驱动方面
这方面以<<Windows内核安全编程>>这本书为重点,这本书面面俱到,但是也有一个缺点讲的不细(对于我这种入门级别的小白)。Windows架构方面,Windows内核情景分析太贵了,打折后还要150元,手里只有他的电子书版本,以潘爱民老师的那本<<Windows内核原理实现>>为准,应该再买一本驱动方面讲的比较细的书来,用来当字典查,由于Windows不开源,驱动方面的书实在是少之又少,以后还要花一段时间专门学习一下HOOK SSDT HOOK SHADOW SSDT Inline Hook 这方面就得多上网查,一定要多多的收藏牛人的博客,那些愿意共享知识的牛人的博客
工具使用
以后要学习IDA windbg 有可能的话软件软件逆向方面的三环调试器ollydbg也要学 知识到达一个层次了工具自然而然也就学会用了,虚拟机方面的vmare早就会用了,这点还比较好。
数据结构
一直不理解数据结构是什么东东,后来在某个地方看到了数据结构被加上了个定语,终于明白数据结构是怎么一回事了,数据结构就是计算机中数据结构。原来压根就是在电脑里面数据存在的方式。数据结构这方面就只知道一个栈,先入后出、后入先出。Windows里面还有链表 还有二叉树的遍历,这方面可以找找A帮忙,学数据结构和学C++一样,结合Windows中具体实现的方式应该不难。 如果要学驱动 入门的话以《windows内核安全编程》 入门为好 然后你会发现很多你不知道或者没有导出的函数或者数据结构 不要担心 去google 因为驱动方面的书本来就少 大家一般都是在网上交流知识 如果真正入门了 花一个星期就可以把 hook ssdt
hook shadowssdt 玩的天花乱坠 关键是要开窍
还有驱网的另外两本书 《从汇编语言到windows内核编程》 谭文的 外号楚狂人还有一本书教
还有竹林蹊径 着重于USB 以及1394 但是前面讲的基础知识非常好 也很适合入门
《windows驱动开发技术详解》 张帆的 里面的工具用的是Driver Studio 过时了 但是内容还是非常好的
http://wenku.baidu.com/view/f1935e8483d049649b665886.html
这是楚狂人在网上留下了的windows驱动开发基础
大体windows驱动方面的书面资料就这么多 平常一定要勤google 然后遇到没有导出的函数 数据结构 做好笔记 还有多多收集牛人的博客
大体就先说这么多 我会陆续把我手里的驱动方面的资料传到网盘上 提供楼主下载
因为还不是正式会员嘛 很看重楼主的20kx啊 哈哈
欢迎和楼主一起交流 我qq1037211560