newsoft88 发表于 2007-5-11 10:34:48

Excel服务器2006V6.8企业版的加密解密思路

【文章标题】: EXCEL服务器6.8的加密思路
【文章作者】: newsoft88
【作者邮箱】: [email protected]
【作者主页】: http://newsoft88.ys168.com
【作者QQ号】: 84485862
【软件名称】: 勤哲EXCEL服务器
【软件大小】: 99M
【下载地址】: 自己搜索下载
【加壳方式】: 无
【保护方式】: KEY文件
【编写语言】: VC
【使用工具】: OD IDA
【操作平台】: 98 2000XP
【软件介绍】: Excel服务器2006(企业版)电子表格软件
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
软件简单介绍:

Excel服务器2006(企业版)能够将电子表格软件MS Excel和大型数据库管理系统MS SQL Server 2000集成为一个网络数据业务协同工作平台。在这个平台上,用户可以充分发挥Excel的应用水平,通过图、表、表间公式,实现管理意图,轻松 、快速构建能够适应变化的ERP、OA、CRM、SCM等管理信息系统! 由于可以集成其它软件产品的数据库及具有工作流功能,因此又是一个非常实用的企业应用集成工具EAI。

过程:

有个朋友找我,说看看勤哲EXCEL服务器,我便从网上下了个6。8企业版,初步一看,认为还是以为简单,以前我记得有人解过5.6的版本,但有人说解的不全,我感觉是未找到完全加密点! 而且原程序没有加壳,且有一个月的试用期!这给解密敞开了一扇门!

还是老规矩,用OD载入EXCEL,运行后,直接启动登录界面,
300019C4 E> $6A 74      push 74
300019C6    .68 101B003>push EXCEL.30001B10
300019CB    .E8 4C01000>call EXCEL.30001B1C
300019D0    .33DB       xor ebx,ebx
300019D2    .895D E0    mov dword ptr ss:,ebx
300019D5    .53         push ebx                              ; /pModule => NULL
300019D6    .8B3D D0140>mov edi,dword ptr ds:[<&KERNEL32.GetM>; |kernel32.GetModuleHandleA
300019DC    .FFD7       call edi                              ; \GetModuleHandleA
300019DE    .66:8138 4D>cmp word ptr ds:,5A4D

此时,设置OD事件中断为:当DLL载入时,我们点登录按扭

当中断在ESSA。DLL 时,我们进入DLL中,
DLL中应该有以下几个加密点:
1)试用版的NAG提示:即30天
2)5 个客户端的限制
3)文件校验;即当你修改了一个或几个文件时,他会让你再也写不了服务器了!

