¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

[Vídeo Aula]Criando seu Primeiro Crypter by Yuri Fahin[pt/br]

 :: Entrada

Ir abajo

[Vídeo Aula]Criando seu Primeiro Crypter by Yuri Fahin[pt/br] Empty [Vídeo Aula]Criando seu Primeiro Crypter by Yuri Fahin[pt/br]

Mensaje  Queda de Faraó Miér Mar 14, 2012 5:46 am

Olá pessoal, sou eu mais uma vez, Hoje irei ensinar nesta vídeo aula EXLUSIVA PARA A ÁREA VIP, como criar seu primeiro Crypter....

Mãos a Obra:
Primeiramente iremos Criar uma Nova aplicação, depois ir em:

File > New > Unit





Após isto, iremos salvar os arquivos em uma pasta que iremos chamar de Crypter...



Após isto vá até a pasta Crypter e renomeie a Unit2 para: untaPlib



Agora, vá na untaPlib e insira a seguinte linha de código:

[PHP]{
untaPlib by Yuri Fahin
25. Juni 2011

Exemplo:
CompressFile('c:\Data.dat', 'c:\Compressed.dat');
DecompressFile('c:\Compressed.dat', 'c:\Data_ok.dat');
}

unit untaPlib;

interface

uses Windows;

function CompressMemory(lpBuffer: Pointer; var Size: Cardinal): Pointer;
function DecompressMemory(lpBuffer: Pointer; var Size: Cardinal): Pointer;
function CompressFile(lpFilename: String): String;
function DecompressFile(lpFilename, lpOutputfile: String): Boolean;

{
Liga até a aPlibu
}
type
TaPack_Status = function(w0, w1, w2 : DWORD; cbparam : Pointer) : DWORD;cdecl;
function _aP_pack(var Source; var Destination; Length : DWORD; var WorkMem; Callback: TaPack_Status; cbparam : Pointer): DWORD; cdecl;
function _aP_workmem_size(InputSize : DWORD): DWORD; cdecl;
function _aPsafe_pack(var Source; var Destination; Length : DWORD; var WorkMem; Callback : TaPack_Status; cbparam : Pointer): DWORD; cdecl;
function _aPsafe_get_orig_size(var Source): DWORD; cdecl;
function _aPsafe_depack(var Source; SrcLen: DWORD; var Destination; DstLen :DWORD): DWORD; cdecl;
function _aP_depack_asm(var Source, Destination) : DWORD; cdecl;
function _aP_crc32(var Source; Length : DWORD): DWORD; cdecl;
function _aP_depack_asm_safe(var Source; SrcLen : DWORD; var Destination; DstLen :DWORD) : DWORD; cdecl;

implementation

{$L lib_aplib\aplib.obj}
{$L lib_aplib\depack.obj}
{$L lib_aplib\depacks.obj}
{$L lib_aplib\crc32.obj}
{$L lib_aplib\spack.obj}
{$L lib_aplib\sgetsize.obj}
{$L lib_aplib\sdepack.obj}

function _aP_pack(var Source; var Destination; Length : DWORD; var WorkMem; Callback : TaPack_Status; cbparam : Pointer) : DWORD; external;
function _aP_workmem_size(InputSize : DWORD) : DWORD; external;
function _aPsafe_pack(var Source; var Destination; Length : DWORD; var WorkMem; Callback : TaPack_Status; cbparam : Pointer) : DWORD; external;
function _aPsafe_get_orig_size(var Source) : DWORD; external;
function _aPsafe_depack(var Source; SrcLen : DWORD; var Destination; DstLen :DWORD) : DWORD; external;
function _aP_depack_asm(var Source, Destination) : DWORD; external;
function _aP_crc32(var Source; Length : DWORD): DWORD; external;
function _aP_depack_asm_safe(var Source; SrcLen : DWORD; var Destination; DstLen :DWORD) : DWORD; external;

function GetPointerSize(lpBuffer: Pointer): Cardinal;
begin
if lpBuffer = nil then
Result := Cardinal(-1)
else
Result := Cardinal(Pointer(Cardinal(lpBuffer) -4)^) and $7FFFFFFC -4;
end;

