gdb命令笔记

编译的时候: -g 开始调试:gdb [-tui] test 设置断点:(gdb) breakpoint test.c:123 or  (gdb) b main 运行程序(后面可以跟参数):(gdb) run [arg1 arg2] 清除断点:(gdb) clear 跟踪堆栈:(gdb) where 打印参数:(gdb) print f.BlockType 用16进制打印:(gdb) print/x f.BlockType 单步调试(不进入函数内部):(gdb) next or (gdb) n 单步调试(进入函数内部):(gdb) step or (gdb) s 在每个命令后都显示参数:(gdb) display f.BlockType 设定参数:(gdb) set f.BlockType=0 继续运行:(gdb) cont 推出:(gdb) quit

gdb peda常用指令

info 查看各种信息: info file  查看当前文件的信息,例如程序入口点(Entry point) info break 查看当前断点信息 disassemble+func 对制定的函数进行反汇编 break +”地址” 设置断点 r  等同于“run” 运行程序 c 等同于”continue”,继续执行 x /<n/f/u> <addr> n、f、u是可选的参数。   n是一个正整数,表示需要显示的内存单元的个数,也就是说从当前地址向后显示几个内存单元的内容,一个内存单元的大小由后面的u定义。   f 表示显示的格式,参见下面。如果地址所指的是字符串,那么格式可以是s,如果地址是指令地址,那么格式可以是i。   u 表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes。u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字 节,g表示八字节。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。   <addr>表示一个内存地址。   注意:严格区分n和u的关系,n表示单元个数,u表示每个单元的大小。 layout:用于分割窗口,可以一边查看代码,一边测试。主要有以下几种用法: layout src:显示源代码窗口 layout asm:显示汇编窗口 layout regs:显示源代码/汇编和寄存器窗口 layout split:显示源代码和汇编窗口 layout next:显示下一个layout layout prev:显示上一个layout Ctrl + L:刷新窗口 Ctrl + x,再按1:单窗口模式,显示一个窗口 Ctrl + x,再按2:双窗口模式,显示两个窗口 Ctrl + […]

OD常用快捷键

Ctrl+F2 – 重启程序,即重新启动被调试程序。如果当前没有调试的程序,OllyDbg会运行历史列表[history list]中的第一个程序。程序重启后,将会删除所有内存断点和硬件断点。 译者注:从实际使用效果看,硬件断点在程序重启后并没有移除。 Alt+F2 – 关闭,即关闭被调试程序。如果程序仍在运行,会弹出一个提示信息,询问您是否要关闭程序。   F3 – 弹出“打开32位.EXE文件”对话框[Open 32-bit .EXE file],您可以选择可执行文件,并可以输入运行参数。   Alt+F5 -让OllyDbg总在最前面。如果被调试程序在某个断点处发生中断,而这时调试程序弹出一个总在最前面的窗口(一般为模式消息或模式对话框[modal message or dialog]),它可能会遮住OllyDbg的一部分,但是我们又不能移动最小化这个窗口。激活OllyDbg(比如按任务栏上的标签)并按 Alt+F5,OllyDbg将设置成总在最前面,会反过来遮住刚才那个窗口。如果您再按一下Alt+F5,OllyDbg会恢复到正常状态。 OllyDbg是否处于总在最前面状态,将会保存,在下一次调试时依然有效。当前是否处于总在最前面状态,会显示在状态栏中。 F7 -单步步入到下一条命令,如果当前命令是一个函数[Call],则会停在这个函数体的第一条命令上。如果当前命令是是含有REP前缀,则只执行一次重复操作。 Shift+F7 -与F7相同,但是如果被调试程序发生异常而中止,调试器会首先尝试步入被调试程序指定的异常处理(请参考忽略Kernel32中的内存非法访问)。 Ctrl+F7 -自动步入,在所有的函数调用中一条一条地执行命令(就像您按住F7键不放一样,只是更快一些)。当您执行其他一些单步命令,或者程序到达断点,或者发生异常时,自动步入过程都会停止。每次单步步入,OllyDbg都会更新所有的窗口。所以为了提高自动步入的速度,请您关闭不必要成窗口,对于保留的窗口最好尽量的小。按Esc键,可以停止自动步入。   F8 -单步步过到下一条命令。如果当前命令是一个函数,则一次执行完这个函数(除非这个函数内部包含断点,或发生了异常)。如果当前命令是含有REP前缀,则会执行完重复操作,并停在下一条命令上。   Shift+F8 -与F8相同,但是如果被调试程序发生异常而中止,调试器会首先尝试步过被调试程序指定的异常处理(请参考忽略Kernel32中的内存非法访问)。   Ctrl+F8 -自动步过,一条一条的执行命令,但并不进入函数调用内部(就像您按住F8键不放一样,只是更快一些)。当您执行其他一些单步命令,或者程序到达断点,或者发生异常时,自动步过过程都会停止。每次单步步过,OllyDbg都会更新所有的窗口。所以为了提高自动步过的速度,请您关闭不必要成窗口,对于保留的窗口最好尽量的小。按Esc键,可以停止自动步过。   F9 – 让程序继续执行。 Shift+F9 -与F9相同,但是如果被调试程序发生异常而中止,调试器会首先尝试执行被调试程序指定的异常处理(请参考忽略Kernel32中的内存非法访问)。   Ctrl+F9 -执行直到返回,跟踪程序直到遇到返回,在此期间不进入子函数也不更新CPU数据。因为程序是一条一条命令执行的,所以速度可能会慢一些。按Esc键,可以停止跟踪。   Alt+F9 -执行直到返回到用户代码段,跟踪程序直到指令所属于的模块不在系统目录中,在此期间不进入子函数也不更新CPU数据。因为程序是一条一条执行的,所以速度可能会慢一些。按Esc键,可以停止跟踪。   Ctrl+F11-Run跟踪步入,一条一条执行命令,进入每个子函数调用,并把寄存器的信息加入到Run跟踪的存储数据中。Run跟踪不会同步更新CPU窗口。   F12 – […]

