编写程序,简称编程,是程序员、软件工程师的基本功,通俗地说就是敲代码。与编程相对立的词叫做”逆向“,或许有很多人不清楚开发和逆向的相关概念,本文对此做些简单阐述。

程序员

打一个最形象的比喻,如果把软件开发的过程比作盖一栋大楼,那么逆向就可以比喻成”拆楼”。从字面意思理解,逆向这个词多少带有灰色的意思。是的没错!软件逆向分析技术是系统与网络安全(黑客技术)的一个重要分支。精通逆向分析技术的人,好则可以分析恶意代码找出应对之策或者漏洞修补。坏,则会损害付费共享软件的发展(软件破解)、编写病毒木马、流氓软件传播等,这类人被称作cracker,与擅长网络入侵的hacker不同的是,cracker专注于系统底层软件加密和破解。

技术是双刃剑

从技术角度分析,软件编程开发和逆向工程是两个不同的维度,编程需要掌握程序设计语言和算法结构,注重功能上的实现,由程序到软件就涉及Windows API的封装调用了,因为面向对象编程的发展趋于成熟,有大量成熟的类库可以使用,使得开发效率和学习入门花费成本很低。有基础的人,尤其是在互联网盛行的今天,各种源代码和IDE唾手可得的情况下,在半年到一年时间之内,基本可以完成中小规模的软件项目。

主流计算机编程语言

逆向的原则就是破坏黑盒子的封装性,如果目标对象是一款开源软件,那么逆向它是没有意义的,因为直接看源代码比分析反汇编指令要容易的多,毕竟高级语言的可读性摆在那里。所以逆向分析针对的是赤裸裸的exe、dll、sys等,没有源代码,通过各种动态调试(如Ollydbg)、静态分析(如IDA pro)的手段,观察反汇编代码、内存地址、寄存器来分析指令背后的功能操作,依据此”倒推”源代码,这就是软件逆向工程的基本任务。

IDApro能够分析程序指令执行流程,尤其是著名的F5大法! 逆向工程师必备!

家喻户晓的Ollydbg

世界上的程序员多如牛毛,但是真正的具有软件逆向分析水平的工程师是万里挑一。