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日开班!