{
Resultado: Ponteiro do buffer comprimido.
lpBuffer: Buffer que devem ser compactados.
Tamanho var: Comprimento de quanto deve ser compactado, depois o tamanho compactado.
Seguro: deve ser verdade
}
function CompressMemory(lpBuffer: Pointer; var Size: Cardinal): Pointer;
var
lpOutput, lpWorkspace: Pointer;
begin
Result := nil;
if lpBuffer = nil then
Exit;
if Size = INVALID_HANDLE_VALUE then
Size := GetPointerSize(lpBuffer);
lpWorkspace := VirtualAlloc(nil, _aP_workmem_size(Size), MEM_COMMIT, PAGE_READWRITE);
lpOutput := VirtualAlloc(nil, Size, MEM_COMMIT, PAGE_READWRITE);
Size := _aPsafe_pack(lpBuffer^, lpOutput^, Size, lpWorkspace^, nil, nil);
Result := lpOutput;
VirtualFree(lpWorkspace, 0, MEM_RELEASE);
end;

{
Resultado: Ponteiro do buffer de descompressão.
lpBuffer: Buffer que deve ser descompactado.
Tamanho var: Comprimento de quanto deve ser descomprimido (FileSize), depois o tamanho descomprimido.
Seguro: deve ser verdade
}
function DecompressMemory(lpBuffer: Pointer; var Size: Cardinal): Pointer;
var
lpOutput: Pointer;
dwOrginalSize: Cardinal;
begin
Result := nil;
if lpBuffer = nil then
Exit;
if Size = INVALID_HANDLE_VALUE then
Size := GetPointerSize(lpBuffer);
dwOrginalSize := _aPsafe_get_orig_size(lpBuffer^);
if (dwOrginalSize <> INVALID_HANDLE_VALUE) or (dwOrginalSize <> 0) then
begin
lpOutput := VirtualAlloc(nil, dwOrginalSize, MEM_COMMIT, PAGE_READWRITE);
Size := _aPsafe_depack(lpBuffer^, Size, lpOutput^, dwOrginalSize) ;
Result := lpOutput;
end;
end;

function CompressFile(lpFilename: String): String;
var
hFileIn, hFileMappingObjectIn,
// hFileOut: THandle;
dwFileSize: DWORD;
//lpNumberOfBytesWritten: DWORD;
lpBaseAddressIn, lpBuffer: Pointer;
PackedData:String;
begin
// Result := False;
hFileIn := CreateFile(PChar(lpFilename), GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_ALWAYS, 0, 0);
if hFileIn = INVALID_HANDLE_VALUE then
Exit;
dwFileSize := Windows.GetFileSize(hFileIn, nil);
hFileMappingObjectIn := CreateFileMapping(hFileIn, nil, PAGE_READWRITE, 0, 0, nil);
lpBaseAddressIn := MapViewOfFile(hFileMappingObjectIn, FILE_MAP_READ or FILE_MAP_WRITE, 0, 0, 0);
lpBuffer := CompressMemory(lpBaseAddressIn, dwFileSize);
// hFileOut := CreateFile(PChar(lpOutputfile), GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, CREATE_ALWAYS, 0, 0);
// if hFileOut <> INVALID_HANDLE_VALUE then
// begin
SetLength(PackedData, dwFileSize);
Move(lpBuffer^,PackedData[1], dwFileSize);
// WriteFile(hFileOut, lpBuffer^, dwFileSize, lpNumberOfBytesWritten, nil);
// CloseHandle(hFileOut);
// end;
UnmapViewOfFile(lpBaseAddressIn);
CloseHandle(hFileMappingObjectIn);
CloseHandle(hFileIn);
Result := PackedData;
end;

function DecompressFile(lpFilename, lpOutputfile: String): Boolean;
var
hFileIn, hFileMappingObjectIn,
hFileOut: THandle;
dwFileSize, lpNumberOfBytesWritten: DWORD;
lpBaseAddressIn, lpBuffer: Pointer;
begin
Result := False;
hFileIn := CreateFile(PChar(lpFilename), GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_ALWAYS, 0, 0);
if hFileIn = INVALID_HANDLE_VALUE then
Exit;
dwFileSize := Windows.GetFileSize(hFileIn, nil);
hFileMappingObjectIn := CreateFileMapping(hFileIn, nil, PAGE_READWRITE, 0, 0, nil);
lpBaseAddressIn := MapViewOfFile(hFileMappingObjectIn, FILE_MAP_READ or FILE_MAP_WRITE, 0, 0, 0);
lpBuffer := DecompressMemory(lpBaseAddressIn, dwFileSize);
hFileOut := CreateFile(PChar(lpOutputfile), GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, CREATE_ALWAYS, 0, 0);
if hFileOut <> INVALID_HANDLE_VALUE then
begin
WriteFile(hFileOut, lpBuffer^, dwFileSize, lpNumberOfBytesWritten, nil);
CloseHandle(hFileOut);
end;
VirtualFree(lpBuffer, 0, MEM_RELEASE);
UnmapViewOfFile(lpBaseAddressIn);
CloseHandle(hFileMappingObjectIn);
CloseHandle(hFileIn);
end;

