逆向分析学习笔记旨在与小伙伴们分享小编们的学习心得,主要为一些短小但又精华的小技巧,具体如下:
1、常见压缩壳:UPX、ASPACK、NSPACK。
2、常见加密壳:Asprotect、Zprotect、Yoda、Telock、Svkp。
3、常见虚拟机保护壳:Vmprotect、Themida、WinLicense 。
4、常用动态调试工具:ollydbg、Immunitydbg、Windbg,其中ollydbg使用最多,逆向必备,Immunitydbg为Immunity公司对ollydbg之后的改进版,支持Python脚本,但是断点不能保存,更适合漏洞利用领域,Windbg界面不甚友好,但是微软自家的东西对windows系统支持很好,调试内核驱动程序必备,三者都支持自定义脚本编写。
5、常用静态分析工具:Win32Dasm、Ida pro,Win32Dasm已经停止更新了,Ida功能更强更常用,结合hex插件反编译出C程序代码的效果极佳哦。
6、Peid是目前最常用的查壳类型的工具,内置有外壳特征库及识别算法,也可以自己下载特征库自制查壳工具。
7、DeDe是逆向分析Delphi及Brond C++程序的利器,可以看到窗体及其它资源的信息,还可以查看对应按钮等的处理程序,便于快速定位分析。
8、机器码:用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合,一般反汇编出的结果为16进制显示,如空指令nop的机器码为90(16进制);
9、断点:调试器的功能之一,可以让程序中断在需要的地方,常用的断点包括:INT3断点(也称软断点)、硬件断点(利用CPU的调试寄存器设置)、内存断点(利用操作系统的缺页异常处理机制)、消息断点、条件断点等。
10、硬件断点利用CPU的调试寄存器,最多只能设置4个,在软断点被检测的多时下硬件断点和内存断点也是极好的。
11、调试器的单步跟踪是结合的调试器软断点机制,在调试器中实现的逐指令或逐过程执行程序。
12、父进程:指已创建一个或多个子进程的进程,调试器如Ollydbg一般使用打开或附加的方式调试程序,调试器就作为调试程序的父进程,一般正常的应用程序是由explorer.exe创建的,父进程就是explorer.exe等,可以利用这个特点做反调试。
13、堆栈平衡定律:手工脱壳时利用外壳程序首先需要保存原程序的入口信息(寄存器、堆栈使用情况等),通过标记刚加载时入口点的堆栈位置,等外壳程序恢复原程序的ESP寄存器值的时候,一般就到了OEP位置附近。
14、内存访问断点:根据操作系统的内存管理机制,经常未使用的内存页不会放置在缓存中,当程序需要访问到该页内存时就会触发缺页异常,就会交给调试器处理,而外壳程序完成原程序各个区段的解压操作之后会跳转到原程序开始执行,在使用Ollydbg调试器手工脱壳时,可以手工设置内存访问断点,当程序解压完某个区段之后会自动中断在缺页异常处,再进行单步跟踪就能到达OEP处。
15、shellcode:一段完成特定功能的代码,一般用于获取主机权限,常见的有新建用户、弹出消息框(测试用)、绑定端口等,与溢出漏洞联系紧密,经常在利用漏洞获取程序控制权之后执行得到被攻击主机的部分权限。
16、网页挂马一般利用浏览器或其插件在解析特定网页过程中的漏洞控制浏览器程序流程执行shellcode(一般为反弹连接或是下载并执行恶意程序的功能),用户在使用浏览器访问不明链接时就可能成为被控制的“肉鸡”,现在国内主机WindowsXp+IE8的仍然占很大分量,很危险(⊙o⊙)哦,Windows7下则安全的多。
17、软件加壳过程一般是将原程序的代码数据等压缩或加密处理,在程序中新建一个区段存放外壳代码,并修改程序入口使外壳部分代码先于原程序开始执行,在完成原程序数据的解压缩或解密之后再跳转到原程序的代码执行。
18、内存偏移地址:也叫VA,在保护模式下程序被加载到内存后,操作系统为其分配了自己独立的4GB虚拟内存空间,在这个空间定位的地址就称为虚拟内存地址,范围为0×00000000~0xffffffff,相对于0×00000000的偏移称为内存偏移地址。
19、区段:也可以称为“节”、“区块”,用于存放可执行程序不同类型数据的地方,如代码段、数据段、资源段等,将程序的数据放置在不同的区段可以设置不同的权限便于管理,实际存放的数据类型或区段名称可以根据根据需要灵活设置。