以一个此程序为例子
首先使用查壳工具查壳,发现是upx壳
拖入ida中只有两个函数
首先使用快速脱壳的方法
再次查壳
脱壳成功
再次拖入ida中,发现出现main函数进一步分析即可
二.采用手动脱壳
首先拖入到od中,找到程序的入口点
发现刚开始又四个push,把四个寄存器压入栈中,相当于pushed,为了使栈平衡,对应的应该有4个pop或一个poped(这一段入栈出栈操作就是壳的程序)
根据入栈出栈为相反动作,直接搜索(ctrl+f)关键指令 pop rbp
发现正是刚开始push那几个寄存器
找到pop后真正的oep也就在紧接着的jmp指令中
设置断点F9执行,F7跟进
可看到这就是程序真正的入口点(在此处进行脱壳即可)
三.根据esp定律
(跟上述寻找方法相识)
首先运行到程序入口,执行push命令,发现esp(栈顶在变化)
跟进esp所指向的内存地址
设置硬性断点(不容易破坏程序)
运行程序应该到真正oep附近
可以看到与刚才相识
执行jmp
进行脱壳
再次查看
拖入ida中查看出现main函数。脱壳成功。
还有其他脱壳方法暂时还没学。