一個delphi控制元件的破解 (12千字)
Abakus是一套Delphi的工控控制元件,很好的。可惜搞不到原始碼。
從下面這個地方可以下載到2.01版,沒有原始碼。
URL:http://www.torry.net/vcl/indicat/packs/abkda.zip
大小: 1159615
表現症狀:當你放一個控制元件到你的Form,會有一個information的對話方塊出現;當你編譯好一個程式,
在delphi沒有執行的情況下,會有一個Error的對話方塊出現。
破解工具:Dede250,Ultraedit。
作者:sxlz
1。分析:看看所有的DCU檔案,有沒有可疑的地方,發現一個_abinfo.dcu,好像有問題!先拿它試試,
如果不成的話,最看別的。
2。執行Dede.exe,選取DCU Dumper,把_abinfo.dcu給Dumpe一下。
3。發現:
uses
_PrjInfo {
A:pName, A:pVersion, A:Copyright, A:Mail, A:WWW},
_AbProc {
A:AbDelphiIsRunning},
IniFiles,
裡有AbDelphiIsRunning,哈哈,繼續查AbDelphiIsRunning,又發現:
procedure TAbInfo.nagTimerEvent (Self: TAbInfo; sender: System.TObject);
begin
00000000 : 55
PUSH EBP
00000001 : 8B EC
MOV EBP,ESP
00000003 : 6A 00
PUSH $00
00000005 : 6A 00
PUSH $00
00000007 : 53
PUSH EBX
00000008 : 8B D8
MOV EBX,EAX
0000000A : 33 C0
XOR EAX,EAX
0000000C : 55
PUSH EBP
0000000D : 68(50 01 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$00000150
00000012 : 64 FF 30
PUSH DWORD PTR FS:[EAX]
00000015 : 64 89 20
MOV DWORD PTR FS:[EAX],ESP
00000018 : A1(00 00 00 00
MOV EAX,DWORD PTR [AbInfo{0x44}]
0000001D : 8B 40 1C
MOV EAX,DWORD PTR [EAX+28]
00000020 : 33 D2
XOR EDX,EDX
00000022 : E8(00 00 00 00
CALL TTimer.SetEnabled{0x10}
00000027 : A1(00 00 00 00
MOV EAX,DWORD PTR [pName{0x2}]
0000002C : FF 30
PUSH DWORD PTR [EAX]
0000002E : 68(64 01 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$00000164
00000033 : A1(00 00 00 00
MOV EAX,DWORD PTR [pVersion{0x3}]
00000038 : FF 30
PUSH DWORD PTR [EAX]
0000003A : 68(70 01 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$00000170
0000003F : 68(70 01 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$00000170
00000044 : 68(7C 01 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$0000017C
00000049 : 68(70 01 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$00000170
0000004E : 68(C4 01 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$000001C4
00000053 : 68(70 01 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$00000170
00000058 : 68(0C 02 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$0000020C
0000005D : 68(70 01 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$00000170
00000062 : 68(70 01 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$00000170
00000067 : 68(40 02 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$00000240
0000006C : A1(00 00 00 00
MOV EAX,DWORD PTR [Mail{0x5}]
00000071 : FF 30
PUSH DWORD PTR [EAX]
00000073 : 68(54 02 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$00000254
00000078 : 68(70 01 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$00000170
0000007D : A1(00 00 00 00
MOV EAX,DWORD PTR [WWW{0x6}]
00000082 : FF 30
PUSH DWORD PTR [EAX]
00000084 : 68(68 02 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$00000268
00000089 : 68(70 01 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$00000170
0000008E : 68(70 01 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$00000170
00000093 : A1(00 00 00 00
MOV EAX,DWORD PTR [Copyright{0x4}]
00000098 : FF 30
PUSH DWORD PTR [EAX]
0000009A : 8D 45 FC
LEA EAX,DWORD PTR [EBP-4]
0000009D : BA 15 00 00 00
MOV EDX,$00000015
000000A2 : E8(00 00 00 00
CALL @LStrCatN{0x3B}
000000A7 : 68(88 02 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$00000288
000000AC : FF 73 04
PUSH DWORD PTR [EBX+4]
000000AF : 68(B4 02 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$000002B4
000000B4 : 68(70 01 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$00000170
000000B9 : 68(70 01 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$00000170
000000BE : 68(40 02 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$00000240
000000C3 : A1(00 00 00 00
MOV EAX,DWORD PTR [Mail{0x5}]
000000C8 : FF 30
PUSH DWORD PTR [EAX]
000000CA : 68(54 02 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$00000254
000000CF : 68(70 01 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$00000170
000000D4 : A1(00 00 00 00
MOV EAX,DWORD PTR [WWW{0x6}]
000000D9 : FF 30
PUSH DWORD PTR [EAX]
000000DB : 68(68 02 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$00000268
000000E0 : 68(70 01 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$00000170
000000E5 : 68(70 01 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$00000170
000000EA : A1(00 00 00 00
MOV EAX,DWORD PTR [Copyright{0x4}]
000000EF : FF 30
PUSH DWORD PTR [EAX]
000000F1 : 8D 45 F8
LEA EAX,DWORD PTR [EBP-8]
000000F4 : BA 0E 00 00 00
MOV EDX,$0000000E
000000F9 : E8(00 00 00 00
CALL @LStrCatN{0x3B}
000000FE : E8(00 00 00 00
CALL AbDelphiIsRunning{0x8} --------------------檢查delphi有沒有執行
00000103 : 66 85 C0
TEST AX,AX
00000106 : 74 15
JE +21; (0x11D)
--------------------跳過去的話可以看到有halt0,憑直覺就不好,那就不跳好了。
00000108 : 6A 00
PUSH $00
0000010A : 66 8B 0D(C4 02 00 00 MOV
CX,WORD PTR [TAbInfo.nagTimerEvent{0x4C}+$000002C4]
00000111 : B2 02
MOV DL,$02
00000113 : 8B 45 FC
MOV EAX,DWORD PTR [EBP-4]
00000116 : E8(00 00 00 00
CALL MessageDlg{0x12}
0000011B : EB 18
JMP +24; (0x135)
0000011D : 6A 00
PUSH $00
0000011F : 66 8B 0D(C4 02 00 00 MOV
CX,WORD PTR [TAbInfo.nagTimerEvent{0x4C}+$000002C4]
00000126 : B2 01
MOV DL,$01
00000128 : 8B 45 F8
MOV EAX,DWORD PTR [EBP-8]
0000012B : E8(00 00 00 00
CALL MessageDlg{0x12}
00000130 : E8(00 00 00 00
CALL @Halt0{0x3A}
00000135 : 33 C0
XOR EAX,EAX
00000137 : 5A
POP EDX
00000138 : 59
POP ECX
00000139 : 59
POP ECX
0000013A : 64 89 10
MOV DWORD PTR FS:[EAX],EDX
0000013D : 68(57 01 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}+$00000157
00000142 : 8D 45 F8
LEA EAX,DWORD PTR [EBP-8]
00000145 : BA 02 00 00 00
MOV EDX,$00000002
0000014A : E8(00 00 00 00
CALL @LStrArrayClr{0x3C}
0000014F : C3
RET NEAR
00000150 : E9(00 00 00 00
JMP @HandleFinally{0x3D}
00000155 : EB EB
JMP -21; (0x142)
00000157 : 5B
POP EBX
00000158 : 59
POP ECX
00000159 : 59
POP ECX
0000015A : 5D
POP EBP
0000015B : C3
RET NEAR
這個可以消除information的對話方塊。
4。查前面有函式:
var
AbInfo:TAbInfo;
const
Reg:System.AnsiString = raw[$0..$3]at $157
0: ....{08 00 00 00|K5 Reg{0x45}, K1 _NF_46;
function LoadAbakusInfo: TAbInfo;
那就找LoadAbakusInfo,發現:
function LoadAbakusInfo: TAbInfo;
begin
00000000 : 53
PUSH EBX
00000001 : 56
PUSH ESI
00000002 : BB(00 00 00 00
MOV EBX,AbInfo{0x44}---------這一行帶(的是動態地址
00000007 : 83 3B 00
CMP DWORD PTR [EBX],0--------這個改成1,跳過去就妥了!
0000000A : 0F 85 B2 00 00 00
JNE +178; (0xC2)
00000010 : B2 01
MOV DL,$01
00000012 : A1(00 00 00 00
MOV EAX,DWORD PTR [TAbInfo{0x42}]
00000017 : E8(00 00 00 00
CALL TAbInfo.Create{0x49}
0000001C : 89 03
MOV DWORD PTR [EBX],EAX
0000001E : 8B 03
MOV EAX,DWORD PTR [EBX]
00000020 : FF 40 18
INC DWORD PTR [EAX+24]
00000023 : 8B 0D(00 00 00 00
MOV ECX,DWORD PTR [Application{0x19}]
00000029 : 8B 09
MOV ECX,DWORD PTR [ECX]
0000002B : B2 01
MOV DL,$01
0000002D : A1(00 00 00 00
MOV EAX,DWORD PTR [TTimer{0xC}]
00000032 : E8(00 00 00 00
CALL TTimer.Create{0xD}
00000037 : 8B F0
MOV ESI,EAX
00000039 : 8B 03
MOV EAX,DWORD PTR [EBX]
0000003B : 89 70 1C
MOV DWORD PTR [EAX+28],ESI
0000003E : 8B C6
MOV EAX,ESI
00000040 : BA F4 01 00 00
MOV EDX,$000001F4
00000045 : E8(00 00 00 00
CALL TTimer.SetInterval{0xE}
0000004A : 8B 03
MOV EAX,DWORD PTR [EBX]
0000004C : 50
PUSH EAX
0000004D : 68(00 00 00 00
PUSH TAbInfo.nagTimerEvent{0x4C}
00000052 : 8B 03
MOV EAX,DWORD PTR [EBX]
00000054 : 8B 40 1C
MOV EAX,DWORD PTR [EAX+28]
00000057 : E8(00 00 00 00
CALL TTimer.SetOnTimer{0xF}
0000005C : 8B 03
MOV EAX,DWORD PTR [EBX]
0000005E : 8B 40 1C
MOV EAX,DWORD PTR [EAX+28]
00000061 : B2 01
MOV DL,$01
00000063 : E8(00 00 00 00
CALL TTimer.SetEnabled{0x10}
00000068 : 8B 03
MOV EAX,DWORD PTR [EBX]
0000006A : 83 C0 04
ADD EAX,4
0000006D : 8B 15(00 00 00 00
MOV EDX,DWORD PTR [pName{0x2}]
00000073 : 8B 12
MOV EDX,DWORD PTR [EDX]
00000075 : E8(00 00 00 00
CALL @LStrAsg{0x35}
0000007A : 8B 03
MOV EAX,DWORD PTR [EBX]
0000007C : 83 C0 08
ADD EAX,8
0000007F : 8B 15(00 00 00 00
MOV EDX,DWORD PTR [pVersion{0x3}]
00000085 : 8B 12
MOV EDX,DWORD PTR [EDX]
00000087 : E8(00 00 00 00
CALL @LStrAsg{0x35}
0000008C : 8B 03
MOV EAX,DWORD PTR [EBX]
0000008E : 83 C0 0C
ADD EAX,12
00000091 : 8B 15(00 00 00 00
MOV EDX,DWORD PTR [Copyright{0x4}]
00000097 : 8B 12
MOV EDX,DWORD PTR [EDX]
00000099 : E8(00 00 00 00
CALL @LStrAsg{0x35}
0000009E : 8B 03
MOV EAX,DWORD PTR [EBX]
000000A0 : 83 C0 10
ADD EAX,16
000000A3 : 8B 15(00 00 00 00
MOV EDX,DWORD PTR [Mail{0x5}]
000000A9 : 8B 12
MOV EDX,DWORD PTR [EDX]
000000AB : E8(00 00 00 00
CALL @LStrAsg{0x35}
000000B0 : 8B 03
MOV EAX,DWORD PTR [EBX]
000000B2 : 83 C0 14
ADD EAX,20
000000B5 : 8B 15(00 00 00 00
MOV EDX,DWORD PTR [WWW{0x6}]
000000BB : 8B 12
MOV EDX,DWORD PTR [EDX]
000000BD : E8(00 00 00 00
CALL @LStrAsg{0x35}
000000C2 : 8B 03
MOV EAX,DWORD PTR [EBX]
000000C4 : 5E
POP ESI
000000C5 : 5B
POP EBX
000000C6 : C3
RET NEAR
end;
這個可以解決Error對話方塊的問題。
5。改完後,開啟AbakusD5.dpk重新編譯一下,重新安裝。
6。要是有原始碼的話還是原始碼的好,誰有的話發給我testdog@sina.com非常感謝。
7。第一次寫得不好,請原諒。
相關文章
- 一個Delphi程式的破解: Icon Catcher (1千字)2000-03-16
- delphi控制元件破解篇----ThemeEngine
2.9.1 (1千字)2015-11-15控制元件
- Delphi元件破解教程(一)
(3千字)2015-11-15元件
- Delphi控制元件EasyTable的去除NagScreen (4千字)2001-03-16控制元件
- 我的破解心得(12) (1千字)2001-03-13
- 一個超容易破解的軟體! (5千字)2001-01-21
- Restools系列完全破解~~~~~~~~~~~~~~~~~~~~~~~ (12千字)2002-03-03REST
- 控制元件破解指南(轉貼) (4千字)2002-06-27控制元件
- 對Delphi控制元件的一點改良 (轉)2008-06-29控制元件
- 對Delphi控制元件的一點改良(二) (轉)2008-06-29控制元件
- delphi 控制元件的拿來主義(一) (轉)2008-07-23控制元件
- 對Delphi控制元件的一點改良(三) (轉)2007-12-12控制元件
- 一個典型的時間限制軟體的破解 (4千字)2001-01-29
- 一個簡單的keyfile保護的破解 (3千字)2001-06-15
- XceedZIP v4.1的License破解(概略) (12千字)2001-01-26
- Soundnailsd的破解教程(一) (9千字)2001-10-17AI
- 第二個CrackMe的破解 (6千字)2001-08-17
- 貼個程式的smc破解。 (1千字)2001-09-24
- 兩個月的破解回顧以及7個軟體的破解! (3千字)2000-12-28
- 一個不錯的雪花屏保破解手記 (1千字)2000-12-29
- 破解一個CCG的軟體,改半位元組! (6千字)2002-01-27
- Advanced
PDF Password Recovery Pro 2.12的不完美破解 (12千字)2003-05-20
- 一個ReverseME破解 SynApsus's ReverseME #1 (13千字)2015-11-15
- WinImage密碼的另一種破解――WinHex破解法 (2千字)2001-07-12密碼
- icnbat(圖示打仗)破解實戰 (12千字)2000-09-12BAT
- 一個CrackMe的破解以及序號產生器的製作
(4千字)2001-08-16
- 發一個XX零戶統管8。01版的破解!
(3千字)2015-11-15
- 改良控制元件-Delphi自帶控制元件Bug的消除 (轉)2007-12-12控制元件
- 發一篇C#.NET的破解文章,請各位指點指點:)
(12千字)2015-11-15C#
- 一點小意思,掃雷作弊的delphi程式碼
(9千字)2015-11-15
- 砸碎SLock, 我的一次破解.
(3千字)2015-11-15
- 一篇破解入門 (7千字)2000-09-04
- 如何破解只能在編譯器的IDE中執行的控制元件 (4千字)2001-11-14編譯IDE控制元件
- 菜鳥破解錄(12)之 AxMan3.10 (3千字)2000-07-26
- 一個CrackMe的破解 *KeyFIle保護* (教你如何獲得
KeyFile) (5千字)2001-02-06
- 一個遊戲的破解,SolSuite 2002。破文處女篇 (3千字)2002-03-26遊戲UI
- I am Back :) 貼個安裝程式的破解 (6千字)2003-04-06
- 申請加入BCG的破解文章之一 (6千字)2001-05-06