ollyScript脱壳脚本 for AHpack(0.1)[-]

来源:互联网 发布:淘宝优惠券群怎么加人 编辑:程序博客网 时间:2024/05/22 15:45

前言

继续做脱壳练习.
AHpack(0.1)[-] 是压缩壳, 手工用ESP定律完成脱壳.
尝试用ollyScript模拟手工脱壳, 试验完成了.
如果是那种步骤比较繁杂的脱壳任务, 用脚本完成脱壳, 那性价比应该蛮高的.

记录

// @file ollyScriptDump_AHpack(0.1)[-].txt// @brief ollyScript脱壳脚本 for AHpack(0.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 vTmp    mov vPeNameDumpTo, "dumpByOllyScript.exe"    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:    sto // F8    // 下栈顶访问硬断点    mov vESP, esp    mov vEspValue, [esp]    eval "[esp({vESP})] = ({vEspValue})"    log $RESULT    bphws vESP, "r" // 对栈顶指向的地址下硬件访问断点    eob L_HBP_R_PROC    // 如果刚卸载了安全软件(e.g. 火绒4.0), 不重新启动计算机, 就使用go或run命令, 会有报错提示, 打断了自动化脚本.    // Unable to open or read executable file 'C:\WINDOWS\system32\dtrampo.dll'    go    // 这里不会再执行了, 已经交给了调试器L_END:    eval "<< task end"    log $RESULT    retL_HBP_R_PROC:    eval ">> L_HBP_R_PROC"    log $RESULT    call fnDispDisasmCmdOnCurEip    sto // F8    call fnDispDisasmCmdOnCurEip    sto // F8    // 到达了OEP    call fnDispDisasmCmdOnCurEip    an eip // 分析代码    cmt eip, "this is OEP"    // 脱壳    dpe "dumpByOllyScript.exe", 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_ENDfnDispDisasmCmdOnCurEip:    mov vEIP, eip    GCI vEIP, COMMAND // 得到当前EIP的汇编命令信息, e.g. "call ebp"    mov vDisasmCmd, $RESULT    eval "{vEIP} {vDisasmCmd}" // 打印当前反汇编命令    log $RESULTret

脚本日志

Script Log WindowAddress    Message46B0FF     $RESULT: >> task begin ...46B0FF     $RESULT: ollyScript version = 1.6546B0FF     $RESULT: EIP = 46B0FF46B0FF     $RESULT: ImageBase = 40000046B0FF     $RESULT: EP = 46B0FF46B100     $RESULT: [esp(12FFA4)] = (7C930208)46B29A     $RESULT: >> L_HBP_R_PROC46B29A     $RESULT: 46B29A mov edx, 004271B046B29F     $RESULT: 46B29F jmp edx4271B0     $RESULT: 4271B0 push ebp4271B0     vTmp: 脱壳完成: 请停在此处, 对[dumpByOllyScript.exe]进行IAT修复 impREC's OEP = 271B04271B0     $RESULT: << task end
0 0
原创粉丝点击