Почему этот код - вирус?
От: resuples  
Дата: 20.05.13 06:12
Оценка:
После компиляции проверяю антивирусами на 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
Re: Почему этот код - вирус?
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 20.05.13 08:11
Оценка:
Здравствуйте, resuples, Вы писали:

R>После компиляции проверяю антивирусами на virustotal — результат: 3 — вируса.


Учитывая, что в коде нет ничего такого, на что могла бы ругаться эвристика, очевидно, что после компиляции имеет место случайное совпадение сигнатур с каким-то из существующих вирусов
... << RSDN@Home 1.2.0 alpha 5 rev. 72>>

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re: Почему этот код - вирус?
От: мыщъх США http://nezumi-lab.org
Дата: 20.05.13 08:17
Оценка: +1
Здравствуйте, resuples, Вы писали:

R>После компиляции проверяю антивирусами на virustotal — результат: 3 — вируса.

а ссылку можно на VT? и откомпилированный код, плз.
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.
Re: Почему этот код - вирус?
От: wildwind Россия  
Дата: 20.05.13 11:25
Оценка:
Здравствуйте, resuples, Вы писали:

R>После компиляции проверяю антивирусами на virustotal — результат: 3 — вируса.


У них видимо эвристика такая. Раз есть xor, значит шифруешься. Раз шифруешься, значить малварь.
Re: Почему этот код - вирус?
От: acDev Россия  
Дата: 21.05.13 06:01
Оценка:
Здравствуйте, resuples, Вы писали:

R>После компиляции проверяю антивирусами на virustotal — результат: 3 — вируса.


Проверил. Действительно трое ругаются:

Не на XOR ругаются, а в общем на Delphi7 компиль. Хе хе.
Re: Почему этот код - вирус?
От: __kot2  
Дата: 22.05.13 04:38
Оценка:
Здравствуйте, resuples, Вы писали:
R>После компиляции проверяю антивирусами на virustotal — результат: 3 — вируса.
многие корявые вирусы на делфи написаны. сам код вообще невменяемый, может быть приемы какие-то характерные используются для вирусописателей.
Re: Почему этот код - вирус?
От: ArtDenis Россия  
Дата: 24.05.13 03:17
Оценка: :)
Здравствуйте, resuples, Вы писали:

R>unit Unit24;

R>
Силён
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.