OD的常用命令及汇编知识

合集下载

OD使用须知常识CPU寄存器和汇编指令

OD使用须知常识CPU寄存器和汇编指令

OD使用须知常识CPU寄存器和汇编指令OD(Operator's Manual)是运营手册的缩写,指的是一份文件或手册,用于指导用户正确操作和使用一些产品或系统。

对于OD使用者来说,掌握一些基本常识是非常重要的。

在学习OD使用须知之前,我们先来了解一下CPU寄存器和汇编指令。

一、CPU寄存器CPU(Central Processing Unit,中央处理器)寄存器是CPU内部的一组高速存储器,用于临时存放指令、数据和地址等信息。

CPU寄存器可以分为通用寄存器和特殊寄存器两种。

通用寄存器:这些寄存器的尺寸通常与CPU的数据总线宽度相同,用于存放临时数据,例如计算结果、函数参数等。

常见的通用寄存器有AX、BX、CX、DX等。

不同的CPU有着不同的寄存器数量和命名方式。

特殊寄存器:这些寄存器具有特殊的功能,例如指令指针寄存器(Instruction Pointer,IP)用于存放下一条要执行的指令的地址;程序状态寄存器(Program Status Register,PSR)用于存放程序的状态信息,例如标志位(比如进位标志、溢出标志等)。

寄存器在计算机中起到了至关重要的作用,它们可以提供高速的数据存储和交换,加快了计算机的运行速度。

在汇编语言中,寄存器常用来存放计算过程中的中间结果。

二、汇编指令汇编指令(Assembly Instruction)是一种低级的机器指令,用来直接控制CPU的运行。

与高级语言相比,汇编指令更加底层,更接近机器语言。

它通过助记符(Mnemonic)来表示具体的操作,例如加载数据到寄存器、进行算术运算等。

汇编指令通常包括两部分:操作码和操作数。

操作码指示了具体的操作,例如MOV表示数据传送操作;操作数则指定了操作所需的参数,例如MOVAX,BX表示将BX寄存器的值传送给AX寄存器。

由于汇编语言直接操作CPU,因此具有很高的灵活性和效率,但也非常依赖于硬件平台和CPU架构。

OD基础知识介绍

OD基础知识介绍

OD基础知识介绍一、概论壳出于程序作者想对程序资源压缩、注册保护的目的,把壳分为压缩壳和加密壳两种顾名思义,压缩壳只是为了减小程序体积对资源进行压缩,加密壳是程序输入表等等进行加密保护。

当然加密壳的保护能力要强得多!二、常见脱壳方法预备知识1.PUSHAD (压栈)代表程序的入口点,2.POPAD (出栈)代表程序的出口点,与PUSHAD想对应,一般找到这个OEP就在附近3.OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP/FOEP),只要我们找到程序真正的OEP,就可以立刻脱壳。

方法一:单步跟踪法1.用OD载入,点“不分析代码!”2.单步向下跟踪F8,实现向下的跳。

也就是说向上的跳不让其实现!(通过F4)3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——>运行到所选)4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现!5.如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,不然程序很容易跑飞,这样很快就能到程序的OEP6.在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入7.一般有很大的跳转(大跨段),比如jmp XXXXXX 或者JE XXXXXX 或者有RETN的一般很快就会到程序的OEP。

Btw:在有些壳无法向下跟踪的时候,我们可以在附近找到没有实现的大跳转,右键-->“跟随”,然后F2下断,Shift+F9运行停在“跟随”的位置,再取消断点,继续F8单步跟踪。

一般情况下可以轻松到达OEP!方法二:ESP定律法ESP定理脱壳(ESP在OD的寄存器中,我们只要在命令行下ESP的硬件访问断点,就会一下来到程序的OEP了!)1.开始就点F8,注意观察OD右上角的寄存器中ESP有没突现(变成红色)。

(这只是一般情况下,更确切的说我们选择的ESP值是关键句之后的第一个ESP值)2.在命令行下:dd XXXXXXXX(指在当前代码中的ESP地址,或者是hr XXXXXXXX),按回车!3.选中下断的地址,断点--->硬件访--->WORD断点。

OD之常用命令

OD之常用命令

