##脱壳之后为什么要修复导入表
    PE加载器的原理就是根据INT表的函数名字换成函数地址 当PE文件被壳压缩或加密之后 会破坏原本的导入表 所以脱壳之后要把导入名称表的函数名填回去 这样程序才能正常运行

    介绍下自己写的壳的执行流程

    1. 获取必要的API函数地址
    2. 解密代码段
    3. 恢复数据目录表
    4. 修复重定位
    5. 修复IAT
    6. 增加反调试
    7. 加密IAT
    8. 调用TLS回调函数

    手工加壳步骤

    1. 修改文件头的NumberOfSections
    2. 设置区段名(可选)
    3. 设置 区段数据的实际字节数Misc.VirtualSize(可以和SizeOfRawData一样)
    4. 设置区段的VirtualAddress(区段数据在内存中的RVA, 必选)
    5. 设置 区段的PointerToRawData(区段数据在文件中的偏移,必选)
    6. 设置区段以文件对齐粒度对齐后的大小SizeOfRawData(必选)
    7. 设置区段属性
    8. 插入区段数据
    9. 修改扩展头中的映像大小

    脱壳流程

    1. 判断壳的类型
    2. 寻找程序入口点(OEP)
      • A. 根据跨段指令寻找 IDA Pro中有静态的跨段指令的视图(Segment),这里是动态的,基本的办法是单步跟踪。
      • B.设置内存断点 在代码段释放完毕后,在代码段首部设置内存断点,中断后就是OEP
      • C.根据堆栈平衡原理
      • D.根据编译语言的特点(常见的初始化函数)找OEP
    3. Dump 内存
    4. 修复 PE 文件头和输入表 IAT