|
0816-onlyu-任务
译文∶ 反编译窗口中的菜单[Disassembler menu] 反汇编快捷菜单在整个OllyDbg中可能是最重要的。为了保持菜单简洁,它只显示被选定的反汇编代码部分的相关选项。如果有几行被同时选定 ,单行命令只对选定的第一行有效。 备份功能――看看这里的描述。 复制 到剪贴板(Ctrl+C)――把代码的选定部分复制到剪贴板。使用当前选定的栏宽。为了使某些栏不复制,把它的宽度减到最小(在这种情况下栏剩下的部分看起来是灰色的)。如果某些文本比栏宽,OllyDbg就把栏中的最后的可见字符取代为符号'>'。 到文件――把代码的选定部分复制到文件中。规则和您复制选定内容到剪贴板一样,但是您能复制的数据的大小没有限制。 全选――把反汇编窗口中显示的所有代码选定。 选定函数――选定当前认出的函数。 二进制 编辑(Ctrl+E)――允许您把代码选定的部分作为ASCII,UNICODE或者十六进制字符串来编辑。所有这三个编辑框是互相关联的,同时卷动(第一个可视字节在所有的3个窗口中是一样的)而且一旦你在任何编辑框中作了改动,其它的立刻改变。通过按Ctrl+UpArrow 或者 Ctrl+DownArrow,您可以很快地到达不同窗口的相应位置。所编辑的代码的最大长度为256个字节。不完整的字符用红色的问号显示。如果十六进制字符串包含奇数个字符,OllyDbg用0把它补全。当“保留大小”选项被打开,您就不能在选定的代码中插入、删除字符或超出范围。 使用00填充――把选定的代码部分用00填充。 使用NOP填充――把选定的代码部分用NOP填充。 二进制复制――把代码的选定部分作为十六进制ASCII码复制到剪贴板。 二进制粘贴――把剪贴板中的十六进制数据粘贴到选定位置。OllyDbg扫描剪贴板中的文本,并提取十六进制数字(0..9, A..F, a..f),忽略所有其它的字符。在选定区域之外的代码仍然保持不变。如果最后的字节只包含一个十六进制数字,那么它将被忽略。例如:“part of code”将被解释成AF CD而不是AF CD 0E。 Copy with masked fixups――和二进制复制差不多,但是会把用问号标识的地址用修复后的地址取代,这样更容易搜索类似的代码片断了。可以参考搜索二进制字符串。 修改字节――您能够把选定的字节常量以有符号十进制数,无符号十进制数或者16进制数来编辑。 修改指数――您能够把选定的整数常量以有符号十进制数,无符号十进制数或者16进制数来编辑。 修改浮点数――您能够编辑选定的浮点数。 修改MMX――您把选定的MMX常量作为有符号十进制数,无符号十进制数或者16进制数域里的数来编辑。 修改3DNow!――您把选定的3DNow!常量作为一对浮点或16进制数来编辑。 修改SSE――您把选定的SSE常量作为一个含有4个浮点数或16进制数的集合来编辑。 撤销选择(Alt+BkSpc)――把选定的代码用相关的备份的数据代替。仅仅在备份数据存在而且和选定代码不同的时候有效。 汇编(空格键)――您用一个或多个指令来编辑或覆盖已有的代码。详细请看汇编器一节。 标号(:)――您在选定的首地址指派一个自定义的标签。 编辑标号(:)――您能够编辑或删除已经指派给选定的首地址的自定义标签。 注释(;)――您能够对选定的首地址添加注释。 编辑注释(;)――您能够编辑或删除已经指派给选定的首地址的自定义注释。详细请看断点一节。 断点 切换(F2)――对选定的第一条指令切换INT3断点。 条件(Shift+F2)――对选定的第一条指令设置条件断点。 条件记录(Shift+F4)――设置记录断点。 WinPro消息断点――编辑激活的消息断点。消息断点可以从Windows窗口设置。 运行到所选(F4)――在第一选定的命令设置一次性断点并在被调试的程序执行完后继续。如果OllyDbg程序在到底这个命令之前停止执行了,一次性断点仍然保持激活。如果必要,你可以从断点窗口把它删除。 内存访问――对选定的内存部分设置内存断点。每次这块内存被访问,程序都会暂停。OllyDbg支持任意大小的内存设置断点。内存断点会明显降低执行速度。在Windows 95/98下,当系统例程访问包含了内存断点的内存块的时候会使被调试程序崩溃。您应该在不得以的时候使用它。 内存写入――对选定的内存部分设置内存断点。每次程序试图写这块内存的时候,程序都会暂停。OllyDbg支持任意大小的内存设置断点。内存断点会明显降低执行速度。在Windows 95/98下,当系统例程访问包含了内存断点的内存块的时候会使被调试程序崩溃。您应该在不得以的时候使用它。 清除内存断点――把内存断点清除。 硬件执行――在选定的首字节上设置硬件内存断点。每次程序试图执行以这个字节开始的命令的时候会暂停。硬件断点只对Windows ME, NT or 2000有效。80x86处理器最多能够支持4个硬件断点。如果OllyDbg找不到多余的位置来设置硬件断点,它会询问你清除一些已有的断点。你可以在CPU dump面板上设置硬件写入或访问断点。 清除硬件断点――清除设置在第一个选定的字节的硬件断点。 #在这里设置SFX入口――把选定的第一个命令作为脱壳后的自解压程序的真正入口。如果真正的SFX入口被指定了,而且选项"使用上次运行的真正入口"被激活了,OllyDbg就能快速通过自解压并停在真正入口处。 Hit跟踪――操作Hit跟踪的命令,只对已经分析过的代码有效。 添加选择――要求Hit跟踪对选定的代码打开。 添加函数――要求Hit跟踪对当前函数打开。 添加全部认可程序――要求Hit跟踪对被分析器认出并显示在反汇编窗口的所有程序打开。为了避免崩溃,我建议您选择严格或启发式函数识别。 从选择中删除――从选择中删除Hit跟踪。如果同时有被动的Run跟踪,也会把它删除。 从模块中删除――把Hit跟踪从代码模块也就是当前在反汇编窗口选定的代码中删除。如果同时有被动的Run跟踪,也会把它删除。 标记所选为尚未跟踪――标记所有选定的命令中的已Hit跟踪为未跟踪的。 标记模块为尚未跟踪――标记在反汇编窗口中选定的模块中的所有标记为已跟踪的为未跟踪的。 Run跟踪――操作Hit跟踪的命令,只对已经分析过的代码有效。 添加选择――使Run跟踪对选定的代码块打开并同时请求Hit跟踪。 添加函数――使Run跟踪对当前已认出的函数打开并同时请求Hit跟踪。 在函数中添加分支――使Run跟踪对所有认出的jump或者call目标打开并从所有在当前函数中的其它命令中删除Run跟踪。同时它还对整个函数请求Hit跟踪。 在所有函数中添加分支――使Run跟踪在所有认出的函数的入口点打开并把它在当前模块的其它模块中删除。同时它对所有认出的函数请求Hit跟踪。 跟踪时跳过所选部分――把选定的伪线性代码从Run跟踪中排除。当Run跟踪遇到排除的代码的时候,它在所选代码的最后设置临时断点并一次运行完代码。这个显著地加快了Run跟踪。 设置条件(Ctrl+T)――设置条件来暂停Run跟踪。 当前模块镜像――打开包含当前模块镜像数据的窗口。 全局镜像――打开包含整个程序镜像数据的窗口。收集全局镜像数据可能会非常耗时。 从选择中删除――把被动运行的Run跟踪从选择中删除。 从模块中删除――把被动运行的Run跟踪从当前选择的代码模块中删除。 跟随(ENTER)――跟随jump,call,return或者切换目标。参考命令历史。 跟随立即变量――如果指令中的立即变量指向代码,就跟随地址。 跟随SE句柄(ENTER)――如果实际指令安装了结构化异常处理(SEH),就跟随处理例程的人口点。 前往 起源(*)――前往包含在当前线程的EIP中的地址。 上个(-)――前往命令历史中的前一个地址。当Run跟踪缓冲已经打开的时候你不能浏览运行历史。 上个Run跟踪记录(-)――前往Run跟踪缓冲区中的前一个记录。 下个(+)――前往命令历史中的下个地址。当Run跟踪已经打开的时候你不能浏览运行历史。 下个跟踪记录(+)――前往Run跟踪缓冲区中的下一条记录。 表达(Ctrl+G)――使得你跟随16进制地址或者表达式的结果。对话框会保存前几次输入的地址。为了方便区分,你可以通过打分号来分开地址或表达式。 上个函数(Ctrl+Minus)――前往以前认出的函数的开始。 下个函数(Ctrl+Plus)――前往下个函数的开始。 上个参考(Alt+F7)――前往上个找到的参考。参考窗口中的选择会和反汇编器同步移动。 下个参考(Alt+F8)――前往下个找到的参考。 源文件(Ctrl+F5)――打开源代码窗口并显示和第一个选定的命令相关的代码。目前这个选项只在可执行文件包含Borland格式的调试信息的时候有效。 Switch base, Default case, Case xxxx ――如果命令是一个switch base或者是它的一种情况,这个菜单就只包含认出的switch的剩余分支。 More cases...――如果分支情况超过了10个,就打开显示switch的所有分支的窗口。 CALL from xxxx, JMP from xxxx, JNZ from xxxx, JMP [ ] from xxxx 等―― 来到选定的命令跳转到或者调用的命令。这可以是直接或间接的无条件跳转,条件跳转或者切换表。注意从不同模块调用的Call不会列出来的,甚至它们已经在调用树里列出来了。 更多jump和call...(Ctrl+J)――如果到当前位置的跳转或调用的个数超过了10个,打开窗口显示所有的跳转和调用来选择命令。快捷键总是激活的,甚至某一选项并没有出现在菜单中。 DLL Call输出――打开调用输出对话框。只有当你调试单独的DLL,并且第一个选定的行是这个DLL中的输出函数的入口时才能使用。 Dump中跟随 选择――在CPU Dump中重新打开内存块并跟随选定的首地址。 常量――在Dump面板中跟随立即常量。 地址常量――在Dump面板中跟随是地址的一部分的那些常量。例如,如果当前选定的命令是MOV [ESI+123456],543210,那么Dump将显示从内存地址0x123456开始的内容。 直接常量――在Dump中跟随直接常量。例如,如果当前选定的命令是MOV [ESI+123456],543210,那么Dump将显示从内存地址0x543210开始的内容。 隐含堆栈地址――跟随由ESP隐含的堆栈位置,如命令PUSH和RET。 内存地址, 首地址, 次地址――在Dump面板中跟随地址。例如,如果当前选定的命令是MOV [ESI+123456],543210,而ESI的值为0x10,Dump将显示内存地址从0x123456开始的内容。一些命令,如MOVS,有两个内存操作,在这种情形下,首地址是目标地址,而次地址是源地址。 查看调用树(Ctrl+K)――打开调用树窗口来显示所以调用当前函数和所有从当前函数开始的所有函数。如果你想吧这个树扩展到不同的模块中去,请自行分析它们。 搜索 当前模块中的名字(标签)(Ctrl+N)――显示定义或在当前模块中使用的所有名字(输出,输入,库,自定义)。 所有模块中的名字――显示包含所有已知名字的表。 #命令(Ctrl+F)――使得您能够搜索汇编命令。OllyDbg会试图寻找所有可能的编码。例如,如果你搜索MOV EAX,[123456],它将对A1 56341290和8B05 56341200都进行搜索。您还可以不精确地指定指令,如MOV R32,[CONST]――这个即符合MOV EAX,[10000],也符合MOV ESI,[123456]。然而这种搜索不能搜索更复杂的地址格式的命令。想要得到最好的结果,在开始搜索之前最好分析一下代码。 命令序列(Ctrl+S)――使得您能够搜索汇编命令序列。这个序列可以包含不精确的命令,可以符合寄存器,并允许省略中间命令。 #常数――使得您能够在代码中查找常量。这个常量可以是地址的一部分,立即数,相关跳转的偏移地址或者switch表的某个元素。为了得到最好的结果,最好在开始搜索之前分析一下代码。 二进制字符串(Ctrl+B)――以对话框显示并运行指定搜索模式。搜索模式的最大大小为256个字节。您可以排除一些字节或者可以对比较指定得更细。例如,如果您指定了模式12 ?? ?6 78,它将符合12 34 56 78 和 12 00 06 78,但是不符合12 34 55 78。您还可以忽略ASCII/UNICODE字符的条件。 修改的命令――搜索和备份不同中内容不同的下一条命令。 Trace hit――搜索邻近的hit跟踪中被标识成executed (hit)的命令块。 下一步――重复最近的搜索。 所有模块中的调用――搜索所有在其它模块中的调用函数(直接或间接,可以通过一些立即跳转)。对搜索由GetProcAddress()函数装载的一些API函数特别有用。 所有序列――使得您搜索符合指定模式的所有命令序列。 所有常数――使得您可以在当前模块的代码段中搜索指定常数的所有位置。 所有switch――显示在当前模块中认出的所有switch。 #所有参考字符串――搜索所有当前模块或嵌入在这个模块中的代码段中引用的所有ASCII和UNICODE字符串。 #自定义标签――显示当前模块中的所有自定义标签。 #自定义注释――显示当前模块中的所有自定义注释。 #Run跟踪最新记录――在Run跟踪缓冲区中搜索选定的首命令最近出现在哪里。 #查找参考――这些命令在打开的反汇编窗口模块中的代码中搜索指定的选项。 选定的命令(Ctrl+R), 选定的地址(Ctrl+R)――选定的首地址; 选定的块――选定的范围; 立即常数――立即常数是选定的命令的第一个命令中的立即常数。 调用目标――选定的第一个命令的调用目标; 跳转目标――选定的第一个命令的跳转目标; 调用常数, 跳转常数――第一个选定的命令的目标地址的常数部分。 停止到返回(Esc)――在返回的地方停止执行。 停止跟踪(Esc)――停止Run跟踪。 停止动画(Esc)――停止动画。 查看 源文件(Ctrl+F5)――打开源代码窗口并显示和第一条选定的命令相关的代码。只有当可执行文件是Borland格式的并包含调试信息的时候,这个选项才有效。 原始注释――在反汇编窗口的第4栏里显示注释。如果光条可见,press comment bar to toggle between comments, source and profile. 源代码作为注释――在反汇编窗口的第4栏里(通常显示注释)显示源代码。如果光条可见,可以按光条在注释,源代码和镜像间切换。这个选项只有在可执行文件包含Borland格式的调试信息时才可用。 镜像作为注释――显示每条命令在Run跟踪缓冲区里出现的次数。如果光条可见,可以按光条在注释,源代码和镜像间进行切换。这个选项只有在镜像数据被打开时才可用。 可执行文件――显示从选定的首命令开始的偏移地址出的可执行文件的镜像数据。如果选择的不是文件中的,就显示从偏移0开始的镜像。 绝对地址――在第一栏里显示绝对地址。 相对地址――显示当前选定的相对地址。还可以通过单击第一栏的基址来切换。 模块"xxx"――显示选定模块的可执行代码。 复制到可执行文件 选择部分――把选定的部分复制到可执行文件中去。OllyDbg会调整修正值并提示你这个操作可能会引起错误。 全部修正――把所有高亮的修改(例如,实际代码和全局备份之间的区别)复制到可执行文件中去。 分析 分析代码(Ctrl+A)――分析在反汇编窗口打开的模块中的代码段。如果分析数据可用的话OllyDbg的其它部分会更可靠地工作。 删除分析――删除当前模块的分析数据。 扫描目标文件(Ctrl+O)――运行您能够选择目标文件或者库并在反汇编窗口中的打开的模块的代码段进行定位。 删除目标扫描――删除目标的扫描结果。 #假设参数――使得您可以把第一个选定的命令作为一个预定义了函数的入口点。当前可利用的函数类型是: WinProc(hWnd,msg,wParam,lParam) - 处理消息的Windows函数 WinMain(hInst,hPrevInst,CmdLine,ShowState) - 程序入口点 DllEntryPoint(hInst,CallReason,pReserved) - DLL 入口点 Format(format,...) - 类似于printf的函数 Sformat(ptr,format,...) - 类似于sprintf的函数 StdFunc0(void) - 无参数的函数 StdFunc1(int) - 只有一个参数的函数 ..... StdFunc8(int,int,int,int,int,int,int,int) - 有8个参数的函数 从选定中删除分析(BkSpc)――从选定模块中删除分析。如果分析器已经把代码认成了数据的时候有用。 在下一个分析中,把选择看成――一些解码线索。 符号名帮助――如果选定的第一行包含符号名而且API帮助文件已经附加到OllyDbg上了,可以试着打开关于这个符号名的帮助主题。 外观――可以在这里看详细的描述。 (完) |
|
RoBa的翻译任务――已完成,已初步整理
Command这个词,我感觉很讨厌,应该是命令的意思,但我觉得有时候翻译成指令更为确切,大家有什么看法?比如"命令历史[Command history]"这里应该是指令吧。 |
|
onlyu 当前任务――翻译完,待整理
译文: Hit跟踪 Hit 跟踪能够使您有可能检查代码的哪一部分被执行了,哪一部分没有。OllyDbg中实现的方法相当简单。它在指定的区域中的每一个命令处设置一个INT 3断点。当发生中断的时候,OllyDbg把它去除掉,并把命令标志为[hit]。因为每个跟踪断点只执行一次,这种方法就非常快速。 当用Hit跟踪的时候,特别要注意的是不用在数据中设置断点,否则应用程序极有可能崩溃。基于这个原因,您必须分析代码来打开相关的菜单选项。我建议您选择严格或者启发式函数识别。模糊的选项容忍的错误太多,而且经常会找到不存在的函数。 当您在模块中设置在一个简单的命令上设置跟踪断点的时候,OllyDbg会开辟两倍于代码段大小的缓冲区。 注意当您退出hit跟踪的时候,您同时也退出了被动运行的run跟踪。 参考:反汇编菜单,Run跟踪,跟踪选项 $#KRun跟踪[Run trace] Run跟踪是一种先于某些事件之前的往回跟踪程序运行的一种方法。您还可以使用Run跟踪来简单的评估一下。基本上,OllyDbg是一步一步地执行被调试程序的,就像动画演示一样,除了它不能重画窗口,最重要的是能记录地址,寄存器的内容,消息和已知的操作数到Run跟踪缓冲区里去。如果被调试代码是自修改的,您就能够保存原始的命令。可以通过按Ctrl+F11(跟进,进入子程序)开始Run跟踪或者Ctrl+F12(跟出,立刻执行call),并用F12或者Esc停止跟踪。 #您可以指定在Run跟踪时的每一步执行时的条件集(快捷键:Ctrl+T)。如果条件符合,Run跟踪将暂停。条件包括: ? 当EIP在某个地址范围之内的时候暂停; ? 当EIP在某个地址范围之外的时候暂停; ? 当某些条件为真的时候暂停; ? 当下一条指令可以的时候暂停,如可能为非法指令(根据在Analysis 3中设定的规则而定),访问不存在的内存,设置了单步陷阱标志或者访问超过真正的ESP的值的堆栈。注意这个选项会明显的(大约20%)减慢Run跟踪的速度; ? 在跟踪(更确切的说,是添加到Run跟踪的缓冲去里面的指令)的指令达到指定的指令数量的时候暂停。注意计数器不能自动重启。也就是说,如果您设置指令数目为10,跟踪10条指令被执行直到暂停,并不是每10条指令暂停一次。 ? 当下一条指令符合指定的样式的时候暂停。你可以使用不精确的指令和操作数并符合32位寄存器RA和RB。如R32,它们代替任何通用32位寄存器,但是在命令中有相同的值。在这种情况下,RA和RB是不同的。例如,在含有XOR EAX,EAX;XOR ESI,EDX指令的程序中,样式XOR R32,R32都符合这两条指令;XOR RA,RA只符合第一个,而样式XOR RA,RB只符合XOR ESI,EDX。 毫无疑问,Run跟踪需要足够的内存,根据模式每个指令平均占16到35字节。在500-MHZ处理器,WindowsNT环境下,它每秒能跟踪5000条指令。Windows95慢一些:仅仅每秒钟2200条指令。但是在许多情况下,例如当一个程序跳转到不存在的地址的时候,这是寻找原因的唯一的方法。您可以从Run跟踪中排除准――线性序列的指令(在序列的最后用单纯的exit)。当OllyDbg遇到这些排除的序列是,它在这个命令中设置一个临时断点并立即到达排除的块,并立即运行它。当然了,任何返回或者跳转到外面将会使正确跟踪成为可能,所以OllyDbg检查您想排除的代码块,并强烈的询问您是否确认。 在大多数情况下,您对跟踪系统API代码不感兴趣。跟踪选项"总是跟过系统DLL"允许你在跟踪/动画模式下跟过API函数。如果它在系统目录下,OllyDbg就假设那个模块是系统的。从模块窗口您可以标志任何DLL为系统的或者非系统的。 为了使执行更快速,您可以提高设置Run跟踪断点并运行程序来限制Run跟踪到选定的指令或者到代码块。我把这个称作“强迫Run跟踪”。基本上Run跟踪断点是非可移hit跟踪断点。如果您退出了hit跟踪,您也同时退出了Run跟踪。 在这个话题的开始提到的跟踪命令自动打开跟踪缓冲区。您可以在选项中指定它的大小(最高64MB)。这个缓冲区是循环使用的,当满了的时候,会丢弃老的记录。 您可以通过从OllyDbg主菜单中选择'调试|打开或者清除Run跟踪',来明确的打开或者清除Run跟踪缓冲区。在Run跟踪缓冲区打开后,OllyDbg记录在执行过程中的所有暂停,甚至那些不是由Run跟踪引起的暂停。例如,你可以通过按F7或者F8单步运行程序然后通过使用+键和-键来往回跟踪程序的执行。注意这些键在Run跟踪缓冲区已经关闭的时候查看历史记录。如果你单步通过的Run跟踪,寄存器和信息窗会变黑来强调它们所显示的寄存器并不是实际的寄存器。跟踪缓冲区并不保存栈顶或由寄存器所指向的内存的内容。寄存器,信息,和栈在Run跟踪的时候使用实际的内存状态来解释寄存器的变化。 #OllyDbg能够记下每个指令在Run跟踪缓冲区里面出现的次数。在反汇编窗口中,选择'查看|镜像数据'。这个命令用镜像取代了注释栏。或者,如果光条显示,单击它几次直到它显示镜像信息。注意显示出来的数字是动态的,而且不对已经从跟踪缓冲区中丢弃的指令镜像。您还可以查看对整个模块的镜像数据,按触发次数排序的,在一个独立的镜像窗口中。 特定的反汇编命令'Run 跟踪|添加所以函数的入口点'能够检查每个认出的函数被调用的次数。另外一个命令''Run 跟踪|在函数中添加分支'强迫跟踪所有认出的在函数中的跳转目标。在这种情况下,镜像允许寻找最频繁执行的分支并在速度上作优化。 在弹出菜单反汇编中的'查找|跟踪过程中的最新记录'选项查找给定的命令是否可执行和何时执行的。 Run跟踪窗口显示跟踪缓冲区的内容。对每个指令来说有被指令改变的整数寄存器的内容(更精确的说是给定的记录变成下一个)。如果您双击某些指令,窗口选择所有在跟踪缓冲区里的所有指令,而且您可以通过按+和-键来快速地浏览。如果选项'跟踪|同步CPU和Run跟踪'被设置了,反汇编器将跟随Run跟踪窗口。 注意当您退出hit跟踪时,您同时也强行退出了Run跟踪。 参考:反汇编菜单,Hit跟踪,跟踪选项。 (译文完) |
|
test
也测试一下。:) |
|
|
|
|
|
TT小组简介
不知俺可不可以加入?曾经翻译过两篇病毒教程,在本论坛贴过http://bbs.pediy.com/showthread.php?s=&threadid=1389 ,还需要发申请信吗?:) -------------------------------------------- onlyu[iPB] |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值