霍雅
追求源于热爱,极致源于梦想!
upx压缩壳,使用esp定理
查壳显示带壳
打开xdbg32
设置入口断点
只保留入口断点
运行程序会进入pushad 就是把所有寄存器压入栈
xdbg快捷键 F4运行到鼠标所在位置 F7单步步入 F8单步步过 F9运行程序 ctrl+F9运行返回
此时按下F8,让代码把寄存器压入栈
选择一个堆栈区的地址
下一个硬件断点 访问 四字节,因为寄存器的地址大小是四字节
下号断点此时按F9就跳到popad也就是出栈,把寄存器全都弹出栈
一般我们要找的oep就在popad的下面会有一个大跳,我们F8单步跟进
会发现下面有个循环
把鼠标放在循环结束下面,按F4可以跳过这个循环
此时往下分析
大部分的跳转都是跳到40E4A附近
只有一个跳转到401280,也就是蓝色画像的地方
下面还有一些寄存器的初始化
这个很有可能就是我们oep的位置
按F7跟进去看
跳到了一个地方
这里寄存器都显示entrypoint
大概率就是我们oep的入口点
直接使用scylla
点dump
会保存在目录文件名+dump的文件
然后点查找iat
点击两次确认
点get imports
会显示IAT表
如果是绿色的,就不用管,如果是红色的X就要右键给他删除
然后点fix dump
打开dump的文件
他会自动保存一个dump_SCY的文件
此时再用ida打开就能正常分析了
但是一般来说这样还是不能正常运行的
此时还需要去重定位
用cff explorer做修改,此时文件就能运行了
ida分析一下
得到flag