本来对于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]其实是一个人哦
- 标 题:抛砖引玉的说说圣天诺的外壳(下篇 (4千字)
- 作 者:shou_xin
- 时 间:2002-7-6
21:24:29
- 链 接:http://bbs.pediy.com