一、什么是逆向工程
对于多年从事移动客户端开发的小伙伴来说,逆向工程这个名词可能有点生疏。逆向工程是在没有产品说明文档和产品接口文档的条件下,对产品进行反编译得到源码,研究分析源码然后得出其中的数据结构,业务逻辑或者某个功能的实现方式。一般的,app的开发我们称之为正向开发。正向开发是根据产品的需求文档和接口文档,为了实现一系统的功能去开发对应的软件。逆向开发则是直接通过分析现有的软件,去了解该软件的实现方式或者在该软件上添加自己需要的一些功能。举个简单的例子,有些正版的软件需要购买授权码,然后才能使用。那么很多一些破解版的软件,就是通过反编译软件,了解软件的实现方式,然后修改软件的业务流程,使之不需要授权就可以直接使用,这个就是逆向工程的范畴。
二、逆向工程可以干什么
2.1 软件的安全防护
你做APP开发的时候是否考虑过你APP的安全性?提到安全性你可能会说我对用户的账号密码进行了RSA加密或者多重md5加密, 那么其他的呢?比如说有些功能需要付费使用,如果别人通过逆向修改了你app的业务逻辑,绕过了付费直接使用呢?我之前开发过一款移动OA,里面有个打卡的功能,当时设计的流程是连上了公司的wifi才能打卡成功。那么如果逃避迟到呢?在电脑上装个模拟器远程打卡,或者搞两个手机,专门放个手机在公司,让早来的同事帮忙打一下。如果用逆向来逃避打卡就很简单,可以伪造公司的IP地址,在家里直接进行打卡。如果时间过了9点怎么办?一样的可以修改时间。或者更懒一点,直接自己添加一个自动打卡的功能,每天定时自动打卡。
从产品的角度来考虑,如何去避免这一漏洞,该如何去设计打卡的流程和限制条件,身为产品经理的你,考虑过么?其实,我个人觉得产品经理还是需要懂技术的。同样作为码代码的你,考虑过如何防止别人反编译你的代码么?虽然你不能防止别人反编译你的代码,但是你还是可以做点防护工作,比如代码混淆。不要说代码混淆只是安卓开发的小伙伴需要做的事情,不要觉得你做IOS开发没必要搞代码混淆。苹果虽然会对上传的ipa进行加密,但是对于逆向的开发人员来说,解密苹果加密之后的ipa包是很容易的,说到这里你是不是感觉有点头皮发麻了,哈哈。
2.2 编写插件
学习逆向开发另外一个作用可以用于编写一些插件,为某些APP定制开发一些特殊的功能。比如微信自动抢红包、自动添加好友、微信机器人等等。
三、学习逆向开发需要具体哪些条件
学习逆向开发还是有一定的门槛的,如果想开始学习逆向开发需要具体以下一些条件,当然也不是绝对的,仅供参考:
1、越狱手机;
2、两年iOS开发经验,熟练使用runtime; (新手学的也有,有经验的更好)
3、熟练使用mac命令行;
4、有足够的耐心和契而不舍的精神;