OD之常⽤命令⼀:od断点注释保存的问题,由于od只有在正常退出的情况下才会保存分析代码时留下的注释,⽽很多时候为了在退出od时不让⽬标程序退出使⽤了剥离进程,这样就会导致这次操作所有的注释都没有保存,第⼆次重新载⼊时候⼜的重新分析注释下断点,所以需要⾃⼰下载⼀个插件 Myinfo.dll,这个插件可以⼿动保存注释和断点,插件⾥⾯的导出操作是把注释导出到⼀个⽂件中,导⼊操作是把注释导⼊到od代码分析界⾯来,注意,每次导出操作都会删掉⽂件中的内容,保留本次导出内容⼆: 插件安装,od插件只需把插件的dll粘贴到od安装⽂件夹的plugin⽂件夹中即可三: 定位代码时有时使⽤⼀些花指令代码⽐如_asm{ mov eax,eax mov eax,eax} 这样的代码⽆实际作⽤,但是有助于定位程序代码段,可是查找命令序列时有时找不出来,这就需要点查看可执⾏模块,找出⽬标模块,双击,⼀般需要重复两次操作,这样才能找到该命令序列,以为开始中断并不处于主模块内,需要进⼊主模块段才可以查找注释和指令四:od⼀些常⽤命令dd 以四字节⽅式转储,也就是以四字节的⽅式查看地址内存的值,⽐如⼀个数组 array[20] 它的⾸地址是405118 那么 dd 405118 就可以看到array[0]的值了,dd i*0x4+405118 就可以看到数组array[i]的值,游戏分析时分析对象数组,dd [eax*4+03f82520] ⾸先取出数组03f82520[eax]⾥⾯保存的地址,然后查看该地址的值,很多怪物对象的⾸地址都是放在对象数组⾥⾯,找到该地址,就可以分析出该怪物的相应信息如 dd [eax*4+03f82520] +0xc 这个可能就是怪物⽣命等等dc 是以ascill码显⽰该地址,这个⼀般是查看⽂本信息hw硬件中断在写⼊时db 以⽐特格式⼗六进制转储当然有⼀些快捷键命令暂时不表五: 备份,修改数据之前,难免要备份,这就要⽤到备份功能,这样就可以很容易恢复到修改之前六: 跟踪调试,这个功能相当不错,可以记录所有寄存器的值,这样便于观察分析七: 直接更改程序汇编代码,然后保存到⽂件,这样就相当于更改了部分程序代码,很⽅便⼋:下API断点等熟悉了再补充。

od命令的使用

od命令的使用
除了选项c以外的其他选项后面都可以跟一个十进制数n,指定每个显示值所包含的字节数。
说明:od命令系统默认的显示方式是八进制,这也是该命令的名称由来(Octal Dump)。但这不是最有用的显示方式,用ASCII码和十六进制组合的方式能提供更有价值的信息输出。
od -h 文件名
odoctaldump和xdhexdump命令可以以十进制八进制十六进制和ascii码来显示文件或者流它们对于访问或可视地检查文件中不能直接显示在终端上的字符很有用
od命令的使用
od命令的使用
od (octal dump)和 xd(hexdump)命令可以以十进制、八进制、十六进制和ASCII码来显示文件或者流,它们对于访问或可视地检查文件中不能直接显示在终端上的字符很有用。
语法:od [选项] 文件…
命令中各ห้องสมุดไป่ตู้项的含义:
- A 指定地址基数,包括:
d 十进制
o 八进制(系统默认值)
x 十六进制
n 不打印位移值
- t 指定数据的显示格式,主要的参数有:
c ASCII字符或反斜杠序列
d 有符号十进制数
f 浮点数
o 八进制(系统默认值为02)
u 无符号十进制数
x 十六进制数

OD命令大全

OD命令大全

适用于OllyDbg 的快捷命令栏插件(显示于程序的状态栏上方)CALC判断表达式WATCH添加监视表达式AT / FOLLOWDisassemble at address在地址进行反汇编ORIGDisassemble at EIP反汇编于EIPDUMPDump at address在地址转存DADump as disassembly转存为反汇编代码DBDump in hex byte format转存在十六进制字节格式DCDump in ASCII format转存在ASCII 格式DDDump in stack format转存在堆栈格式DUDump in UNICODE format转存在UNICODE 格式DWDump in hex word format 转存在十六进制字词格式STKGo to address in stack前往堆栈中的地址AS + 地址+ 字符串Assemble at address在地址进行汇编L + 地址+ 字符串Label at address在地址进行标号C + 地址+ 字符串Comment at address在地址进行注释BPBreak with condition使用条件中断BPXBreak on all calls中断在全部调用BPDDelete break on all calls 清除位于全部调用的断点BCDelete breakpoint清除断点MRMemory breakpt on access 内存断点于访问时MWMemory breakpt on write内存断点于写入时MDRemove memory breakpoint 清除内存断点HRHW break on access硬件中断在访问HWHW break on write硬件中断在写入HEHW break on execution硬件中断在执行HDRemove HW breakpoint清除硬件断点STOP停止运行程序调试PAUSE暂停程序调试RUNRun program运行程序进行调试Run till address运行到地址GERun and pass exception 运行和通过例外SIStep into步入SOStep over步过TITrace in till address跟踪进入直到地址TOTrace over till address 跟踪步过直到地址TCTrace in till condition跟踪进入直到条件TOCTrace over till condition 跟踪步过直到条件TRTill return直到返回TUTill user code直到用户代码LOGView Log window查看记录窗口MODView Modules window查看模块窗口MEMView Memory window查看内存窗口CPUView CPU window查看CPU 窗口CSView Call Stack查看Call 堆栈BRKView Breakpoints window 查看断点窗口OPTOpen Options打开选项EXIT / QUITQuit OllyDbg退出OllyDbgOPENOpen executable file打开可执行文件CLOSEClose executable关闭程序RSTRestart current program恢复当前程序HELPHelp on API functionAPI 函数的帮助DASMDisassemble immediate opcode反汇编直接的机器码FRFind reference to selected command/address 查找参考到选定的命令/地址ACAnalyse code分析代码SNSearch for Name(label) in current module在当前模块中搜索名称(标号)SOBScan object files扫描项目文件OllyDbg 常用快捷热键打开一个新的可执行程序(F3)重新运行当前调试的程序(Ctrl+F2)当前调试的程序(Alt+F2)运行选定的程序进行调试(F9)暂时停止被调试程序的执行(F12)单步进入被调试程序的Call 中(F7)步过被调试程序的Call (F8)跟入被调试程序的Call 中(Ctrl+F11)跟踪时跳过被调试程序的Call (Ctrl+F12) 执行直到返回(Ctrl+F9)显示记录窗口(Alt+L)显示模块窗口(Alt+E)显示内存窗口(Alt+M)显示CPU 窗口(Alt+C)显示补丁窗口(Ctrl+P)显示呼叫堆栈(Alt+K)显示断点窗口(Alt+B)打开调试选项窗口(Alt+O)。

