LyScript 插件可实现对压缩壳的快速脱壳操作,目前支持两种脱壳方式,一种是运用API接口自己编写脱壳过程,另一种是直接加载现有的脱壳脚本运行脱壳。

首先准备一个加了UPX压缩壳的程序,然后我们通过自己编写脚本完成脱壳任务。 我们将当前EIP停留在UPX壳的首地址处,执行如下脚本,将可以自动寻找到当前EIP的具体位置。

from LyScript32 import MyDebugif __name__ == "__main__":# 初始化dbg = MyDebug()# 连接到调试器connect_flag = dbg.connect()print("连接状态: {}".format(connect_flag))# 检测套接字是否还在ref = dbg.is_connect()print("是否在连接: ", ref)is_64 = False# 判断是否时64位数if is_64 == False:currentIP = dbg.get_register("eip")if dbg.read_memory_word(currentIP) != int(0xBE60):print("[-] 可能不是UPX")dbg.close()patternAddr = dbg.scan_memory_one("83 EC ?? E9 ?? ?? ?? ?? 00")print("匹配到的地址: {}".format(hex(patternAddr)))dbg.set_breakpoint(patternAddr)dbg.set_debug("Run")dbg.set_debug("Wait")dbg.delete_breakpoint(patternAddr)dbg.set_debug("StepOver")dbg.set_debug("StepOver")print("[+] 程序OEP = 0x{:x}".format(dbg.get_register("eip")))else:currentIP = dbg.get_register("rip")if dbg.read_memory_dword(currentIP) != int(0x55575653):print("[-] 可能不是UPX")dbg.close()patternAddr = dbg.scan_memory_one("48 83 EC ?? E9")print("匹配到的地址: {}".format(hex(patternAddr)))dbg.set_breakpoint(patternAddr)dbg.set_debug("Run")dbg.set_debug("Wait")dbg.delete_breakpoint(patternAddr)dbg.set_debug("StepOver")dbg.set_debug("StepOver")print("[+] 程序OEP = 0x{:x}".format(dbg.get_register("eip")))dbg.close()

运行如上代码,将通过特征码快速定位并寻找到程序加壳前的OEP位置。

另一种方式是直接寻找原生脱壳脚本,并使用LyScript加载执行脱壳,如下是一段原生脱壳脚本,我们保存在磁盘中。

bphc                        //清除所有硬件断点
sti                         //执行一次F8(步过)
bph esp,r,1                 //对当前Esp栈顶下 硬件读取断点,设置一个字节 r代表读取
erun                        //执行一次F9也就是运行起来,erun就是中间出异常了交给调试器执行
find eip,e9,1000            //利用Find功能在EIP位置寻找 jmp,搜索的内存大小为1000
bphc                        bph $result                 //搜寻的结果会放到 $result变量中
erun                        //执行
bphc
sto 2                       //执行一下F7
cmt eip,"Current Eip is Oep Please Dump Entry" //在EIP位置填写注释
ret

接着通过LyScript插件,将其加载到x64dbg脚本引擎中,并直接运行。

from LyScript32 import MyDebugif __name__ == "__main__":# 初始化dbg = MyDebug()# 连接到调试器connect_flag = dbg.connect()print("连接状态: {}".format(connect_flag))# 检测套接字是否还在ref = dbg.is_connect()print("是否在连接: ", ref)# 加载并运行脚本dbg.script_loader("d://script.txt")dbg.script_run()dbg.close()

同样可以寻找到正确的OEP位置。

此时直接在OEP位置执行转存内存即可完成脱壳。

