分享一道来源HGAME2025的逆向题,UPX工具脱壳失败,练习手动脱壳。
F9找到ep入口这一串push
下面应该就是加壳的逻辑了
对rsp栈顶下硬件断点,当走完壳把参数都pop出去的时候rsp就会发生变化
下一个硬件字节访问的断点
F9运行,断在了一堆pop的后面
应该脱壳快结束了,再单步几下跳出jne这个判断,遇到一个非常大的jmp跳转
猜测这个大跳转应该就是oep,单步进入
Dump一下当前程序,点击Scylla
先点“IAT Autosearch”,再点“Get Imports”,在“Imports”中删除掉带有红色叉叉的,再点击“Dump”,之后“Fix Dump”选中之前的Dump文件,修复成功。
拖进IDA就可以正常反编译了
看key的加密函数,本质上是给输入的key逐位异或了一个值
直接输入7个1来调试
看到得到的结果是99 DD 73 38 B1 02 4D,和字符1再异或就能得到实际上a3那一堆生成的值了
再和期望的结果异或得到实际应该输入的字符串
得到key是ecg4ab6
继续到加密flag的地方,输入40个1,以同样的思路在最终比较出下断点
Flag加密后的结果在0x61FDF0里,期望结果在0x6aFDC0里
和key加密区别不同的是,flag加密函数用的是逐位减
通过测试的结果恢复出减掉的数字,从而恢复出flag
注意可能减成负数,需要对256取余。
原文始发于微信公众号(智佳网络安全):记一道手工UPX脱壳逆向分析
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论