OD使用须知常识,CPU寄存器和汇编指令

OD使用须知常识,CPU寄存器和汇编指令

OD使用须知常识,CPU寄存器和汇编指令用OD和CE,不断找汇编资料,解读指令,实在是累。

总算找到篇比较完整的资料与大家分享。

32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。

32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。

对低16位数据的存取,不会影响高16位的数据。

这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。

4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。

程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。

寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。

可用于乘、除、输入/输出等操作,使用频率很高;寄存器EBX称为基地址寄存器(Base Register)。

它可作为存储器指针来使用;寄存器ECX称为计数寄存器(Count Register)。

在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;寄存器EDX称为数据寄存器(Data Register)。

在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。

在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。

OD基本汇编指令

OD基本汇编指令

OD基本汇编指令jmp ;⽆条件跳转指哪飞哪⼀些杂志中说的直飞光明顶,指的就是它了~ 光明顶⼀般指爆破地址根据条件跳转的指令:JE ;等于则跳转 JNE ;不等于则跳转 JZ ;为 0 则跳转 JNZ ;不为 0 则跳转 JS ;为负则跳转 JNS ;不为负则跳转 JC ;进位则跳转 JNC ;不进位则跳转 JO ;溢出则跳转 JNO ;不溢出则跳转 JA ;⽆符号⼤于则跳转 JNA ;⽆符号不⼤于则跳转 JAE ;⽆符号⼤于等于则跳转 JNAE ;⽆符号不⼤于等于则跳转 JG ;有符号⼤于则跳转 JNG ;有符号不⼤于则跳转 JGE ;有符号⼤于等于则跳转 JNGE ;有符号不⼤于等于则跳转 JB ;⽆符号⼩于则跳转 JNB ;⽆符号不⼩于则跳转 JBE ;⽆符号⼩于等于则跳转 JNBE ;⽆符号不⼩于等于则跳转 JL ;有符号⼩于则跳转 JNL ;有符号不⼩于则跳转 JLE ;有符号⼩于等于则跳转 JNLE ;有符号不⼩于等于则跳转 JP ;奇偶位置位则跳转 JNP ;奇偶位清除则跳转 JPE ;奇偶位相等则跳转 JPO ;奇偶位不等则跳转------------说了以上那么多也许⼤家会觉得晕但我们实际⽤到的⼀般只有 jmp je jne jz jnz⽽已所以⼤家只要清楚这5个跳转的条件即可,别的那些了解下就好了----------下⾯开始说传递跟⽐较指令传递指令:mov⽐较指令:cmp-----------mov是从右边向左边传递⽐如说:mov eax,1 ‘为eax赋值为1mov ecx,eax ’这样ecx也就是1了我们可以现学现⽤我们上⾯讲了跳转⼤家可以注意⼀下,我开头有说是标志位跳转那么什么是标志位呢就像mov eax,1mov ecx,eaxcmp ecx,eax 这个就是标志位我们已知eax跟ecx都是1那就符合je的跳转条件je是等于跳转。

OD反汇编语言解释

OD反汇编语言解释
OD反汇编语言解释
本文由雷岙禹贡献
刚刚找老资料,翻出点好东西 反汇编语言解释,新人来看吧 刚刚找老资料 翻出点好东西,OD 反汇编语言解释 新人来看吧 翻出点好东西
32 位 CPU 所含有的寄存器有: 4 个数据寄存器(EAX、EBX、ECX 和 EDX) 2 个变址和指针寄存器(ESI 和 EDI) 2 个指针寄存器(ESP 和 EBP) 6 个段寄存器(ES、CS、SS、DS、FS 和 GS) 1 个指令指针寄存器(EIP) 1 个标志寄存器(EFlags) 1、数据寄存器 数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时 间。 32 位 CPU 有 4 个 32 位的通用寄存器 EAX、EBX、ECX 和 EDX。 对低 16 位数据的存取,不会影响高 16 位的数据。 这些低 16 位寄存器分别命名为:AX、BX、CX 和 DX,它和先前的 CPU 中的寄存器相一致。 4 个 16 位寄存器又可分割成 8 个独立的 8 位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX: DH-DL),每个寄存器都有自己的名称,可独立存取。 程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。 寄存器 EAX 通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。可用于乘、 除、 输入/输出等操作,使用频率很高; 寄存器 EBX 称为基地址寄存器(Base Register)。它可作为存储器指针来使用; 寄存器 ECX 称为计数寄存器(Count Register)。 在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用 CL 来指明移位的位数; 寄存器 EDX 称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算, 也可用于存放 I/O 的端口地址。 在 16 位 CPU 中,AX、BX、CX 和 DX 不能作为基址和变址寄存器来存放存储单元的地址, 在 32 位 CPU 中,其 32 位寄存器 EAX、EBX、ECX 和 EDX 不仅可传送数据、暂存数据保存算术逻辑运 算结果, 而且也可作为指针寄存器,所以,这些 32 位寄存器更具有通用性。 2、变址寄存器 32 位 CPU 有 2 个 32 位通用寄存器 ESI 和 EDI。 其低 16 位对应先前 CPU 中的 SI 和 DI,对低 16 位数据的存取,不影响高 16 位的数据。 寄存器 ESI、EDI、SI 和 DI 称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏 移量, 用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。 变址寄存器不可分割成 8 位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。 它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特 殊的功能。 3、指针寄存器 其低 16 位对应先前 CPU 中的 BP 和 SP,对低 16 位数据的存取,不影响高 16 位的数据。 32 位 CP

