zoukankan      html  css  js  c++  java
  • 记手动脱壳

    其实之前也手脱过一些壳,但一直没仔细研究过。。。

    #以下方法参考《加密与解密第四版》,程序可在随书文件里找到

    EXE

    一,寻找OEP

    1,根据跨段指令寻找

    入口处

     

     

     

    在401130处要用ctrl+A重新分析代码

    其实这种方法只要f8不跑飞,一直f8就行

    2,内存访问断点寻找

    通过在.text段下内存访问断点后f9,运行到OEP时会断下来

    但因为程序会先对.text段进行解密,所以感觉并不好用

    3,根据栈平衡原理

    因为要保护现场环境,通常会使用pushad/popad,pushfd/popad

    pushad前的esp

     pushad后

    (1) 在19ff54处下个硬件访问断点,f9

     (2)在19ff70处下硬件写入断点,f9

     两种方法区别不大

    二,Dump与Anti-Dump

    1,纠正SizeOfImage

    程序MODULERNTRY32中modBaseSize被修改 

    可以看到镜像大小只有1000

     

     注:如果用OllyDump直接默认dump即可

     2,修改内存属性

    通过将部分地址设为不可读,

     

     可以看到被设置成了无法访问

     之后dump

    三,重建输入表

    1,寻找IAT

    找到这样的指令

     

    这段就是IAT

    2,重建输入表

    (1)使用import REC

    运行要脱壳的程序,attach process

    填入OEP的RVA,使用IAT AutoSearch

     点Get import

     使用Fix Dump修复dump出的文件

     可以看到多了一个.mackt段,输入表被放到了这里

    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    DLL

    一,寻找OEP

    和exe的方法几乎一致,但有可能不会在外壳的入口处停下来,可以先将入口处的数据改为 EB FE,运行后不断在入口处循环,f12停下后改为原数据后调试

     dll被映射到了30000处,找到的OEP为31240,OEP的RVA为1240

    寻找IAT:和exe一致

     二,Dump

    要修改Image Base的值为当前的值

     三,修复输入表

    管理员打开Import REC,attach到loaddll,pick dll

     选择edrlib,填入OEP,IAT的RVA和size,fix dump

    四,构建重定位表

    找到重定位初始化的地方

     (图不是一次截得,和下面地址不一样)

     RVA为c000

     分配一段地址

     打个补丁

     

     跑出来(注:第一次的edx值要手动设置分配出来的地址)

     二进制复制出来放进010editor(shift+ctrl+v复制hex,直接在菜单里好像找不到)存为Relo.bin

    运行ReloRCE,把文件拖进去

     fix Dump

  • 相关阅读:
    RabbitMQ集群
    RabbitMQ (十六) 消息队列的应用场景 (转)
    RabbitMQ (十五) 镜像集群 + HAProxy1.7.8 负载均衡
    RabbitMQ (十四) 普通集群
    RabbitMQ (十三) 集群+单机搭建(window)
    秋招_微盟_一面/二面/HR面
    秋招-腾讯云西子公司-一二面-11/16
    秋招-京东(补录)-面经-一面/二面/HR面
    秋招-腾讯补录-面经-12/10
    投递过程
  • 原文地址:https://www.cnblogs.com/harmonica11/p/13040929.html
Copyright © 2011-2022 走看看