После компиляции проверяю антивирусами на virustotal — результат: 3 — вируса.
unit Unit24;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ExtDlgs;
type
UnitFive = record
x:array[0..6] of byte;
end;
GAData = record
GAD:array[0..80] of byte;
LN,cp:longint;
end;
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const lvl: longint = 6;
lmx: longint = 30000;
var
Form1: TForm1;
lf,rg,g,k,f,f1,swt,ttl,scr,i,j,tr,pr,ctr,treeend,sm,il,tc:longint;
GA0,GA1: array[0..30000] of GAData;
ta,tb:array[0..255] of longint;
x0,x1:longint;
c,d,a,b:longint;
s:string;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var i,j,cb,ac,bc,k,max:longint;
rs:UnitFive;
u0,v0,u1,v1,tm0,tm1:longint;
s,r:string;
procedure GenTable();
begin
a:=lvl;
for x0:=0 to 255 do ta[x0]:=0;
for x0:=0 to 255 do tb[x0]:=0;
for x0:=0 to a-2 do
begin
for x1:=x0+1 to a-1 do
begin
ta[(1 shl x0) xor (1 shl x1)]:=(1 shl (x0));
tb[(1 shl x0) xor (1 shl x1)]:=(1 shl (x1));
end;
end;
end;
function GASearch(a,b:longint):UnitFive;
var f0,f1,i,j,rf0,rf1,xorr,andr,orr,nm,xx:longint;
st,ss:string;
r:UnitFive;
begin
xx:=0;
nm:=lvl;
for i:=0 to lvl-1 do
begin
xx:=xx or (1 shl i);
end;
ctr:=0;
rf0:=0;
rf1:=0;
f0:=-1;
andr:=xx;
orr:=0;
xorr:=0;
for j:=0 to nm-2 do
begin
andr:=andr and GA0[a].GAD[b-(nm-2)+j];
orr:=orr or GA0[a].GAD[b-(nm-2)+j];
end;
xorr:=(not(andr xor orr)) and xx;
f0:=GA0[a].GAD[b] xor ta[xorr];
f1:=-1;
xorr:=0;
andr:=xx;
orr:=0;
for j:=0 to nm-2 do
begin
andr:=andr and GA0[a].GAD[b-(nm-2)+j];
orr:=orr or GA0[a].GAD[b-(nm-2)+j];
end;
xorr:=(not(andr xor orr)) and xx;
f1:=GA0[a].GAD[b] xor tb[xorr];
f:=0;
i:=0;
while (i<GA0[a].LN) do
begin
if (GA0[a].GAD[i]=f0) then
begin
rf0:=1;
break;
end;
i:=i+1;
end;
f:=0;
i:=0;
while (i<GA0[a].LN) do
begin
if (GA0[a].GAD[i]=f1) then
begin
rf1:=1;
break;
end;
i:=i+1;
end;
r.x[0]:=0;
r.x[1]:=0;
r.x[2]:=0;
r.x[3]:=0;
r.x[4]:=0;
r.x[5]:=0;
if ((rf0<>0) and (rf1<>0)) then
begin
r.x[0]:=f0;
r.x[1]:=f1;
f:=0;
end else
if ((rf0<>0) and (rf1=0)) then
begin
r.x[0]:=f0;
r.x[1]:=f1;
f:=1;
end else
if ((rf0=0) and (rf1<>0)) then
begin
r.x[0]:=f0;
r.x[1]:=f1;
f:=2;
end else
if ((rf0=0) and (rf1=0)) then
begin
r.x[0]:=f0;
r.x[1]:=f1;
f:=3;
end;
r.x[2]:=f;
GASearch:=r;
end;
begin
tc:=0;
tm0:=GetTickCount();
GenTable();
GA0[0].GAD[0]:=0;
GA0[0].GAD[1]:=1;
GA0[0].GAD[2]:=3;
GA0[0].GAD[3]:=7;
GA0[0].GAD[4]:=15;
GA0[0].GAD[5]:=31;
GA0[0].GAD[6]:=63;
max:=0;
GA0[0].LN:=lvl;
GA0[0].cp:=0;
cb:=0;
treeend:=1;
tc:=0;
bc:=0;
i:=0;
while (i<=((1 shl lvl)-1)) do
begin
ac:=0;
bc:=0;
pr:=0;
while (ac<treeend) do
begin
if (GA0[ac].cp=0) then rs:=GASearch(ac,GA0[ac].LN-1);
if (GA0[ac].cp=1) then
begin
tc:=tc+1;
end else if (GA0[ac].cp=0) then
begin
if (rs.x[2]=3) then
begin
if (rs.x[0]<>-1) then
begin
k:=0;
while (k<GA0[ac].LN) do
begin
GA1[bc].GAD[k]:=GA0[ac].GAD[k];
GA1[bc].cp:=GA0[ac].cp;
k:=k+1;
end;
k:=GA0[ac].LN;
GA1[bc].GAD[k]:=rs.x[0];
GA1[bc].LN:=GA0[ac].LN+1;
bc:=bc+1;
end;
if (rs.x[1]<>-1) then
begin
k:=0;
while (k<GA0[ac].LN) do
begin
GA1[bc].GAD[k]:=GA0[ac].GAD[k];
GA1[bc].cp:=GA0[ac].cp;
k:=k+1;
end;
k:=GA0[ac].LN;
GA1[bc].GAD[k]:=rs.x[1];
GA1[bc].LN:=GA0[ac].LN+1;
bc:=bc+1;
end;
end else
if (rs.x[2]=2) then
begin
if (rs.x[0]<>-1) then
begin
k:=0;
while (k<GA0[ac].LN) do
begin
GA1[bc].GAD[k]:=GA0[ac].GAD[k];
GA1[bc].cp:=GA0[ac].cp;
k:=k+1;
end;
k:=GA0[ac].LN;
GA1[bc].GAD[k]:=rs.x[0];
GA1[bc].LN:=GA0[ac].LN+1;
GA1[bc].cp:=0;
bc:=bc+1;
end;
if (rs.x[1]<>-1) then
begin
k:=0;
while (k<GA0[ac].LN) do
begin
GA1[bc].GAD[k]:=GA0[ac].GAD[k];
GA1[bc].cp:=GA0[ac].cp;
k:=k+1;
end;
k:=GA0[ac].LN;
GA1[bc].GAD[k]:=rs.x[1];
GA1[bc].LN:=GA0[ac].LN+1;
GA1[bc].cp:=1;
bc:=bc+1;
end;
end else
if (rs.x[2]=1) then
begin
if (rs.x[0]<>-1) then
begin
k:=0;
while (k<GA0[ac].LN) do
begin
GA1[bc].GAD[k]:=GA0[ac].GAD[k];
GA1[bc].cp:=GA0[ac].cp;
k:=k+1;
end;
k:=GA0[ac].LN;
GA1[bc].GAD[k]:=rs.x[0];
GA1[bc].LN:=GA0[ac].LN+1;
GA1[bc].cp:=1;
bc:=bc+1;
end;
if (rs.x[1]<>-1) then
begin
k:=0;
while (k<GA0[ac].LN) do
begin
GA1[bc].GAD[k]:=GA0[ac].GAD[k];
GA1[bc].cp:=GA0[ac].cp;
k:=k+1;
end;
k:=GA0[ac].LN;
GA1[bc].GAD[k]:=rs.x[1];
GA1[bc].LN:=GA0[ac].LN+1;
GA1[bc].cp:=0;
bc:=bc+1;
end;
end else
begin
if (rs.x[2]=0) then
begin
if (rs.x[0]<>-1) then
begin
k:=0;
while (k<GA0[ac].LN) do
begin
GA1[bc].GAD[k]:=GA0[ac].GAD[k];
GA1[bc].cp:=GA0[ac].cp;
k:=k+1;
end;
k:=GA0[ac].LN;
GA1[bc].GAD[k]:=rs.x[0];
GA1[bc].LN:=GA0[ac].LN+1;
GA1[bc].cp:=1;
bc:=bc+1;
end;
if (rs.x[1]<>-1) then
begin
k:=0;
while (k<GA0[ac].LN) do
begin
GA1[bc].GAD[k]:=GA0[ac].GAD[k];
GA1[bc].cp:=GA0[ac].cp;
k:=k+1;
end;
k:=GA0[ac].LN;
GA1[bc].GAD[k]:=rs.x[1];
GA1[bc].LN:=GA0[ac].LN+1;
GA1[bc].cp:=1;
bc:=bc+1;
end;
end;
end;
end;
ac:=ac+1;
end;
GA0:=GA1;
if max<bc then max:=bc;
if (bc>=lmx) then
begin
Memo1.Lines.Add('error '+IntToStr(i));
break;
end;
treeend:=bc;
i:=i+1;
end;
tm1:=GetTickCount();
Memo1.Lines.Add(IntToStr(tc)+' '+IntToStr(max)+' '+IntToStr(tm1-tm0));
end;
end.
20.05.13 12:08: Перенесено модератором из 'Алгоритмы' — kochetkov.vladimir
Здравствуйте, resuples, Вы писали:
R>После компиляции проверяю антивирусами на virustotal — результат: 3 — вируса.
Учитывая, что в коде нет ничего такого, на что могла бы ругаться эвристика, очевидно, что после компиляции имеет место случайное совпадение сигнатур с каким-то из существующих вирусов

... << RSDN@Home 1.2.0 alpha 5 rev. 72>>
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, resuples, Вы писали:
R>После компиляции проверяю антивирусами на virustotal — результат: 3 — вируса.
У них видимо эвристика такая. Раз есть xor, значит шифруешься. Раз шифруешься, значить малварь.
Здравствуйте, resuples, Вы писали:
R>После компиляции проверяю антивирусами на virustotal — результат: 3 — вируса.
Проверил. Действительно трое ругаются:
Commtouch = W32/Dadobra.A3.gen!Eldorado
F-Prot = W32/Dadobra.A3.gen!Eldorado
K7AntiVirus = Riskware
Не на XOR ругаются, а в общем на Delphi7 компиль. Хе хе.
Здравствуйте, resuples, Вы писали:
R>unit Unit24;
R>
Силён