Revisión | 83 (tree) |
---|---|
Tiempo | 2017-12-28 03:20:43 |
Autor | ![]() |
- Dificultando a vida dos crackers
@@ -1,29 +1,29 @@ | ||
1 | 1 | 1. Em cada unit do projeto a ser protegido, ou no mínimo em uma unit, inclua o seguinte bloco de código no final: |
2 | 2 | |
3 | 3 | {$I DEBUG.inc} |
4 | -{$I CRC32.inc} | |
5 | -{$I DLL.inc} | |
4 | +{$I CRC.inc} | |
6 | 5 | |
7 | 6 | initialization |
8 | 7 | |
9 | 8 | DebugCheck; |
10 | -DLLCheck; | |
11 | -VerificarCRC32(GetModuleName(HInstance)); | |
9 | +CheckIntegrity; | |
12 | 10 | |
13 | 11 | Caso a unit já contenha uma seção initialization, ajuste para que haja estas linhas |
14 | 12 | |
15 | -2. Em cada unit onde o passo 1 foi executado, inclua na cláusula uses "TlHelp32" e "Windows", caso não existam | |
13 | +2. Em cada unit onde o passo 1 foi executado, inclua na cláusula uses "ImageHlp" e "Windows", caso não existam | |
16 | 14 | |
17 | -3. Compile o executável e gere a partir dele seu CRC32 usando p CRC32Gen. Você pode arrastar o executável em cima | |
18 | - do executável do CRC32Gen para gerar o arquivo .crc | |
15 | +3. Compile o executável e gere a partir dele seu CRC32 usando o CRC32Gen. Você pode arrastar o executável em cima | |
16 | + do executável do CRC32Gen para gerar o CRC, o qual é colocado dentro do próprio executável! | |
19 | 17 | |
20 | -4. Para DLLs o procedimento é o mesmo, apenas diferente é o bloco protetor, o qual deverá ser: | |
18 | +4. Para DLLs o procedimento é o mesmo, a diferença é que podemos checar a integridade do módulo host também: | |
21 | 19 | |
22 | 20 | {$I DEBUG.inc} |
23 | -{$I CRC32.inc} | |
21 | +{$I CRC.inc} | |
24 | 22 | |
25 | 23 | initialization |
26 | 24 | |
27 | 25 | DebugCheck; |
28 | -VerificarCRC32(GetModuleName(HInstance)); | |
29 | -VerificarCRC32(ParamStr(0)); | |
26 | +CheckIntegrity; | |
27 | +CheckIntegrity(ParamStr(0)); | |
28 | + | |
29 | +5. Ao usar o Petite, use-o apenas na DLL e sem a opção de verificação de vírus primeiro e só depois gere o CRC arrastando a DLL em cima de CRC32Gen. |
@@ -4,26 +4,96 @@ | ||
4 | 4 | |
5 | 5 | uses |
6 | 6 | SysUtils, |
7 | - Windows; | |
7 | + Windows, | |
8 | + ImageHlp; | |
8 | 9 | |
9 | -{$I CRC32.inc} | |
10 | +{$I CRC.INC} | |
10 | 11 | |
12 | +const | |
13 | + CRLF = ^M^J; | |
14 | + | |
11 | 15 | var |
12 | - CRCObtido: LongWord; | |
13 | - CRC: file of LongWord; | |
16 | + hFile: THandle; | |
17 | + hMapFile: THandle; | |
18 | + fSize: DWORD; | |
19 | + lpMapAddress: LPVOID; | |
20 | + pImageNTHeader: PImageNtHeaders32; | |
21 | + Checksum: DWORD; | |
22 | + Headersum: DWORD; | |
23 | + B0, B1, B2, B3: Byte; | |
14 | 24 | begin |
25 | + WriteLn('ZOLM Checksum Generator'#13#10); | |
26 | + | |
15 | 27 | if ParamCount = 0 then |
16 | - Exit; | |
28 | + WriteLn(Format('Uso: %s <nome do arquivo>',[ExtractFileName(ParamStr(0))]) + CRLF) | |
29 | + else | |
30 | + begin | |
31 | + WriteLn('Checksum do arquivo:'); | |
17 | 32 | |
18 | - CRCObtido := GerarCRC32(ParamStr(1)); | |
19 | - CRCObtido := Gira359Graus(CRCObtido); | |
33 | + hFile := CreateFile(PChar(ParamStr(1)), GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); | |
34 | + if (hFile <> INVALID_HANDLE_VALUE) then | |
35 | + try | |
36 | + fSize := GetFileSize(hFile, nil); | |
20 | 37 | |
21 | - AssignFile(CRC,ChangeFileExt(ParamStr(1),'.crc')); | |
22 | - try | |
23 | - FileMode := fmOpenWrite; | |
24 | - ReWrite(CRC); | |
25 | - Write(CRC,CRCObtido); | |
26 | - finally | |
27 | - CloseFile(CRC); | |
38 | + hMapFile := CreateFileMapping(hFile, nil, PAGE_READWRITE, 0, fSize, nil); | |
39 | + if hMapFile > 0 then | |
40 | + begin | |
41 | + | |
42 | + lpMapAddress := MapViewOfFile(hMapFile, FILE_MAP_WRITE, 0, 0, 0); | |
43 | + if Assigned(lpMapAddress) then | |
44 | + try | |
45 | + pImageNTHeader := ImageNtHeader(lpMapAddress); | |
46 | + if Assigned(pImageNTHeader) then | |
47 | + begin | |
48 | + PIMAGE_DOS_HEADER(lpMapAddress).e_res[0] := 0; | |
49 | + PIMAGE_DOS_HEADER(lpMapAddress).e_res[1] := 0; | |
50 | + PIMAGE_DOS_HEADER(lpMapAddress).e_res[2] := 0; | |
51 | + PIMAGE_DOS_HEADER(lpMapAddress).e_res[3] := 0; | |
52 | + | |
53 | + CheckSum := 0; | |
54 | + HeaderSum := 0; | |
55 | + | |
56 | + if Assigned(CheckSumMappedFile(lpMapAddress, fSize, @HeaderSum, @CheckSum)) then | |
57 | + begin | |
58 | + // AABBCCDD | |
59 | + B0 := CheckSum shr 24; // AA | |
60 | + B1 := CheckSum shr 16 mod 256; // BB | |
61 | + B2 := Checksum shr 8 mod 256; // CC | |
62 | + B3 := Checksum mod 256; // DD | |
63 | + | |
64 | + PIMAGE_DOS_HEADER(lpMapAddress).e_res[0] := B3 or (CRC8(B0) shl 8); | |
65 | + PIMAGE_DOS_HEADER(lpMapAddress).e_res[1] := B2 or (CRC8(B1) shl 8); | |
66 | + PIMAGE_DOS_HEADER(lpMapAddress).e_res[2] := B1 or (CRC8(B2) shl 8); | |
67 | + PIMAGE_DOS_HEADER(lpMapAddress).e_res[3] := B0 or (CRC8(B3) shl 8); | |
68 | + | |
69 | + if Assigned(CheckSumMappedFile(lpMapAddress, fSize, @HeaderSum, @CheckSum)) then | |
70 | + pImageNTHeader.OptionalHeader.CheckSum := CheckSum; | |
71 | + | |
72 | + if (FlushViewOfFile(lpMapAddress, fSize)) then | |
73 | + WriteLn('Finalizado!') | |
74 | + else | |
75 | + WriteLn(Format(CRLF + 'Erro: Não foi possível salvar o checksum no arquivo' + CRLF + 'Erro #: 0x%.8X' + CRLF,[GetLastError()])); | |
76 | + end | |
77 | + else | |
78 | + WriteLn(Format(CRLF + 'Erro: Não foi possível obter o checksum da visualização do mapa do arquivo %s' + CRLF + 'Erro #: 0x%.8X' + CRLF,[ParamStr(1),GetLastError()])); | |
79 | + end | |
80 | + else | |
81 | + WriteLn(Format(CRLF + 'Erro: Não foi possível obter a estrutura "IMAGE_NT_HEADERS" para o arquivo %s' + CRLF + 'Erro #: 0x%.8X' + CRLF,[ParamStr(1),GetLastError()])); | |
82 | + finally | |
83 | + UnmapViewOfFile(lpMapAddress); | |
84 | + end | |
85 | + else | |
86 | + WriteLn(Format(CRLF + 'Erro: Não foi possível gerar a visualização do mapa do arquivo %s' + CRLF + 'Erro #: 0x%.8X' + CRLF,[ParamStr(1),GetLastError()])); | |
87 | + end | |
88 | + else | |
89 | + WriteLn(Format(CRLF + 'Erro: Não foi possível mapear o arquivo %s' + CRLF + 'Erro #: 0x%.8X' + CRLF,[ParamStr(1),GetLastError()])); | |
90 | + finally | |
91 | + CloseHandle(hFile); | |
92 | + end | |
93 | + else | |
94 | + WriteLn(Format(CRLF + 'Erro: Não foi possível abrir o arquivo %s' + CRLF + 'Erro #: 0x%.8X' + CRLF,[ParamStr(1),GetLastError()])); | |
95 | + | |
28 | 96 | end; |
97 | + WriteLn(CRLF + 'Pressione qualquer tecla para terminar o programa'); | |
98 | + ReadLn; | |
29 | 99 | end. |
@@ -39,12 +39,12 @@ | ||
39 | 39 | <DCC_K>false</DCC_K> |
40 | 40 | <DCC_N>false</DCC_N> |
41 | 41 | <DCC_E>false</DCC_E> |
42 | - <DCC_DebugInformation>0</DCC_DebugInformation> | |
42 | + <DCC_DebugInformation>1</DCC_DebugInformation> | |
43 | 43 | <DCC_UnitSearchPath>..\inc;$(DCC_UnitSearchPath)</DCC_UnitSearchPath> |
44 | 44 | <DCC_ExeOutput>..\bin</DCC_ExeOutput> |
45 | 45 | <DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)</DCC_Namespace> |
46 | 46 | <VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=;CFBundleDisplayName=;UIDeviceFamily=;CFBundleIdentifier=;CFBundleVersion=;CFBundlePackageType=;CFBundleSignature=;CFBundleAllowMixedLocalizations=;UISupportedInterfaceOrientations=;CFBundleExecutable=;CFBundleResourceSpecification=;LSRequiresIPhoneOS=;CFBundleInfoDictionaryVersion=;CFBundleDevelopmentRegion=;package=;label=;versionCode=;versionName=;persistent=;restoreAnyVersion=;installLocation=;largeHeap=;theme=</VerInfo_Keys> |
47 | - <Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File> | |
47 | + <Manifest_File>None</Manifest_File> | |
48 | 48 | <DCC_F>false</DCC_F> |
49 | 49 | <DCC_S>false</DCC_S> |
50 | 50 | <DCC_ImageBase>00400000</DCC_ImageBase> |
@@ -66,6 +66,7 @@ | ||
66 | 66 | <DCC_GenerateStackFrames>true</DCC_GenerateStackFrames> |
67 | 67 | </PropertyGroup> |
68 | 68 | <PropertyGroup Condition="'$(Cfg_2_Win32)'!=''"> |
69 | + <Debugger_RunParams>testes.exe</Debugger_RunParams> | |
69 | 70 | <VerInfo_Locale>1033</VerInfo_Locale> |
70 | 71 | <VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys> |
71 | 72 | <Manifest_File>None</Manifest_File> |
@@ -11,7 +11,7 @@ | ||
11 | 11 | |
12 | 12 | begin |
13 | 13 | try |
14 | -// VerifyLicense('{64E052D8-FEC9-405E-BDF6-D34AAEDE242E}'); | |
14 | + VerifyLicense('{64E052D8-FEC9-405E-BDF6-D34AAEDE242E}'); | |
15 | 15 | Application.Initialize; |
16 | 16 | Application.MainFormOnTaskbar := True; |
17 | 17 | Application.CreateForm(TForm12, Form12); |
@@ -3,8 +3,8 @@ | ||
3 | 3 | interface |
4 | 4 | |
5 | 5 | uses |
6 | - Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, | |
7 | - Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; | |
6 | + System.SysUtils, Winapi.Windows, Winapi.Messages, System.Variants, System.Classes, Vcl.Graphics, | |
7 | + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, ImageHlp; | |
8 | 8 | |
9 | 9 | type |
10 | 10 | TForm12 = class(TForm) |
@@ -20,27 +20,14 @@ | ||
20 | 20 | |
21 | 21 | implementation |
22 | 22 | |
23 | -uses | |
24 | - TlHelp32, ImageHlp; | |
25 | - | |
26 | 23 | {$R *.dfm} |
27 | 24 | |
28 | 25 | {$I DEBUG.inc} |
29 | -{$I CRC32.inc} | |
30 | -{$I DLL.inc} | |
26 | +{$I CRC.INC} | |
31 | 27 | |
32 | -var | |
33 | - HC, CC: Cardinal; | |
34 | - | |
35 | 28 | initialization |
36 | 29 | |
37 | -//DebugCheck; | |
38 | -//DLLCheck; | |
39 | -//VerificarCRC32(GetModuleName(HInstance)); | |
30 | +DebugCheck; | |
31 | +CheckIntegrity; | |
40 | 32 | |
41 | - MapFileAndCheckSum(PChar(GetModuleName(HInstance)),HC,CC); | |
42 | - | |
43 | - showmessage(inttohex(HC,6)); | |
44 | - showmessage(inttohex(cc,6)); | |
45 | - | |
46 | 33 | end. |
@@ -23,7 +23,7 @@ | ||
23 | 23 | implementation |
24 | 24 | |
25 | 25 | uses |
26 | - TlHelp32; | |
26 | + ImageHlp; | |
27 | 27 | |
28 | 28 | {$R *.dfm} |
29 | 29 |
@@ -45,12 +45,12 @@ | ||
45 | 45 | //in Z-order and will stay on top of it automatically. |
46 | 46 | |
47 | 47 | {$I DEBUG.inc} |
48 | -{$I CRC32.inc} | |
48 | +{$I CRC.inc} | |
49 | 49 | |
50 | 50 | initialization |
51 | 51 | |
52 | 52 | DebugCheck; |
53 | -VerificarCRC32(GetModuleName(HInstance)); | |
54 | -VerificarCRC32(ParamStr(0)); | |
53 | +CheckIntegrity; | |
54 | +CheckIntegrity(@ParamStr(0)[1]); | |
55 | 55 | |
56 | 56 | end. |
@@ -85,7 +85,7 @@ | ||
85 | 85 | , UStructures |
86 | 86 | , UFuncoes |
87 | 87 | , KRK.Lib.Rtl.Common.NetworkUtils |
88 | - , TlHelp32; | |
88 | + , ImageHlp; | |
89 | 89 | |
90 | 90 | const |
91 | 91 | CPF_REGEX = '\Dª'#13#10 + { ###.###.###-## } |
@@ -261,12 +261,12 @@ | ||
261 | 261 | end; |
262 | 262 | |
263 | 263 | {$I DEBUG.inc} |
264 | -{$I CRC32.inc} | |
264 | +{$I CRC.inc} | |
265 | 265 | |
266 | 266 | initialization |
267 | 267 | |
268 | 268 | DebugCheck; |
269 | -VerificarCRC32(GetModuleName(HInstance)); | |
270 | -VerificarCRC32(ParamStr(0)); | |
269 | +CheckIntegrity; | |
270 | +CheckIntegrity(@ParamStr(0)[1]); | |
271 | 271 | |
272 | 272 | end. |
@@ -39,7 +39,7 @@ | ||
39 | 39 | , zolmws |
40 | 40 | , UFORMMasterPassword |
41 | 41 | , idFtp |
42 | - , TlHelp32; | |
42 | + , ImageHlp; | |
43 | 43 | |
44 | 44 | // Tabela de códigos de erro |
45 | 45 | { |
@@ -882,12 +882,12 @@ | ||
882 | 882 | //end; |
883 | 883 | |
884 | 884 | {$I DEBUG.inc} |
885 | -{$I CRC32.inc} | |
885 | +{$I CRC.inc} | |
886 | 886 | |
887 | 887 | initialization |
888 | 888 | |
889 | 889 | DebugCheck; |
890 | -VerificarCRC32(GetModuleName(HInstance)); | |
891 | -VerificarCRC32(ParamStr(0)); | |
890 | +CheckIntegrity; | |
891 | +CheckIntegrity(@ParamStr(0)[1]); | |
892 | 892 | |
893 | 893 | end. |
@@ -23,15 +23,15 @@ | ||
23 | 23 | implementation |
24 | 24 | |
25 | 25 | uses |
26 | - TlHelp32; | |
26 | + ImageHlp; | |
27 | 27 | |
28 | 28 | {$I DEBUG.inc} |
29 | -{$I CRC32.inc} | |
29 | +{$I CRC.inc} | |
30 | 30 | |
31 | 31 | initialization |
32 | 32 | |
33 | 33 | DebugCheck; |
34 | -VerificarCRC32(GetModuleName(HInstance)); | |
35 | -VerificarCRC32(ParamStr(0)); | |
34 | +CheckIntegrity; | |
35 | +CheckIntegrity(@ParamStr(0)[1]); | |
36 | 36 | |
37 | 37 | end. |