首页
社区
课程
招聘
[旧帖] [原创]SQL SERVER 存储过程解密工具 v6.0算法分析 + DELPHI注册机源码 0.00雪花
2008-1-20 21:49 5805

[旧帖] [原创]SQL SERVER 存储过程解密工具 v6.0算法分析 + DELPHI注册机源码 0.00雪花

2008-1-20 21:49
5805
PS:高手飘过吧!看了浪费你们的时间。

在分析一个数据库软件时,发现他的存储过程是加密的,烦呀。

急,于是在网上找了一个解密工具,

找到了,高兴中,要注册?一看是在线免费注册,又高兴了一把。

然后发觉,免费注册的网页跟本就打不开。

看来,又要自己动手了。

=======================================

SQL SERVER 存储过程解密工具 v6.0

软件描述:

专门针对SQL SERVER2000存储过程的一款解密软件

未注册限制:

只能解密1000个字符,要解密1000以上的,需要注册;

软件采用的是免费注册的方式,可是注册网页己经无法再打开了。

急用,没办法就。。。。。。。。。。。。。。。

老办法先查是否有壳,,,呵UPX壳,,,用 UPXSHELL 解压吧,

然后w32sm 反编译一下,查找 注册码不正确提示 的位置

很容易发现: 0048E1C1 je 0059E220 这一句, 跳就注册成功,不跳就注册失败。

现在用 OD 载入

直接转到 0048E1C1 这个地址,然后往上看看,将断点断在此段代码的开始位置  0048E17D

0048E17D  |.  55            push    ebp
0048E17E  |.  68 0EE34800   push    0048E30E
0048E183  |.  64:FF30       push    dword ptr fs:[eax]
0048E186  |.  64:8920       mov     dword ptr fs:[eax], esp
0048E189  |.  8D55 FC       lea     edx, dword ptr [ebp-4]
0048E18C  |.  8B83 64030000 mov     eax, dword ptr [ebx+364]
0048E192  |.  E8 61F0FAFF   call    0043D1F8                         ;  读出假注册码
0048E197  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
0048E19A  |.  50            push    eax
0048E19B  |.  8D55 F4       lea     edx, dword ptr [ebp-C]
0048E19E  |.  8B83 60030000 mov     eax, dword ptr [ebx+360]
0048E1A4  |.  E8 4FF0FAFF   call    0043D1F8
0048E1A9  |.  8B45 F4       mov     eax, dword ptr [ebp-C]
0048E1AC  |.  8D4D F8       lea     ecx, dword ptr [ebp-8]
0048E1AF  |.  66:BA BE07    mov     dx, 7BE
0048E1B3  |.  E8 78E0FFFF   call    0048C230                         ;  F7跟进
0048E1B8  |.  8B55 F8       mov     edx, dword ptr [ebp-8]
0048E1BB  |.  58            pop     eax
0048E1BC  |.  E8 4F67F7FF   call    00404910
0048E1C1  |.  74 5D         je      short 0048E220                   ;  跳就成功,不跳就弹出注册码不对;

------------------
0048E1B3 跟进到以下代码:

