学业当然是第一位的!如果能有GF(/BF?)伴读,可能会轻松一些。呵呵,开个玩笑哈!
说到基础,论坛讨论得多,我也说不好。个人爱好,随着性子瞎折腾。
首先,要明确方向。
应结合你未来的职业规划,不应与学业冲突。搞逆向其实成本是相当高的——需要大量的时间,投入与产出需要权衡。
有的人具有商业特质,对“金钱的味道”特别敏感,把它当成事业,服务别人也致富了自己,最好不过了。
在读书这个阶段,学什么知识并不重要,更注重培养学习的能力、查找资料的能力、语言能力(含外文)、思考的能力。读到研究生可强化动手能力、与人沟通的能力。
还要养成好的习惯。我是属于比较散漫的人,有时其他人问我要某个东西的笔记,实在拿不出手,因为到后来自己都看不明白。人的记忆不那么靠谱,要勤于记录和整理。
我想,这些也应该属于基础的范畴。每个人的具体情况是不同的,基础这个概念也就没有明确的标准。
其次,得有兴趣;弗洛伊德强调的是“性趣”。整天面对机器和数字,枯燥与寂寞,常人难以承受。
微软几年前有句话:"
Your Potential. Our Passion.",翻译过来:“
您的潜力,我们的动力。”;翻译中规中矩,非常官方。但总觉得少了些啥,好比翻译中文古典诗词给外国人,很难出意境。关键在Passion一词,只可意会,不可言传。
有了Passion就好办了,"
Nothing is impossible"!
那些年我们不是勒紧裤带也搞出了原子弹、人造卫星吗。
然后,就是经验了。这个没有办法,靠时间的积累,罗马也不是一日建成的。如果有刘翔孙杨们的天资,就不用太辛苦,但咱是笨鸟,得先飞。
很多东西是相通的,有了一定经验,事情就变得容易一些。
具体到“脱壳”或者“破解”的问题,抄一段"ASProtect Help"里的描述:
How does it work?
In general, application protection mechanism is based on the "envelope" principle, in which the application is put.
The application is packed (using ASPack compression engine), i.e. all application sections (code, data, import tables, resources) are processed and then the protection code is appended to the end of the file. The size of the protection code is about 50K bytes packed.
First the control is gained by the protection code, protection code gains control and checks the application integrity, debugger presence, the registration key, processes trial version limitations, then decrypts and unpacks the application data, initializes the application data needed (processes the import functions and relocation tables) and passes the control to the application.
Unlike other protection schemes ASProtect has the API (Application Programming Interface) to interact with the protected application, and this greatly increases the counteraction to the attempts to remove the protection.
大致是说:
在一般情况下,应用程序保护机制是基于“信封”的原则,将应用程序予以“封装”。
应用程序用ASPack压缩引擎打包,即程序各区段(代码、数据、导入表和资源)被保护起来,然后保护代码附加到程序文件末尾。保护代码部分大约50KB。
保护代码最先取得控制,检查程序的完整性、是否存在调试器,分析注册码并设置相应的试用限制。然后解密和解压程序数据,初始化程序要用到的数据(处理导入函数和重定位表),最终将控制移交给程序。
与其他保护机制不同,AsProtect有API与受保护的应用程序进行交互,这大大增加了试图移除保护的难度。
瞧瞧,十年前的保护原理与现今流行的各种保护没有什么不同,只不过各个环节的方法和手段略有差异,有的还加入了虚拟机的技术。
这里我们需要哪些知识呢?
懂一点操作系统的工作原理,应用程序的结构,汇编知识(能看懂就行),编程语言(要逐步熟悉其编译后机器代码的结构),善用工具。不要指望一下样样精通,还是一个循序渐进的过程。
论坛的资源很丰富,很多问题都能从前辈的帖子找到答案。视频和教程往往只着重于某一方面,并假定读者有一定程度的基础,但至少它告诉了How,至于Why原理方面的东西只能靠自己学习总结积累。
能有一点密码学方面的知识更好,有的函数若猜测是某种解密算法时,没必要跟进去,避免浪费时间,因为大都采用现成的算法库。只关注其输入、输出即可。
比如这个"ASProtect 1.23 RC4"版本,除了RSA还大量使用RC4进行解密。"Crystal Button"程序有7处代码片段被RC4加密,如果没有正确的Key,基本没法解密还原,即使“脱壳”能运行,会缺失注册版才有的功能。
另外,人们常问“脱掉后为什么不能跨平台?”。因为脱壳时只处理了导入函数表,壳代码运行后重定地址已经“写死”在脱壳后的文件里,重定位表没有了,需要重建。按上面Help的说法,跟壳代码,找到处理重定位表的关键位置,即可获得完整的表项。
太阳正在升起,月亮渐渐西下。最近野钓时常常欣赏到这宁静的景象,淡定着隐约的一丝伤感。个人拙见,愿与太阳们共勉!