对上述几点的跟踪:首先可以下断:MessageBoxA ,跟到NAG的提示与客户端的限制!
NAG提示的关键代码:本人未做详细记录,有兴趣自己调试!
02C5E5DA    .51         push ecx
02C5E5DB    .8942 08    mov dword ptr ds:,eax
02C5E5DE    .8B45 8C    mov eax,dword ptr ss:
02C5E5E1    .8942 0C    mov dword ptr ds:,eax
02C5E5E4    .8D55 A0    lea edx,dword ptr ss:
02C5E5E7    .52         push edx
02C5E5E8    .FFD7       call edi                              ;<&MSVBVM60.__vbaVarIndexLoad>
02C5E5EA    .8B1D 2413B>mov ebx,dword ptr ds:[<&MSVBVM60.__vb>;MSVBVM60.__vbaI2ErrVar
02C5E5F0    .83C4 1C    add esp,1C
02C5E5F3    .50         push eax
02C5E5F4    .FFD3       call ebx                              ;<&MSVBVM60.__vbaI2ErrVar>
以下是试用期的检查:

02C2B719    .8945 B0    mov dword ptr ss:,eax
02C2B71C    .74 56      je short ESSa.02C2B774
02C2B71E    .8B85 E4FEF>mov eax,dword ptr ss:
02C2B724    .8B95 D8FEF>mov edx,dword ptr ss:
02C2B72A    .8975 BC    mov dword ptr ss:,esi
02C2B72D    .8DB8 9C11C>lea edi,dword ptr ds:
02C2B733    .C702 67040>mov dword ptr ds:,80040467
02C2B739    .3937       cmp dword ptr ds:,esi
02C2B73B    .75 0C      jnz short ESSa.02C2B749
02C2B73D    .57         push edi
02C2B73E    .68 2CA6BE0>push ESSa.02BEA62C
02C2B743    .FF15 8012B>call dword ptr ds:[<&MSVBVM60.__vbaNe>;MSVBVM60.__vbaNew2
02C2B749    >8B3F       mov edi,dword ptr ds:

文件校验用的是CRC,可以手工改过跳转,也可以修正CRC,任选一种!

以做完后,存为一个全新的essa.dll!

此时我启动都感觉正常了,以为大功告成了! 可当用旧版数据,或数据量达到30天的后的时候,你发现,EXCEL服务器停止工作了!
此时才知道,远没有这么简单,EXCEL服务器,作为一种服务程序的提供,另外一重加密就是在服务提供对SQL数据进行检查定期限!

我们首先打开
ESSvcMgr.exe ,点启动服务后,很快就停止了! 用OD载入

004017C4 E> $68 9829400>push ESSvcMgr.00402998
004017C9    .E8 EEFFFFF>call <jmp.&MSVBVM60.#100>
004017CE    .0000       add byte ptr ds:,al
004017D0    .0000       add byte ptr ds:,al
004017D2    .0000       add byte ptr ds:,al
004017D4    .3000       xor byte ptr ds:,al
004017D6    .0000       add byte ptr ds:,al
004017D8    .40         inc eax
以下为启动标志
004053B4    .66:85DB    test bx,bx
004053B7       74 07      je short ESSvcMgr.004053C0
004053B9    .C745 E4 FF>mov dword ptr ss:,-1
004053C0    >8B1D 48104>mov ebx,dword ptr ds:[<&MSVBVM60.__vb>;MSVBVM60.__vbaHresultCheckObj
004053C6    >8B45 E4    mov eax,dword ptr ss:

00406C40    .33FF       xor edi,edi
00406C42    .68 9439400>push ESSvcMgr.00403994                ;UNICODE "ESService"
00406C47    .897D D8    mov dword ptr ss:,edi
00406C4A    .E8 E102000>call ESSvcMgr.00406F30
00406C4F    .66:3B46 34 cmp ax,word ptr ds:
00406C53       74 31      je short ESSvcMgr.00406C86
00406C55    .8B16       mov edx,dword ptr ds:
00406C57    .8D4D D8    lea ecx,dword ptr ss:
00406C5A    .51         push ecx
00406C5B    .50         push eax
00406C5C    .56         push esi
00406C5D    .66:8946 34 mov word ptr ds:,ax

本以为在这改后,可以使用的,但实际上搞错了,这个程序只是服务的HOOK的报告,就是侦察服务的运行状态,而非真正的服务控制!
而我们看出,真正的是ESService服务!对ESService用IDA反汇编后,你可以看到以下函数!
名称位于 ESServic, 条目 47
   地址=0040600C
   区段=.rdata
   类型=输入
   名称=ADVAPI32.SetServiceStatus
名称位于 ESServic, 条目 51
   地址=00406008
   区段=.rdata
   类型=输入    (已知)
   名称=ADVAPI32.StartServiceCtrlDispatcherA
名称位于 ESServic, 条目 41
   地址=0040601C
   区段=.rdata
   类型=输入
   名称=ADVAPI32.OpenServiceA
这些才是服务真正的启动点!
服务控制的原型如下:
#include "ntservice.h"

class CMyService : public CNTService
{
public:
      CMyService();
      virtual BOOL OnInit();
      virtual void Run();
      virtual BOOL OnUserControl(DWORD dwOpcode);

      void SaveStatus();

      // Control parameters
      int m_iStartParam;
      int m_iIncParam;

      // Current state
      int m_iState;
};

而对于 一个服务的调试,我们常常和附加的方式进行!这点在MSDN中也有描述,
我们对他IDA反汇编后,可以找到相关函数,加密的方式主要是:时间的控制!修改后,再启动。便正常工作了!

本文只对加密方法做个介绍,不汲及软件的破解,欢迎你来和我交流!

--------------------------------------------------------------------------------
【经验总结】
服务的加密应该还是有点特色的,多种方法混合使用,如文件校验、数据时间校验!都会给解密带来难度!由于本人文字水
平有限,写的不好,请不要向我扔石头!

--------------------------------------------------------------------------------
【版权声明】: 谢谢观看, 转载请注明作者并保持文章的完整, 谢谢!
                                                       2007年04月22日 22:15:46

i04630123 发表于 2007-5-13 15:15:48

用户可以充分发挥Excel的应用水平,通过图、表、表间公式,实现管理意图,轻松 、快速构建能够适应变化的ERP、OA、CRM、SCM等管理信息系统!

knife2002 发表于 2007-9-28 10:46:23

sand93338 发表于 2007-9-28 14:21:43

这是个好东西,不错哦

zhaoyafei19 发表于 2007-9-30 22:55:41

这软件不错
下来试试

哼哼呵呵 发表于 2008-10-9 13:11:30

已经有注册机了/:L
页: [1]
查看完整版本: Excel服务器2006V6.8企业版的加密解密思路