od使用教程

od使用教程

od使用教程
使用开发者工具(OD)可以帮助开发人员调试和测试应用程序。

下面是一些OD的常用功能和使用方法的教程:
1. 查看控制台输出信息:在OD中打开开发者工具控制台,可以查看应用程序输出的日志、错误和警告信息。

2. 调试JavaScript代码:在OD的“Sources”选项卡中,可以查看和编辑应用程序的JavaScript代码。

可以通过在代码中设置断点,并使用“Step Over”、“Step Into”和“Step Out”等按钮来逐行执行代码。

3. 检查和修改样式:在OD的“Elements”选项卡中,可以查看和修改应用程序的HTML和CSS样式。

可以在“Elements”面板中选择元素,并在“Styles”面板中编辑其样式。

4. 模拟设备和网络:在OD的“Device Mode”选项卡中,可以模拟不同的设备类型和网络条件,以确保应用程序在不同环境下的表现。

5. 监测网络请求:在OD的“Network”选项卡中,可以查看应用程序发送和接收的网络请求。

可以查看请求的详细信息,如请求头、请求参数和响应状态。

6. 性能分析:在OD的“Performance”选项卡中,可以进行应用程序的性能分析。

可以查看页面加载时间、资源占用和函数执行时间等。

这些是OD的一些常用功能和使用方法的简要介绍。

希望对你有帮助!。

od反编译工具用法

od反编译工具用法

od反编译工具用法OD是一款常用的反编译工具,适用于Windows、Linux等操作系统。

它可以帮助研究人员、黑客等对二进制文件进行反汇编、调试、修改等操作。

使用OD反编译工具需要掌握一些基本的命令和用法。

1. 安装OD工具OD工具可在官网下载,也可使用Linux系统自带的软件包管理器进行安装。

Windows用户可在GitHub上下载。

2. 使用OD工具在Linux终端中输入od命令即可进入OD工具。

使用OD工具可以对可执行文件、共享库、内核模块等进行反汇编、调试、修改等操作。

3. 常用命令(1) od -t <type> <file>:以指定格式输出文件内容。

(2) od -N <bytes> <file>:输出指定字节数的文件内容。

(3) od -A <address> <file>:从指定地址开始输出文件内容。

(4) od -j <offset> <file>:从指定偏移量开始输出文件内容。

(5) od -x <file>:以十六进制格式输出文件内容。

(6) od -c <file>:以字符格式输出文件内容。

(7) od -t x1 <file>:以字节为单位输出文件内容。

(8) od -t d1 <file>:以十进制格式输出文件内容。

4. 反编译使用OD工具可以对二进制文件进行反编译。

在OD工具中输入'u main'命令即可反编译文件中的main函数。

反编译后可查看函数中的汇编代码和注释,便于对代码进行分析和修改。

总之,OD反编译工具是一款非常有用的工具,掌握其基本命令和用法可帮助研究人员、黑客等更好地对二进制文件进行反汇编、调试、修改等操作。

OD常用命令

OD常用命令

