• 软件逆向——软件壳特点总结


    1、通常情况下只能向下跳不要往回跳(因为壳在解压的时候会有很多的循环,在里面一直转的话头会晕的!)
    2
    、出壳点一般在POPAD
    3
    F8能过的CALL就过,F8会运行的CALLF7跟进
    4
    PECOMPACT特点:第一个 CALL PECOMPACT.******** F7跟入,未实现的向下跳转要实现
    5
    ASPACK特点:遇到CALLF7跟入,遇到向下的跳转就实现(或直接搜索POPAD,找到后面跟 J** DELPHI.****的出壳点)
    6
    UPX特点:一路F8(刚实战一个UPX壳:SnInput,是UPX1.2的壳,发现在LOOP解压结束之后 有个未实现的je short SnInput.0041001E,要回车跟过去F4才行),找到POPAD
    7
    EXE32PACK特点:先用"BP IsDebuggerPresent"在调用"IsDebuggerPresent"函数的地方下断
    EXE32PACK会检测是否有调试程序),然后用ALT+F9运行到用户区,用F8运行到出现SS=00400000(基址)同时EDI=??????(入口实际地址的绝对地址),用SS+EDI就得到了程序的入口点,然后用CTRL+G前往入口点(CTRL+A可以重新分析 代码),!!不要F4!!,直接DUMP
    8
    EZIP1特点:EZIP1是在壳内循环解压缩完成后再跳到程序入口点,J**特别多,所以先一路F8(包括CALL),当到达第一个往回大段的JMP时要小心了,跳过去,跟着一串代码,在后面有个未实现的JNZ(在里面解压,解压未完成时不跳出去),来到JNZ这行,回车, F4,就来到程序的入口点了。记下入口点的地址,用LOADPE
    脱壳(因为EZIP1会修改PE头,所以用OD脱壳再修复也没用),再修复。(脱出来的程序比较大,可以用LOADPE的重建PE功能重建后再修复,不过重建前必须是已经修复过的程序)
    9
    JDPACK特点:JDPACK会分几次解压缩,所以会出现多次POPADPOPFD,所以前面先一路F8,出现往回的JMP就往后面F4(特别是有两个靠得很近的往回的JMP就要小心了,出口不远 了),等到出现POPAD后面不远就跟着RETN的就到了出口点了,F8来到程序入口点, DUMP
    10
    FSG1.33特点:FSG1.33是个加密壳,没有PUSHAD等语句,ESP定律不适用,单步跟踪很费时间, API断点也慢,但是它没有SEH所以最好用TC命令进行模拟跟踪,查看内存镜像,它分为好几段,其中有CODE段、有SFX,imports,resources段,OEP(入口点)就在CODE段里,模拟跟踪的地址下在CODE段的位置上(即CODE段后面一段之前,如CODE段开始在401000,后面跟的段开始在404000,则下在404000前),格式为:TC EIP<********(到了入口点以后要想看得习惯点就点清除分析)
    11
    PKLITE32 1.1特点:开始后就有一个CALL后面跟了一个往回跨大段的JMP,直接来到这个JMP 回车就来到OEP(入口点)了,然后F4DUMP。(:em16:这个是最简单的了!)
    12
    VGCrypt PE Encryptor V0.75特点:这个壳的OEP很好找,一路F8,有向下的跳转就回车让跳转实 现,很快就来到OEP了,DUMP。但是这个壳DUMP有个特点,DUMP出来的程序无法运行,并且修复后仍然不能运行,这时不用急,用LOADPE将修复过的程序重建一下(ReBuild PE) 就行了。
    13
    Petite2.2特点:这个壳的特点是CALL基本上都要跟入,所以直接追OEP会很麻烦。所以脱这个壳就要 用到ESP定律,首先按照ESP定律下硬件断点,F9运行后会提示硬件错误,这时按SHIFT+F8 忽略,紧接着后面的CALL全部都F7跟进,接下来会有一个未实现的向下大跳,用回车跳过去,F4,接下来就会看到下面有一堆的JMPF8运行下去,一个JMP就跳回到程序的空 间了,这里就是OEPDUMP
    14
    TELock098特点:这个壳的特点就是SEH(花指令)特别的多,所以脱这个壳之前一定要做好几项准备工作:1、把调试选项中,除了忽略KERNEL32中的内存访问异常外的忽略异常都去掉; 2、一边数一边按SHIFT+F9(跳过SEH),一直到按下去以后程序运行了;3、重新运行, 刚才不是数了按多少下就运行了吗?现在少按一下,这样就会中断在最后一个SEH的前面 了,OD右下方会显示下一个SE的句柄,按CTRL+G到那个地址,F2SHIFT+F9,接下来就按照常规跟,一直跟到在一个POPAD后面不远跟着个“jmp dword ptr ss:[esp-30]” 这里就是跳向OEP的了!回车,F4,DUMP。修复时会出现获取输入信息会出现无效的,先点
      “
    显示无效的,然后右键追踪层次3”,追踪好以后再显示无效的,剪切掉就好了,修复。
    15
    yoda's Crypter特点:这个壳总体来说特点还是比较鲜明的,所以也比较好脱。首先运行后会来到 一堆的“00 00 00 00”的代码这里异常,这时我们就得到了下个SE的地址,CTRL+G,下断, SHIFT+F9,这里就是这个壳最有特点的地方了!前面一堆什么不管,最后三句是:
                             5F                  pop edi  //
    在这里的时候,EDI的值就是OEP
                             C9                  leave
                             C3                  retn
    讲到这个壳就顺便提一下仙剑壳,其实仙剑壳就是在前面加了一堆花指令的yoda's Crypter壳前面一路SHIFT+F9也会来到一个很熟悉的地方:一堆“00000000”,不过仙剑壳会多点其他的 数字,但是没什么大差别,对付的方法都是一模一样的,这里就不多说了。





  • 相关阅读:
    用jmeter通过ssl验证访问https
    github jekyll主题
    JMeter中返回Json数据的处理方法
    使用Nginx实现反向代理
    Antd 表格 -- 自定义合并行处理
    Go语言--第8章 包(package)
    GO语言 -- 第7章 接口(INTEFACE)
    GO语言--第6章 结构体
    PHP--相关扩展安装
    Go语言--第5章 函数
  • 原文地址:https://www.cnblogs.com/xiao-zhang/p/4691229.html
Copyright © 2020-2023  润新知