Un programa en Delphi para generar codigo basura y lograr quitar algunas firmas de AV en un malware hecho en Delphi.
Tiene las siguientes opciones :
- Generar constantes
- Generar variables
- Generar varios for
- Generar funciones con variables
- Generar funciones con for
- Generar codigo con todas las funciones anteriores juntas
- Se puede establecer una lontigud para cada opcion
Una imagen :
(http://doddyhackman.webcindario.com/images/dhjunkcodemaker.jpg)
El codigo :
// DH Junk Code Maker 0.4
// (C) Doddy Hackman 2016
unit junk;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls,
Vcl.ComCtrls, Vcl.Styles.Utils.Menus, Vcl.Styles.Utils.SysStyleHook,
Vcl.Styles.Utils.SysControls, Math, Vcl.Menus, Vcl.Imaging.pngimage,
Vcl.ImgList;
type
TFormHome = class(TForm)
imgLogo: TImage;
gbOutput: TGroupBox;
mmOutput: TMemo;
gbEnterLength: TGroupBox;
txtLength: TEdit;
udLength: TUpDown;
gbType: TGroupBox;
cmbOptions: TComboBox;
gbOptions: TGroupBox;
btnGenerate: TButton;
ppOptions: TPopupMenu;
copy: TMenuItem;
clear: TMenuItem;
ilIconos: TImageList;
procedure btnGenerateClick(Sender: TObject);
procedure clearClick(Sender: TObject);
procedure copyClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormHome: TFormHome;
implementation
{$R *.dfm}
// Functions
function dh_generate_string(option: string; length_string: integer): string;
const
letters1: array [1 .. 26] of string = ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z');
const
letters2: array [1 .. 26] of string = ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z');
const
numbers: array [1 .. 10] of string = ('0', '1', '2', '3', '4', '5', '6', '7',
'8', '9');
const
cyrillic: array [1 .. 44] of string = ('?', '?', '?', '?', '?', '?', '?', '?',
'?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?',
'?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?',
'?', '?', '?', '?', '?', '?');
const
no_idea1: array [1 .. 13] of string = ('?', '?', '?', '?', '?', '?', '?', '?',
'?', '?', '?', '?', '?');
const
no_idea2: array [1 .. 28] of string = ('?', '?', '?', '?', '?', '?', '?', '?',
'?', '?', '?', '?', '?', '?', '?', '?', '??', '?', '?', '?', '?', '?', '?',
'?', '?', '?', '?', '??');
const
no_idea3: array [1 .. 13] of string = ('??', '?', '?', '?', '?', '?', '?',
'_', '?', '`', '?', '_', '?');
const
no_idea4: array [1 .. 26] of string = ('?', '?', '€', '?', 'l', '?', '™', 'O',
'e', '?', '?', '?', '?', '?', '?', '?', '?', '-', '/', '·', 'v', '8', '?',
'˜', '?', '=');
const
no_idea5: array [1 .. 33] of string = ('?', '?', '?', '?', 'n', '?', '?', '?',
'?', '?', '?', 'G', '?', '?', '?', 'e', 'ß', '?', '?', '?', '?', '?', '?',
'?', '?', '?', '?', '?', '?', '?', '8', 'S', '?');
const
no_idea6: array [1 .. 32] of string = ('?', '?', '?', '?', '?', '?', '?', '?',
'?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?',
'?', '?', '?', '?', '?', '?', '?', '?', '?');
var
code: string;
gen_now: string;
i: integer;
index: integer;
begin
gen_now := '';
for i := 1 to length_string do
begin
if (option = '1') then
begin
gen_now := gen_now + letters1[RandomRange(1, Length(letters1) + 1)];
end
else if (option = '2') then
begin
gen_now := gen_now + letters2[RandomRange(1, Length(letters2) + 1)];
end
else if (option = '3') then
begin
gen_now := gen_now + numbers[RandomRange(1, Length(numbers) + 1)];
end
else if (option = '4') then
begin
gen_now := gen_now + cyrillic[RandomRange(1, Length(cyrillic) + 1)];
end
else if (option = '5') then
begin
gen_now := gen_now + no_idea1[RandomRange(1, Length(no_idea1) + 1)];
end
else if (option = '6') then
begin
gen_now := gen_now + no_idea2[RandomRange(1, Length(no_idea2) + 1)];
end
else if (option = '7') then
begin
gen_now := gen_now + no_idea3[RandomRange(1, Length(no_idea3) + 1)];
end
else if (option = '8') then
begin
gen_now := gen_now + no_idea4[RandomRange(1, Length(no_idea4) + 1)];
end
else if (option = '9') then
begin
gen_now := gen_now + no_idea5[RandomRange(1, Length(no_idea5) + 1)];
end
else if (option = '10') then
begin
gen_now := gen_now + no_idea6[RandomRange(1, Length(no_idea6) + 1)];
end
else
begin
gen_now := gen_now + letters1[RandomRange(1, Length(letters1) + 1)];
end;
end;
code := gen_now;
Result := code;
end;
function message_box(title, message_text, type_message: string): string;
begin
if not(title = '') and not(message_text = '') and not(type_message = '') then
begin
try
begin
if (type_message = 'Information') then
begin
MessageBox(FormHome.Handle, PChar(message_text), PChar(title),
MB_ICONINFORMATION);
end
else if (type_message = 'Warning') then
begin
MessageBox(FormHome.Handle, PChar(message_text), PChar(title),
MB_ICONWARNING);
end
else if (type_message = 'Question') then
begin
MessageBox(FormHome.Handle, PChar(message_text), PChar(title),
MB_ICONQUESTION);
end
else if (type_message = 'Error') then
begin
MessageBox(FormHome.Handle, PChar(message_text), PChar(title),
MB_ICONERROR);
end
else
begin
MessageBox(FormHome.Handle, PChar(message_text), PChar(title),
MB_ICONINFORMATION);
end;
Result := '[+] MessageBox : OK';
end;
except
begin
Result := '[-] Error';
end;
end;
end
else
begin
Result := '[-] Error';
end;
end;
//
procedure TFormHome.btnGenerateClick(Sender: TObject);
var
id: string;
i, y: integer;
vars, vars2, name, name2, value, value2: string;
strings, strings2: string;
functions, code: string;
limit_random: integer;
begin
if (StrToInt(txtLength.Text) > 0) then
begin
if (cmbOptions.ItemIndex = 0) then
begin
for i := 1 to StrToInt(txtLength.Text) do
begin
name := dh_generate_string('1', 5);
value := dh_generate_string('1', 20);
mmOutput.Lines.Add('const ' + name + '=' + '''' + value + '''' + ';');
end;
mmOutput.Lines.Add('');
end
else if (cmbOptions.ItemIndex = 1) then
begin
vars := 'var ';
strings := '';
for i := 1 to StrToInt(txtLength.Text) do
begin
name := dh_generate_string('1', 5);
value := dh_generate_string('1', 20);
if (i = StrToInt(txtLength.Text)) then
begin
vars := vars + name + ':string;';
end
else
begin
vars := vars + name + ',';
end;
if (i = StrToInt(txtLength.Text)) then
begin
strings := strings + name + ':=' + '''' + value + '''' + ';';
end
else
begin
strings := strings + name + ':=' + '''' + value + '''' + ';' +
sLineBreak;
end;
end;
id := dh_generate_string('1', 5);
code := 'procedure gen_vars_' + id + ';' + sLineBreak + vars + sLineBreak
+ 'begin' + sLineBreak + strings + sLineBreak + 'end;';
mmOutput.Lines.Add(code);
mmOutput.Lines.Add('');
end
else if (cmbOptions.ItemIndex = 2) then
begin
vars := 'var i,y:integer;';
strings := '';
for i := 1 to StrToInt(txtLength.Text) do
begin
value := dh_generate_string('3', 2);
if (i = StrToInt(txtLength.Text)) then
begin
strings := strings + 'i := 0;' + sLineBreak + 'y := 0;' + sLineBreak +
sLineBreak;
strings := strings + 'for i := 0 to ' + value + ' do' + sLineBreak +
'begin' + sLineBreak + 'inc(y);' + sLineBreak + 'end;';
end
else
begin
strings := strings + 'i := 0;' + sLineBreak + 'y := 0;' + sLineBreak +
sLineBreak;
strings := strings + 'for i := 0 to ' + value + ' do' + sLineBreak +
'begin' + sLineBreak + 'inc(y);' + sLineBreak + 'end;' + sLineBreak
+ sLineBreak;
end;
end;
id := dh_generate_string('1', 5);
code := 'procedure gen_fors_' + id + ';' + sLineBreak + vars + sLineBreak
+ 'begin' + sLineBreak + strings + sLineBreak + 'end;';
mmOutput.Lines.Add(code);
mmOutput.Lines.Add('');
end
else if (cmbOptions.ItemIndex = 3) then
begin
code := '';
functions := '';
for i := 1 to StrToInt(txtLength.Text) do
begin
vars := 'var ';
strings := '';
limit_random := StrToInt(dh_generate_string('3', 1));
if (limit_random = 0) then
begin
limit_random := 5;
end;
for y := 1 to limit_random do
begin
name := dh_generate_string('1', 5);
value := dh_generate_string('1', 20);
if (y = limit_random) then
begin
vars := vars + name + ':string;';
end
else
begin
vars := vars + name + ',';
end;
if (y = limit_random) then
begin
strings := strings + name + ':=' + '''' + value + '''' + ';';
end
else
begin
strings := strings + name + ':=' + '''' + value + '''' + ';' +
sLineBreak;
end;
end;
id := dh_generate_string('1', 5);
if (i = StrToInt(txtLength.Text)) then
begin
functions := 'function gen_vars_' + id + '():string;' + sLineBreak +
vars + sLineBreak + 'begin' + sLineBreak + strings + sLineBreak +
'Result :=' + '''' + id + '''' + ';' + sLineBreak + 'end;' +
sLineBreak;
end
else
begin
functions := 'function gen_vars_' + id + '():string;' + sLineBreak +
vars + sLineBreak + 'begin' + sLineBreak + strings + sLineBreak +
'Result :=' + '''' + id + '''' + ';' + sLineBreak + 'end;' +
sLineBreak + sLineBreak;
end;
code := code + functions;
end;
mmOutput.Lines.Add(code);
// mmOutput.Lines.Add('');
end
else if (cmbOptions.ItemIndex = 4) then
begin
code := '';
for i := 1 to StrToInt(txtLength.Text) do
begin
vars := 'var i,y:integer;';
strings := '';
limit_random := StrToInt(dh_generate_string('3', 1));
if (limit_random = 0) then
begin
limit_random := 5;
end;
for y := 1 to limit_random do
begin
value := dh_generate_string('3', 2);
if (i = limit_random) then
begin
strings := strings + 'i := 0;' + sLineBreak + 'y := 0;' +
sLineBreak;
strings := strings + 'for i := 0 to ' + value + ' do' + sLineBreak +
'begin' + sLineBreak + 'inc(y);' + sLineBreak + 'end;' +
sLineBreak;
end
else
begin
strings := strings + 'i := 0;' + sLineBreak + 'y := 0;' +
sLineBreak;
strings := strings + 'for i := 0 to ' + value + ' do' + sLineBreak +
'begin' + sLineBreak + 'inc(y);' + sLineBreak + 'end;' +
sLineBreak;
end;
end;
id := dh_generate_string('3', 5);
if (i = StrToInt(txtLength.Text)) then
begin
functions := 'function gen_fors_' + id + '():integer();' + sLineBreak
+ vars + sLineBreak + 'begin' + sLineBreak + strings + 'Result :=' +
id + ';' + sLineBreak + 'end;' + sLineBreak;
end
else
begin
functions := 'function gen_fors_' + id + '():integer();' + sLineBreak
+ vars + sLineBreak + 'begin' + sLineBreak + strings + 'Result :=' +
id + ';' + sLineBreak + 'end;' + sLineBreak + sLineBreak;
end;
code := code + functions;
end;
mmOutput.Lines.Add(code);
// mmOutput.Lines.Add('');
end
else if (cmbOptions.ItemIndex = 5) then
begin
code := '';
functions := '';
for i := 1 to StrToInt(txtLength.Text) do
begin
vars := 'var ';
strings := '';
vars2 := 'var ';
strings2 := '';
limit_random := StrToInt(dh_generate_string('3', 1));
if (limit_random = 0) then
begin
limit_random := 5;
end;
for y := 1 to limit_random do
begin
name := dh_generate_string('1', 20);
name2 := dh_generate_string('1', 20);
value := dh_generate_string('1', 20);
value2 := dh_generate_string('3', 2);
if (y = limit_random) then
begin
vars := vars + name + ':string;';
end
else
begin
vars := vars + name + ',';
end;
if (y = limit_random) then
begin
strings := strings + name + ':=' + '''' + value + '''' + ';';
end
else
begin
strings := strings + name + ':=' + '''' + value + '''' + ';' +
sLineBreak;
end;
vars2 := 'var i,y:integer;';
if (y = limit_random) then
begin
strings2 := strings2 + 'i := 0;' + sLineBreak + 'y := 0;' +
sLineBreak;
strings2 := strings2 + 'for i := 0 to ' + value2 + ' do' +
sLineBreak + 'begin' + sLineBreak + 'inc(y);' + sLineBreak +
'end;' + sLineBreak;
end
else
begin
strings2 := strings2 + 'i := 0;' + sLineBreak + 'y := 0;' +
sLineBreak;
strings2 := strings2 + 'for i := 0 to ' + value2 + ' do' +
sLineBreak + 'begin' + sLineBreak + 'inc(y);' + sLineBreak +
'end;' + sLineBreak;
end;
end;
id := dh_generate_string('1', 5);
if (i = StrToInt(txtLength.Text)) then
begin
functions := 'function gen_functions_' + id + '():string;' +
sLineBreak + vars + sLineBreak + vars2 + sLineBreak + 'begin' +
sLineBreak + strings + sLineBreak + strings2 + 'Result :=' + '''' +
id + '''' + ';' + sLineBreak + 'end;' + sLineBreak;
end
else
begin
functions := 'function gen_functions_' + id + '():string;' +
sLineBreak + vars + sLineBreak + vars2 + sLineBreak + 'begin' +
sLineBreak + strings + sLineBreak + strings2 + 'Result :=' + '''' +
id + '''' + ';' + sLineBreak + 'end;' + sLineBreak + sLineBreak;
end;
code := code + functions;
end;
mmOutput.Lines.Add(code);
end;
message_box('DH Junk Code Maker 0.4', 'Enjoy the junk source',
'Information');
end
else
begin
message_box('DH Junk Code Maker 0.4',
'The length should be greater than zero', 'Warning');
end;
end;
procedure TFormHome.clearClick(Sender: TObject);
begin
mmOutput.clear;
message_box('DH Junk Code Maker 0.4', 'Output cleaned', 'Information');
end;
procedure TFormHome.copyClick(Sender: TObject);
begin
mmOutput.SelectAll;
mmOutput.CopyToClipboard;
message_box('DH Junk Code Maker 0.4', 'Output copied to the clipboard',
'Information');
end;
end.
// The End ?
Si quieren bajar el programa lo pueden hacer de aca :
SourceForge (https://sourceforge.net/projects/dh-junk-code-maker/).
Github (https://github.com/DoddyHackman/DH_Junk_Code_Maker).
Eso seria todo.
Esta bueno una recomendación trata de separar el código en units para tener un codigo mas limpio
Saludos...