OD常⽤命令以下命令使⽤于 OllyDbg 的快捷命令栏(显⽰于程序的状态栏上⽅)=============================================================== CALC判断表达式WATCH添加监视表达式AT / FOLLOWDisassemble at address在地址进⾏反汇编ORIGDisassemble at EIP反汇编于 EIPDUMPDump at address在地址转存DADump as disassembly转存为反汇编代码DBDump in hex byte format转存在⼗六进制字节格式DCDump in ASCII format转存在 ASCII 格式DDDump in stack format转存在堆栈格式DUDump in UNICODE format转存在 UNICODE 格式DWDump in hex word format转存在⼗六进制字词格式STKGo to address in stack前往堆栈中的地址AS + 地址 + 字符串Assemble at address在地址进⾏汇编L + 地址 + 字符串Label at address在地址进⾏标号C + 地址 + 字符串Comment at address在地址进⾏注释BPBreak with condition使⽤条件中断BPXBreak on all calls中断在全部调⽤BPDDelete break on all calls清除位于全部调⽤的断点BCDelete breakpoint清除断点MRMemory breakpt on access 内存断点于访问时MWMemory breakpt on write内存断点于写⼊时MDRemove memory breakpoint 清除内存断点HRHW break on access硬件中断在访问HWHW break on write硬件中断在写⼊HEHW break on execution硬件中断在执⾏HDRemove HW breakpoint清除硬件断点STOPPause execution暂停执⾏PAUSEPAUSERUNRun program运⾏程序Run till address运⾏到地址GERun and pas* **ception运⾏和通过例外SIStep into步⼊SOStep over步过TITrace in till address跟踪进⼊直到地址TOTrace over till address跟踪步过直到地址TCTrace in till condition跟踪进⼊直到条件TOCTrace over till condition 跟踪步过直到条件TRTill return直到返回TUTill user code直到⽤户代码LOGView Log window查看记录窗⼝MODView Modules window查看模块窗⼝MEMView Memory window查看内存窗⼝CPUView CPU window查看 CPU 窗⼝CSView Call Stack查看 Call 堆栈BRKView Breakpoints window 查看断点窗⼝OPTOpen Option*打开选项**IT / QUITQuit OllyDbg退出 OllyDbgOPENOpen executable file打开可执⾏⽂件CLOSEClose executable关闭程序RSTRestart current program恢复当前程序HELPHelp on API functionAPI 函数的帮助ASMAssemble (if command needs it's own addres, \"ASM COMMAND;ADDRESS\")汇编 (如果命令需要⾃⾝的地址 \"ASM COMMAND;ADDRESS\")DASMDisassemble immediate opcode反汇编直接的机器码FRFind reference to selected command/address查找参考到选定的命令/地址ACAnalyse code分析代码SNSearch for Name(label) in current module在当前模块中搜索名称(标号)SOBScan object files扫描项⽬⽂件。

od 堆栈操作指令

od 堆栈操作指令

od 堆栈操作指令
OD (OllyDbg) 是一款流行的Windows 平台上的反汇编和调试工具。

在OD 中,你可以使用堆栈操作指令来查看和操作堆栈上的数据。

以下是一些常见的堆栈操作指令:
1. `push`:将一个值压入堆栈。

2. `pop`:从堆栈中弹出并返回一个值。

3. `pushad`:将所有寄存器的内容压入堆栈。

4. `popad`:从堆栈中弹出所有寄存器的值并恢复它们。

5. `pushfd`:将标志寄存器的值压入堆栈。

6. `popfd`:从堆栈中弹出标志寄存器的值并恢复它。

7. `xchg`:交换寄存器和堆栈顶部的值。

8. `mov`:将一个值移动到另一个位置,可以是寄存器、内存或堆栈。

9. `call`:调用一个函数或子例程,并将返回地址压入堆栈。

10. `ret`:从当前函数或子例程返回,并从堆栈中弹出返回地址。

这些指令可以帮助你在OD 中查看和修改堆栈上的数据,从而更好地理解程序的执行流程和行为。

OD基础知识介绍

OD基础知识介绍

OD基础知识介绍一、概论壳出于程序作者想对程序资源压缩、注册保护的目的,把壳分为压缩壳和加密壳两种顾名思义,压缩壳只是为了减小程序体积对资源进行压缩,加密壳是程序输入表等等进行加密保护。

当然加密壳的保护能力要强得多!二、常见脱壳方法预备知识1.PUSHAD (压栈)代表程序的入口点,2.POPAD (出栈)代表程序的出口点,与PUSHAD想对应,一般找到这个OEP就在附近3.OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP/FOEP),只要我们找到程序真正的OEP,就可以立刻脱壳。

方法一:单步跟踪法1.用OD载入,点“不分析代码!”2.单步向下跟踪F8,实现向下的跳。

也就是说向上的跳不让其实现!(通过F4)3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——>运行到所选)4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现!5.如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,不然程序很容易跑飞,这样很快就能到程序的OEP6.在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入7.一般有很大的跳转(大跨段),比如jmp XXXXXX 或者JE XXXXXX 或者有RETN的一般很快就会到程序的OEP。

Btw:在有些壳无法向下跟踪的时候,我们可以在附近找到没有实现的大跳转,右键-->“跟随”,然后F2下断,Shift+F9运行停在“跟随”的位置,再取消断点,继续F8单步跟踪。

一般情况下可以轻松到达OEP!方法二:ESP定律法ESP定理脱壳(ESP在OD的寄存器中,我们只要在命令行下ESP的硬件访问断点,就会一下来到程序的OEP了!)1.开始就点F8,注意观察OD右上角的寄存器中ESP有没突现(变成红色)。

(这只是一般情况下,更确切的说我们选择的ESP值是关键句之后的第一个ESP值)2.在命令行下:dd XXXXXXXX(指在当前代码中的ESP地址,或者是hr XXXXXXXX),按回车!3.选中下断的地址,断点--->硬件访--->WORD断点。

小甲鱼OD知识

小甲鱼OD知识
VA(VirtualAddress,虚拟地址) RVA(RelativeVirtualAddress,相对虚拟地址) EP(EntryPoint,程序入口点)


关于SEH

