# Colobot Forum - International Colobot Community

Full Version: aim virus
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
At this new level you should to kill all ants.

But from prev planet there are viruses in all Shooter bots.

When you try to use
aim(X,Y)
in fact
aim(X+XOffset,Y)

Houston says that XOffset is generated by https://en.wikipedia.org/wiki/Linear_con..._generator

In every bot's program you can find gifts from virus: last six (or one, isn't important, but 4 numbers is need to broke generator at least) numbers of prev XOffset, the numbers go in a row (one by one). For example: 18 28 14 8 10 20
So you need decrypt Linear congruential generator or try to use aim without calibration.

You use aim(X,Y)
in fact it will be aim(X+18,Y)
analyze it.

use aim(X,Y)
in fact it will be aim(X+28,Y)
analyze it.

use aim(X,Y)
in fact it will be aim(X+14,Y)
analyze it.

use aim(X,Y)
in fact it will be aim(X+8,Y)
analyze it.

P.S. crack decryption:
(a*18+c) mod m=28,
(a*28+c) mod m=14,
(a*14+c) mod m=8,
(a*8+c) mod m=10,
a>0,c>0,m>0, a,c,m are Integers

pascal code:
const Predicate=7660;//Integer.MaxValue;
Xfirst = 0;

var a:=1;
m:=1;
c:=1;
x1:=1;
Xprev:=0;

var Ci,Mi,Ai,Xprev_i:Integer;
BEGIN
for Ci:=c to Predicate do
for Mi:=m to Predicate do
for Ai:=a to Predicate do
if (Ai*8+Ci) mod Mi = 10 then
begin
if (Ai*18+Ci) mod Mi = 28 then//if (4*Ai+Ci) mod Mi =3 then
begin
if (Ai*28+Ci) mod Mi = 14 then
begin
if (Ai*14+Ci) mod Mi =8 then//if (Ai*Xprev_i+Ci) mod Mi = 1 then writeln('of cause a='+Ai+' ,c='+Ci+' ,m= '+Mi+' ,XPrev='+XPrev_i);
writeln('a='+Ai+' ,c='+Ci+' ,m= '+Mi);
end;
end;
end;
END.

So I have got a,c,m and one of value. I can create any XOffset using XNew:=(a*Xold+c) mod m; After 20 it will be
XNew:=(5*20+2) mod 32=6

You can do not crack generator stupid. Use your ,mathematical knowledge.

aim() is just example. We can use Offset to any command: jet, turn, move, ...