脱壳脚本-for DragonArmor(0.0.4.1)[-]
来源:互联网 发布:苏州爱知电机有限公司 编辑:程序博客网 时间:2024/05/02 00:16
前言
练习DragonArmor(0.0.4.1)[-]脱壳, 只要连续F8就可以到OEP.
这个壳有个特点, [0046B000]中第1次写的是OEP的RVA, 第2次写的是OEP的VA.
脱壳脚本的思路: 对0046B000下硬件写入断点, 对写入次数计数, 第2次时, 取[0046B000]的OEP值, 取消所有断点, 对OEP下硬件执行断点, go, 停下时, 就是OEP, 脱壳.
写这个脱壳脚本, 练习对内存值的检测.
脱壳脚本
// @file ollyScriptDump_DragonArmor(0.0.4.1)[-].txt// @brief ollyScript脱壳脚本 for DragonArmor(0.0.4.1)[-]var vEIP // eip值var vEP // EP值var vESP // ESP值var vEspValue // [ESP]的值var vImageBase // ImageBase值, 用于计算ImpREC填写的OEP值var vImpRecOEP // 在ImpREC中填写的OEP值var vPeNameDumpTo // 脱壳后的PE名称, 不要加路径, 和被脱壳程序在同一目录var vBpAddr_OEP // OEP下断地址var vBpAddr_OepValueIndicate // 指示OEP值的内存单元, 0046B000var vCnt_OepValueIndicateWasWrite // OEP值指示单元的写入次数var vTmp mov vPeNameDumpTo, "dumpByOllyScript.exe" mov vBpAddr_OepValueIndicate, 0046B000 mov vCnt_OepValueIndicateWasWrite, 0 LCLR // 清除Script日志窗口内容 bc * // 清除所有F2断点 BPHWCALL // 清除所有硬断点 eval ">> task begin ..." log $RESULT eval "ollyScript version = {$VERSION}" log $RESULT mov vEIP, eip eval "EIP = {vEIP}" log $RESULT GMI eip, MODULEBASE // 得到ImageBase mov vImageBase, $RESULT eval "ImageBase = {vImageBase}" log $RESULT GMI eip, ENTRY // 得到EP值 mov vEP, $RESULT eval "EP = {vEP}" log $RESULT cmp vEP, eip je L_BEGIN // 报错信息-此脚本必须在EP处开始运行 eval "error:\r\n脚本需要从EP({vEP})开始运行, 但是EIP = ({eip})\r\n请重新载入程序后, 再运行此脚本" msg $RESULT jmp L_ENDL_BEGIN: /** 这个壳有个特点, [0046B000]中第1次写的是OEP的RVA, 第2次写的是OEP的VA. 脱壳脚本的思路: 对0046B000下硬件写入断点, 对写入次数计数, 第2次时, 取[0046B000]的OEP值, 取消所有断点, 对OEP下硬件执行断点, go, 停下时, 就是OEP, 脱壳. 写这个脱壳脚本, 练习对内存值的检测. */ bphws vBpAddr_OepValueIndicate, "w" eob L_BP_PROC go // 这里不会再执行了, 已经交给了调试器L_END: eval "<< task end" log $RESULT retL_BP_PROC: eval ">> L_BP_PROC" log $RESULT call fnDispDisasmCmdOnCurEip add vCnt_OepValueIndicateWasWrite, 1 cmp vCnt_OepValueIndicateWasWrite, 2 je L_BP_PROC_GET_OEP goL_BP_PROC_GET_OEP: bc * // 清除所有F2断点 BPHWCALL // 清除所有硬断点 mov vBpAddr_OEP, [vBpAddr_OepValueIndicate] bphws vBpAddr_OEP, "x" eob L_BP_PROC_OEP go retL_BP_PROC_OEP: // 到达了OEP, 脱壳 an eip // 分析代码 cmt eip, "this is OEP" // 在OEP地址处加日志 // 脱壳 dpe vPeNameDumpTo, eip // 脱壳完成, 提示我使用ImpREC进行IAT修复 mov vImpRecOEP, eip sub vImpRecOEP, vImageBase eval "脱壳完成: 请停在此处, 对[{vPeNameDumpTo}]进行IAT修复\r\n impREC's OEP = {vImpRecOEP}" mov vTmp, $RESULT log vTmp msg vTmp jmp L_END retfnDispDisasmCmdOnCurEip: mov vEIP, eip GCI vEIP, COMMAND // 得到当前EIP的汇编命令信息, e.g. "call ebp" mov vDisasmCmd, $RESULT eval "{vEIP} {vDisasmCmd}" // 打印当前反汇编命令 log $RESULTret
运行效果
Script Log WindowAddress Message4692B0 $RESULT: >> task begin ...4692B0 $RESULT: ollyScript version = 1.654692B0 $RESULT: EIP = 4692B04692B0 $RESULT: ImageBase = 4000004692B0 $RESULT: EP = 4692B04694D5 $RESULT: >> L_BP_PROC4694D5 $RESULT: 4694D5 rep movs dword ptr es:[edi], dword ptr [esi]469725 $RESULT: >> L_BP_PROC469725 $RESULT: 469725 push dword ptr [46B000]4271B0 vTmp: 脱壳完成: 请停在此处, 对[dumpByOllyScript.exe]进行IAT修复 impREC's OEP = 271B04271B0 $RESULT: << task end
0 0
- 脱壳脚本-for DragonArmor(0.0.4.1)[-]
- ollyScript脱壳脚本 for AHpack(0.1)[-]
- 脱壳脚本-for ExE Pack(1.4)[-]
- ollyScript脱壳脚本 for ABC Cryptor(1.0)[-]
- ExeCryptor脱壳脚本
- OD脚本脱壳
- 【原创】一个dex脱壳脚本
- ESP定律脱壳的OD脚本
- WinLicense无key脱壳脚本改进
- 乐见Safengine licensor终于有了脱壳脚本
- 脱壳
- 脱壳
- 脱壳
- 脱壳
- 脱壳
- 脱壳
- 脱壳
- [脱壳破解]脱壳小结
- 求关于质数相除循环的长度和打印长度
- PAT 1079
- 使用DOM方式对XML进行CRUD
- web.xml 中的context-param 、listener、 filter、servlet 加载顺序及其详解
- 用R语言发送邮件(mailR包)
- 脱壳脚本-for DragonArmor(0.0.4.1)[-]
- android视频播放器
- 从源文件中读入2048个字节到目标文件
- android选择时间控件
- jQuery与Zepto
- 170226
- 最大流(dinic) hdu3572
- rails资源
- 配置maven环境以及eslipse的一些配置