SEH(Structured Exceptionows操作系统提供的功能,跟开发工具无关。 Windows程序设计中最重要的理念就是消息传递,事件驱动。当GUI应 用程序触发一个消息时,系统将把该消息放入消息队列,然后去查找 并调用窗体的消息处理函数(CALLBACK),传递的参数当然就是这个消 息。


GetWindowTextA(GetWindowTextW)
调试技巧总结

7.一般我们要结合经验通过猜测的方式多尝试几遍设 陷阱,找出相关的函数。 8.按“Ctrl+G”键打开跟随表达式的窗口。 9. 也可以通过“ Ctrl+N ”键打开应用程序的导入表 (输入表),然后查看应用程序总共导入了哪些函数 来以此推断需要在哪里挖坑下陷阱! 10.关于返回值,汇编代码的返回值约定是存放在eax 这个寄存器里边的,如果 32 位的 eax 不够存放返回值, 系统会将返回值放在内存某个位置并把该位置的地址 放在eax返回。


PE文件结构

PE文件结构:
DOS header DOS stub
PE File Header
Image Optional Header Section Table Data Directories Sections

No picture you say a J8„
小结

GetModuleHandleA 这 个 API 函 数 用 于 获 取 程 序 的 ImageBase(基址) 这个程序的 MessageBox 的 OwnerHandle (父窗口句柄) 为 0 ( NULL ),我们可以将这个值改为一个不存在的 值,例如 1 ,这样它就找不到老豆,就不会被显示出 来。 名词注释:

OD学习笔记

OD学习笔记

OD学习笔记OD 第二课1、OD与IDA是两个常用工具。

OD是动态分析,IDA是静态分析。

2、F2下断点,F3加载一个可执行程序。

3、Call *** 按F7可以进入该函数内部,Ctrl + F9运行至ret出,就可以返回程序了。

4、Alt + B打开断点编辑器,用于取消断点,del或者空格取消断点。

5、Ctrl + G可以查找函数名,例如:GetDlgItemTextA 或者GetDlgItemTextW6、单步执行时,注意下面提示,有时候会发现一些用用的信息的。

7、当程序停止下来时,按下Ctrl + G,输入esp + 4C,可以查看地址内容。

8、Call返回值存放在eax中,返回地址时,eax中存放地址。

9、test eax,eax,查看eax是否为0,为0时,Z=1,双击Z,则Z变成0.10、不想让je跳转的两种方法,(1)将Z改成0;(2)将je short 0040122e双击,改成nop填充即可。

11、保存修改:选中修改的文件,右击,复制到可自行文件,选择,备份,保存数据到文件。

如果程序加过壳,则会不可执行。

12、如果跟进到系统dll中,此时想返回到应用程序领空,可以按Alt + F9,返回到用户代码。

13、如004013F7,这类地址一般是可自行文件领空,7C8114AB这类地址一般是系统Dll所在的地址空间。

14、Ctrl + N,可以打开应用程序的导入表OD第三课1、找callcall *** 等于push eip;然后jmp ***call几种方式——call 404000h,直接跳转到函数或者过程的地址。

——call eax,函数或者过程的地址存放在eax中。

——call dword ptr[eax] 例如:eax中存放400080h,而400080h 中存放404000h,所有实际是Call 404000h。

——call dword ptr[<&API>];执行一个系统API。

od 命令参数

od 命令参数

od 命令参数OD命令参数是什么?OD命令是一种十六进制编辑器,它可以用来查看和编辑二进制文件。

在Linux和Unix系统中,OD命令是一个非常有用的工具,可以帮助用户分析和处理二进制数据。

本文将介绍一些常用的OD命令参数及其用法,以帮助读者更好地理解和使用这个强大的工具。

1. -A 参数-A参数用于指定OD命令的地址基数。

默认情况下,OD命令以八进制地址显示数据,但通过使用-A参数,可以改变地址的基数。

例如,使用-Ax参数可以以十六进制地址显示数据。

2. -t 参数-t参数用于指定OD命令的数据类型。

OD命令可以按照不同的数据类型显示数据,如ASCII字符、八进制、十六进制等。

通过使用-t 参数,可以选择所需的数据类型。

例如,使用-tx参数可以以十六进制显示数据。

3. -j 参数-j参数用于指定OD命令开始显示数据的位置。

通过使用-j参数,可以快速定位到所需的数据位置。

例如,使用-j10参数可以从第10个字节开始显示数据。

4. -N 参数-N参数用于指定OD命令显示数据的大小。

通过使用-N参数,可以限制OD命令显示的数据范围。

例如,使用-N20参数可以显示20个字节的数据。

5. -v 参数-v参数用于显示OD命令的版本信息。

通过使用-v参数,可以查看OD命令的版本号和其他信息。

6. -w 参数-w参数用于以可写模式打开文件,并允许用户对文件进行编辑。

通过使用-w参数,可以在OD命令中进行文件的修改操作。

但是需要注意的是,修改文件可能会导致数据损坏或程序错误,因此在使用-w参数时应谨慎操作。

7. -x 参数-x参数用于以十六进制格式显示数据。

通过使用-x参数,可以查看文件的十六进制表示。

例如,使用-x参数可以显示文件的十六进制编码。

8. -y 参数-y参数用于以八进制格式显示数据。

通过使用-y参数,可以查看文件的八进制表示。

例如,使用-y参数可以显示文件的八进制编码。

9. -H 参数-H参数用于显示OD命令的帮助信息。

od基本操作

od基本操作

"od" 是一个在Unix/Linux 操作系统上用于查看文件内容的命令。

它以八进制(Octal)、十进制(Decimal)、十六进制(Hexadecimal)等多种格式显示文件内容。

以下是一些"od" 命令的基本操作:
查看文件内容:
od [选项] 文件名
这将以默认八进制格式显示文件的内容。

选择显示格式:
使用-t 选项可以指定显示格式,如-t x1 表示以十六进制显示一个字节。

od -t x1 文件名
指定显示字节数:
使用-N 选项可以指定要显示的字节数。

od -N 16 文件名
显示字符:
使用-c 选项可以显示ASCII字符。

od -c 文件名
显示整数:
使用-t d2 选项以十进制显示一个两字节整数。

od -t d2 文件名
显示地址偏移:
使用-A 选项可以指定地址偏移量。

od -A x 文件名
显示文件偏移:
使用-j 选项可以指定从文件的哪个位置开始显示。

od -j 8 文件名
以16进制显示所有内容:
od -t x1 -A n 文件名
这将以十六进制显示整个文件内容。

这只是"od" 命令的一些基本用法。

"od" 命令有很多选项,可以根据具体需求进行定制,可以通过man od 命令查看详细的帮助文档。

OD的常用命令

OD的常用命令
四.两种不同情况的不同修改方法
1.修改为jmp
je(jne,jz,jnz) =>jmp相应的机器码EB (出错信息向上找到的第一个跳转)jmp的作用是绝对跳,无条件跳,从而跳过下面的出错信息
xxxxxxxxxxxx 出错信息,例如:注册码不对,sorry,未注册版不能...,"Function Not Avaible in Demo" 或 "Command Not Avaible" 或 "Can't save in Shareware/Demo"等 (我们希望把它跳过,不让它出现)
例: LES DI,string ;把段地址:偏移地址存到ESI.
LFS 传送目标指针,把指针内容装入FS.
例: LFS DI,string ;把段地址:偏移地址存到FSI.
LGS 传送目标指针,把指针内容装入GS.
例: LGS DI,string ;把段地址:偏移地址存到GSI.
0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )
2. 输入输出端口传送指令.
IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )
OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 )
输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时,
。。。
。。。
xxxxxxxxxxxx 出错信息(我们希望不要跳到这里,不让它出现)它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.
1. 通用数据传送指令.
MOV 传送字或字节.
MOVSX 先符号扩展,再传送.

