脱壳感想
教程倒没有,说一下脱壳感想吧!
我们拿到一个壳,如想深入了解,非深入跟踪不可,那是没什么捷径可言的!你要付出的是大量的时间和思考分析,如果不能做到,请放弃吧,也是对自己的身心的一种尊重和关心!
如果你是一个期代脱壳tips的人,做起脱壳来很容易感到空虚的...
(工具以Ollydbg为例)
遇上一个陌生壳,请不要太慌张,做一些简单的分析先,明确一下壳的类型、级别。就 saft103 说说,虽然脱壳论坛已经有介绍和一些“壳霸”对其手到拿来,但我们可以先抛开这些道听途说,认真地跟踪一下(可以参考一下我的一篇梦游之说)。
先运行这个壳,浏览一下系统活动进程,我们初次发现它是个单进程,用Ollydbg附加一下这个“单进程”,发现不行,原来它是“明花有主”的,为了找出“主人”,我们要从头展开进一下跟踪(因为我们已经假设自己对壳什么都不认识)。
我们会有一些结论,花指令不耐用(白话:?碴),异常发生都是顺序向下走的,于是我们如果再遇到同样类似的情况(最后到OEP指令前,我们可以遇到同样的情况,不用每个异常都Into),就可以不一一跟踪了,用鼠标拉动滚动条向下,留意可疑的地方,在这些地方用上下键查看指令,如果找到“零佘不同”--没法说清楚是一种感觉来的,直接在那里下断,应该是关键的执行或解码!我们可以发现时间反跟踪做得比较单一呆版,只要补丁其相关的 API 就能杀它个干干净净;
在“梦游之说”中,我们发现 壳 会实现注入功能(这是我们发现壳的第一个特色,利用注入依附系统服务程序,使调试难度增大,一般来说我们不大可能调试系统服务程序的线程,所以父进程稳居“教宗”地位,神圣而不可侵犯),感觉如同“金蝉脱壳”般,而且相关的操作我们都能一目了然,如果这时这个是你陌生的认识,赶快学一把(偶是,就翻了一下API手册和DelphiChm手册,幸好能找到,就认识认识)!父进程退出设计成压入堆栈运行,虽然不是什么新鲜事,但是个妙的动作来的,很干净地了断父进程,值得学习!
好了,明确了壳的动作,我们要自己改变其运行父进程。在父进程运行中,同样会有反跟踪的,自己留意吧。首先,我们要问我们自己监视父进程要做什么监视?我们想出来再跟踪:父进程必定要运行子进程,子进程哪来?是同一个祖宗的呀!但它会走不一样的路成长。它的成长是父进程指引的,所以我们要获取父进程的“指引”,GetContext和SetContext是父进程指引子进程的主要方式来的,当然你是可以从中获得“指引”的方向;另外父进程也会负责帮子进程初始化和解码,自己应该想到 WriteProcessMemory 和 ReadProcessMemory !通过分析父进程代码和跟踪我们可以发现,父进程只负责一次初始化和一次解码,其余的只监视子进程有否自行问“长短”。(其实父进程和子进程之间的联系是很清晰的,只要你的代码分析能力很强,就可以少用动态跟踪,偶不行,只能在它们之间来回奔走,开了两个Ollydbg)
子进程也有对父进程的检测,发现父亲有“外遇”,就会宣告“脱离父子关系”。子进程会遇上车祸“非法驾驶”,造成“失血过多”,也会要求索取父进程的 DNA ,如果 DNA 不符,就会造成“输血失误”,子进程就会“误服哀哉”!
如果上面没有问题,子进程就继续生活下去,脱态换骨[解码],在长大前会不断“长毛”[iat增肥加密计划],最后就Show出成年后的 StolenCode Show,再之后就在父进程的无形庇护下独立生活下去。
看完了壳的ShowTime后,我们应该心里有数,脱壳已经不是Impassable,我会想到直跑子进程一直到脱壳,这时我又想到了“壳魔”fxyang的话,再回头看看它先前的脚本,哈哈,原来我们最终都走差不多的路...,学脱壳做脱壳不是一种炫耀,而是从中找出自己的方向,不认识的不明白的要多问自己为什么,我经常都是自己解决的,印象深刻,不必去死记什么bp 这个,CD那个B之类的,遇到新奇趣怪的的要 Mark in your Memory(脑和存储File)。
这个壳给我的感觉是温柔了点,好些地方是做得呆板单一,比如Game Over的地方做得太认真,一点也不含糊迷惑,但都要有一定的工作量才能脱好的,另外资源部分方面做了隐藏,解压后才出现,又再做毛手毛脚,别忘了要Dump完整!如果把这个壳的每一个点都照出来,那样脱壳就太没意思了,犹如行尸走肉,永远得不到脱壳的真正乐趣(或者你会以脱壳破解某个加壳软件的功能限制为乐趣,但我说的不是这个)!
如果不幸遇上变态壳,呵呵,不要死顶,Take it Easy,Give up in some time, some time in charge!每个人的能力和认识都不同,没必要去跟人比,除非你们有约定,要比就要比自己,比过去,比现在,还是将来...那是你的事!
如果这草稿不幸被列为精华,希望能为你找到自己的脱壳方向--适当要问自己为什么...
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)