能力值:
( LV2,RANK:10 )
|
-
-
2 楼
自己顶一下。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
顶一下。
不过小弟无Delphi经验。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
我是一个新手,控件破解好象这个方面的资料很少,作为一个程序员,破解程序的时候可能比较少,而破解控件和dll是真正有用的东西。强烈要求各位高手发布些这样的破解文章。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
最初由 kevinmhw 发布 我是一个新手,控件破解好象这个方面的资料很少,作为一个程序员,破解程序的时候可能比较少,而破解控件和dll是真正有用的东西。强烈要求各位高手发布些这样的破解文章。
跟dll差不多的,你用DeDe反汇编修改。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
前阵子破过一个。改了两个文件,一个DCU,一个BPL.
BPL的好办,OD即可,改也很容易。DCU用DEDE 反编译,找可疑的函数,或查关键字串,修改要用uedit32 ,懂ASM的话就简单多了。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
刚好是六个字
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
如果仅是改一两个跳转,那也未免过于简单了。我指的自然不是这个问题。
以Fast*port中的5页限制为例,源码应当为如下形式:
for i := 0 to 4 do Pages.Print;
那么编译后汇编指令则可能为(设1~n为冗余代码,可以利用):
1:
2:
3:
4:
5:
n:
@Loop: xor ebx,ebx
mov eax,ebx
call Pages.Print
inc ebx
cmp ebx,5
jnz @Loop
pop ebx
pop ebp
ret
如果要解除限制,最理想的办法是把程序改为:
for i := 0 to PagesCount - 1 do Pages.Print;
那么我需要得到PagesCount值,假设通过跟踪已知“Call GetPageCount”即可得到PagesCount,那么现在的问题是:
1、如何在dcu中插入Call GetPageCount这样的指令而能让连接程序自动进行重定位?
2、如果需要改动原代码中的“Call Pages.Print”这条指令的位置,怎样能做到?
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
Fast*这个控件可能比较特殊一些,冗余代码比较多,相对发挥余地较大,而且“Call GetPageCount”恰巧又是“Call [edx]”这样的形式出现的,所以可以小心构造破解代码,避开重定位问题。比如上面这段我就可以改成:
push esi
mov eax,[ebp+8]
mov edx,[eax]
call [edx] ;Call GetPageCount
mov esi,eax
@@Loop:
xor ebx,ebx
mov eax,ebx
call Pages.Print
inc ebx
cmp ebx,esi
jl @@Loop
pop esi
pop ebx
pop ebp
ret
恰好不需要动Pages.Print那个Call指令,这样就回避了重定位的问题,可是,其它控件也会有这么好运吗?
|
能力值:
( LV6,RANK:90 )
|
-
-
10 楼
似乎不错,呵呵,不过我不大懂这个!~
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
最初由 Easycode 发布 Fast*这个控件可能比较特殊一些,冗余代码比较多,相对发挥余地较大,而且“Call GetPageCount”恰巧又是“Call [edx]”这样的形式出现的,所以可以小心构造破解代码,避开重定位问题。比如上面这段我就可以改成:
push esi mov eax,[ebp+8] mov edx,[eax] ........
dcu需要重定位的?
|
能力值:
( LV13,RANK:460 )
|
-
-
12 楼
不太明白,关注。
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
再顶顶吧,感觉这个问题还是比较有意义的。
|
|
|