OD使用须知常识CPU寄存器和汇编指令

OD使用须知常识CPU寄存器和汇编指令

OD使用须知常识CPU寄存器和汇编指令
1. 计算机的CPU主要包括一级 cache、二级 cache、控制器、ALU
和寄存器,其中寄存器最重要、最基础,是CPU内部最高效率的部分。

2.寄存器是一种可以快速存储和检索数据,并且具有高度的读取操作
速度的一种电路;它可以将一个或多个数据和信息保存在其中,也可以用
于控制程序的运行,以及执行指令的过程中。

3.寄存器分为几种不同的种类,其中包括存储器寄存器和指令寄存器;其中,存储器寄存器用来存储数据,而指令寄存器用来存储程序指令,并
且可以在CPU中被直接读取执行。

4.对于编程来说,寄存器的使用非常重要,特别是在需要处理大量数
据时;比如,当一个程序时调用一些函数或者进行复杂的算法计算时,在
程序开始和结束时,往往使用特定的寄存器来存储(处理结果的)数据,
使得处理速度更快,更有效。

5.在使用CPU的时候,必须要懂得使用CPU汇编指令;汇编语言是一
种用于控制CPU的机器级语言,通过汇编指令可以非常有效的控制CPU,
增强性能和效率。

6.对于不同的CPU,汇编指令也不相同;比如,x86汇编指令集(8086)是一种最常用的面向x86的指令集,其中包括了对寄存器的操作
指令。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

