当前位置:文档之家› 小甲鱼OD知识

小甲鱼OD知识




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 ,这样它就找不到老豆,就不会被显示出 来。 名词注释:
关于cmp指令

cmp指令格式:cmp dest, src cmp 指令比较dest和src 两个操作数,并通过比较结果设置 C/​ O/Z 标志 位。 cmp指令大概有以下几种格式:
cmp eax, ebx ;如果相等,Z标志位置1,否则0. cmp eax, [404000] ;将eax和404000地址处的dword型数据相比较并同上置位。 cmp [404000], eax ;同上。
400085h 404000h
400080h
关于mov指令

mov指令格式:mov dest, src 这是一个很容易理解的指令,mov指令将src的内容拷 贝到dest,mov指令总共有以下几种扩展:
movs/movsb​ /movsw/movsd edi,esi:这些变体按串/字节/字/双字为单位将esi寄存器 指向的数据复制到edi寄存器指向的空间。 movsx符号位扩展,byte->word,word->dword (扩展后高位全用符号位填充),然后 实现mov。 movzx零扩展,byte->word,word->dword(扩展后高位全用0填充),然后实现mov。
EAX:扩展累加寄存器
EBX:扩展基址寄存器
ECX:扩展计数寄存器 EDX:扩展数据寄存器 ESI:扩展来源寄存器 EDI:扩展目标寄存器
关于CALL指令

很多朋友都问过如何“找CALL”,但很遗憾,从没有朋友问过为什么 要“找CALL”。 call XXX; 等于 push eip; 然后 jmp XXX; call有以下几种方式:
加载目标文件调试

设置OllyDbg中断在程序的入口点。 名词注释
System breakpoint: 系 统 断 点 , OllyDbg 用 CreateProcessA 加 载

DEBUG_ONLY_THIS_PROCESS参数执行,程序运行之后会触发一个INT13,在
系统空间里。 Entry point of main module:主模块的入口点,即文件的入口点。
OD基本快捷键及功能
F2 F3 F4 F5 F7 下断点,也就是指定断点的地址 加载一个可执行程序,进行调试分析 程序执行到光标处 缩小、还原当前窗口 单步步入
F8
F9 Ctrl+F2 Ctrl+F9 Alt+F9 Ctrl+G
单步步过
直接运行程序,遇到断点处,程序暂停 重新运行程序到起始处,一般用于重新调试程序 执行到函数返回处,用于跳出函数实现 执行到用户代码处,用于快速跳出系统函数 输入十六进制地址,快速定位到该地址处

(HINSTTSTR DLGPROC IPDialogFunc,
HWND CreateDialogParam IpTemplateName, HWND LPARAM dwlniParam);
(HINSTANCE hWndParent,
hlnstancem, LPCTSTR DLGPROCIpDialogFunc,
VA(VirtualAddress,虚拟地址) RVA(RelativeVirtualAddress,相对虚拟地址) EP(EntryPoint,程序入口点)


关于SEH

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


关于SEH

我们同样可以把异常也当作是一种消息,应用程序发生异常时就触发 了该消息并告知系统。系统接收后同样会找它的“回调函数”,也就 是我们的异常处理例程。

当然,如果我们在程序中没有做异常处理的话,系统也不会置之不理, 它将弹出我们常见的应用程序错误框,然后结束该程序。所以,当我 们改变思维方式,以CALLBACK 的思想来看待 SEH,SEH 将不再神秘。
OD使用教程18

创建模态对话框是由调用 DialogBoxParam 函数实现的,而创建非模 态对话框是调用CreateDialogParam函数实现。 它们的原型分别是: HWND DialogBoxParam IpTemplateName, HWND LPARAM dwlnitParam);
call 404000h ;直接跳到函数或过程的地址 call eax ;函数或过程地址存放在eax call dword ptr [eax]


eax 400080h
400080h 404000h
关于CALL
call dword ptr [eax+5]
eax
call dword ptr [<&API>] ;执行一个系统API



关于条件跳转指令

条件跳转指令,就是根据各种不同标志位的条件判断是否成立,条件 成立则跳转。

No picture you say a j8„
patch

patch也就是我们平时所说的补丁。 所谓给程序打补丁就是我们对程序破解所进行的修改,就是说像我们 衣服破了,如果没有打补丁,就会走光的意思。 OllyDBG的“/”可以查看所有打过的补丁。


GetWindowTextA(GetWindowTextW)
调试技巧总结

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


调试技巧总结

4.所谓领空,实际上就是指在某一时刻,CPU执行的指令所在的某段 代码的所有者。 5.如004013F7这类地址一般是可执行文件领空,7C8114AB这类大地址 一般是系统DLL所在的地址空间。 6.程序通常读取文本框内容的字符串用的是以下两个函数:
GetDlgItemTextA(GetDlgItemTextW)


标志位

在逆向中,你真正需要关心的标志位只有三个,也就是cmp指令能修 改的那三个:Z/O/C。
Z标志位(0标志),这个标志位是最常用的,运算结果为0时候,Z标志位置1,否则置 0。 O标志位(溢出标志),在运行过程中,如操作数超出了机器能表示的范围则称为溢出, 此时OF位置1,否则置0。 C标志位(进位标志),记录运算时从最高有效位产生的进位值。例如执行加法指令时, 最高有效位有进位时置1,否则置0。
逻辑运算
关于test指令

test指令格式:test dest, src 这个指令和 and指令一样,对两个操作数进行按位的‘与’运算,唯 一不同之处是不将‘与’的结果保存到dest。 即本指令对两个操作数的内容均不进行修改,仅是在逻辑与操作后, 对标志位重新置位。 小甲鱼很负责任地告诉大家该指令的实战形态百分之九十九是酱紫: test eax, eax(如果eax的值为0,则Z标志位置1)


关于寄存器

寄存器就好比是CPU身上的口袋,方便CPU随时从里边拿出需要的东西 来使用。今天的程序中我们涉及到九个寄存器:
EAX:扩展累加寄存器
EBX:扩展基址寄存器
ECX:扩展计数寄存器 EDX:扩展数据寄存器 ESI:扩展来源寄存器 EDI:扩展目标寄存器
关于寄存器

寄存器就好比是CPU身上的口袋,方便CPU随时从里边拿出需要的东西 来使用。今天的程序中我们涉及到九个寄存器:
WinMain:程序的WinMain()函数入口点。
加载目标文件调试

1. 虚拟地址 : 一般情况下,同一程序的同一条指令在 不同系统环境下此值相同。


2.机器码:这就是CPU执行的机器代码。
3.汇编指令:和机器码对应的程序代码。
调试技巧总结

1.F2 下断点,Alt+b 打开断点编辑器,可编辑所有下过的断点,空格 键可快速切换断点状态。 2.当位于某个CALL中,这时想返回到调用这个CALL的地方时,可以按 “Ctrl+F9”快捷键执行返回功能。这样OD就会停在遇到的第一个返 回命令(如RET、RETF或IRET)。 3.如果跟进系统DLL提供的API函数中,此时想返回到应用程序领空里, 可以按快捷键“Alt+F9”执行返回到用户代码命令。
VB破解的关键

针对变量:
• 针对字符串:
__vbaStrCmp __vbaStrComp __vbaStrCompVar __vbaStrLike __vbaStrTextComp __vbaStrTextLike
相关主题