zoukankan      html  css  js  c++  java
  • 小甲鱼.md

    OD使用教程

    基本使用

    image-20200917104607921

    Q:

    为什么我在Ollydbg中的第一个起始地址与其他人不同?

    (window7 64bit)

    我的Ollydbg起始地址是777000000,77777777等。我认为这是系统地址。

    A:

    当你将PE加载到ollydbg时,按ALT + F9进入主模块的入口点(返回用户代码)你看到的是ntdll.dll里面的地址,在实际的代码之前您正在检查的样本。这个DLL加载在更高的地址。

    请注意,在ollydbg的窗口标题中,您可以看到当前正在调试的模块。通常(并非总是),您要加载的PE的基地址(在32位PE中)为0x0400000

    调试入口

    • system breakpoint
    • 主模块人口点
    • WinMain

    选项: 选项--调试设置--事件

    易错

    image-20200917132534616

    GetDlgItemTextAGetWindowTextA:获取文本框

    修改保存:选择--右键--复制到可执行文件--选择--保存文件

    导入api帮助:帮助--选择API帮助文档--选择

    简单汇编

    mov

    mov dest, src
    movs movvb movsw movsd edi, esi  将串、字节、字、双字为单位从esi指向位置复制到edi指向位置
    movsx 符号位扩展,byte->word,word->dword (扩展后高位全用符号位填充),然后实现mov。
    movzx 零扩展,byte->word,word->dword(扩展后高位全用0填充),然后实现mov
    

    cmp

    cmp dest, src    比较dest和src两个操作数,并通过比较结果设置C/O/Z标志位。
    如果相等,Z标志位置1,否则0.
    

    标志位

    Z/0/C
    Z标志位(0标志):运算结果为0时候,Z标志位置1,否则置0。
    0标志位(溢出):如操作数超出了机器能表示的范围则称为溢出,此时OF位置1,否则置0。
    C标志(进位标志):记录运算时从最高有效位产生的进位值。例如执行加法指令时,最高有效位有进位时置1,否则置0。
    

    test

    test dest, src
    and指令一样,对两个操作数进行按位的‘与’运算,唯一不同之处是不将‘与’的结果保存到dest。
    
    

    比较

    条件跳转指令总结

    补丁

    查看所有修改 “/”

    NAG窗口

    • jmp 跳过
    • nop 填充
    • push 1 改参数 (实际情况)

    PE结构

    GetMoudleHandleA(): 获取程序ImageBase(基址)

    AddressOfEntryPoint

    • VA (virtual address) 虚拟地址 载入到内存的地址

    • RVA (relative virtual address) 相对虚拟地址 相对于基址的偏移地址(长度)

    • EP (entry point) 程序入口点

    middle

    SHE (Structured Exception Handing)

    结构化异常处理

    Windows程序设计中最重要的理念就是消息传递,事件驱动。当GUI应用程序触发一个消息时,系统将把该消息放入消息队列,然后去查找并调用窗体的消息处理函数(CALLBACK),传递的参数当然就是这个消息。

    异常也当作是一种消息,应用程序发生异常时就触发了该消息并告知系统。系统接收后同样会找它的“回调函数”,也就是我们的异常处理例程。
    当然,如果我们在程序中没有做异常处理的话,系统也不会置之不理,它将弹出我们常见的应用程序错误框,然后结束该程序。所以,当我们改变思维方式,以CALLBACK 的思想来看待 SEH,SEH 将不再神秘。

    alt+F9返回到用户空间

    F12暂停

    可以使用暂停加返回用户空间确定当前位置

    断点

    软件断点

    F2暂停

    原理: 在此代码处插入int指令,导致cpu运行到此处时,将控制权交给od

    硬件断点(四个)

    CPU调试寄存器Dr0 ~ Dr7

    Dr0 ~ Dr3 存放中断地址,Dr4,Dr5不使用, Dr6 ~ Dr7 记录0-3属性

    VB破解

    变量 字符串
    __vbaVarTstEq __vbaStrCmp
    __vbaVarTstNe __vbaStrComp
    __vbaVarCompEq __vbaStrCompVar
    __vbaVarCompLe __vbaStrLike
    __vbaVarCompLt __vbaStrTextComp
    vbaVarCompGe __vbaStrTextLike
    __vbaVarCompGt
    vbaVarCompNe

    Delphi破解

    • 到处都是call
    • 使用 push value+retn代替jmp

    内嵌补丁(inline patch)

    使用插件NanoWrite写入汇编代码

    用法: 第一行为位置

    0x437d70:
    inc byte ptr[0x445e80]
    cmp byte ptr[0x445e80], 2
    jnz 4203ba
    lea ecx, dword ptr ss:[esp+4C]
    jmp 42037f
    

    修改的数据位置一般位于data段,需要有可写权限

    汇编代码不能离最后的代码太远,可能由于PE头原因无法映射

    对话框

    • model: 不允许在窗口之间切换 DialogBoxParam
    • modeless: 允许在窗口之间切换 CreateDialogParam
    HWND DialogBoxParam (HINSTANCE hlnstance, LPCTSTR IpTemplateName, HWND hWndParent, DLGPROC IPDialogFunc, LPARAM dwlnitParam);
    HWND CreateDialogParam (HINSTANCE hlnstancem, LPCTSTR IpTemplateName, HWND hWndParent, DLGPROCIpDialogFunc,  LPARAM dwlniParam);
    

    windows api

    RegOpenKryEx() 
    

    注册机

    ecx存放循环次数

    sar右移一位

    眼见非实

    多态和变形

    简单反调试

    IsDebuggerPresent()

  • 相关阅读:
    javascript修改浏览器title方法 JS动态修改浏览器标题
    input type="checkbox" 选中传值,不选中传值的方法讲解
    关闭控制台的自动切换按钮
    mac切图
    charles
    apache
    超级经典的HTTP协议讲解
    一个很有趣的算法
    移动端网络判断
    移动端1px细线的处理
  • 原文地址:https://www.cnblogs.com/nsfoxer/p/14348036.html
Copyright © 2011-2022 走看看