首页
社区
课程
招聘
[旧帖] [原创]Advanced Desktop Shield 1.8 算法分析 0.00雪花
发表于: 2007-9-27 13:22 3954

[旧帖] [原创]Advanced Desktop Shield 1.8 算法分析 0.00雪花

2007-9-27 13:22
3954
Advanced Desktop Shield 1.8  汉化版
===========================================
一个保存、恢复、管理和锁定你的桌面布局的工具、共享软件(单个注册 49 美元)

这个软件弹不上什么算法,可以说根本就没有算法,还好意思收人家$49 。^_^
===================================================================================
软件用UPX加壳,可能是修改过,用upx和peid的插件都不能脱壳。只好手工来脱了。

用OD载入,一开始停在pushad,upx的壳都是这样的。按Ctrl+F查找popad,来到:

0052FC6D      61                     popad                              ;来到这里,原本的upx壳在这
0052FC6E      8D4424 80        lea       eax, [esp-80]           ;条命令后就是jmp 到oep了,
0052FC72      6A 00                push    0                             ;它多了这几行
0052FC74      39C4                 cmp     esp, eax
0052FC76  ^ 75 FA                 jnz      short 0052FC72
0052FC78      83EC 80            sub     esp, -80
0052FC7B    - E9 4490F6FF     jmp     00498CC4                 ;跳到入口点

在00498CC4处下断,运行,中断下来,用OD的插件脱壳就可以了,连输入表都不用修。

用peid查一下,是delphi 7.0写的,当然用DeDe分析一下了。
找到注册对话框的"确定"按钮的地址(验证注册码可以按"确定"也可以按编辑框右边的"注册"按钮)
偶用的是"确定"。地址为00493F64。看一下DeDe的注释,只有一个自己的函数,其它的都是Delphi
的函数。进入这个函数,来到:

00493260        push    dword ptr fs:[eax]
00493263        mov     fs:[eax], esp
00493266        lea     edx, [ebp-$0C]
00493269        mov     eax, [esi+$0344]

* Reference to: Controls.TControl.GetText(TControl):TCaption;
|
0049326F        call    00457D80                        ;取偶们输入滴注册码
00493274        mov     eax, [ebp-$0C]
00493277        lea     edx, [ebp-$08]

* Reference to: AutoAdap.TWebApplicationStub.Get_ModulePath(TWebApplicationStub):System.AnsiString;
|           or: FMTBcd.IntegerToBcd(Integer):TBcd;
|           or: IBSQL.TIBXSQLVAR.GetAsTrimString(TIBXSQLVAR):AnsiString;
|
0049327A        call    0047FD44
0049327F        mov     edx, [ebp-$08]
00493282        mov     eax, $0049D124

* Reference to: System.@LStrAsg(void;void;void;void);
|
00493287        call    004041DC

|
0049328C        call    0049306C                        ;判断注册码,哎,想不到这么简单
00493291        mov     ebx, eax
00493293        test    bl, bl
00493295        jz      00493377                        ;注册失败时跳
0049329B        mov     byte ptr [esi+$0364], $01
                                                                         ;下面就是写入注册表,键值好像是变
                                                                         ;化的,对注册码加密的算法很好,
                                                                         ;为什么不用到生成注册码???
                       
进入0049306C:

先说一下偶输入的假注册码:0123456789abcd

0049306C        push    ebx
0049306D        push    esi
0049306E        push    edi
0049306F        mov     edi, 0049D124
00493074        xor     esi, esi
00493076        xor     ebx, ebx
00493078        mov     eax, [edi]
0049307A        call    00404448                    ; System.@LStrLen(String):Integer;
0049307F        cmp     eax, 0E                             ; 注册码长度应为14位
00493082        jnz     short 004930EB
00493084        mov     eax, [edi]                     ; edi指向注册码,= 号后面的是偶的注册码
00493086        cmp     byte ptr [eax], 33         ; 注册码第0位=0,要为3
00493089        sete    al
0049308C        and     eax, 7F
0049308F        add     esi, eax
00493091        mov     eax, [edi]
00493093        cmp     byte ptr [eax+2], 33        ; 注册码第2位=2,要为3
00493097        sete    al
0049309A        and     eax, 7F
0049309D        add     esi, eax
0049309F        mov     eax, [edi]
004930A1        cmp     byte ptr [eax+3], 39        ; 注册码第3位=3,要为9
004930A5        sete    al
004930A8        and     eax, 7F
004930AB        add     esi, eax
004930AD        mov     eax, [edi]
004930AF        cmp     byte ptr [eax+4], 30        ; 注册码第4位=4,要为0
004930B3        sete    al
004930B6        and     eax, 7F
004930B9        add     esi, eax
004930BB        mov     eax, [edi]
004930BD        cmp     byte ptr [eax+7], 38        ; 注册码第7位=7,要为8
004930C1        sete    al
004930C4        and     eax, 7F
004930C7        add     esi, eax
004930C9        mov     eax, [edi]
004930CB        cmp     byte ptr [eax+8], 38        ; 注册码第8位=8,要为8
004930CF        sete    al
004930D2        and     eax, 7F
004930D5        add     esi, eax
004930D7        mov     eax, [edi]
004930D9        cmp     byte ptr [eax+A], 32        ; 注册码第a位=a,要为2
004930DD        sete    al
004930E0        and     eax, 7F
004930E3        add     esi, eax
004930E5        cmp     esi, 7
004930E8        sete    bl
004930EB        mov     eax, ebx
004930ED        pop     edi
004930EE        pop     esi
004930EF        pop     ebx
004930F0        retn

上面的就是注册码了,是不是很简单呀!只要注册码满足:

3*390**88*2***(*号的内容可任意填),举个例子:
34390128892345

注册码保存在:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DRMRSX
------------------
Author:Suyana

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
学习了,分享快乐,谢谢
2007-9-27 13:50
0
游客
登录 | 注册 方可回帖
返回