脱壳经验谈之一----给脱壳新手的建议

学破解时间也不长了,也学了一些脱壳的技术,过程中感触颇深。这里给大家分享一下,也算是给脱壳新手的一个指导。
  
  菜鸟心得,高手飘过~ 当然你要看,我也不反对~~
  
   
Attention,Please!!
   感谢大家的关注及支持,最近正在准备经验谈的第二篇,结合本篇的内容以及大家的建议并结合实例来进一步说明~ 如果有什么建议的话,请大家提出~ 谢谢!!

  关于工具
   
  关于OD
  所谓工欲善其事,必先利其器。要想学习脱壳的话,有几种不同的OD是很重要。因为有时在调试一些强壳的时候,有些改造过的OD可以躲过壳的深层检查,再配合一些OD插件就可以完全让壳检测不到调试器的存在了。这里推荐几款比较好的OD:
  1,fly改造的OD。可以调试大多数壳,但是由于不能使用phanom 1.3版的插件,导致在调试某些强壳(如Aspr 2.x)的时候会被检测到。
  2,ImmunityDebugger.这款OD可以比较顺利的调试Aspr等其他强壳。国内也有了汉化版。只是界面背景是黑色的,我实在不习惯这种界面,喜欢的人可以试试。
  关于其他的工具
  1,LordPE。推荐大家在Dump程序的时候使用这个工具。或许大家在脱简单的压缩壳时习惯使用OD的脱壳插件来抓取内存镜像,但是如果大家有调试穿山甲等强壳的经验就会知道,如果用OD插件抓取内存镜像就会出现OD被卡死的状态,这或许是OD插件的Bug,也可能是壳的反Dump方式,反正会影响到我们正常的脱壳。所以这里推荐使用LordPE来抓取镜像文件。而且在需要补区段的时候,用LordPE可以很方便的进行区域抓取。此外,作为一款PE编辑器,LordPE也是很优秀的。相比之下,PEtools就有点儿差了,对于PE文件有些操作会导致文件损坏,不知道为什么。大家还是用LordPE吧。
  2,ImportReconstruction。这是一款专业级的输入表重建工具。由于它支持插件扩展,可以大大提高对于加密壳的脱壳成功率。但是请大家不要过于依赖这款软件,学会手动修复输入表是很必要的。在ImportREC不能修复的时候,我们只能靠手动修复。手动修复一方面可以练习调试技术,另一方面可以让我们更加深入的去了解PE文件的工作方式。
  
  
