• 标 题:抛砖引玉的说说圣天诺的外壳(下篇 (4千字)
  • 作 者:shou_xin
  • 时 间:2002-7-6 21:24:29
  • 链 接:http://bbs.pediy.com

本来对于sentinel superpro的外壳 已经没有什么好说的了。可不是我有所保留,
而是实在是能力所限制.

以看雪论坛crackme的圣天诺狗外壳加密的notepad.exe为例,pro和superpro差不多.
主要原因有以下几个。

1 外壳采用32位密码加密,两个section 00401000 00405000被两个不同的32位密码加密
  密码来源于狗内算法单元的return code,  seed code由被加壳程序发出.
  !!!无狗无法得到正确的密码!!!
2 相应的解码算法,基本上无懈可击,所以唯一的办法是通过穷举.

但是鉴于很多朋友对这个壳非常迷惑。这里就说一下他的核心部分。
下面这部分code就是superpro的外壳的解码算法.一共执行三次.分别对
0040d004(这个特殊,可以不用理睬它)  00401000 00405000三个section解码.

注意:真正的N次叠加算法(算法学上该叫什么名字呢,知道的给说一声,我很感激).
只有第一个别解码的四个数据有突破口.其他都是无效数据
--------------------------------------------------------------------
:00419EF0 53                      push ebx
:00419EF1 33C0                    xor eax, eax
:00419EF3 56                      push esi
:00419EF4 57                      push edi
:00419EF5 8B742414                mov esi, dword ptr [esp+14]
:00419EF9 C1EE02                  shr esi, 02
:00419EFC 8BCE                    mov ecx, esi
:00419EFE 4E                      dec esi
:00419EFF 85C9                    test ecx, ecx
:00419F01 7431                    je 00419F34
:00419F03 8B542410                mov edx, dword ptr [esp+10]------->取section首地址
:00419F07 8B7C2418                mov edi, dword ptr [esp+18]------->取密码

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00419F32(C)
|-------------------------------------------------------------
:00419F0B 8BCF                    mov ecx, edi
:00419F0D 8BDF                    mov ebx, edi
:00419F0F C1E104                  shl ecx, 04
:00419F12 83C204                  add edx, 00000004            这段对密码进行换算
:00419F15 C1E305                  shl ebx, 05
:00419F18 03CF                    add ecx, edi
:00419F1A C1E909                  shr ecx, 09
:00419F1D 33CB                    xor ecx, ebx
:00419F1F 03F9                    add edi, ecx
-------------------------------------------------------------
:00419F21 8B4AFC                  mov ecx, dword ptr [edx-04]------>取section内数据
:00419F24 33CF                    xor ecx, edi
:00419F26 03C1                    add eax, ecx
:00419F28 894AFC                  mov dword ptr [edx-04], ecx
:00419F2B 33F8                    xor edi, eax------->这里把第一次解码的数据,暂存下四个数据
:00419F2D 8BCE                    mov ecx, esi------->要用到
:00419F2F 4E                      dec esi
:00419F30 85C9                    test ecx, ecx
:00419F32 75D7                    jne 00419F0B---------->下四个数据

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00419F01(C)
|
:00419F34 5F                      pop edi
:00419F35 5E                      pop esi
:00419F36 5B                      pop ebx
:00419F37 C20C00                  ret 000C
---------------------------------------------------------------------------------------

好了,这是核心部分,那么密码也不是完全不能得到的.狗狗III或者锁匠就可以得到他们两个,看起来好象是曙光在前了,
有这两个东东的人可以参照下面的格式,这是相应的notepad.exe产生的确record.dat最后5行数据
00000270 XX XX XX XX ,XX XX XX XX ,XX XX XX XX ,XX XX XX XX
00000280 XX XX XX XX ,XX XX XX XX ,XX XX XX XX ,XX XX XX XX
00000290 XX XX XX XX ,XX XX XX XX ,XX XX XX XX ,XX XX XX XX
000002A0 XX XX XX XX ,XX XX XX XX ,XX XX XX XX ,XX XX XX XX
                                  ------------ 00401000解码所雪密码
000002B0 XX XX XX XX ,XX XX XX XX ,XX XX XX XX ,XX XX XX XX
                                  ------------ 00405000解码所需密码

非常可惜的是,在上篇中提到的数据巨大的二叉数判断算法中的绝大部分代码都是为了对这两个密码进行CRC检验的.真是数量庞大,
建议性子急的的朋友就不要去试验了.通过了这些检验,我们手工的填入这些密码,可以恭喜的是,程序肯定可以运行了.
能到这里的朋友,前面那些对狗的简单判断,就不用提了.小菜一桩.

下面又该雪上加霜了.目前我们见识的是单一查询单元(一个查询单元占用2个cell, 32位)的外壳,如果有高手使用了两个(先不说两个以上,我不知道是否可以做到)的
查询单元的外壳,难度就增加了一倍.原理很简单.因为CRC检验的代码循环量加大了.

到这里我们的研究就算结束了,当然,如果要带狗脱壳,以上的就都算白说.

写的很仓促,不足之处请大家原谅
shou_xin[CCG] 新疆[BCG]其实是一个人哦