ollyScript脱壳脚本 for ABC Cryptor(1.0)[-]
来源:互联网 发布:西安市爱知中学 编辑:程序博客网 时间:2024/05/22 15:20
前言
ABC Cryptor(1.0)[-] 特点 : 可以找到跳到OEP之前的OPCODE, 再F8一次,就可以到达OEP.
这个脚本用来练习搜索特征码.
脱壳脚本
// @file ollyScriptDump_ABC Cryptor(1.0)[-].txt// @brief ollyScript脱壳脚本 for ABC Cryptor(1.0)[-]// @note ABC Cryptor(1.0)[-] 特点 : 可以找到跳到OEP之前的OPCODE, 再F8一次,就可以到达OEP./**特征码0046B0B2 E8 00000000 call 0046B0B70046B0B7 C3 retn*/// 脚本函数全局变量var g_IpToOpt // 要进行操作的IP值,先赋值, 再调用函数, 相当于给入参/** e.g. mov g_IpToOpt, eip call fnDispDisasmCmdByEip*/var g_vImageBase // ImageBase值, 用于计算ImpREC填写的OEP值var g_vPeNameDumpTo // 脱壳后的PE名称, 不要加路径, 和被脱壳程序在同一目录// 脚本主函数需要的变量var vEIP // eip值var vEP // EP值var vESP // ESP值var vEspValue // [ESP]的值var vBpAddr_OEP // OEP下断地址var vTmp call fnScriptInit eval ">> task begin ..." log $RESULT GMI eip, MODULEBASE // 得到ImageBase mov g_vImageBase, $RESULT eval "ImageBase = {g_vImageBase}" log $RESULT mov vEIP, eip GMI eip, ENTRY // 得到EP值 mov vEP, $RESULT eval "EP = {vEP}" log $RESULT cmp vEP, eip je L_UNPACK_BEGIN // 报错信息-此脚本必须在EP处开始运行 eval "error:\r\n脚本需要从EP({vEP})开始运行, 但是EIP = ({eip})\r\n请重新载入程序后, 再运行此脚本" msg $RESULT jmp L_ENDL_UNPACK_BEGIN: // findop 用来搜索一句完整的opcode // findmem 用来搜索一个内存块数据, 比findop好用 findmem #E800000000C3#, vEP // 特征码在前, IP在后 mov vBpAddr_OEP, $RESULT cmp vBpAddr_OEP, 0 je L_FINDOPCODE_FAILED add vBpAddr_OEP, 5 // 在ret处下硬件执行断点 bphws vBpAddr_OEP, "x" eob L_BP_PROC goL_FINDOPCODE_FAILED: msg "没有找到壳的特征码" jmp L_ENDL_END: eval "<< task end" log $RESULT ret// 断点的回调函数L_BP_PROC: eval ">> L_BP_PROC" log $RESULT mov g_IpToOpt, eip call fnDispDisasmCmdByEip // 这里要向前走一步的话, 用sto或sti要执行2次 // 即使取消了EIP上的断点, 也要走2次单步才能过去 sto sto mov g_IpToOpt, eip call fnDispDisasmCmdByEip call fnDumpAndWaitIatfix jmp L_END retfnDispDisasmCmdByEip: var _vDisasmCmd GCI g_IpToOpt, COMMAND // 得到当前EIP的汇编命令信息, e.g. "call ebp" mov _vDisasmCmd, $RESULT eval "{g_IpToOpt} {_vDisasmCmd}" // 打印当前反汇编命令 log $RESULT retfnScriptInit: mov g_vPeNameDumpTo, "dumpByOllyScript.exe" LCLR // 清除Script日志窗口内容 bc * // 清除所有F2断点 BPHWCALL // 清除所有硬断点 call fnPrintOllyScriptVersion retfnPrintOllyScriptVersion: eval "ollyScript version = {$VERSION}" log $RESULT retfnDumpAndWaitIatfix: var _vTmp var _vImpRecOEP // 在ImpREC中填写的OEP值 // 到达了OEP, 脱壳 an eip // 分析代码 cmt eip, "this is OEP" // 在OEP地址处加日志 // 脱壳 dpe g_vPeNameDumpTo, eip // 脱壳完成, 提示我使用ImpREC进行IAT修复 mov _vImpRecOEP, eip sub _vImpRecOEP, g_vImageBase eval "脱壳完成: 请停在此处, 对[{g_vPeNameDumpTo}]进行IAT修复\r\n impREC's OEP = {_vImpRecOEP}" mov _vTmp, $RESULT log _vTmp msg _vTmp ret
运行效果
Script Log WindowAddress Message46B001 $RESULT: ollyScript version = 1.6546B001 $RESULT: >> task begin ...46B001 $RESULT: ImageBase = 40000046B001 $RESULT: EP = 46B00146B0B7 $RESULT: >> L_BP_PROC46B0B7 $RESULT: 46B0B7 retn4271B0 $RESULT: 4271B0 push ebp4271B0 _vTmp: 脱壳完成: 请停在此处, 对[dumpByOllyScript.exe]进行IAT修复 impREC's OEP = 271B04271B0 $RESULT: << task end
0 0
- ollyScript脱壳脚本 for ABC Cryptor(1.0)[-]
- ollyScript脱壳脚本 for AHpack(0.1)[-]
- OllyScript脚本练习
- 调试工具----OllyScript脚本专题
- 脱壳脚本-for ExE Pack(1.4)[-]
- 脱壳脚本-for DragonArmor(0.0.4.1)[-]
- OllyScript脚本大全和相关案例
- ExeCryptor脱壳脚本
- OD脚本脱壳
- 【原创】一个dex脱壳脚本
- ESP定律脱壳的OD脚本
- WinLicense无key脱壳脚本改进
- 乐见Safengine licensor终于有了脱壳脚本
- 脱壳
- 脱壳
- 脱壳
- 脱壳
- 脱壳
- oracle 11g 在centos7上静默安装与安装时的错误处理
- Android原生到React Native移植
- 读入一个字符串str,输出字符串str中的连续最长的数字串
- BestCoder Round #92 A+B
- Python 字符串格式化
- ollyScript脱壳脚本 for ABC Cryptor(1.0)[-]
- day 013 总结
- 字符串函数导致的内存问题
- 第3章 UI开发
- runtime完成的功能举例
- 第一次博客
- Android N Telecom对Audio的管理
- Python 备忘
- C语言基础-局部变量和全局变量的区别