当前位置: 首页 > news >正文

ollydbg脚本学习

1. 脚本文件格式

// 注释以 // 开头
// 脚本扩展名: .osc 或 .txtvar variable_name          // 声明变量
mov variable_name, value   // 赋值
cmp variable, value        // 比较
je label_name              // 条件跳转

label_name:                // 标签定义
// 代码块

2. 基本语法结构

// 示例:简单的跟踪脚本
var counter
var target_addressSTART:mov counter, 0mov target_address, 00401000bp target_address          // 设置断点run                        // 运行程序sto                        // 单步步过
    inc counter               // 计数器加1cmp counter, 100jb START                  // 循环
    msg "脚本执行完成"         // 显示消息ret

3、核心脚本命令

// 设置断点
bp address                   // 软件断点
bphws address, "type"        // 硬件断点 (type: "r", "w", "x")
bpm address, size, "type"    // 内存断点// 断点管理
bc address                   // 清除断点
bpd address                  // 禁用断点
bpe address                  // 启用断点// 条件断点
bpcnd address, "condition"   // 条件断点
bpl address, "expression"    // 记录断点// 示例
bp 00401000                  // 在入口点设断点
bphws 00401000, "x"          // 执行断点
bpm 00401000, 4, "w"         // 内存写入断点

4. 程序控制命令

run                          // 运行程序 (F9)
sto                          // 单步步过 (F8)
sti                          // 单步步入 (F7)
pause                        // 暂停程序// 执行到指定地址
eob address                  // 执行到断点
eoe address                  // 执行到表达式为真// 示例
run                         // 运行
sti                         // 步入call
sto                         // 步过call
pause                       // 暂停

5.寄存器和内存操作

// 寄存器操作
mov eax, 12345678           // 设置寄存器
mov [eax], 0x90             // 写入内存
cmp eax, ebx                // 比较寄存器// 内存读写操作
dm address, "type", size    // 读取内存 (type: db, dw, dd)
pm address, value           // 写入内存// 示例
mov eax, [401000]           // 读取内存到eax
mov [401000], 0x90          // 写入nop
dm 401000, "db", 100        // 显示100字节
pm 401000, 0xCC             // 写入int3

6.变量和表达式

var var1, var2, var3        // 声明变量
mov var1, 0x401000          // 赋值
add var1, 100               // 加法
sub var1, 50                // 减法
mul var1, 2                 // 乘法
div var1, 4                 // 除法// 逻辑运算
and var1, 0xFF              // 与运算
or var1, 0x100              // 或运算
xor var1, 0xFF              // 异或运算
not var1                    // 非运算// 示例
var base_addr
mov base_addr, eip          // 当前EIP
add base_addr, 0x1000       // 偏移

7.实例telock脱壳脚本

// telock_unpack.osc
var oep
var delta_ebp
var iat_start
var iat_size// 初始化
mov oep, 0
mov delta_ebp, 0
mov iat_start, 0
mov iat_size, 0START:// 隐藏调试器gpi "PROCESSNAME"cmp $RESULT, "ollydbg.exe"je HIDE_DEBUGGER// 设置入口点断点
    gmi eip, MODULEBASEmov $MODULEBASE, $RESULTbp $MODULEBASE// 运行到入口点
    runpause// 分析Telock特征find eip, #60E8000000005D81ED#  // pushad; call $+5; pop ebp; sub ebp, xxxcmp $RESULT, 0je NOT_TELOCK// 记录delta值
    mov delta_ebp, ebpmsg "Telock delta: $delta_ebp"// 跟踪到OEPfind eip, #61C3#  // popad retcmp $RESULT, 0je FIND_OEPmov oep, $RESULTsub oep, 10      // 调整到popad前// 设置OEP断点
    bp oeprun// 转储内存dumpeip           // dump当前模块msg "OEP found at: $oep"// 修复IAT
    call FIND_IATcall FIX_IATmsg "脱壳完成!"retFIND_OEP:// 使用内存断点查找OEPbpm $MODULEBASE+1000, 1000, "x"runpausemov oep, eipbc $MODULEBASE+1000jmp STARTFIND_IAT:// 查找IAT区域var iat_candidatemov iat_candidate, $MODULEBASE+3000find iat_candidate, #FF15#  // call dword ptr [xxx]cmp $RESULT, 0je NO_IATmov iat_start, $RESULTadd iat_start, 2// 计算IAT大小mov iat_size, 0mov eax, iat_startIAT_LOOP:cmp [eax], 0je IAT_ENDadd iat_size, 4add eax, 4jmp IAT_LOOPIAT_END:msg "IAT found: start=$iat_start, size=$iat_size"retFIX_IAT:// 使用ImpREC修复IATexec "ImpREC.exe"// 等待ImpREC启动pause 2000// 自动化ImpREC操作// 这里需要窗口自动化,比较复杂msg "请手动使用ImpREC修复IAT"retHIDE_DEBUGGER:// 调用StrongOD隐藏调试器exec "StrongOD.dll", "HideDebugger"jmp STARTNOT_TELOCK:msg "不是Telock保护的程序"ret

 