0048C230  /$  55            push    ebp
0048C231  |.  8BEC          mov     ebp, esp
0048C233  |.  83C4 F0       add     esp, -10
0048C236  |.  53            push    ebx
0048C237  |.  56            push    esi
0048C238  |.  57            push    edi
0048C239  |.  33DB          xor     ebx, ebx
0048C23B  |.  895D F4       mov     dword ptr [ebp-C], ebx
0048C23E  |.  894D F8       mov     dword ptr [ebp-8], ecx
0048C241  |.  8BF2          mov     esi, edx
0048C243  |.  8945 FC       mov     dword ptr [ebp-4], eax
0048C246  |.  33C0          xor     eax, eax
0048C248  |.  55            push    ebp
0048C249  |.  68 D4C24800   push    0048C2D4
0048C24E  |.  64:FF30       push    dword ptr fs:[eax]
0048C251  |.  64:8920       mov     dword ptr fs:[eax], esp
0048C254  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
0048C257  |.  E8 7085F7FF   call    004047CC
0048C25C  |.  8BD0          mov     edx, eax
0048C25E  |.  8D45 F4       lea     eax, dword ptr [ebp-C]
0048C261  |.  E8 EA88F7FF   call    00404B50
0048C266  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
0048C269  |.  E8 5E85F7FF   call    004047CC
0048C26E  |.  84C0          test    al, al
0048C270  |.  76 41         jbe     short 0048C2B3
0048C272  |.  8845 F3       mov     byte ptr [ebp-D], al
0048C275  |.  B3 01         mov     bl, 1
0048C277  |>  8D45 F4       /lea     eax, dword ptr [ebp-C]         
0048C27A  |.  E8 9D87F7FF   |call    00404A1C
0048C27F  |.  8BFB          |mov     edi, ebx
0048C281  |.  81E7 FF000000 |and     edi, 0FF
0048C287  |.  8B55 FC       |mov     edx, dword ptr [ebp-4]          ;  逐一取字符
0048C28A  |.  8A543A FF     |mov     dl, byte ptr [edx+edi-1]        ;  将ASCII码放入DL
0048C28E  |.  0FB7CE        |movzx   ecx, si
0048C291  |.  C1E9 08       |shr     ecx, 8                          ;  ECX=ECX shr 8
0048C294  |.  32D1          |xor     dl, cl                          ;  DL = DL XOR CL
0048C296  |.  885438 FF     |mov     byte ptr [eax+edi-1], dl        ;  将DL转换为字符
0048C29A  |.  8B45 FC       |mov     eax, dword ptr [ebp-4]
0048C29D  |.  0FB64438 FF   |movzx   eax, byte ptr [eax+edi-1]       ;  取字符送入EAX
0048C2A2  |.  66:03F0       |add     si, ax                          ;  SI = SI + AX
0048C2A5  |.  66:83C6 32    |add     si, 32                          ;  SI = SI + 32
0048C2A9  |.  66:83C6 32    |add     si, 32                          ;  SI = SI + 32
0048C2AD  |.  43            |inc     ebx
0048C2AE  |.  FE4D F3       |dec     byte ptr [ebp-D]
0048C2B1  |.^ 75 C4         \jnz     short 0048C277
0048C2B3  |>  8B45 F8       mov     eax, dword ptr [ebp-8]

算法描述如下:

SI = $7BE   

逐一取机器码转成ASCII码到 DL 中

将 SI 送入 ECX中 即  ECX = SI

ECX = ECX shr 8

DL = DL XOR CL

DL 转换成 字符

======

生成新的 SI

取字符 放入 EAX 中

SI = SI + AX
SI = SI + $32
SI = SI + $32

DELPHI注册机源代码如下:

function GenCode(const sCode:string):string;
var
  SI,DL,CL,AL:Dword;
  ss:string;
  i:Integer;
begin
  SI := $7BE;    //初始值
  DL := $0;
  CL := $0;
  AL := $0;
  SS:='';
  for i :=1 to length(sCode)  do begin
    DL := Ord(sCode[i]);
    CL := SI ;
    CL := CL shr 8;
    DL := DL XOR CL;
    SS := SS + chr(DL);
    AL := ord(sCode[i]);
    SI := SI + AL;
    SI := SI + $32;
    SI := SI + $32;
  end;
  Result := SS;
end;

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞0
打赏
分享
最新回复 (4)
雪    币: 200
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
haduke 2008-1-21 08:50
2
0
用过这个软件,功能还行
我算法不行,直接暴破
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JoinR 2008-1-21 09:51
3
0
支持一下.....
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ynboyinkm 2008-1-27 02:18
4
0
明码比较,用keymake就可以做出注册机!
雪    币: 214
活跃值: (15)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
inbreak 2 2008-1-29 22:34
5
0
无语。。。。。。。。。。。

关键不在于注册。

照你那么说,改一个字节,直接暴破,岂不是更好?
游客
登录 | 注册 方可回帖
返回