关于脱壳方法
  相信大家都像我一样看过一些脱文,在里面告诉我们下这个API断点,然后走多少步,再怎么样怎么样就可以到OEP了。反正具体为什么这么操作,作者都只字不提。当我看到这些脱文的时候,基本上是一头雾水。加上我这个人比较倔强,对于我不懂的方法是不会接受的,所以那段时间,脱壳的水平基本上止步不前。实践是最好的老师,自己亲手调试了些壳以后就明白为什么了。当时我有个这样的顾虑,就是“我真的能调试这些壳,那可是前辈们干的事儿啊”,但是真正调试后才发现其实并没有那么难的。当我第一次手脱了一个Aspr 1.23RC1的时候,真的好兴奋,那种感觉就像一个初出茅庐的小贼利用自己学过的书本上的技能到**局偷出了一根**局长的头发,虽然没有值得炫耀的,但是对于自信心却是很大的鼓励。所以加密壳没有好怕的,你只要想办法躲过壳的所有检验,然后乖乖的走到OEP就可以了!至于如何躲过这些检验,那就要你在调试中不断积累经验,以及借助别人的经验了。
  所谓授之以鱼,不如授之以渔。学习脱壳还是理解方法,才能真正学会。
  所以我对于那些脱文的态度是这样的:
  1,对于所谓的方法先置之不理,自己手动调试一遍,了解壳的流程(一般来说,当你调试到OEP的时候,这个壳你应该调试了10遍以上了)。
  2,当遇到实在过不去的检验的时候再看脱文,了解它是怎么过去的。这样印象深刻一些。并在下次遇到这样状况的时候能自己解决。
  3,当自己完全脱掉这个壳后,再看下脱文,这个时候你应该就可以明白为什么下那些API断点了。下次就可以不用这样手脱了,照着脱文给的快捷方法脱壳就可以了。这个时候对于出现和脱文上不同的情况,我想你应该也会处理了。
  再说说如何调试壳呢。
  1,首先要选择并配置好OD,尤其对于强壳一定要这么做。配置OD包括异常设置,删除int3断点(因为有些壳会检测Int3断点的),OD的标题隐藏等。当这些都设置好,要在OD中运行一次,确保你要脱壳的程序能在当前的OD中顺利的运行(对于有些带驱动的壳可以不这么做,因为必须在没有驱动的条件下才能调试。),这样可以在调试时省去不少躲避调试器检查的时间。(当然有些壳还是要在调试中躲避检查的。)
  2,个人认为,基本的调试方法有:单步法,最后一次异常法。这两种方法在逻辑上都是比较好理解的。在调试的过程中要配合内存断点,硬件断点,Int3断点以及F4来简化调试过程。如可以用F4来跳出循环;硬件断点可以用来记录调试进度,当程序不小心跑飞的时候,可以在相应的位置下硬件执行断点,重新来过后就可以直接到达跑飞的位置了;灵活运用内存断点可以使得调试变得很容易,也是提高调试技巧的一种方法。
  当你可以熟练的运用这些方法的时候,任何的壳都可以搞定了,任何一个加壳的程序就像躺在床上的**,等着你脱了~ ^-^


  关于OEP的到达
  我们脱壳的目的就是为了到达OEP,但是如果判断是不是到达了OEP了呢?前辈们告诉我们一个方法,注意跨段跳转或转移。这确实是唯一判断标准。但是很多的教程中都把这句话误解为了:“注意大的跳转”,使得很多新手都被搞的云里雾里的,看到大跳转就兴奋。
  首先澄清一个误解,什么叫做“跨段转移或跳转”?这里面所谓的段指的是一个区段,是指被分割成一段段的内存。跨段跳转顾名思义,是指EIP指针从一个区段跳到了另一个区段。而不是所谓的大的跳转。如果EIP所在的区段很大,段内跳转也可以很大,这里所谓大的跳转本身就是一个很模糊的概念。
  其次,并不是出现跨段跳跃就是要到OEP了。一般加密壳在解码的时候会在内存中申请空间,并在那里实行解码。一般来说是壳会申请很多段这样的空间,然后在解码的时候从这个段跳到那个段。这些段就是我们在调试的时候在目标程序区段后面的那些没有名字的区段部分。所以说在这些段里面的跳跃一般不会到OEP的。
  再次,那么你会说了,那到底怎么判断呢?大多数壳把程序解码后会跳到目标程序的code段的进行执行。那么方法就出现了,在调试的时候可以先看下code段的地址范围,如果在调试过程中出现了跳跃到这个地址范围内存的跳转或转移的话,那么十有**就是要去OEP了!
  此外,对于OEP的判断可以通过不同语言编译的程序入口点特征来判断,当然这完全就是经验的问题,需要大家不断的积累。就像天草说的,记住入口特征这句话我都说了八百遍了。
  不过,这里有个小技巧,就是通过查看资源类型来大致判断。因为壳很少资源列表进行处理,所以如果查看资源,发现存在RCData的话,就可以认为程序应该Delphi或者BC++的;如果资源中有对话框,菜单等资源,而且资源名称都比较规则的话(这主要是为了区分VB以及E语言),就可以判断是MS VC++的了;如果在程序安装目录中发现*.fnr等类型的文件话,基本可以认定是E语言的了(现在E语言的程序越来越多了);如果在程序的末尾发现附加数据的很多的话(一般要大小的数量级在KB以上),那应该也是E语言的(这个时候大家应该明白为什么E语言程序查壳的时候为什么显示的时候Microsoft VC++[OVERLAY]了吧)。


  关于学习方法
  这应该是老生常谈了。学习方法因人而异,没有必要强调某种方法,方法的目的只有一个,就是掌握你学到的东西东西并与以前的知识融汇贯通。论语中的那句话“温故而知新”,确实很有道理。当你学到一些东西后,回过头来看以前学的东西,你会发很多新的东西,可以加深对某些知识点的理解。这点是没有任何方法可以替代的。这里推荐两种方法:
  1,录像。把你的脱壳学习过程录像,当你忘记的时候,回忆起来也会很快的。
  2,做好笔记。OD有个很好的插件Godup可以在调试的过程中做好记录。从某种程度上讲,记录是你调试过这个壳唯一证据。
  
  关于到OEP的一些特征代码
  现在的壳变聪明了,很少再使用Jump **X这样的方式来到OEP了。下面介绍几种流行的方法。
   1,push 寄存器或者地址
      retn
   这种方法是利用retn来实现远跳转的,原理同call子程序的后返回的
