-
一个国内知名
WEB OFFICE
OCX
控件的暴力破解,很详细
收藏
标
题
:
【原创】一个国内知名
WEB
OFFICE
OCX
控件的暴力破解,很详细
作
者
:
gooddudu
时
间
:
2005-05-24,10:35
链
接
:
/?t=13922
本文特别详细
的描述了一个国内知名控件(
OCX
)的暴力破解方法,只限学
习交流,请不要非法使用,如
果是作者看见了,请不要生气,我可没拿你的控件卖钱,我
只是爱好破解而已,还是请作者自己提高加密
意识,保护知识产权吧。
< br>
[
破解控件
] NTKO
OFFICE
控件
V 2.5.0.3
(
OCX
)
[
破解方法
]
暴力破解
[
破解工具
] W32Dasm
,
UtrlEdit
,
Cabinet Manager 2001b 3.7
,
C
hinaTcp_CodeSign
,后两个是
CAB
包的打包和签名工具。
[
控件用途
]
很强大啦,做办公自动化系统的最佳控件,支持
VB
、
DEPHI
、
C++
、
ASP
、
JSP
、
Domino
等,具体参见官方网站:
< br>
。
[
郑重声明
]
本控件为国内知名的控件之一,非集团单位内部使用版本在
2000
< br>元左右,集团用户使用可能
在
5
千元左右,产品授权无限分发使用在
2
万左右,
OEM
就更贵了。以下破解只是为了自己私人使用,
发
表出来也是为了学习交流,请大家不要做违法的事情,也不要向我索取详细的破解资料和破解控件,其
实,破解很简单,我也悲叹为什么优秀的东西反而加密措施这么不严密。我已经通过折中途径告知作 者,
希望他能在
3.0
版本上自己写算
法加密或加壳,
OCX
能否加壳,以我现在的知识水平,还不清
楚。
一、特别说明
本控件除在
VB
< br>、
DEPHI
、
C++
中可以使用外(
VC
除外),也可在网页上使用
。网页上使用将是一个
.
CAB
包,使
用方法和
3721
上网伴侣、百度上网伴侣、
< br>Flash
插件一样,第一次打开含有此控件的网页时
将
弹出安装对话框。
在网页上嵌套代码的具体格式如下:
看见输入帐号和密码的地方了吗?就在网页调用的
param
参数里写。
因为是
CAB
包,还要在浏览器上显示
安装对话框,所以,此
CAB
包必须具有签名信息,
2.5.0.3
版本还
是作者公司自己的签名,<
/p>
IE
浏览器告知没有可信任的证书;
3.
0
版本已经获得了微软的相关认证,
IE
浏览
器告知可信任。
CAB
包中一般包含有
OCX
控件和控件的
INF
(信息)文件,所以,破解过程必须经过以下步骤:
1
、解包出
OCX
文件。用
Winrar
即可解开
2
、破解
OCX
文件
3
、打包破解的
OCX
和修改过的
INF
文件为
CAB
包。使用工具为
Cabinet Manager
。
Winrar
不能打包
CAB
文件的。
4
、
CAB
包
重新签名。使用工具为
ChinaTcp_CodeSign
。
微软也有一个签名工具,就在
VC5.0
版本安
装盘的一个目录下,
具体位置我忘记了;
本来微软网站
也提供下载,
后来好象是因为控件注册的安全问题,
链接去年就
已失效。
有关
Cabinet Manager
和
ChinaTcp_CodeSign
,网上有下载,但不好
找的。具体使用方法,自己看它
们的帮助文件即可,很简单。这里是讲
< br>OCX
本身的破解。
二、破解思路
本控件有帐号和密码限制,如果不输入正确的帐号和密码,自动转成
“
试用
”
版本,试用版本有定期时间限
制,从发行到过期是
1
个月的时间,过期将不能正常使
用;如输入正确的帐号和密码,系统将不检测过期
日期。
p>
本次破解我将使用暴力破解,不探讨复杂的帐号到正确密码的算法。
首先是过期检测。因为不输入正确的帐号和密码将检测过期,所以必须破解,思路是不让
其检测日期,或
者将过期日期推到
9999
年。
再次是帐号和密码检测。做到随便输入帐号和密码都
可正常使用。
还要避免一个破解后的代码执行逻辑问题,就是
正确的帐号和密码也可以使用,这将不是只修改一个地方
的跳转指令能解决的问题。思路
是,不论输入什么帐号和密码,系统都认为是错误的,这样就可以只修改
跳转指令解决。
对于一些无关紧要的提示信息,不做完美破解,可直接修改资
源文件(如
“
关于
”
< br>对话框),也可直接在源
代码中将信息编码的字符抹成空格(
20
)。
由于是
OCX
控件,
自身不能运行
,
所以不能动态跟踪,
我一开始想用
V
B
或
C++
做个使用此控件的程序,<
/p>
后来发现跟踪麻烦,
很难发现关键代码处。
后来用
W32Dasm
反编译了一下,
觉得汇编代码很亲切,
以我
的汇编语言水平,还不如静态分析
呢。破解工作就这样开始了,耗时近
4
个小时搞定。
破解着手点:
日期检测一般要读取本地时间,本身要用一个
API
函数:
alTime
。
帐号密码检测要比较字符串,本身也要调用一个
API
函数:
pA
。
W32Dasm
反汇编后就提供本控件调用的输入输出
API
函数,
双击函数行,
就可快速切换到相应的调用汇
编代码
处,利用这个原理,作为破解的着手点。
三、详细破解开始
因为此控件有时间限制,肯定要调用
WINDOWS API<
/p>
函数查询当前破解机器的本地时间,这个
API
< br>为
K
alTime
,所以要查找
汇编代码中那些地方调用了此函数。打开
W32Dasm
的菜单
“
函
数
”
p>
-
“
输入函数
”<
/p>
列表,寻找到
alTime
,双击之,<
/p>
W32Dasm
汇编区域代码将切换到
调
用
alTime
处。
如下代码:
* Reference To: alTime,
Ord:012Fh
|
:22018AE0 FF15CC000222
Call dword ptr [220200CC]
:22018AE6
6A10 push 00000010
:22018AE8 8D45E0 lea
eax, dword ptr [ebp-20]
:22018AEB 6A00
push 00000000
:22018AED 50
push eax
:22018AEE E89D100000
call 22019B90
注意此时不要着急往下浏览代
码,应该往上浏览,为什么呢?因为此处代码可能不是程序的主过程,很可
能是一个进行
过期检测的自编函数,这是因为程序可能在很多地方调用过期检测,所以一般都要编写成一
个公用函数调用。
那么,
往上浏览到什么地方停呢?应该慢慢
翻到具有调用入口的地方停,
记下这些入口,
后面还要继续望上
追溯呢!
以下为上翻找到的调用处
代码,完整的日期检测要从这里开始分析。
* Referenced by a CALL at Addresses:
|:22003CDC , :220044B3 , :22004585
, :220056FC
‘4
个调用入口
|
:22018AD5 55
push ebp
:22018AD6 8BEC
mov ebp, esp
:22018AD8 83EC30
sub esp, 00000030
:22018ADB 8D45D0
lea eax, dword ptr [ebp-30]
:22018ADE
56 push esi
:22018ADF 50 push
eax
完整的过期检测函数代码如下:
* Referenced by a CALL at Addresses:
|:22003CDC , :220044B3 , :22004585 ,
:220056FC
‘4
个调用入口
‘W32Dasm
反汇编器告诉我们,以上地址的代码处都
CALL
了这里的过期检测函数,你可以按以上地
址寻找并修改每个
CA
LL
代码后面的判断代码指向来完成暴力不过期。但会存在一个问题,因为判断逻辑
p>
反了,如果现在还没过期,程序会报告过期,过期了反而认为不过期,有意思吧?!所以,我
们应该分析
一下过期检测代码,
看能不能通过修改下面的代码把
过期日期往后推推呢?!
如改个
9999
年
12
月
28
日
总可以吧!
好,咱们继续往下看吧!
|
:22018AD5 55 push
ebp
:22018AD6 8BEC
mov ebp, esp
:22018AD8 83EC30
sub esp, 00000030
:22018ADB 8D45D0
lea eax, dword ptr [ebp-30]
:22018ADE
56 push esi
:22018ADF 50 push
eax
* Reference To: alTime,
Ord:012Fh
|
:22018AE0
FF15CC000222 Call dword ptr [220200CC]
:22018AE6 6A10 push
00000010
:22018AE8 8D45E0
lea eax, dword ptr [ebp-20]
:22018AEB
6A00 push 00000000
:22018AED 50 push
eax
:22018AEE E89D100000
call 22019B90
* Reference
To: TimeToFileTime, Ord:02C8h
|
:22018AF3 8B35EC000222 mov
esi, dword ptr [220200EC]
:22018AF9
83C40C add esp, 0000000C
:22018AFC 8D45F0 lea
eax, dword ptr [ebp-10]
:22018AFF
66C745E0D507 mov [ebp-20], 07D5
'
↑关键部分
1
找到了,就是上面那行代码,
“07D5”
是什么,就是
10
进制的
“2
005”
,作者直接把日期写
进程序了!看来,控件在
2005
年过期。改成:
270F
,即
“9999”
年。哈,感觉真爽。下面还有月和
日的
赋值代码。
:22018B05 50 push
eax
:22018B06 8D45D0
lea eax, dword ptr [ebp-30]
:22018B09
50 push eax
:22018B0A 66C745E20300 mov
[ebp-1E], 0003
'
↑关键部分
2
找到了,就是上面那行代码,
< br>“0003”
是什么,就是
10
进制的
3
月,看来,控件在
2005<
/p>
年
3
月过期。改成:
000C
,即
“12”
月。哈,其
实这是多余的,因为年改了就行了。
:22018B10 66C745E61700 mov
[ebp-1A], 0017
'
↑关键部分
3
找到了,就是上面那行代码,
“0017”
是什么,就是
10
进
制的
23
日,看来,控件在
2005<
/p>
年
3
月
23
p>
日过期。改成:
001C
,即
“28”
日。哈,其实这也是多余的。
:22018B16 FFD6
call esi
:22018B18 8D45F8
lea eax, dword ptr [ebp-08]
:22018B1B
50 push eax
:22018B1C 8D45E0 lea
eax, dword ptr [ebp-20]
:22018B1F 50
push eax
:22018B20 FFD6
call esi
:22018B22 8D45F8
lea eax, dword ptr [ebp-08]
:22018B25
50 push eax
:22018B26 8D45F0 lea
eax, dword ptr [ebp-10]
:22018B29 50
push eax
* Reference To:
eFileTime, Ord:0023h
|
:22018B2A FF15E8000222
Call dword ptr [220200E8]
:22018B30
33C9 xor ecx, ecx
:22018B32 5E pop
esi
:22018B33 85C0
test eax, eax
:22018B35 0F9FC1
setg cl
:22018B38 8BC1
mov eax, ecx
:22018B3A C9
leave
:22018B3B C3
ret
这不,
我们把过期日期推到
了
9999
年
12
月
28
日,
那所有调用过期检测函
数的
CALL
后面的判断跳转代
码就不
需要修改了,也不会再出逻辑问题。
***************
因为此控件有帐号和密码检测,
很可
能要调用
WINDOWS API
函数的字符串比较函数,
p>
这个
API
为
KE
R
pA
,
所以要查找汇编代码中那些地
方调用了此函数。
打开
W32Dasm
的菜单
“
函数
”
-
“
输入
函数
”
列表,寻找到
KERNEL32. lstrcmpA
p>
,双击之,
W32Dasm
汇编区域代码将
切换到调用
KERNEL3
2. lstrcmpA
处,
这一般会有多个,
因为控件中的字符串比较一
般有多个,
不一定都是帐号和密码检测的,
这需要自己花点时间
判断分析。
以下为帐号和密码检测的
pA
调用处。
* Reference To: pA,
Ord:0329h
|
-
-
-
-
-
-
-
-
-
上一篇:水至清则无鱼 人至察则无徒 典故的意思
下一篇:miRNA综述文献翻译