LyScript 插件实现UPX脱壳相关推荐

  1. LyScript 插件官方API调用案例

    本人结合LyScript插件API函数实现的一些通用案例,用于演示插件内置方法是如何灵活组合运用的,其目的是让用户可以自行研究学习API函数的参数传递,并能够通过案例的学习快速掌握官方API函数的使用 ...

  2. UPX脱壳全程分析(转)

    [文章标题]: UPX脱壳全程分析 [保护方式]: 本地验证 [使用工具]: OllyDBG [作者声明]: 只是感兴趣,没有其他目的.失误之处敬请诸位大侠赐教! ------------------ ...

  3. 使用upx脱壳工具脱壳

    使用upx脱壳工具脱壳(攻防世界新手第七题为例simple-unpack) 查壳工具链接:https://www.52pojie.cn/thread-437586-1-1.html 脱壳工具链接:ht ...

  4. 对于UPX脱壳的解决

    对于手动脱壳,我们有两种常用的安全工具,一个是od,另一个是ida.两个方法略有不同.对于脱一般的程序壳的时候,我主要用的是ida来脱壳,一般ida实在脱不了了再想到用od来脱,od,,所以我记录的大 ...

  5. CTF逆向-Upx脱壳攻防世界simple unpack

    文章目录 前言 UPX 技术原理 应用范围 软件使用 CTF实战 程序查壳 UPX脱壳 总结 前言 加壳软件分两类: 压缩壳:压缩的目的是减少程序体积,如 ASPack.UPX.PECompact 等 ...

  6. upx脱壳工具_攻防世界simple_unpack_逆向之旅003

    攻防世界simple_unpack_逆向之旅003 前言 一.使用exeinfo PE查看该文件 二.使用upx脱壳 三.使用ida打开脱壳处理后的文件 总结 前言 先给出题目的链接: https:/ ...

  7. UPX脱壳逐一跟踪分析

    UPX脱壳逐一跟踪分析 写在前面 OD跟踪命令 先结合PE知识分析 分析"新年快乐.exe" 写在前面 之前看到的UPX脱壳文章都只是教了方法,对UPX的原理少有提及.看了< ...

  8. [已发表,转载勘误]Android upx脱壳

    已发在https://www.anquanke.com/post/id/197643 不过有部分内容发布之后无法编辑,勘误后如下. Android upx脱壳 写在前面 因为我不是pc平台过来的,而是 ...

  9. 攻防世界reverse新手区——simple-unpack(upx脱壳)

    方法一:傻瓜式 下载文件,用记事本打开,按Ctrl+f打开搜索,输入flag,得到 去掉乱码即为flag 方法二-UPX脱壳 1.下载文件,拖进PEiD 不是有效的PE文件,就要怀疑是不是ELF文件了 ...

最新文章

  1. jmeter csv参数化_jmeter学习(二)
  2. 常考数据结构与算法:买卖股票的最好时机
  3. python编程爱因斯坦的问题_教你如何用编程解决爱因斯坦的数学问题
  4. 网速、宽带速率运营商说法与用户说法转换
  5. keras从入门到放弃(八)过拟合问题
  6. 软件设计原则(五)接口隔离原则 -Interface Segregation Principle
  7. android Q版本外部存储问题以及获取空间大小问题
  8. Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享
  9. 以人为本、用“简”驭“繁”……统统都是新华三物联网的关键词儿!
  10. 弱电工程集成商_弱电工程楼宇自控系统基础知识培训资料
  11. sharepoint数据库连接
  12. mathpix公式利器使用心得
  13. 你能理解、不能理解和不需要理解的量子计算
  14. vue 或 js 实现 excel表格的导出(笔记)
  15. 北上广,是程序员最好的归宿?
  16. HTML 有序列表 字母,HTML之有序列表教程
  17. PHP反序列化原生类利用
  18. 佛说,是我们自己苦了自己~
  19. 《如何阅读一本书》—[美]莫提默.J.艾德勒、查尔斯.范多伦
  20. ssh登录极路由后台_各品牌路由器登录网址大全 路由器默认用户名/密码

热门文章

  1. /include/sys/types.h:151: error: duplicate 'unsigned' uint,ulong和ushort自定义和工具链报冲突的规避方法
  2. 基于阿里云服务器的Qt SDK配置
  3. 推荐 Mac 平台上常用的 5 款 PDF 阅读编辑软件
  4. 什么是Fiddler ?
  5. mcrypt php windows,Windows下php安装mcrypt扩展问题
  6. [项目管理-12]:项目经理的困惑:项目管理的常见难题及解决对策
  7. 微软面试程序题100道
  8. matlab gausspdf,《精通MATLAB科学计算》(王正林 编著).pdf
  9. 2019-ECfinal总结
  10. mysql5.5.27安装设置_mysql 5.5.27 winx64安装配置方法图文教程