end.

[/PHP]



Após isto, iremos inserir alguns códigos, iremos para a parte visual finalmente... rs

Insira:

3 Botões (Paleta Standard)
1 Edit (Paleta Standard)
1 OpenDialog (Paleta Dialogs)
1 SaveDialog(Paleta Dialogs)

Faça as Seguintes alterações, e oranização tente deixar do modo que segue a imagem:

Button1 Caption = Procurar Arquivo
Button 2 Caption = Crypt!!
Button 3 Caption = Créditos



Agora iremos para a parte de códigos, as uses deverão ficar deste modo:

[PHP]uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, XPMan, untaPlib;[/PHP]

A implementation devera ficar deste modo:

LEMBRANDO: para não haver nenhum erro, você tem que extrair a stub.RES que está junto com a source do projeto !

[PHP]implementation

{$R *.dfm}
{$R stub.RES}[/PHP]

Após isto você devera inserir a seguinte função (Abaixo de Implementation - como segue a imagem):

[PHP]Function DataEncrypt(Data:String;key:Integer):String;
var
I: integer;
begin
for I := 1 to length(Data) do
Data[I] := chr(ord(Data[I]) xor key);
Result := Data;
end;[/PHP]



No Button1, iremos inserir:

[PHP] OpenDialog1.FileName := '';
opendialog1.Filter := 'Arquivo Executável|*.exe|';
if opendialog1.Execute then
Edit1.Text := OpenDialog1.FileName;[/PHP]

E no button2, iremos inserir:

[PHP]var
Resource:TResourceStream;
ResourceHandle:THandle;
FileData: String;
begin
if (Edit1.Text = '') then exit;
SaveDialog1.FileName := '';
SaveDialog1.Filter := 'Arquivo Executável(*.exe)|*.exe';
SaveDialog1.DefaultExt := 'exe';
if not SaveDialog1.Execute then exit;
Resource:=TResourceStream.Create(HInstance, 'STUB', RT_RCDATA);
Resource.SaveToFile(SaveDialog1.FileName);
Resource.Free;

FileData:= CompressFile(Edit1.Text);
FileData:= DataEncrypt(FileData,66);

//WriteResData(SaveDialog1.FileName, @FileData[1], Length(FileData), 'DATA');

//WriteResData(SaveDialog1.FileName, nil, 0, 'DVCLAL');
//WriteResData(SaveDialog1.FileName, nil, 0, 'PACKAGEINFO');

ResourceHandle := BeginUpdateResourceW(PWideChar(WideString(SaveDialog1.Filename)) , False);
UpdateResourceW(ResourceHandle,PWideChar(RT_RCDATA),(PWideChar(WideString('DATA'))),0,@FileData[1],Length(FileData));
EndUpdateResourceW(ResourceHandle, False);

MessageBox(0, 'Arquivo Encryptado com Sucesso', PChar('Informação'), MB_OK or MB_ICONINFORMATION);
end;[/PHP]

Daí no button3, iremos inserir:

[PHP] MessageBox(0, 'Crypter Desenvolvido por Yuri', PChar('Informação'), MB_OK or MB_ICONINFORMATION);[/PHP]

Pronto, seu Crypter está 100% Pronto, agora basta você estudar a STUB que está junto com a source, e criar sua propria e deixar 100% contra os antivirus lixos, rs


#DOWNLOAD VÍDEO AULA + SOURCE#

Download da Vídeo Aula

Source do Crypter + Tutorial em Texto


Queda de Faraó
Moderador
Moderador

Mensajes : 11
Fecha de inscripción : 13/03/2012

Volver arriba Ir abajo

Volver arriba

- Temas similares

 :: Entrada

 
Permisos de este foro:
No puedes responder a temas en este foro.