脱壳(初学)-- 手脱nspack 1.3及一些疑问
本帖最后由 無涯 于 2015-3-22 02:51 编辑高尔基曾经曰过:学习永远不晚。虽然老夫已经一把年纪啦,但我相信坚持一定会有收获。。。
前辈们说得好,脱壳特别需要耐心。我觉得除了耐心,还需要一份持之以恒得心,昨天我手脱UPX壳得过程以及疑问发到论坛之后,
群里的前辈们还是很给力很耐心的解答了我的疑问,在这里非常感谢你们提供的帮助。由于星期六苦逼的要上班,所以今天也弄的比较晚(心酸程序员啊~~)
虽然感觉nspack 1.3跟UPX脱起来步骤差不多,可是手脱的时候还是产生了一些新的疑问,希望前辈们莅临指导,哈哈:loveliness:
疑问1:步骤二处我对ESP最浅显的理解应该没错吧。。
疑问2:教程里一般都是说遇到向上的跳转就不要让他实现,可是我觉得按F4后程序是运行到某处,向上的跳转还是实现了,应该是向上跳完运行到光标处吧
疑问3:步骤二的最后,我对OEP的判断是否有问题,如果是这样的话,那我在寻找OEP的时候也有看到0048464D 55 push ebp这样类似VC++入口特征的语句,这样,我如果是自己脱其他壳很可能就把这里当做OEP了呀,这个希望前辈们能耐心再指导一下
疑问4:这里为什么会出现无法定位 *** kernel32.dll 这个问题,为什么有些壳脱壳直接就可以跑起来了呢?
疑问5:用PE工具修复是PE工具大致做了哪些操作呢?
疑问6:用PE工具修复的时候,如果出现无效函数,直接剪切或删除指针就可以了吗,这里剪切指针实际是做了哪些操作呢?
步骤一:加载程序到od,这里就不查壳了,反正都知道是uspack1.3的壳,uspack也是压缩壳,目前没接触加密壳
一进入就看到关键句,pushad(PUSHAD指令压入32位寄存器,其入栈顺序是:EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI .)前面的pushfd是压入标志寄存器,这里暂且不管吧
之前发帖提问怎么判断程序到达OEP的时候有位前辈就说过,不要一直抱着疑问。有些问题涉及的东西可能比较多,随着知识的积累就会得到解答的
步骤二:按F8,单步走
这里很快又看到一个pushad(如图2-1),我是这样理解的,根据我还不是很懂得ESP定律,堆栈平衡,这个pushad一般情况下后面会有一个与之对应的popad
疑问1:步骤二处我对ESP最浅显的理解应该没错吧。。
图2-1
果然,很快就惊现popad(如图2-2),我们要找的是与开头对应的popad,继续单步走,遇到往上的跳转点击其后面不是call,也不是跳转语句的地方,按F4运行到此处
疑问2:教程里一般都是说遇到向上的跳转就不要让他实现,可是我觉得按F4后程序是运行到某处,向上的跳转还是实现了,应该是向上跳完运行到光标处吧
图2-2
继续往下走,我们又一次看到popad,这个就是我们要寻找的(如图2-3),这里我们可以看到,还有与之前对应的popfd,
图2-3
继续单步走,遇到一个大的跳转,那就是程序的入口点了
根据之前前辈的解答,压缩壳遇到大的跳转一般就是跳到oep了,还有就是我上网搜了一下,可以根据语言特征判断是否达到oep(如图2-5),我们可以猜测这个程序是用delphi或者VC++写的(不知道对不对呀!!)
疑问3:步骤二的最后,我对OEP的判断是否有问题,如果是这样的话,那我在寻找OEP的时候也有看到0048464D 55 push ebp这样类似VC++入口特征的语句,这样,我如果是自己脱其他壳很可能就把这里当做OEP了呀,这个希望前辈们能耐心再指导一下
图2-4
图2-5
步骤三:脱壳
找到oep后,我们就可以脱壳了,右键点击oep的位置,选择 用OllyDump脱壳调试进程,然后点击脱壳按钮
步骤四:是否正常运行
双击之后如下图
这时候不要慌,教程说得不要慌,我们用pe修复工具修复一下
打开impREC(如图4-1),抓取带有nspack1.3压缩壳得程序,输入程序OEP,点击自动查找IAT,获取输入表,然后点击无效函数,看到有一个无效函数,右键单击他,选择 剪切指正 转存
打开转存好的exe,顺利运行,脱壳成功
疑问4:这里为什么会出现无法定位 *** kernel32.dll 这个问题,为什么有些壳脱壳直接就可以跑起来了呢?
疑问5:用PE工具修复是PE工具大致做了哪些操作呢?
疑问6:用PE工具修复的时候,如果出现无效函数,直接剪切或删除指针就可以了吗,这里剪切指针实际是做了哪些操作呢?
图4-1
如图4-2
脱壳不容易,发帖更不容易,接下来就不重复做这些工作了,往上很多教程都有,很详细,我在发这些贴似乎用处不大,
还有北斗其他版本的壳就明天再脱,有什么问题以后再张贴出来吧,希望前辈们还能进来指导!!
我回答已知的答案问题:
疑问2的f4是循环运行完停在那的,不是直接跳过去的。
疑问3 慢慢熟悉各个程序入口吧,这个是经验。
疑问4 IAT没修复好是不能跑的,能跑的可能只是你机器可以,换个机器就不行了,特别是win7系统可能就直接无法跑起来,要说原因太长了。
疑问5和6 都是修复iat的步骤,如果那些无效函数是没有用的,不是加密的自然可以删除,如果加密的还需要解密,压缩壳一般不加密。 不太建议直接使用OD插件来脱,现在主流LordPE来脱,然后用ImpREC FINAL 1.7来修复。用插件来脱就会出现以上楼主指出的问题。像一些双层壳的话你用插件来脱百分之70会出现问题:脱壳后的程序不能运行。还望攻OD插件大神能够修复或改进 初学脱第二个壳就遇到不少问题呀,希望前辈们耐心指导
还有,为什么后面会跟着几张我没插入的图片啊 有些图片为什么加载不出来,版主~~~~ 当你把这些教程中的基础壳全部搞定后,就开始百度一些不是强壳的软件开始实战,1月小成,半年中等,1年大牛就是你 無涯 发表于 2015-3-22 02:53
初学脱第二个壳就遇到不少问题呀,希望前辈们耐心指导
还有,为什么后面会跟着几张我没插入的图片啊 有些 ...
还有什么图片没有加载? 这问题你应该@Hmily 你没插入进去 正在尝试用lordpe来脱壳,不是太熟练
xiaomo的脱壳教程?? KingMe 发表于 2015-3-22 08:16
当你把这些教程中的基础壳全部搞定后,就开始百度一些不是强壳的软件开始实战,1月小成,半年中等,1年大牛 ...
恩恩,谢谢前辈指导!!!我会坚持到那一天的:loveliness: Poner 发表于 2015-3-22 08:16
还有什么图片没有加载? 这问题你应该@Hmily
Hmily是版主是吧?! 可是好像人家很忙 没人理我~~~