http://www.jsqmd.com/news/364770/

相关文章:

  • Java 算法
  • 4022:【GESP2309五级】巧夺大奖
  • 什么是强连通图
  • 【完整源码+数据集+部署教程】交通工具与动物实例分割系统源码&数据集分享 [yolov8-seg-C2f-SCConv&yolov8-seg-repvit等50+全套改进创新点发刊_一键训练教程_W
  • 【完整源码+数据集+部署教程】垃圾分类分割系统源码&数据集分享 [yolov8-seg-GFPN&yolov8-seg-timm等50+全套改进创新点发刊_一键训练教程_Web前端展示]
  • 【完整源码+数据集+部署教程】条形码图像分割系统源码&数据集分享 [yolov8-seg-SPDConv&yolov8-seg-swintransformer等50+全套改进创新点发刊_一键训练教程
  • 追更 HelloGitHub 一整年,终于等到了这篇年度盘点
  • 【完整源码+数据集+部署教程】手势分割系统源码&数据集分享 [yolov8-seg-C2f-ODConv&yolov8-seg-C2f-DCNV3等50+全套改进创新点发刊_一键训练教程_Web前端
  • 基于Java的微影院数字影厅智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 【完整源码+数据集+部署教程】钢管缺陷分割系统源码&数据集分享 [yolov8-seg-RevCol&yolov8-seg-EfficientHead等50+全套改进创新点发刊_一键训练教程_Web
  • 基于Java的微聊智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 基于Java的微型水电站监管智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 完整教程:2025年优化算法:多策略改进蛇优化算法( Improved Snake Optimizer,ISO)
  • 超越Git:迈向数据驱动的机器学习模型版本管理
  • 2007—2024年基于ADB投入产出表计算的生产链长度数据+代码
  • 2000-2025年县域5A级旅游景区DID
  • 2016-2025年地级市绿色数字中心政策数据DID
  • No150:AI中国故事-对话沈括——博学实证与AI认知:跨界融合与科学方法
  • 【计算机网络】NAT技能深度解析:从原理到NAPT实现的工作机制
  • springboot基于java的考研论坛系统(源码+文档+运行视频+讲解视频)
  • Ultralytics YOLO26 官方使用指南:从安装到部署的完整实践 附下载链接
  • 完整教程:从0开始学算法——第十九天(并查集)
  • 小喵播放器 1.1.8 | 视频超分提升画质 支持网页视频与B站番剧播放
  • Xtra 2.53.6 | Twitch直播第三方客户端,开源纯净无广
  • 探讨诚信的卡西欧手表专业批发公司,港滙直销香港有限公司哪家好 - 工业品网
  • 想了解数跃精准学技术实力,看这篇分析就够了 - mypinpai
  • 分享高低温试验箱选购经验,操作简便的品牌推荐 - 工业品牌热点
  • 单例(静态代码块饿汉式)
  • 2026年靠谱的遥控无人机手持终端工厂,口碑厂家推荐 - 工业推荐榜
  • 2026年济南安全教育展厅建设专业公司排名,北京三月雨口碑优异 - 工业设备