菜鸟如何学习免杀?
我现在很郁闷别人说想要想学会免杀,必须懂得编写然后我就查了编写一类的资料,然后别人又说想要学会编写首先要从C语言开始,然后我又查了C语言一类的资料,但是我在学习C语言的当...
我现在很郁闷别人说想要想学会免杀,必须懂得编写然后我就查了编写一类的资料,然后别人又说想要学会编写首先要从C语言开始,然后我又查了C语言一类的资料,但是我在学习C语言的当中发现不懂数学和英语很难,难道真的被办法了,求各位高手给我方向吧我现在很迷茫,到底怎么才能学会免杀怎么才能学会编写,怎么才能学会C语言,各位给点指导吧!谢谢了!
一楼的我是真心求教,说这些没用的干吗?只会让别人对你产生烦感,我希望高手来给我方向 展开
一楼的我是真心求教,说这些没用的干吗?只会让别人对你产生烦感,我希望高手来给我方向 展开
4个回答
展开全部
免杀,也就是反病毒(Anti Virus)与反间谍(Anti Spyware)的对立面,英文为Anti Anti- Virus(简写Virus AV),逐字翻译为“反-反病毒”,我们可以翻译为“反杀毒技术”。单从汉语“免杀”的字面意思来理解,可以将其看为一种能使病毒木马免于被杀毒软件查杀的技术。但是不得不客观地说,免杀技术的涉猎面非常广,您可以由此轻松转型为反汇编、逆向工程甚至系统漏洞的发掘等其他顶级黑客技术,由此可见免杀并不简单
您有没有过心爱的工具被杀毒软件KILL的经历;您有没有过辛辛苦苦整理出来的工具集被杀毒软件搞成面目全非而“义愤填膺”的时候;您有没有过好不容易拿到权限,上传的木马却被杀的痛心时刻?免杀,它能做的就是避免这些事情的发生!使杀毒软件成为摆设!当然,除此之外免杀技术带给我们更多的,将是思想的飞跃与技术的成长。
但是要想真正明白免杀能做什么,就要先明白免杀会涉及到什么。对于初学者来说,免杀只会涉及到一点基本的PE文件知识与一些免杀工具的使用,而对于高手来说,免杀甚至会涉及到Ring0(内核层)的程序编译技巧。所以免杀这门课程涵盖面还是相当宽泛的。
目前国内有关于介绍黑客免杀技术的书籍共有两本《黑客免杀入门》与《精通黑客免杀》。
《黑客免杀入门》为近期出版,但其介绍的内容更加详细,内容讲解更为透彻,更有深度。
《精通黑客免杀》较早出版,因而有关于免杀技术的介绍不是很详细,但其附带的光盘中附带了几百兆的操作录像,是不可多得的宝贵资源。
手工免杀分类:
1.文件免杀和查杀:不运行程序用杀毒软件进行对该程序的扫描,所得结果。
2.内存的免杀和查杀:判断的方法1>运行后,用杀毒软件的内存查杀功能.
2>用OD载入,用杀毒软件的内存查杀功能.
什么叫特征码:
1.含意:能识别一个程序是一个病毒的一段不大于64字节的特征串.
2.为了减少误报率,一般杀毒软件会提取多段特征串,这时,我们往往改一处就可达到
免杀效果,当然有些杀毒软件要同时改几处才能免杀.(这些方法以后详细介绍)
3.下面用一个示意图来具体来了解一下特征码的具体概念
特征码的定位与原理:
1.特征码的查找方法:文件中的特征码被我们填入的数据(比如0)替换了,那杀毒软
件就不会报警,以此确定特征码的位置
2.特征码定位器的工作原理:原文件中部分字节替换为0,然后生成新文件,再根据杀
毒软件来检测这些文件的结果判断特征码的位置
认识特征码定位与修改的工具:
1.CCL(特征码定位器)
2.OllyDbg (特征码的修改)
3.OC(用于计算从文件地址到内存地址的小工具)
4.UltaEdit-32(十六进制编辑器,用于特征码的手工准确定位或修改)
特征码修改方法:
特征码修改包括文件特征码修改和内存特征码修改,因为这二种特征码的修改方法
是通用的。所以就对目前流行的特征码修改方法作个总节。
方法一:直接修改特征码的十六进制法
1.修改方法:把特征码所对应的十六进制改成数字差1或差不多的十六进制.
2.适用范围:一定要精确定位特征码所对应的十六进制,修改后一定要测试一下能
否正常使用.
方法二:修改字符串大小写法
1.修改方法:把特征码所对应的内容是字符串的,只要把大小字互换一下就可以了.
2.适用范围:特征码所对应的内容必需是字符串,否则不能成功.
方法三:等价替换法
1.修改方法:把特征码所对应的汇编指令命令中替换成功能类拟的指令.
2.适用范围:特征码中必需有可以替换的汇编指令.比如JN,JNE 换成JMP等.
如果和我一样对汇编不懂的可以去查查8080汇编手册.
方法四:指令顺序调换法
1.修改方法:把具有特征码的代码顺序互换一下.
2.适用范围:具有一定的局限性,代码互换后要不能影响程序的正常执行
方法五:通用跳转法
1.修改方法:把特征码移到零区域(指代码的空隙处),然后一个JMP又跳回来执行.
2.适用范围:没有什么条件,是通用的改法,强烈建议大家要掌握这种改法.
木马免杀的综合修改方法:
文件免杀方法:
1.加冷门壳
举例来说,如果说程序是一张烙饼,那壳就是包装袋,可以让你发现不了包装袋里的东西是什么。比较常见的壳一般容易被杀毒软件识别,所以加壳有时候会使用到生僻壳,就是不常用的壳。现在去买口香糖你会发现至少有两层包装,所以壳也可以加多重壳,让杀毒软件看不懂。如果你看到一个袋子上面写着干燥剂、有毒之类的字你也许就不会对他感兴趣了吧,这就是伪装壳,把一种壳伪装成其他壳,干扰杀毒软件正常的检测。
2.加花指令
加花是病毒免杀常用的手段,加花的原理就是通过添加加花指令(一些垃圾指令,类型加1减1之类的无用语句)让杀毒软件检测不到特征码,干扰杀毒软件正常的检测。加花以后,一些杀毒软件就检测不出来了,但是有些比较强的杀毒软件,像江民杀毒软件,病毒还是会被杀的。这可以算是“免杀”技术中最初级的阶段。
3.改程序入口点
4.改木马文件特征码的5种常用方法(参见“修改内存特征码”)
5.还有其它的几种免杀修改技巧
修改内存特征码:
1.直接修改特征码的十六进制法
2.修改字符串大小写法
3.等价替换法
4.指令顺序调换法
5.通用跳转法
以上文字网上都有,因而,我想说的是:
我学免杀,看你要在哪方面,通常这很难,你最少要精通一门编程语言,注意,是精通,因为这是工具,至于… …我转 梁肇新先生 在《编程高手箴言》中的话:
1.2.1 高手成长的六个阶段
程序员怎样才能达到编程的最高境界?最高境界绝对不是你去编两行代码,或者是几分钟能写几行代码,或者是用什么所谓的可视化工具产生最少的代码这些工作,这都不是真正的高手境界。即使是这样的高手,那也都是无知者的自封。
我认为,一个程序员的成长可分为如下六个阶段。
第一阶段
此阶段主要是能熟练地使用某种语言。这就相当于练武中的套路和架式这些表面的东西。
第二阶段
此阶段能精通基于某种平台的接口(例如我们现在常用的Win 32的API函数)以及所对应语言的自身的库函数。到达这个阶段后,也就相当于可以进行真实散打对练了,可以真正地在实践中做些应用。
第三阶段
此阶段能深入地了解某个平台系统的底层,已经具有了初级的内功的能力,也就是“手中有剑,心中无剑”。
第四阶级
此阶段能直接在平台上进行比较深层次的开发。基本上,能达到这个层次就可以说是进入了高层次。这时进入了高级内功的修炼。比如能进行VxD或操作系统的内核的修改。
这时已经不再有语言的束缚,语言只是一种工具,即使要用自己不会的语言进行开发,也只是简单地熟悉一下,就手到擒来,完全不像是第一阶段的时候学习语言的那种情况。一般来说,从第三阶段过渡到第四阶段是比较困难的。为什么会难呢?这就是因为很多人的思想转变不过来。
第五阶级
此阶段就已经不再局限于简单的技术上的问题了,而是能从全局上把握和设计一个比较大的系统体系结构,从内核到外层界面。可以说是“手中无剑,心中有剑”。到了这个阶段以后,能对市面上的任何软件进行剖析,并能按自己的要求进行设计,就算是MS Word这样的大型软件,只要有充足的时间,也一定会设计出来。
第六阶级
此阶段也是最高的境界,达到“无招胜有招”。这时候,任何问题就纯粹变成了一个思路的问题,不是用什么代码就能表示的。也就是“手中无剑,心中也无剑”。
此时,对于练功的人来说,他已不用再去学什么少林拳,只是在旁看一下少林拳的对战,就能把此拳拿来就用。这就是真正的大师级的人物。这时,Win 32或Linux在你眼里是没有什么差别的。
每一个阶段再向上发展时都要按一定的方法。第一、第二个阶段通过自学就可以完成,只要多用心去研究,耐心地去学习。
要想从第二个阶段过渡到第三个阶段,就要有一个好的学习环境。例如有一个高手带领或公司里有一个好的练手环境。经过二、三年的积累就能达到第三个阶段。但是,有些人到达第三个阶段后,常常就很难有境界上的突破了。他们这时会产生一种观念,认为软件无非如此,认为自己已无所不能。其实,这时如果遇到大的或难些的软件,他们往往还是无从下手。
现在我们国家大部分程序员都是在第二、三级之间。他们大多都是通过自学成才的,不过这样的程序员一般在软件公司也能独当一面,完成一些软件的模块。
但是,也还有一大堆处在第一阶段的程序员,他们一般就能玩玩VB,做程序时,去找一堆控件集成一个软件。
1.2.2 初级程序员和高级程序员的区别
一般对于一个问题,初级程序员和高级程序员考虑这个问题的方法绝对是不同的。比如,在初级程序员阶段时,他会觉得VB也能做出应用来,且看起来也不错。
但到了中级程序员时,他可能就不会选择VB了,可能会用MFC,这时,也能做出效果不错的程序。
到高级程序员时,他绝对不是首先选择以上工具,VB也好,VC也好,这些都不是他考虑的问题。这时考虑的绝对是什么才是具有最快效率、最稳定性能的解决问题的方法。
程序员到达最高境界的时候,想的就是“我就是程序,程序就是我”。这时候我要做一个软件,不会有自己主观的思路,而是以机器的思路来考虑问题,也就是说,就是以程序的思考方式来思考程序,而不是以我去设计程序的方式去思考程序。这一点如果不到比较高的层次是不能明白的。
你设计程序不就是你思考问题,然后按自己的思路去做程序吗?
其实不是的。在我设计这个程序的时候,相当于我“钻”入这个程序里面去了。这时候没有我自己的任何思维,我的所有思维都是这个程序,它这步该怎么走,下步该怎么走,它可能会出现什么情况。我动这个部分的时候,别的部分是否要干扰,也许会动一发而牵全身,它们之间是怎么相互影响的?
也只有到达这个境界,你的程序才能真正地写好,绝对不是做个什么可视化。可视化本身就是“我去设计这个程序”,而真正的程序高手是“我就是程序”,这两种方法绝对是不同的。比如,我要用VB去设计一个程序,和我本身就是一个程序的思维方式,是不一样的。别人也许觉得操作系统很深奥,很复杂,其实,如果你到达高手状态,你就是操作系统,你就能做任何程序。
对待软件要有一个全面的分析方法,光说理论是没有用的。如果你没有经过第一、第二、第三、第四这四个阶段,则永远到达不了高境界。因为空中楼阁的理论没有用,而这些必须是一步一步地去做出来。
一个高级程序员应该具备开放性思维,从里到外的所有的知识都能了解。然后,看到世界最新技术就能马上掌握,马上了解。实际上,技术到达最高的境界后,是没有分别的。任何东西都是相通的,只要你到达这个境界以后,什么问题一看就能明白,一看就能抓住最核心的问题,最根本的根本,而不会被其他的枝叶或表象所迷惑,做到这一步后才算比较成功。
从程序员本身来说,如果它到达这一步以后,他就已经形成了开阔的思维。他有这种开放性思维的话,他就能做战略决策,这对他将来做任何事情都有好处。事实上,会做程序后,就会有一种分析问题的方法,学会怎么样把问题的表象剖开,看到它的本质。这时你碰到任何具体的问题,只要给点时间,都能轻而易举地解决。实际上,对开发计算机软件来说,没有什么做不了的软件,所有的软件都能做,只是看你有没有时间,有没有耐心,有没有资金做支撑。
这几年,尤其是这两三年,估计到2005年前,中国软件这个行业里面大的软件公司就能形成。现在就已经在形成,例如用友,它上市后,地位就更加稳固了。其他大的软件企业会在这几年内迅速长大。这时候,包括流通渠道、经销商的渠道也会迅速长大。也就是说,到2005年以后,中国软件这个行业的门槛比现在还要高很多,与美国不会有太大的差别。此时,中国软件才真正体现出它的威力来。如果你是这些威力中的一员,就已经很厉害了。
入门最基本的方法就是从C语言入手。如果以前学过BASIC语言的话,那么从C语言入手是非常容易的。我就经历了一个过程,根本不觉得这中间有太大的难度。其实,C语言本身和BASIC没有什么两样。BASIC每个所谓的命令在C语言里面都可以做成一个函数来实现,那么你就能用那个命令组合成整个程序。从这个角度来看,BASIC和C语言没有本质的差别。C语言就是入门的正确方法,没有其他。
现在的C语言本身就包含了嵌入汇编,使学习汇编语言的时候更加方便。你可以忽略掉纯汇编里面的很多操作。也许有人觉得这个方法太慢了。但要知道,工欲善其事,必先利其器,要想成功,没有一个艰苦的过程是不可能的,所以一开始的时候就要有耐心。如果你准备花5年的时间成为高手,那我敢说,你根本不用等到5年,你只要有这个耐心就足够了,你可能2年~3年内就能达到目标。但如果你想在一年时间内就成为高手,即使5年后,你还是成不了高手。
入门和积累是很重要的。事实上,到达高手的境界以后,不管什么语言不语言的,其实都根本不用去学,只要拿过来看两天,就全部精通。如果你没有入门,即使去书店找n本书,天天背它,你也不会成为高手。
所有的语言只是很花哨的表面东西。高手马上就能透过它的表象而看到它的本质。这样才是真正的高手。他不需要再去学什么Java,或者其他什么语言。当他真正要写个Java程序的时候,只要把Java程序拿过来看一看,瞄一瞄书,就全都清楚了。如果这时他学VB就更容易了,我想他不用一天的时间,就能学会。到达高手的境界以后,所有的事物都是触类旁通的。
当你成为C语言的高手,那么就你很容易进入到操作系统的平台里面去;当你进入到操作系统的平台里去实际做程序时,就会懂得进行调试;当你懂得调试的时候,你就会发现能轻而易举地了解整个平台的架构。这时候,计算机基本上一切都在你的掌握之中了,没有什么东西能逃得出你的手掌心。
上面只是针对程序的角度说明,另外一点也很重要,即好的程序员必须具备开放性思维,也就是思考问题的方法。程序员,尤其现在很多的程序员,都被误导从MFC入手,这就很容易形成一种封闭式的思维模式。这也是微软希望很多人只能学点表面的东西,不致成为高手,所以他大力推荐MFC之类的工具,但也真有很多人愿意去上他的当,最后真正迷失方向。说他做不了程序吧,他也能做程序,但是如果那个程序复杂一点,出现问题时,问题出在哪里就搞不清楚了,反正是不清楚。如果你真正有一种开放性的思维,在你能够成为高级程序员的时候,对MFC这些是不屑一顾的,MFC、VB根本不会在考虑的范围之内。
事实上很多人,包括外面很多公司里面工资挺高的人,可能一个月能拿五、六万的这些人,他们的思维也不一定能达到很高的境界。但是,他确实做了很多的事情,已经有很好的积累了。但要上升到更高的境界上,就要有正确的思维方法。这就是为什么比尔•盖茨说,他招人的时候宁愿招一个学物理,而不是学编程的。学物理的人会有非常非常广的思维,他考虑的小到粒子,大到宇宙,思维空间非常广阔,这样,他思考问题的时候,就会很有深度。
有人研究物理研究得比较深的时候,他能针对某个问题一直深入进去。很多写程序的人只会注意到这行代码或那行代码,则比较起来则显得肤浅。所以,编程的时候也要深入进去,把你的爱好、你的所有思维都放进去,努力做到物我合一的境界。
1.3.1 规范的格式是入门的基础
以前所有的C语言的书中,不太重视格式的问题,写的程序像一堆堆的垃圾一样。这也导致了现在的很多程序员的程序中有很多是废码、垃圾代码,这和那些入门的书非常有关系。因为这些书从不强调代码规范,而真正的商业程序绝对是规范的。你写的程序和他写的程序应该格式大致相同,否则谁也看不懂。如果写出来的代码大家都看不懂,那绝对是垃圾。如果把那些垃圾“翻”半天,勉强才能把里面“金子”找出来,那这样的程序不如不要,还不如重新写过,这样,思路还会更清楚一点。这是入门首先要注意的事情,即规范的格式是入门的基础。
1. 成对编码
正确的程序设计思路是成对编码,先写上面的大括号,然后马上写下面的大括号。这样一个函数体就已经形成了。它没有任何问题。然后,比如你要写个for循环,这时候先申明一个变量I,再写这个for循环。写上面的大括号,马上写下面的大括号,然后再在中间插一二行代码。插这段代码后,如果你又要用到新变量,则再在头上添加新的变量,然后再让它进行工作。这就是一种成对编码。
这样,当你用到一个内存的时候,写一个分配函数分配一块内存,马上就接着写释放这块内存的代码。然后你再在中间插上你要用这个内存做什么。这是正确的快速的编程方法。否则,你去查或调试代码都无从下手。针对这个程序来说,如果用成对编码,则它任何时候都是可以调试的,不需要你整个程序都写完后才能进行调试。
它是任何时候都可以编译调试的,甚至你写了两个大括号,中间什么也没有,它是空的时,你都可以进行调试。你写了第一个for循环,它也可以进行调试,当你又写了一个分配内存、释放内存以后,它还可以进行调试。它可以编译运行,里面可以放断点,这就是成对编码。
成对编码就涉及到代码规范的问题。为什么我说上面一个大括号,下面一个大括号,而不说成是前面一个大括号,后面一个大括号呢?如果是一般C语言的书,则它绝对说是后面加个大括号,回过头前面加个大括号。事实上,这就是垃圾程序的写法。正确的思路是写完行给它回车,给它大括号独立的一行,下面大括号也是独立的一行,而且这两个大括号跟那个for单词中间错开一个TAB。
代码一定不能乱,一定要格式非常清楚,这点使你写的程序我能读,我写的程序你也能读,不需要再去习惯彼此的不同写法。
而且结合成对编码思维,这时候你去读一个程序的时候,你会发现,你读程序的方法变了。以前读程序的时候,你可以先去读它的变量是什么,然后再读第一行、第二行,读到最后一个大括号,这是一种读程序的方法。现在就不一样了,现在读程序的时候就养成了一种习惯,就是分块阅读程序,很明显两个大括号之间就是一块代码。
那么写出一个程序后,你要读这个程序是干什么的,只要看这个大括号和那个大括号之间的部分就可以了,不需要再去读其他的代码是干什么的。比如,你从Linux中或网上下载了一个“烂”程序后,该怎么去阅读它?最好的方法是先把程序所有的格式都整理好,先别去读它。把所有的格式按照这种规范化的方法,把它的括号全部整理好。这时候你再读那个程序,只要半分钟就读懂了,但是你可能要整理一个小时。但如果不这样做,你可能读两个小时都读不清楚该程序。
这点绝对不会有人告诉你,现在没有人去讲解这方面的技巧。这也是我写了那么多的程序,才总结出来的。一开始的时候,我也像那些教科书所教导那样写,后面放个大括号,前面放个大括号,甚至括号连括号,一连四个括号,每个括号对哪个最后都找不清楚。编译告诉你好像少了一个括号,于是找呀,找呀,上面找,下面找,而这个程序又很大,只有一个函数,上面在上屏,下面在下屏,最后翻来翻去也翻不出。
所以我就想,大括号之间要互相对应,即使不在一个屏幕内,也能很容易地看到它,因为只要光标落在这个大括号里面,往上去找,即能找到它头上的那个与此对正的,而且这些代码是在一起的。这一层代码和下一层代码是互相隔开的,我只要读这层代码,下面那一层代码就不需要了。
比如,它有n个for循环的时候,我只想看某一个for循环,这时我只要对正大括号,它的光标往上走,一下就能找到了。如果按照教科书那样写的话,你要读呀,读呀,要把所有的代码,把所有的for
循环都读一遍,才可能找到你要的东西。这就是成对编码和规范化的方法(详细叙述请参考代码规范一章)。
在软件没有形成行业,程序等同于软件的时候,那时候程序很容易体现出价值来。只要得到代码,就相当于得到这个软件。但现在就不同了。现在的程序都不是几行,你写出的程序,如果又没有注释,格式又很乱,你拿过来给我,我还得花很长的时间才能读得清楚,那这样的程序的代码有价值吗?
我经常听到一些程序员在外面兜销代码,很多是学校的学生,尤其那些素质比较差的研究生,和老师做了一个项目后,他拿出来到外面到处去卖,但是他最后可能卖出去吗?最后可能还是没卖出去,因为那个程序很庞大。如果某个公司买了这个程序以后,该公司还得招一个人去读这个程序,当这个人读懂以后,他又离职了,那公司买这个代码干嘛?2. 代码的注释
代码本身体现不出价值来,有价值的代码一定是不仅格式非常规范,而且还要有很详细的设计思路和注释,这个是很重要的。首先要养成这种习惯,教科书里面很少讲为什么要做注释,注释应该怎么注。有些人爱在哪儿下注释就在哪儿下注释,甚至在语句中间也加,中间也可弄两个斜杠放两个花括号写点注释。
注释格式是非常重要的,但很少有人去注意它。现在的程序如果没有注释,则基本上是没法用的,也就跟你拿一个可执行程序没什么两样,你拿过来还不能随便改,你改了后编出来的程序绝对不能用。所以,程序如果没有详细的注释,别人就算拿到了代码也没有用,体现不出它的价值来。
Linux是个操作系统,很厉害呀!其实那些程序你拿回来,耐心地去读它,会发现,它里面乱得很,那个内核程序除了作者自己能读懂外,别人可能要花很长的时间才能读懂。Apache的作者对自己Apache那套代码是很清楚,但换一个做浏览器的人去读,也会很困难。一般人只把代码复制下来后,打个BUILD命令看看能不能正确地编译,最后能正确编译的程序就是好的,如果不能正确编译的程序就删掉吧,再下载一个,因为他没有正确的对待代码的那种思维,而只是认为那代码本身才有很大的价值,不用关心有没有注释。
如果代码没有注释和规范,是没有价值的,这也是现在为什么很多的个人跑去卖源程序的时候,很多的公司都不要。我们不是说没有技术,任何程序都能做,只是时间的问题,而且像视频中有的技术,比那些卖代码的技术还要深得多。真正要做一个有价值的程序,开发程序的思维就很重要,这种思维的具体体现就在注释及规范的代码本身。
1.3.2 调试的重要性
调试是很重要的一个部分。所有的程序都是调试出来的,不是写出来的。讲怎么去调试,实际上就是讲一种解决问题的思路。所有的程序写出来后一定是有问题的,既然有问题,就一定会有一个解决问题的思路。解决问题的方法就是调试的方法。
用VB或者是MFC做出来的程序,先运行一遍看看什么地方有问题,如果发现有问题,重新改一改,然后又重新运行。这种方法是还没有入门的调试方法,即是看直接的表象。这种方法既浪费时间,又不能消除隐患。
调试是很重要的内容,如果要进入高深境界,调试是除了了解设计程序、平台以外,一个非常重要的难关。如果要成为高级程序员,就必须过这一关。如果不懂调试,则永远成不了高手。在学习调试的过程中,对汇编语言、体系结构会有进一步的了解。
你可能觉得我把调试的作用说得言过其实了,举例子说明一下吧。请把以下的C程序改写成汇编代码:
int i;
extern int In[],Out[];
for(i=0;i<100;i++)
{
Out[i]*=In[i];
}
我发现90%的人写出来的汇编代码可能是不正常的或有错误的。要么是不了解32位汇编,要么是不循环,要么只有循环没有处理等。这是为什么呢?因为就算是一段小小的代码,如果没有经过调试,也可能错误百出。
如果你是初级一点的程序员,则如果程序出了问题,也不知道原因所在。怎么回事呀?我就是搞不清楚。要搞清楚首先要调试,这就涉及到调试的问题。比如说,放到一个文件里面的,它出错了,我查程序看了n遍,它就是没有任何问题,这时候该怎么办呢?这时的解决方法就是调试,调试能使得一个程序正常地运转起来。如果对于程序员来说写这个程序可能只用了一天的时间,但是调试可能会花他二三天的时间。一个程序绝对是调试出来的,不是编出来的。如果说哪个系统是编出来的,那它肯定会有很多性能方面的问题,包括可能有不可预测的各种各样的问题。
程序出现问题的话,要能考虑到各种各样可能的情况,绝对没有任何臆测。比如,有可能完全是编译器的错误,也有可能因你程序里面增加了什么,而对程序产生干扰,甚至还有一种可能是你的指针基本就没有给它赋值,指向了别的地方,把别的东西破坏了。这些情况太多了。还有一种常见的错误,即MFC里面很常见的一种设计思维,就是任何一个东西,只管创建,不管释放、销毁。这种思路是现在很多程序员做的程序没用几下就会死机的原因。这绝对是错误的设计思路,而MFC让你这么做,就是让你永远成不了高手,你写的程序永远不可能稳定。
您有没有过心爱的工具被杀毒软件KILL的经历;您有没有过辛辛苦苦整理出来的工具集被杀毒软件搞成面目全非而“义愤填膺”的时候;您有没有过好不容易拿到权限,上传的木马却被杀的痛心时刻?免杀,它能做的就是避免这些事情的发生!使杀毒软件成为摆设!当然,除此之外免杀技术带给我们更多的,将是思想的飞跃与技术的成长。
但是要想真正明白免杀能做什么,就要先明白免杀会涉及到什么。对于初学者来说,免杀只会涉及到一点基本的PE文件知识与一些免杀工具的使用,而对于高手来说,免杀甚至会涉及到Ring0(内核层)的程序编译技巧。所以免杀这门课程涵盖面还是相当宽泛的。
目前国内有关于介绍黑客免杀技术的书籍共有两本《黑客免杀入门》与《精通黑客免杀》。
《黑客免杀入门》为近期出版,但其介绍的内容更加详细,内容讲解更为透彻,更有深度。
《精通黑客免杀》较早出版,因而有关于免杀技术的介绍不是很详细,但其附带的光盘中附带了几百兆的操作录像,是不可多得的宝贵资源。
手工免杀分类:
1.文件免杀和查杀:不运行程序用杀毒软件进行对该程序的扫描,所得结果。
2.内存的免杀和查杀:判断的方法1>运行后,用杀毒软件的内存查杀功能.
2>用OD载入,用杀毒软件的内存查杀功能.
什么叫特征码:
1.含意:能识别一个程序是一个病毒的一段不大于64字节的特征串.
2.为了减少误报率,一般杀毒软件会提取多段特征串,这时,我们往往改一处就可达到
免杀效果,当然有些杀毒软件要同时改几处才能免杀.(这些方法以后详细介绍)
3.下面用一个示意图来具体来了解一下特征码的具体概念
特征码的定位与原理:
1.特征码的查找方法:文件中的特征码被我们填入的数据(比如0)替换了,那杀毒软
件就不会报警,以此确定特征码的位置
2.特征码定位器的工作原理:原文件中部分字节替换为0,然后生成新文件,再根据杀
毒软件来检测这些文件的结果判断特征码的位置
认识特征码定位与修改的工具:
1.CCL(特征码定位器)
2.OllyDbg (特征码的修改)
3.OC(用于计算从文件地址到内存地址的小工具)
4.UltaEdit-32(十六进制编辑器,用于特征码的手工准确定位或修改)
特征码修改方法:
特征码修改包括文件特征码修改和内存特征码修改,因为这二种特征码的修改方法
是通用的。所以就对目前流行的特征码修改方法作个总节。
方法一:直接修改特征码的十六进制法
1.修改方法:把特征码所对应的十六进制改成数字差1或差不多的十六进制.
2.适用范围:一定要精确定位特征码所对应的十六进制,修改后一定要测试一下能
否正常使用.
方法二:修改字符串大小写法
1.修改方法:把特征码所对应的内容是字符串的,只要把大小字互换一下就可以了.
2.适用范围:特征码所对应的内容必需是字符串,否则不能成功.
方法三:等价替换法
1.修改方法:把特征码所对应的汇编指令命令中替换成功能类拟的指令.
2.适用范围:特征码中必需有可以替换的汇编指令.比如JN,JNE 换成JMP等.
如果和我一样对汇编不懂的可以去查查8080汇编手册.
方法四:指令顺序调换法
1.修改方法:把具有特征码的代码顺序互换一下.
2.适用范围:具有一定的局限性,代码互换后要不能影响程序的正常执行
方法五:通用跳转法
1.修改方法:把特征码移到零区域(指代码的空隙处),然后一个JMP又跳回来执行.
2.适用范围:没有什么条件,是通用的改法,强烈建议大家要掌握这种改法.
木马免杀的综合修改方法:
文件免杀方法:
1.加冷门壳
举例来说,如果说程序是一张烙饼,那壳就是包装袋,可以让你发现不了包装袋里的东西是什么。比较常见的壳一般容易被杀毒软件识别,所以加壳有时候会使用到生僻壳,就是不常用的壳。现在去买口香糖你会发现至少有两层包装,所以壳也可以加多重壳,让杀毒软件看不懂。如果你看到一个袋子上面写着干燥剂、有毒之类的字你也许就不会对他感兴趣了吧,这就是伪装壳,把一种壳伪装成其他壳,干扰杀毒软件正常的检测。
2.加花指令
加花是病毒免杀常用的手段,加花的原理就是通过添加加花指令(一些垃圾指令,类型加1减1之类的无用语句)让杀毒软件检测不到特征码,干扰杀毒软件正常的检测。加花以后,一些杀毒软件就检测不出来了,但是有些比较强的杀毒软件,像江民杀毒软件,病毒还是会被杀的。这可以算是“免杀”技术中最初级的阶段。
3.改程序入口点
4.改木马文件特征码的5种常用方法(参见“修改内存特征码”)
5.还有其它的几种免杀修改技巧
修改内存特征码:
1.直接修改特征码的十六进制法
2.修改字符串大小写法
3.等价替换法
4.指令顺序调换法
5.通用跳转法
以上文字网上都有,因而,我想说的是:
我学免杀,看你要在哪方面,通常这很难,你最少要精通一门编程语言,注意,是精通,因为这是工具,至于… …我转 梁肇新先生 在《编程高手箴言》中的话:
1.2.1 高手成长的六个阶段
程序员怎样才能达到编程的最高境界?最高境界绝对不是你去编两行代码,或者是几分钟能写几行代码,或者是用什么所谓的可视化工具产生最少的代码这些工作,这都不是真正的高手境界。即使是这样的高手,那也都是无知者的自封。
我认为,一个程序员的成长可分为如下六个阶段。
第一阶段
此阶段主要是能熟练地使用某种语言。这就相当于练武中的套路和架式这些表面的东西。
第二阶段
此阶段能精通基于某种平台的接口(例如我们现在常用的Win 32的API函数)以及所对应语言的自身的库函数。到达这个阶段后,也就相当于可以进行真实散打对练了,可以真正地在实践中做些应用。
第三阶段
此阶段能深入地了解某个平台系统的底层,已经具有了初级的内功的能力,也就是“手中有剑,心中无剑”。
第四阶级
此阶段能直接在平台上进行比较深层次的开发。基本上,能达到这个层次就可以说是进入了高层次。这时进入了高级内功的修炼。比如能进行VxD或操作系统的内核的修改。
这时已经不再有语言的束缚,语言只是一种工具,即使要用自己不会的语言进行开发,也只是简单地熟悉一下,就手到擒来,完全不像是第一阶段的时候学习语言的那种情况。一般来说,从第三阶段过渡到第四阶段是比较困难的。为什么会难呢?这就是因为很多人的思想转变不过来。
第五阶级
此阶段就已经不再局限于简单的技术上的问题了,而是能从全局上把握和设计一个比较大的系统体系结构,从内核到外层界面。可以说是“手中无剑,心中有剑”。到了这个阶段以后,能对市面上的任何软件进行剖析,并能按自己的要求进行设计,就算是MS Word这样的大型软件,只要有充足的时间,也一定会设计出来。
第六阶级
此阶段也是最高的境界,达到“无招胜有招”。这时候,任何问题就纯粹变成了一个思路的问题,不是用什么代码就能表示的。也就是“手中无剑,心中也无剑”。
此时,对于练功的人来说,他已不用再去学什么少林拳,只是在旁看一下少林拳的对战,就能把此拳拿来就用。这就是真正的大师级的人物。这时,Win 32或Linux在你眼里是没有什么差别的。
每一个阶段再向上发展时都要按一定的方法。第一、第二个阶段通过自学就可以完成,只要多用心去研究,耐心地去学习。
要想从第二个阶段过渡到第三个阶段,就要有一个好的学习环境。例如有一个高手带领或公司里有一个好的练手环境。经过二、三年的积累就能达到第三个阶段。但是,有些人到达第三个阶段后,常常就很难有境界上的突破了。他们这时会产生一种观念,认为软件无非如此,认为自己已无所不能。其实,这时如果遇到大的或难些的软件,他们往往还是无从下手。
现在我们国家大部分程序员都是在第二、三级之间。他们大多都是通过自学成才的,不过这样的程序员一般在软件公司也能独当一面,完成一些软件的模块。
但是,也还有一大堆处在第一阶段的程序员,他们一般就能玩玩VB,做程序时,去找一堆控件集成一个软件。
1.2.2 初级程序员和高级程序员的区别
一般对于一个问题,初级程序员和高级程序员考虑这个问题的方法绝对是不同的。比如,在初级程序员阶段时,他会觉得VB也能做出应用来,且看起来也不错。
但到了中级程序员时,他可能就不会选择VB了,可能会用MFC,这时,也能做出效果不错的程序。
到高级程序员时,他绝对不是首先选择以上工具,VB也好,VC也好,这些都不是他考虑的问题。这时考虑的绝对是什么才是具有最快效率、最稳定性能的解决问题的方法。
程序员到达最高境界的时候,想的就是“我就是程序,程序就是我”。这时候我要做一个软件,不会有自己主观的思路,而是以机器的思路来考虑问题,也就是说,就是以程序的思考方式来思考程序,而不是以我去设计程序的方式去思考程序。这一点如果不到比较高的层次是不能明白的。
你设计程序不就是你思考问题,然后按自己的思路去做程序吗?
其实不是的。在我设计这个程序的时候,相当于我“钻”入这个程序里面去了。这时候没有我自己的任何思维,我的所有思维都是这个程序,它这步该怎么走,下步该怎么走,它可能会出现什么情况。我动这个部分的时候,别的部分是否要干扰,也许会动一发而牵全身,它们之间是怎么相互影响的?
也只有到达这个境界,你的程序才能真正地写好,绝对不是做个什么可视化。可视化本身就是“我去设计这个程序”,而真正的程序高手是“我就是程序”,这两种方法绝对是不同的。比如,我要用VB去设计一个程序,和我本身就是一个程序的思维方式,是不一样的。别人也许觉得操作系统很深奥,很复杂,其实,如果你到达高手状态,你就是操作系统,你就能做任何程序。
对待软件要有一个全面的分析方法,光说理论是没有用的。如果你没有经过第一、第二、第三、第四这四个阶段,则永远到达不了高境界。因为空中楼阁的理论没有用,而这些必须是一步一步地去做出来。
一个高级程序员应该具备开放性思维,从里到外的所有的知识都能了解。然后,看到世界最新技术就能马上掌握,马上了解。实际上,技术到达最高的境界后,是没有分别的。任何东西都是相通的,只要你到达这个境界以后,什么问题一看就能明白,一看就能抓住最核心的问题,最根本的根本,而不会被其他的枝叶或表象所迷惑,做到这一步后才算比较成功。
从程序员本身来说,如果它到达这一步以后,他就已经形成了开阔的思维。他有这种开放性思维的话,他就能做战略决策,这对他将来做任何事情都有好处。事实上,会做程序后,就会有一种分析问题的方法,学会怎么样把问题的表象剖开,看到它的本质。这时你碰到任何具体的问题,只要给点时间,都能轻而易举地解决。实际上,对开发计算机软件来说,没有什么做不了的软件,所有的软件都能做,只是看你有没有时间,有没有耐心,有没有资金做支撑。
这几年,尤其是这两三年,估计到2005年前,中国软件这个行业里面大的软件公司就能形成。现在就已经在形成,例如用友,它上市后,地位就更加稳固了。其他大的软件企业会在这几年内迅速长大。这时候,包括流通渠道、经销商的渠道也会迅速长大。也就是说,到2005年以后,中国软件这个行业的门槛比现在还要高很多,与美国不会有太大的差别。此时,中国软件才真正体现出它的威力来。如果你是这些威力中的一员,就已经很厉害了。
入门最基本的方法就是从C语言入手。如果以前学过BASIC语言的话,那么从C语言入手是非常容易的。我就经历了一个过程,根本不觉得这中间有太大的难度。其实,C语言本身和BASIC没有什么两样。BASIC每个所谓的命令在C语言里面都可以做成一个函数来实现,那么你就能用那个命令组合成整个程序。从这个角度来看,BASIC和C语言没有本质的差别。C语言就是入门的正确方法,没有其他。
现在的C语言本身就包含了嵌入汇编,使学习汇编语言的时候更加方便。你可以忽略掉纯汇编里面的很多操作。也许有人觉得这个方法太慢了。但要知道,工欲善其事,必先利其器,要想成功,没有一个艰苦的过程是不可能的,所以一开始的时候就要有耐心。如果你准备花5年的时间成为高手,那我敢说,你根本不用等到5年,你只要有这个耐心就足够了,你可能2年~3年内就能达到目标。但如果你想在一年时间内就成为高手,即使5年后,你还是成不了高手。
入门和积累是很重要的。事实上,到达高手的境界以后,不管什么语言不语言的,其实都根本不用去学,只要拿过来看两天,就全部精通。如果你没有入门,即使去书店找n本书,天天背它,你也不会成为高手。
所有的语言只是很花哨的表面东西。高手马上就能透过它的表象而看到它的本质。这样才是真正的高手。他不需要再去学什么Java,或者其他什么语言。当他真正要写个Java程序的时候,只要把Java程序拿过来看一看,瞄一瞄书,就全都清楚了。如果这时他学VB就更容易了,我想他不用一天的时间,就能学会。到达高手的境界以后,所有的事物都是触类旁通的。
当你成为C语言的高手,那么就你很容易进入到操作系统的平台里面去;当你进入到操作系统的平台里去实际做程序时,就会懂得进行调试;当你懂得调试的时候,你就会发现能轻而易举地了解整个平台的架构。这时候,计算机基本上一切都在你的掌握之中了,没有什么东西能逃得出你的手掌心。
上面只是针对程序的角度说明,另外一点也很重要,即好的程序员必须具备开放性思维,也就是思考问题的方法。程序员,尤其现在很多的程序员,都被误导从MFC入手,这就很容易形成一种封闭式的思维模式。这也是微软希望很多人只能学点表面的东西,不致成为高手,所以他大力推荐MFC之类的工具,但也真有很多人愿意去上他的当,最后真正迷失方向。说他做不了程序吧,他也能做程序,但是如果那个程序复杂一点,出现问题时,问题出在哪里就搞不清楚了,反正是不清楚。如果你真正有一种开放性的思维,在你能够成为高级程序员的时候,对MFC这些是不屑一顾的,MFC、VB根本不会在考虑的范围之内。
事实上很多人,包括外面很多公司里面工资挺高的人,可能一个月能拿五、六万的这些人,他们的思维也不一定能达到很高的境界。但是,他确实做了很多的事情,已经有很好的积累了。但要上升到更高的境界上,就要有正确的思维方法。这就是为什么比尔•盖茨说,他招人的时候宁愿招一个学物理,而不是学编程的。学物理的人会有非常非常广的思维,他考虑的小到粒子,大到宇宙,思维空间非常广阔,这样,他思考问题的时候,就会很有深度。
有人研究物理研究得比较深的时候,他能针对某个问题一直深入进去。很多写程序的人只会注意到这行代码或那行代码,则比较起来则显得肤浅。所以,编程的时候也要深入进去,把你的爱好、你的所有思维都放进去,努力做到物我合一的境界。
1.3.1 规范的格式是入门的基础
以前所有的C语言的书中,不太重视格式的问题,写的程序像一堆堆的垃圾一样。这也导致了现在的很多程序员的程序中有很多是废码、垃圾代码,这和那些入门的书非常有关系。因为这些书从不强调代码规范,而真正的商业程序绝对是规范的。你写的程序和他写的程序应该格式大致相同,否则谁也看不懂。如果写出来的代码大家都看不懂,那绝对是垃圾。如果把那些垃圾“翻”半天,勉强才能把里面“金子”找出来,那这样的程序不如不要,还不如重新写过,这样,思路还会更清楚一点。这是入门首先要注意的事情,即规范的格式是入门的基础。
1. 成对编码
正确的程序设计思路是成对编码,先写上面的大括号,然后马上写下面的大括号。这样一个函数体就已经形成了。它没有任何问题。然后,比如你要写个for循环,这时候先申明一个变量I,再写这个for循环。写上面的大括号,马上写下面的大括号,然后再在中间插一二行代码。插这段代码后,如果你又要用到新变量,则再在头上添加新的变量,然后再让它进行工作。这就是一种成对编码。
这样,当你用到一个内存的时候,写一个分配函数分配一块内存,马上就接着写释放这块内存的代码。然后你再在中间插上你要用这个内存做什么。这是正确的快速的编程方法。否则,你去查或调试代码都无从下手。针对这个程序来说,如果用成对编码,则它任何时候都是可以调试的,不需要你整个程序都写完后才能进行调试。
它是任何时候都可以编译调试的,甚至你写了两个大括号,中间什么也没有,它是空的时,你都可以进行调试。你写了第一个for循环,它也可以进行调试,当你又写了一个分配内存、释放内存以后,它还可以进行调试。它可以编译运行,里面可以放断点,这就是成对编码。
成对编码就涉及到代码规范的问题。为什么我说上面一个大括号,下面一个大括号,而不说成是前面一个大括号,后面一个大括号呢?如果是一般C语言的书,则它绝对说是后面加个大括号,回过头前面加个大括号。事实上,这就是垃圾程序的写法。正确的思路是写完行给它回车,给它大括号独立的一行,下面大括号也是独立的一行,而且这两个大括号跟那个for单词中间错开一个TAB。
代码一定不能乱,一定要格式非常清楚,这点使你写的程序我能读,我写的程序你也能读,不需要再去习惯彼此的不同写法。
而且结合成对编码思维,这时候你去读一个程序的时候,你会发现,你读程序的方法变了。以前读程序的时候,你可以先去读它的变量是什么,然后再读第一行、第二行,读到最后一个大括号,这是一种读程序的方法。现在就不一样了,现在读程序的时候就养成了一种习惯,就是分块阅读程序,很明显两个大括号之间就是一块代码。
那么写出一个程序后,你要读这个程序是干什么的,只要看这个大括号和那个大括号之间的部分就可以了,不需要再去读其他的代码是干什么的。比如,你从Linux中或网上下载了一个“烂”程序后,该怎么去阅读它?最好的方法是先把程序所有的格式都整理好,先别去读它。把所有的格式按照这种规范化的方法,把它的括号全部整理好。这时候你再读那个程序,只要半分钟就读懂了,但是你可能要整理一个小时。但如果不这样做,你可能读两个小时都读不清楚该程序。
这点绝对不会有人告诉你,现在没有人去讲解这方面的技巧。这也是我写了那么多的程序,才总结出来的。一开始的时候,我也像那些教科书所教导那样写,后面放个大括号,前面放个大括号,甚至括号连括号,一连四个括号,每个括号对哪个最后都找不清楚。编译告诉你好像少了一个括号,于是找呀,找呀,上面找,下面找,而这个程序又很大,只有一个函数,上面在上屏,下面在下屏,最后翻来翻去也翻不出。
所以我就想,大括号之间要互相对应,即使不在一个屏幕内,也能很容易地看到它,因为只要光标落在这个大括号里面,往上去找,即能找到它头上的那个与此对正的,而且这些代码是在一起的。这一层代码和下一层代码是互相隔开的,我只要读这层代码,下面那一层代码就不需要了。
比如,它有n个for循环的时候,我只想看某一个for循环,这时我只要对正大括号,它的光标往上走,一下就能找到了。如果按照教科书那样写的话,你要读呀,读呀,要把所有的代码,把所有的for
循环都读一遍,才可能找到你要的东西。这就是成对编码和规范化的方法(详细叙述请参考代码规范一章)。
在软件没有形成行业,程序等同于软件的时候,那时候程序很容易体现出价值来。只要得到代码,就相当于得到这个软件。但现在就不同了。现在的程序都不是几行,你写出的程序,如果又没有注释,格式又很乱,你拿过来给我,我还得花很长的时间才能读得清楚,那这样的程序的代码有价值吗?
我经常听到一些程序员在外面兜销代码,很多是学校的学生,尤其那些素质比较差的研究生,和老师做了一个项目后,他拿出来到外面到处去卖,但是他最后可能卖出去吗?最后可能还是没卖出去,因为那个程序很庞大。如果某个公司买了这个程序以后,该公司还得招一个人去读这个程序,当这个人读懂以后,他又离职了,那公司买这个代码干嘛?2. 代码的注释
代码本身体现不出价值来,有价值的代码一定是不仅格式非常规范,而且还要有很详细的设计思路和注释,这个是很重要的。首先要养成这种习惯,教科书里面很少讲为什么要做注释,注释应该怎么注。有些人爱在哪儿下注释就在哪儿下注释,甚至在语句中间也加,中间也可弄两个斜杠放两个花括号写点注释。
注释格式是非常重要的,但很少有人去注意它。现在的程序如果没有注释,则基本上是没法用的,也就跟你拿一个可执行程序没什么两样,你拿过来还不能随便改,你改了后编出来的程序绝对不能用。所以,程序如果没有详细的注释,别人就算拿到了代码也没有用,体现不出它的价值来。
Linux是个操作系统,很厉害呀!其实那些程序你拿回来,耐心地去读它,会发现,它里面乱得很,那个内核程序除了作者自己能读懂外,别人可能要花很长的时间才能读懂。Apache的作者对自己Apache那套代码是很清楚,但换一个做浏览器的人去读,也会很困难。一般人只把代码复制下来后,打个BUILD命令看看能不能正确地编译,最后能正确编译的程序就是好的,如果不能正确编译的程序就删掉吧,再下载一个,因为他没有正确的对待代码的那种思维,而只是认为那代码本身才有很大的价值,不用关心有没有注释。
如果代码没有注释和规范,是没有价值的,这也是现在为什么很多的个人跑去卖源程序的时候,很多的公司都不要。我们不是说没有技术,任何程序都能做,只是时间的问题,而且像视频中有的技术,比那些卖代码的技术还要深得多。真正要做一个有价值的程序,开发程序的思维就很重要,这种思维的具体体现就在注释及规范的代码本身。
1.3.2 调试的重要性
调试是很重要的一个部分。所有的程序都是调试出来的,不是写出来的。讲怎么去调试,实际上就是讲一种解决问题的思路。所有的程序写出来后一定是有问题的,既然有问题,就一定会有一个解决问题的思路。解决问题的方法就是调试的方法。
用VB或者是MFC做出来的程序,先运行一遍看看什么地方有问题,如果发现有问题,重新改一改,然后又重新运行。这种方法是还没有入门的调试方法,即是看直接的表象。这种方法既浪费时间,又不能消除隐患。
调试是很重要的内容,如果要进入高深境界,调试是除了了解设计程序、平台以外,一个非常重要的难关。如果要成为高级程序员,就必须过这一关。如果不懂调试,则永远成不了高手。在学习调试的过程中,对汇编语言、体系结构会有进一步的了解。
你可能觉得我把调试的作用说得言过其实了,举例子说明一下吧。请把以下的C程序改写成汇编代码:
int i;
extern int In[],Out[];
for(i=0;i<100;i++)
{
Out[i]*=In[i];
}
我发现90%的人写出来的汇编代码可能是不正常的或有错误的。要么是不了解32位汇编,要么是不循环,要么只有循环没有处理等。这是为什么呢?因为就算是一段小小的代码,如果没有经过调试,也可能错误百出。
如果你是初级一点的程序员,则如果程序出了问题,也不知道原因所在。怎么回事呀?我就是搞不清楚。要搞清楚首先要调试,这就涉及到调试的问题。比如说,放到一个文件里面的,它出错了,我查程序看了n遍,它就是没有任何问题,这时候该怎么办呢?这时的解决方法就是调试,调试能使得一个程序正常地运转起来。如果对于程序员来说写这个程序可能只用了一天的时间,但是调试可能会花他二三天的时间。一个程序绝对是调试出来的,不是编出来的。如果说哪个系统是编出来的,那它肯定会有很多性能方面的问题,包括可能有不可预测的各种各样的问题。
程序出现问题的话,要能考虑到各种各样可能的情况,绝对没有任何臆测。比如,有可能完全是编译器的错误,也有可能因你程序里面增加了什么,而对程序产生干扰,甚至还有一种可能是你的指针基本就没有给它赋值,指向了别的地方,把别的东西破坏了。这些情况太多了。还有一种常见的错误,即MFC里面很常见的一种设计思维,就是任何一个东西,只管创建,不管释放、销毁。这种思路是现在很多程序员做的程序没用几下就会死机的原因。这绝对是错误的设计思路,而MFC让你这么做,就是让你永远成不了高手,你写的程序永远不可能稳定。
展开全部
汗,你从简单的开始嘛,你学习免杀你要学的是汇编语言~~~- -
然后变成的话建议你学习C Delphi 易语言 VB 之类的。
然后变成的话建议你学习C Delphi 易语言 VB 之类的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上的大哥 咱别复制行么.....
首先 免杀看到的基本都是 内存指令
例如 jmp mov 等等
首先要了解 寄存器 也就是 跟push pop 以及 eax ebp有关的内容
第二 了解指针以及 内存指令(8088汇编手册内容) 比较多 杂
第三 经验... 多实践 结合理论 构建自己的思路..
你就毕业了.
首先 免杀看到的基本都是 内存指令
例如 jmp mov 等等
首先要了解 寄存器 也就是 跟push pop 以及 eax ebp有关的内容
第二 了解指针以及 内存指令(8088汇编手册内容) 比较多 杂
第三 经验... 多实践 结合理论 构建自己的思路..
你就毕业了.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
百度一下 你就知道。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询