jb 若小于则跳
jl 若小于则跳
jle 若小于等于则跳
pop 出栈
push 压栈
///////////////////////////
三.常见修改(机器码)
74=>75 74=>90 74=>EB
75=>74 75=>90 75=>EB
///////////////////////////
三、逻辑运算指令
───────────────────────────────────────
AND 与运算.
OR 或运算.
XOR 异或运算.
NOT 取反.
TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).
SHL 逻辑左移.
SAL 算术左移.(=SHL)
ADD 加法.
ADC 带进位加法.
INC 加 1.
AAA 加法的ASCII码调整.
DAA 加法的十进制调整.
SUB 减法.
SBB 带借位减法.
DEC 减 1.
NEC 求反(以 0 减之).
CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).
AAS 减法的ASCII码调整.
2. 输入输出端口传送指令.
IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )
OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 )
输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时,
其范围是 0-65535.
HW
写入时进行硬件中断
HE
执行时进行硬件中断
HD
清除硬件断点
STOP
停止运行程序调试
PAUSE
暂停执行程序调试
RUN
运行程序进行调试
GE
运行和通过例外
SI
单步进入 Call 中
SO
步过 Call
TI
跟踪进入直到地址
TO
跟踪步过直到地址
TC
跟踪进入直到满足条件
TOC
跟踪步过直到满足条件
TR
运行直到返回
TU
运行直到用户代码
LOG
查看记录窗口
MOD
查看模块窗口
MEM
查看内存窗口
CPU
查看 CPU 窗口
CS
查看 Call 堆栈
BRK
查看断点窗口
TC EIP<500000
0071169C E8 2ECEFFFF call videofix.0070E4CF
CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )
XADD 先交换再累加.( 结果在第一个操作数里 )
XLAT 字节查表转换.
── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即
0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )
2.修改为nop
je(jne,jz,jnz) =>nop相应的机器码90 (正确信息向上找到的第一个跳转) nop的作用是抹掉这个跳转,使这个跳转无效,失去作用,从而使程序顺利来到紧跟其后的正确信息处
xxxxxxxxxxxx 正确信息,例如:注册成功,谢谢您的支持等(我们希望它不被跳过,让它出现,程序一定要顺利来到这里)
(解释:ultraedit打开编辑exe文件时你看到90,等同于汇编语句nop)
call 调用子程序
je 或jz 若相等则跳(机器码74 或0F84)
jne或jnz 若不相等则跳(机器码75或0F85)
jmp 无条件跳(机器码EB)
ja 若大于则跳
jg 若大于则跳
jge 若大于等于则跳
0071CAC2 E8 8434FFFF call videofix.0070FF4B
0071CB7A 45 inc ebp
0071CB7A 45 inc ebp
0071E36F E8 9229FFFF call videofix.00710D06
REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.
REPC 当CF=1且CX/ECX<>0时重复.
REPNC 当CF=0且CX/ECX<>0时重复.
五、程序转移指令
───────────────────────────────────────
1>无条件转移指令 (长转移)
LFS 传送目标指针,把指针内容装入FS.
例: LFS DI,string ;把段地址:偏移地址存到FSI.
LGS 传送目标指针,把指针内容装入GS.
例: LGS DI,string ;把段地址:偏移地址存到GSI.
LSS 传送目标指针,把指针内容装入SS.
例: LSS DI,string ;把段地址:偏移地址存到SSI.
或 商回送AX,余数回送DX, (字运算).
AAD 除法的ASCII码调整.
CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)
CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)
CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)
CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)
DAS 减法的十进制调整.
MUL 无符号乘法.
IMUL 整数乘法.
以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),
AAM 乘法的ASCII码调整.
DIV 无符号除法.
IDIV 整数除法.
以上两条,结果回送:
商回送AL,余数回送AH, (字节运算);
JMP 无条件转移指令
CALL 过程调用
RET/RETF过程返回.
2>条件转移指令 (短转移,-128到+127的距离内)
( 当且仅当(SF XOR OF)=1时,OP1<OP2 )
JA/JNBE 不小于或不等于时转移.
JAE/JNB 大于或等于转移.
Z标志 用来控制扫描或比较操作的结束.
MOVS 串传送.
( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )
CMPS 串比较.
( CMPSB 比较字符. CMPSW 比较字. )
SCAS 串扫描.
把AL或AX的内容与目标串作比较,比较结果反映在标志位.
SHR 逻辑右移.
SAR 算术右移.(=SHR)
ROL 循环左移.
ROR 循环右移.
RCL 通过进位的循环左移.
RCR 通过进位的循环右移.
以上八种移位指令,其移位次数可达255次.
移位一次时, 可直接用操作码. 如 SHL AX,1.
移位>1次时, 则由寄存器CL给出移位次数.
///////////////////////////
二.需要熟练掌握的全部汇编知识(只有这么多)
不大容易理解,可先强行背住,混个脸儿熟,以后慢慢的就理解了
cmp a,b 比较a与b
mov a,b 把b的值送给a
ret 返回主程序
nop 无作用,英文“no operation”的简写,意思是“do nothing”(机器码90)***机器码的含义参看上面
LODS 装入串.
把源串中的元素(字或字节)逐一装入AL或AX中.
( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )
STOS 保存串.
是LODS的逆过程.
REP 当CX/ECX<>0时重复.
REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复.
如 MOV CL,04
SHL AX,CL
四、串指令
───────────────────────────────────────
DS:SI 源串段寄存器 :源串变址.
ESI 目标串段寄存器:目标串变址.
CX 重复次数计数器.
AL/AX 扫描值.
D标志 0表示重复操作中SI和DI应自动增量; 1表示应自动减量.
四.两种不同情况的不同修改方法
1.修改为jmp
je(jne,jz,jnz) =>jmp相应的机器码EB (出错信息向上找到的第一个跳转)jmp的作用是绝对跳,无条件跳,从而跳过下面的出错信息
xxxxxxxxxxxx 出错信息,例如:注册码不对,sorry,未注册版不能...,"Function Not Avaible in Demo" 或 "Command Not Avaible" 或 "Can't save in Shareware/Demo"等 (我们希望把它跳过,不让它出现)
00720664 E8 E2F8FEFF call videofix.0070FF4B
OPT
打开选项设置窗口
EXIT
退出 OllyDbg
QUIT
退出 OllyDbg
OPEN
打开一个可执行文件
CLOSE
关闭可执行文件
RST
重新运行当前程序
3. 目的地址传送指令.
LEA 装入有效地址.
例: LEA DX,string ;把偏移地址存到DX.
相关文档
最新文档