FTBirthday的Armadillo全程教程--第二章copy-mem II加壳方式
第二章.copy-mem II加壳方式
[实例解析四][翻译]牛壳ARMADILLO和 NANOMITES (第一部分)
现在我们又开始了,我们将要去击败Armadillo的最后一道防线。我们知道这将是一场硬仗,但值得去打。 所以这回我们要专门解释一下nanomites 保护和unpack的方法,那将会比我们在其它教程中见到的稍微难一点。所有nanomites和 copymemII配合使用,所以为了成功地dump,你需要遵照我在其它两篇教程中写的步骤。
这次我们选了一个比较容易dump的目标软件。这样做仅是为了避免重复我在上次教程中所写的步骤。无论如何,我们只有在dump之后才能对付 nanomites, 所以如果存在nanomites 保护,那么在dump之后作为一项附加任务,我们必须击败nanomites 保护。
NANOMITES到底是什么样的地狱般的阴险招数?
Nanomites是Armadillo嵌入子进程的INT 3中断,虽然在GETRIGHT FINAL版本里没有使用nanomites 保护,但是却在CRUSADER写的教程里的beta版本里用了。 可能有 50, 100甚至 200个INT 3,它们被放入了子进程的第一个section ,以阻止子进程脱离父进程运行。INT 3中断替代了原始文件的条件跳转。所以每当父进程接收到INT 3中断,它就到存放跳转类型的report中去,看一下标志以决定是否跳转,然后测算出新的EIP,改变到子进程中去然后继续运行直到下一个 INT 3。
问题是我们不知道每个跳转和INT 3的对应关系,所以我们将要在本篇教程中学习如何patch它。 首先我们要学如何手动patch它,然后(在第二篇教程中) 我们将要学习如何让计算机自动逐行patch它。
我们将要用 eSTOP SE 3。21做实验

下面是连接:
http://www。nwpsw。com/estopmain。html
在我的FTP里有一份拷贝。
我们dump这个程序的方法和以前的方法稍微有所不同。如果我们想尝试用一般的方法去dump它,它不会在 WriteProcessMemory断点停下。我第一次遇到这种情况时,我怀疑这个程序是否用了CopyMemII保护,但是当我停下来去看attach window时我看到了父进程和子进程的进程。 那么它是如何做的呢?
这个程序只是用了nanomites保护,所以在这种情况下, 父进程在unpack过程中没有做任何事情。子进程自己 unpack自己,修改它自己的IAT,自己unpack第一个section然后最终跳向它的OEP。
父进程仅在子进程开始运行时出现了一次,然后INT 3出现了。这回你要是想 dump eSTOP,你就必须得遵照GETRIGHT重建输入表的第二篇教程,找到 magic jump 最后在第一个section设一个BPM ,所以一旦输入表修复完毕它就停在它的OEP上了。一旦你到达这里dump这个进程然后用Import Reconstructor 来修复这一进程的输入表。
在这里如果我们运行dump下来的程序,它将在这里崩溃。

正如你看到的在406217出现了第一个INT 3,让我们欢迎丛林男孩! 我想Rambo(丛林男孩)可以帮助我解决这个问题,所以我打电话给他,但是他不在家,所以我读了CRUSADER’s 的教程,这可帮了大忙了。读完后,我知道了在 INT3 所在之处我们需要插入一些跳转。所以现在我们需要知道要插入何种类型的跳转。
在OLLYDBG中重新启动程序 (是原始程序,不是 dump下来的程序)。 现在我们去找在哪儿父进程开始和NANOMITES合作。在入口处停下,右击鼠标选择SEARCH FOR BINARY STRING 然后看这个十六进制的字符串03 00 00 80

在我的机器里它停在了 5C5BAF

不用管内存地址,因为在其它Armadillo保护的软件中这个地址会变的。真正关键的是找到那些代码。第一次停下来时来到这一行:
005C5BAF 817A 0C 03000 CMP DWORD PTR DS:[EDX+C],80000003
最重要的是80000003,可以说那是开始子进程的地址, 因为这正是父进程从WaitForDebugEvent report中得到的。如果是其它任何值,那就不是nanomite保护。BPX 5C5BBC然后把antidebuger byte置0或者bp IsDebuggerPresent 然后把 eax中的值改为 0。运行程序,跳过第一次异常,继续运行。

试用版提示对话框将会弹出,按OK,然后通过shift+F9 组合键跳过一切异常。 现在它将会停在我们下的断点 BPX上。
你可以看到EDX指向WaitForDebugEvent report 所以右击鼠标选择 FOLLOW IN DUMP。我们可以看到下面的report。


1 2 3 4 5 6 下一页