zoukankan      html  css  js  c++  java
  • OD 实验(二十一)

    程序:

    运行程序

    点击“Verify”

    关闭该程序,启动 OD

    再运行程序

    逆向:

    用 OD 载入程序

    按 F8 往下走

    执行完这个 call 指令就弹出了对话框

    这个 call 指令调用了 DialogBoxParam 函数创建模态对话框

    如果步入该函数的话,会跳到动态链接库中

    如果按 Alt+F9 让程序回到执行区域的时候停下也不行

    DialogBoxParam 函数具体实现什么样的操作由参数 IpDialogFunc 决定,IpDialogFunc 为指向模态对话框过程的指针

    IpDialogFunc 参数指向的地址为 40108C

    在该处下一个断点,运行程序

    停在断点处

    按 F8 往下走

    执行跳转,一路默认往下走

    到了动态链接库中,按 Alt+F9

    程序又回到了起始处,继续往下走

    这次的跳转没有实现

    接着往下走

    走到这个地方会响一声弹出对话框的声音,然后又回到原处

    这个 call 处下一个断点,重新跑一下程序

    停在这个地方后,按 F8

    弹出了对话框

    看来是这个 call 语句

    步入这个 call 语句

    这里先是调用了一个 API 函数 CreateToolhelp32Snapshot 来创建进程快照

    这两个是它的参数

    这个函数的第一个参数 dwFlags 用来指定“快照”中需要返回的对象,第二个参数 th32ProcessID 用来指定要获取哪一个进程的快照,当获取系统进程列表或获取 当前进程快照时可以设为 0

    该函数如果调用成功,返回快照的句柄;调用失败,返回 INVALID_HANDLE_VALUE

    eax 的值为 BC,函数调用成功

    执行完这句,EDI 的值为 OLLYDBG.EXE

     

    然后调用 Process32First 函数,前面两个是它的函数

    当利用函数 CreateToolhelp32Snapshot 函数获得当前运行进程的快照后,可以用 Process32First 函数来获得第一个进程的句柄

    接着往下走

    [System Process] 为 Process32First 函数的结果

    然后调用 lstrcmpi 函数对它的两个参数进行对比,前面两个是它的参数

    如果两个的值相同返回 0,不同返回 1

    值为 1,两个参数的值不同

    这个跳转就没有实现,如果是 0 的话,跳转实现

    接着往下走

    接下来调用了 Process32Next 函数,前面两个为它的参数

    Process32Next 函数用来获得下一个进程的句柄

    接着往下走

    Process32Next 获取的是 System

    然后调用 lstrcmpi 函数进行字符串对比,两个值不一样,返回 1

    跳转没有实现

    往下走

    这个跳转往上跳,是一个循环

    通过 Process32Next 函数逐个地获取进程的句柄,并判断进程中是否有“OLLYDBG.EXE”
    如果进程中存在 OLLYDBG.EXE 就会弹出错误的对话框

    如果进程中没有 OLLYDBG.EXE,则调用 CloseHandle,然后返回,ollybug.exe 不区分大小写

  • 相关阅读:
    Sql 复习(1)
    记录一次git issue
    JWT自校验框架
    分布式事务分布式锁的常用解决方式
    SpringBoot开发文档
    SpringCloud的使用以及五大核心组件
    SpringMVC
    关于开发中使用AOP的坑
    SpringCloud使用feign远程调用服务注入映射接口失败问题
    springBoot使用Restful跳转路径回显异常问题
  • 原文地址:https://www.cnblogs.com/sch01ar/p/9819810.html
Copyright © 2011-2022 走看看