一、软件逆向工程
大多数时候都会被简称为逆向工程(Reverse engineering)或直接将其称为逆向(Reverse)。软件逆向工程的基本思路是将二进制代码按照一定格式进行正确有效的反汇编,并通过分析反汇编代码再配合其调用的外部函数或系统API等,对其代码逻辑进行理解,而在这个过程中最重要的就是推理出该二进制代码使用的数据结构。
二、加壳与脱壳
壳是程序免杀的手段之一,也起到干扰逆向分析的作用。好的壳可以让恶意软件伪装成普通软件,也可以保护内层的原程序。反病毒与反查杀都是在加壳与攻壳中实现。壳一般分为两类,一类是压缩壳,另一类是加密壳。壳这个部分的技术延申出去,就是软件加固、软件脱壳等领域的内容了。
加固产品由于核心原理固定,已被研究得七七八八,市面上也有很多脱壳的工具,新的加固产品面世,被脱壳的周期也非常短。前各家的社区加固产品主要用来防止入门级黑客破解应用、防止APK被二次打包,防止被插入广告或者恶意代码等,商业壳现在都开始上vmp了。
三、注册机与算法求逆
初级的软件版权通常靠的是“序列号"、”激活码“一类的东西来保护,这种保护是离线的。注册码的验证算法一般内置在软件内部,对输入的字符串做换算,这个换算的过程就是注册、验证算法。通过逆向调试手段分析反汇编代码,找到关键算法之后就开始“求逆”(需要数学功底),用代码实现这个逆运算就是所谓的注册机。
四、反病毒与免杀
逆向细化的两个分支,免杀偏向于攻,目的是让恶意软件不被杀毒软件检测到,或者是让壳更隐蔽。反病毒偏向于防,通过特征码等的技术手段检测病毒。
五、简单CTF逆向题的流程
1)查壳脱壳
2)定位关键代码段(通常是注册机代码段)
3)分析软件执行流程和其他flag线索
4)算法求逆得到flag
六、总结
CTF逆向题实际对应的场景感觉是目前软件破解行业的工作流程,查壳脱壳自不用说,算法求逆就是编写注册机。复杂逆向题可能就会出现各种反调试、花指令、复杂壳、高难注册算法吧。
逆向入门以后,再想进阶的话可以做反病毒、免杀、软件补丁、移动安全等工作。