|
作者:佚名 责任编辑:左决 点击数: 更新时间:2008-2-17 0:15:00 |
 |
SDL控件组也是不错的,可以做化学分子结构图;信号FFT分析;画科学工程图等等。 和ABAKUS一样,其源码难以得到,极其困难!!! 有谁有的话请发送到testdog@sina.com谢谢。
这次是SDL SuITe 5.5。 表现症状:编译生成的程序也要在Delphi正在运行的情况下才会运行,不然的话会弹出对话框, 按OK后有两种表现,一种是直接退出;一种是运行程序但在它的控件上显示一串文字。 但是不管delphi是不是运行,程序运行时鼠标放在它的控件上都会有hint, 无论你在编程的时候有没有关掉showhint属性,它都要显示! 从CJ那儿下载回来的有一个crack,但是并没有破掉hint。
工具:Dede250,UltraEdIT。 作者:renamed to jkl
这次所有的DCU文件都要用Dede250的DCU Dumper去Dumpe一下,不像Abakus201只在一个文件中。 步骤是一样的,以rchart.dcu为例。
1。把dumpe得到的文本文件用UltraedIT打开,凭感觉先查run,delphi,running啥的,哈哈,果然!
function DelphiIsRunning: System.Boolean; var Result: System.Boolean; H0: WinProcs.HWND; H1: WinProcs.HWND; H2: WinProcs.HWND; H3: WinProcs.HWND; H4: WinProcs.HWND; H5: WinProcs.HWND; H6: WinProcs.HWND; H7: WinProcs.HWND; H8: WinProcs.HWND; H9: WinProcs.HWND; const A1:array[$0..$C] of System.Char = raw[$0..$C]at $1AF0 0: TApplication.[54 41 70 70 6C 69 63 61 74 69 6F 6E 00|K5 A1{0x1F6}; A2:array[$0..$D] of System.Char = raw[$0..$D]at $1AFD 0: TAlignPalette.[54 41 6C 69 67 6E 50 61 6C 65 74 74 65 00|K5 A2{0x1F7}; A3:array[$0..$12] of System.Char = raw[$0..$12]at $1B0B 00: TPropertyInspect[54 50 72 6F 70 65 72 74 79 49 6E 73 70 65 63 74|K5 A3{0x1F8} 10: or. |6F 72 00|; A4:array[$0..$B] of System.Char = raw[$0..$B]at $1B1E 0: TAppBuilder.[54 41 70 70 42 75 69 6C 64 65 72 00|K5 A4{0x1F9}; T0:array[$0..$A] of System.Char = raw[$0..$A]at $1B2A 0: Delphi 2.0.[44 65 6C 70 68 69 20 32 2E 30 00|K5 T0{0x1FA}; T1:array[$0..$6] of System.Char = raw[$0..$6]at $1B35 0: Delphi.[44 65 6C 70 68 69 00|K5 T1{0x1FB}; T2:array[$0..$8] of System.Char = raw[$0..$8]at $1B3C 0: Delphi 3.[44 65 6C 70 68 69 20 33 00|K5 T2{0x1FC}; T3:array[$0..$A] of System.Char = raw[$0..$A]at $1B45 0: C++Builder.[43 2B 2B 42 75 69 6C 64 65 72 00|K5 T3{0x1FD}; T4:array[$0..$8] of System.Char = raw[$0..$8]at $1B50 0: Delphi 4.[44 65 6C 70 68 69 20 34 00|K5 T4{0x1FE}; T5:array[$0..$C] of System.Char = raw[$0..$C]at $1B59 0: C++Builder 4.[43 2B 2B 42 75 69 6C 64 65 72 20 34 00|K5 T5{0x1FF}; T6:array[$0..$8] of System.Char = raw[$0..$8]at $1B66 0: Delphi 5.[44 65 6C 70 68 69 20 35 00|K5 T6{0x200}; begin 00000000 : 53 PUSH EBX 00000001 : 56 PUSH ESI 00000002 : 57 PUSH EDI 00000003 : 55 PUSH EBP 00000004 : 83 C4 EC ADD ESP,-20 00000007 : 68(00 00 00 00 PUSH T0{0x1FA} 0000000C : 68(00 00 00 00 PUSH A1{0x1F6} 00000011 : E8(00 00 00 00 CALL FindWindow{0xA9} 00000016 : 8B D8 MOV EBX,EAX 00000018 : 68(00 00 00 00 PUSH T1{0x1FB} 0000001D : 68(00 00 00 00 PUSH A1{0x1F6} 00000022 : E8(00 00 00 00 CALL FindWindow{0xA9} 00000027 : 8B F0 MOV ESI,EAX 00000029 : 68(00 00 00 00 PUSH T2{0x1FC} 0000002E : 68(00 00 00 00 PUSH A1{0x1F6} 00000033 : E8(00 00 00 00 CALL FindWindow{0xA9} 00000038 : 89 44 24 04 MOV DWORD PTR [ESP+4],EAX 0000003C : 68(00 00 00 00 PUSH T3{0x1FD} 00000041 : 68(00 00 00 00 PUSH A1{0x1F6} 00000046 : E8(00 00 00 00 CALL FindWindow{0xA9} 0000004B : 89 04 24 MOV DWORD PTR [ESP],EAX 0000004E : 68(00 00 00 00 PUSH T4{0x1FE} 00000053 : 68(00 00 00 00 PUSH A1{0x1F6} 00000058 : E8(00 00 00 00 CALL FindWindow{0xA9} 0000005D : 89 44 24 08 MOV DWORD PTR [ESP+8],EAX 00000061 : 68(00 00 00 00 PUSH T5{0x1FF} 00000066 : 68(00 00 00 00 PUSH A1{0x1F6} 0000006B : E8(00 00 00 00 CALL FindWindow{0xA9} 00000070 : 89 44 24 0C MOV DWORD PTR [ESP+12],EAX 00000074 : 68(00 00 00 00 PUSH T6{0x200} 00000079 : 68(00 00 00 00 PUSH A1{0x1F6} 0000007E : E8(00 00 00 00 CALL FindWindow{0xA9} 00000083 : 89 44 24 10 MOV DWORD PTR [ESP+16],EAX 00000087 : 6A 00 PUSH $00 00000089 : 68(00 00 00 00 PUSH A2{0x1F7} 0000008E : E8(00 00 00 00 CALL FindWindow{0xA9} 00000093 : 8B F8 MOV EDI,EAX 00000095 : 6A 00 PUSH $00 00000097 : 68(00 00 00 00 PUSH A3{0x1F8} 0000009C : E8(00 00 00 00 CALL FindWindow{0xA9} 000000A1 : 8B E8 MOV EBP,EAX 000000A3 : 6A 00 PUSH $00 000000A5 : 68(00 00 00 00 PUSH A4{0x1F9} 000000AA : E8(00 00 00 00 CALL FindWindow{0xA9} 000000AF : 85 DB TEST EBX,EBX 000000B1 : 75 26 JNE +38; (0xD9) 000000B3 : 85 F6 TEST ESI,ESI 000000B5 : 75 22 JNE +34; (0xD9) 000000B7 : 83 3C 24 00 CMP DWORD PTR [ESP],0 000000BB : 75 1C JNE +28; (0xD9) 000000BD : 83 7C 24 04 00 CMP DWORD PTR [ESP+4],0 000000C2 : 75 15 JNE +21; (0xD9) 000000C4 : 83 7C 24 08 00 CMP DWORD PTR [ESP+8],0 000000C9 : 75 0E JNE +14; (0xD9) 000000CB : 83 7C 24 0C 00 CMP DWORD PTR [ESP+12],0 000000D0 : 75 07 JNE +7; (0xD9) 000000D2 : 83 7C 24 10 00 CMP DWORD PTR [ESP+16],0 000000D7 : 74 0C JE +12; (0xE5) 000000D9 : 85 FF TEST EDI,EDI 000000DB : 74 08 JE +8; (0xE5) 000000DD : 85 ED TEST EBP,EBP 000000DF : 74 04 JE +4; (0xE5) 000000E1 : 85 C0 TEST EAX,EAX 000000E3 : 75 04 JNE +4; (0xE9) 000000E5 : 33 C0 XOR EAX,EAX 000000E7 : EB 02 JMP +2; (0xEB) 000000E9 : B0 01 MOV AL,$01 000000EB : 83 C4 14 ADD ESP,20 000000EE : 5D POP EBP 000000EF : 5F POP EDI 000000F0 : 5E POP ESI 000000F1 : 5B POP EBX 000000F2 : C3 RET NEAR end;
上面调用findwindow在找delphi或bcb的不同版本呢。要是找到一个的话就 MOV AL,$01
这样继续查找DelphiIsRunning,看它在那里调用:
00004377 : 8B 4D 10 MOV ECX,DWORD PTR [EBP+16] 0000437A : 8B 55 E8 MOV EDX,DWORD PTR [EBP-24] 0000437D : 8B 45 EC MOV EAX,DWORD PTR [EBP-20] 00004380 : E8(00 00 00 00 CALL TCanvas.LineTo{0x6F} 00004385 : E8(00 00 00 00 CALL DelphiIsRunning{0x201} 0000438A : 84 C0 TEST AL,AL 0000438C : 0F 85 B1 00 00 00 JNE +177; (0x4443) 00004392 : 8B 45 EC MOV EAX,DWORD PTR [EBP-20] 00004395 : 8B 40 0C MOV EAX,DWORD PTR [EAX+12] 00004398 : BA FF FF FF 00 MOV EDX,$00FFFFFF
调用 00004385 : E8(00 00 00 00 CALL DelphiIsRunning{0x201} 后有 test al,al 如果 al=1 的话,就表明delphi正在运行,那么我们就把这一句用 mov al,1代替好了(机器码B001)。
在DCU文件中这个call DelphiIsRunning是要由编译器来动态连接其地址的,所以没法nop掉这个调用。
在所有的dcu文件中用同样的方法查找并替换就可以了,当然 test al,al后的下一条语句有的DCU文件和这里的不同, 没关系,只改 test al,al。
2。还有一个问题,它的hint总是要出现,告诉人们您正在用的是SDL公司的未注册版本,整个世界都要为之改变呢。 改掉它!查找shareware,copyright,unregister之类的东西,查到与copyright有关的:
function getCopyRightStr: System.AnsiString; var result Result: System.AnsiString; AuxStr: System.AnsiString; i: System.Integer; 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 : 56 PUSH ESI 00000009 : 57 PUSH EDI 0000000A : 8B F8 MOV EDI,EAX 0000000C : 33 C0 XOR EAX,EAX 0000000E : 55 PUSH EBP 0000000F : 68(72 00 00 00 PUSH getCopyRightStr{0x1F2}+$00000072 00000014 : 64 FF 30 PUSH DWORD PTR FS:[EAX] 00000017 : 64 89 20 MOV DWORD PTR FS:[EAX],ESP 0000001A : 8D 45 FC LEA EAX,DWORD PTR [EBP-4] 0000001D : E8(00 00 00 00 CALL @LStrClr{0xE2} 00000022 : BE 87 FF FF FF MOV ESI,$FFFFFF87 00000027 : BB(78 00 00 00 MOV EBX,ShareW{0x1F1}+$00000078 0000002C : 8D 45 F8 LEA EAX,DWORD PTR [EBP-8] 0000002F : 33 D2 XOR EDX,EDX 00000031 : 8A 13 MOV DL,BYTE PTR [EBX] 00000033 : 8A 92(00 00 00 00 MOV DL,BYTE PTR [EDXCTDecode{0x1EF}] 00000039 : E8(00 00 00 00 CALL @LStrFromChar{0xE3} 0000003E : 8B 55 F8 MOV EDX,DWORD PTR [EBP-8] 00000041 : 8D 45 FC LEA EAX,DWORD PTR [EBP-4] 00000044 : E8(00 00 00 00 CALL @LStrCat{0xE4}----------这是在拼凑那个hint呢 00000049 : 4B DEC EBX 0000004A : 46 INC ESI 0000004B : 75 DF JNE -33; (0x2C)--------------在这里改!跳到call @LStrAsg{0xE5}后面的那句 0000004D : 8B C7 MOV EAX,EDI 0000004F : 8B 55 FC MOV EDX,DWORD PTR [EBP-4] 00000052 : E8(00 00 00 00 CALL @LStrAsg{0xE5}---------拼完了就显示,那么跳过它! 00000057 : 33 C0 XOR EAX,EAX 00000059 : 5A POP EDX 0000005A : 59 POP ECX 0000005B : 59 POP ECX 0000005C : 64 89 10 MOV DWORD PTR FS:[EAX],EDX 0000005F : 68(79 00 00 00 PUSH getCopyRightStr{0x1F2}+$00000079 00000064 : 8D 45 F8 LEA EAX,DWORD PTR [EBP-8] 00000067 : BA 02 00 00 00 MOV EDX,$00000002 0000006C : E8(00 00 00 00 CALL @LStrArrayClr{0xE6} 00000071 : C3 RET NEAR 00000072 : E9(00 00 00 00 JMP @HandleFinally{0xE7} 00000077 : EB EB JMP -21; (0x64) 00000079 : 5F POP EDI 0000007A : 5E POP ESI 0000007B : 5B POP EBX 0000007C : 59 POP ECX 0000007D : 59 POP ECX 0000007E : 5D POP EBP 0000007F : C3 RET NEAR end;
数一数后知道 75 DF 改成 EB 0A 这样就没有hint了,如果您想要自己的hint,请用别的办法吧,可以做得到的。 |
|
|
|
|
 |
最进更新 |
|
|
|
 |
推荐文章 |
|
|
|
|