大神的脱壳笔记【转】

转自乐乐大神的空间:http://user.qzone.qq.com/179519167/blog/1264251355 一.脱壳基础知识要点 1.PUSHAD :(压栈) 代表程序的入口点 2.POPAD  :(出栈) 代表程序的出口点,与PUSHAD想对应.看到这个,就说明快到OEP了. 3.OEP:程序的入口点,软件加壳就是隐藏OEP.而我们脱壳就是为了找OEP. 二.脱壳调试过程中辨认快到OEP的简单方法 下面二个条件是快到OEP的共同现象: 若出现下面情况时,说明OEP就要到了: 1. OD跟踪过程中如果发现: popad popfd 或 popad 2.同时,紧接着,有retn ,jmp等其它跳转指令,发生跨段跳跃时. 说明OEP马上到了. 三.脱壳必需牢记的要领 1.单步往前走,不要让程序向上走,遇到向上跳时,在下一句按F4,运行到所选. 2.刚载入程序,在附近就call时,我们按F7跟进去. 3.若跟踪时,运行某个call程序就运行时,这个call也用F7进入. 4.在跟踪时,出现比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETN同时发生大跨段跳转时,说明很快就到OEP了. 四.常用脱壳方法总结 —————— 方法一:单步跟踪法 —————— 介绍:这是最通用的方法,对于未知壳,基本都用这种方法,这种方法过程比较麻烦,要一步一步的跟踪分析,要有一定的耐心. 1.用OD载入,选”不分析代码” 2.单步向下跟踪按F8,实现向下的跳.不让程序往回跳. 3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——>运行到所选) 4.如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,不然程序很容易运行. 5.在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入. 6.一般遇到很大的跳转(跨段跳),比如 jmp XXXXXX 或 JE XXXXXX 或有RETN的一般很快就会到程序的OEP。 —————– 方法二:ESP定律法 —————– 介绍: 这种方法可以脱大部的压缩壳和少数加密壳,操作起来比较简单,脱壳速度也相对比较快. 1.开始就点F8向下走,注意观察OD右上角的寄存器中ESP有没突现(变成红色) 2.在命令行下:dd XXXXXXXX(指在当前代码中的ESP地址,或者hrXXXXXXXX),按回车! 3.选中下断的地址,断点—>硬件访问—>WORD断点。 4.按一下F9运行程序,直接来到了跳转处,按下F8向下走,就到达程序OEP。 —————– 方法三:内存镜像法 —————– 介绍:也是一种比较好用的脱壳方法,大部分的压缩壳和加密壳用内存镜像法能快速脱掉.非常实用. 1.用OD打开,设置选项——调试选项——异常,忽略所有异常(也就是把里面的忽略全部√上),然后CTRL+F2重载下程序! 2.按ALT+M,打开内存镜象,找到程序的第一个.rsrc.按F2下断点,然后按SHIFT+F9运行到断点. 3.接着再按ALT+M,打开内存镜象,找到程序的第一个.rsrc.上面的.CODE,按F2下断点!然后按SHIFT+F9,直接到达程序OEP! —————- 方法四:一步到OEP —————- 介绍:这是一种巧方法,脱壳速度最快,前提是要知道这个壳的特征,利用这种壳的共性快速找到程序的OEP.这种方法只用于少数壳. 1.开始按Ctrl+F,输入:popad,然后按下F2下断,按F9运行到此处. 2.很快来到大跳转,按F8向下走,来到OEP. ———————- 方法五:最后一次异常法: ———————- […]