原理一样,即通过push一个值到堆栈顶,然后用retn指令即可返回到堆栈顶指向的地址。
   2,mov dword ptr[**],**X  
      jnz  **XX
      retn
      push 0  这个地址是上面的mov指令动态填写的
      retn   
     这样的条转在ASPac和ASprotect中使用过。
   3,mov 寄存器,**X
      call 寄存器
    这个在穿山甲的壳中可以看到。
   4,还有使用Leave指令进行跳转的,大家也可以注意下。
   5,使用SEH。后面会提到。


   关于SEH
   SEH,Structure Exceptions Handle,结构化异常处理,是加密壳程序经常使用的桥段。主要用这种方法来实现非正常跳转(可能还有其他作用,我现在只理解到这里)。对于SEH的具体技术细节我也搞不明白,也不用管它,OD给了我们一个很好用的功能,就是在堆栈会显示SE句柄。这是什么意思呢?你只要知道当出现异常后,系统处理完异常就会跳到这里来继续执行。 那么我们可以通过在这个地方下好断点,然后Shift+F9,就可以继续调试了!
  
   关于自校检
   现在带有脱壳自检验的程序还是很多的。自校验类型大致分为以下几个类型。
   1,CreateFile型。这种自检验一般都会调用CreatFileA(W)函数来对于自身。然后
   通过GetFileSize获取文件大小,因为一般脱壳后文件大小会变,通过比较文件的大小来检测是否被脱壳。
   通过SetFilePointer来设置文件指针,然后通过ReadFile读取文件中的一些数据,来判断是否被脱壳(一般来说读取的时候附加数据)
   2,内存型。这种自检一般是对程序在内存中镜像进行CRC,MD5等检验,如果不相等则认为已脱壳或被修改。
   3,脚本语言型。脚本编程语言指的是像autoit,autohotkey等语言。这种语言编译出来的程序一般都是天生带壳的,而且自校验是对附加数据进行多次细致的检查,如果不弄清楚检验过程,即使更改跳转也不能让程序正常运行。有机会大家可以试试。
   4,壳校检型。这种校验是在主程序中插入一些跳到壳地址中的代码,并返回一些无关紧要的数据或做无关紧要的操作。如果程序被脱壳了,这些代码执行的时候就会出现异常。
   还有一些其他类型,但是现在还有总结出比较好的说法,以后再补充。
   相应的处理方法。
   1,直接对API下断,基本就可以到达解密点。
   2,用PEID插件可以查看算法的所在位置,就可以到达解密点了。
   3,没有别的方法,运用API断点耐心调试吧
   4,在OD运行程序,出现异常后,在堆栈中找到返回的位置,nop掉相应的指令即可。
   
   关于脱壳脚本
   脚本应该是前辈没有留给我们最好的财富了,有了这些东西,我们可以在不了解任何脱壳细节的情况下脱掉壳。但是如果想学脱壳技术的话,那么请把它当作你的老师。因为脚本中包含着你遇到问题的所有答案~ 而且当你了解了以后,还可以自己改进脚本的功能。借用达朗贝尔的一句话:多读读高斯,他是我们每个人的老师~
   
   关于花指令
   可能有些新手看到壳那些乱七八糟的指令会发怵的,这些都是壳为了阻止调试者所设的花指令,或许你不知道这些指令怎么执行,但是壳是是知道的,它不可能去执行一坨不能执行的指令的,有些指令是动态解码的,有些是花指令。你在调试的时候只要看着当前指令F8(7)就可以了,不用管别的。再借用达朗贝尔的一句话(怎么又是他?):前进吧,你会有信心的!
   
   关于心态
   调试壳是需要很大耐心的,就像破解一样! 所以如果你已经下好决心的话,那么请同时做好心里准备!
   
   最后送大家一句话,关键是要对她有爱~ 只有真正对这个东西感兴趣,你才能真正学到东西!
   
   Begging For A Way Back Into Love!!!

                                                                                            BY HyperChem

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
但愿大家互相进修进修,大家对于破解都不是很了解,人们想学破解,可是去无从入手,所以决议为大家写1个破解初级读物的教程,但愿能大家了解破解有一些帮忙,但愿能有更多的人踏入破解的大门   1.低级,修改步伐,用ultraedit等东西修改exe文件,称暴力破解,略称爆破   中级,追出软体的注册码   高级,开具注册机   2.经常使用破解东西   (1)侦壳东西:PEiD   (2)消息联合的OllyDbg引领破解东西的新潮水   一,此刻咱们起首来进修下破解的开端,爆破~   1.侦壳   要破解1个软体起主要做的就是侦壳,要侦壳就要对壳有绝对似的了解,家喻户晓,软体作者用编程语言编著好软体后,是将它编译成扩展名为EXE的可执行文件编译为EXE的目的有两点:   (1)有一些版权信息需要掩护起来,不克不及让别人随心改动,如作者的姓名、软体名称等;   (2)需要给步伐"瘦身",从而利便存储、使用以及网上传道输送   为了编译,会用到一些软体它们能将可执行文件压缩以及对信息加密(图1),实现上面所说的两个功效,这些个软体称为加壳软体为软体加上的东东就称为"壳"加壳软体差别于一般的WinZIP、WinRAR等打包类压缩软体加壳软体是压缩可执行文件的,压缩后的文件可以直接运行   最多见的加壳软体有3个:ASPACK 、UPX、PEcompact终究它们是主流,据计数,用它们加壳的软体约占市面所有软体的90%!其它不经常使用的加壳软体有ASPROTECT、PETITE 、NEOLITE、TELOCK等软体最多见的编程语言是Delphello,Visual Basic(略称VB),Visual C++(略称VC)了解些编程的常识,会让破解更加轻车熟道   底下来讲侦壳,此刻比力经常使用侦壳软体就PeiD,他具备华美的图形界面外壳整合(新增到鼠标右键)功效令使用更加利便,撑持拖放操作配置时,务请将"扩展到鼠标右键"打上对号   其使用要领是,鼠标点住XX.exe,按鼠标右键,选"使用PEid扫描"便可;"壳"的信息就显示在底部   2.破解东西OD   有关OD的先容我把他放到附件里了,这个是看雪论坛的先容,是比力周全的,至少我感觉比我写的要好,所以大家根据他可以大好的了解OD   3.爆破实例   爆破是破解的开端,所说的爆破,就是指路程经过过程修改可执行文件的源文件,降临达相应的目的你半大白?呵呵,举个例子好了,好比说某同享软体,它比力用户输入的注册码,要是用户输入的,跟它路程经过过程用户名(或其它)算出来的注册码相等的话(也就是说用户输入的注册码不错了),那末它就会跳到注册乐成的处所去,不然就跳到堕落的处所去   大白过来了吧,咱们只要找到这个跳转指令,把它修改成咱们需要的"造型",如许,咱们是否就可认随心所欲了?   一,破解时经常使用的汇编指令如下,汇编较弱者可先强行违住,以后就可逐步理解了   cmp a,b //比力a与b   mov a,b //把b的值送给a,使a=b   ret //归回主步伐   nop //无效用,英文"no operation"的简写,意思是"do nothellong"(呆板码90) (解释:ultraedit打开编辑exe文件时瞅见90,等同于汇编语句nop)   call //挪用子步伐,子步伐以ret末端   je 或jz //若相等则跳(呆板码74 或0F84)   jne或jnz //若不相等则跳(呆板码75或0F85)   jmp //无前提跳(呆板码EB)   jb //若小于则跳   ja //若大于则跳   jg //若大于则跳   jge //若大于等于则跳   jl //若小于则跳   jle //若小于等于则跳   pop xx //xx出栈   push xx //xx压栈   更为具体的指令请查阅汇编册本   4.破解常见修改,参看表1   汇编指令修改 相应的呆板码修改(路程经过过程16进制编辑器实现)   jnz/jne->nop 75->90   jnz/jne -> jmp 75-> EB   jz/je->nop 74->90   jz/je -> jmp 74-> EB   jnz -> jz 75->74 或 0F 85 -> 0F 84   jz -> jnz 74->75 或 0F 84 -> 0F 85   jnz -> jz 75->74 或 0F 85 -> 0F 84   je-> jne 74->75 或 0F 84 -> 0F 85   表1
### 回答1: Frida-dexdump是一款用于Android应用程序脱壳的工具。它基于Frida框架,可以在运行时动态地注入代码,从而实现对应用程序的监控和修改。通过使用Frida-dexdump,用户可以获取应用程序的dex文件,进而进行反编译和分析。这对于安全研究人员和逆向工程师来说是非常有用的。 ### 回答2: Frida-Dexdump是一种脱壳工具,它使用Frida库提供的动态注入技术来实现脱壳。它可以帮助安全研究人员分析Android应用程序中的可执行文件(dex文件),以便他们能够防止应用程序的非法复制或修改。 Frida-Dexdump的主要优点是它不需要修改目标应用程序的源代码,因为它是通过在应用程序运行时动态注入实现的。这个过程非常简单,只需要在设备中安装Frida-server,然后运行Frida-Dexdump即可。脱壳过程中,它会将dex文件从目标内存中复制到本地磁盘,然后对该文件进行解密、反编译和分析。 此外,Frida-Dexdump还提供了一些其他有用的功能,例如提取应用程序进程的内存信息和文件系统信息,以及可以监视应用程序的API调用、函数调用和网络请求等操作,有助于发现应用程序中的漏洞和安全问题。 总之,Frida-Dexdump是一种非常有用的脱壳工具,它给安全研究人员提供了一个方便而有效的方式,来分析Android应用程序中的DEX文件,并发现和解决其中的安全问题。但需要注意的是,在使用该工具时,需要严格遵守法律法规,不得将其用于非法用途。 ### 回答3: Frida-Dexdump是一款非常强大的脱壳工具,它是基于Frida框架开发的,能够帮助开发者轻松地从安卓应用程序中提取dex文件,帮助开发者进行逆向分析,加深对程序的理解。 Frida-Dexdump的主要功能是从本地已安装的应用程序中提取dex文件,并将其保存到本地文件系统中,使其方便地进行后续分析。这个脱壳工具不仅能够脱壳Native方法,还可以有效地防止抓包等应用安全风险。 使用Frida-Dexdump非常容易,只需要在Frida Server启动的情况下,通过命令行来启动即可。可以利用命令行参数去指定你需要脱壳的应用程序包名,然后Frida-Dexdump就会自动使用Frida去hook这个被指定的应用程序,并提取它的dex文件。 Frida-Dexdump采用了一种非常高效的脱壳技术,它能够轻松地解析目标程序的内存结构,获取有关dex文件的相关信息,并且还能够将提取的dex文件保存在指定的本地文件系统中,方便开发者进行后续分析。值得一提的是,Frida-Dexdump支持多种不同的目标程序,包括应用程序、Framework、动态库等。 总的来说,Frida-Dexdump是一款非常强大的脱壳工具,可以帮助开发者轻松地进行逆向分析,深入探究Android应用的内部机制。它的强大功能和高效性使其受到广泛的关注和使用,目前已经成为许多安卓开发者逆向工程的首选工具之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值