patcher

Основной форум пользователей GPS (Global Positioning System)
Правила форума
Для предотврашения спама первые сообщения вновь зарегистрированных пользователей проходят ручную премодерацию.
Аватара пользователя
E_I
Сообщения: 2193
Зарегистрирован: 03 мар 2005, 11:18

Re: patcher

Сообщение E_I » 24 окт 2014, 16:11

>а не эту секретную поделку на делфи секретного гражданина РФ?
Был выложен именно алгоритм анлокера. Если память не изменяет, то на китайском форуме.
Он и сейчас у меня в архиве пылится. Кому нужен (я не специалист по программированию!")?
"
program GarminUnlocker;

{$APPTYPE CONSOLE}

uses
SysUtils,
Windows,
Registry,
Classes,
IMGFile in 'IMGFile.pas';

type TDWordArray = array of DWORD;
type PDWordArray = ^TDwordArray;


function getHashVal(a1: DWORD; a2: BYTE): DWORD;
asm
push esi
push edi
push ebx
mov ebx, a1
movsx ecx, a2
xor eax, eax
lea edx, [ecx+1]
cmp edx, 1
jle @return
lea esi, [edx-1]
mov edx, ebx
dec ecx
@loop:
test dl, 1
jz @skip
mov edi, 1
shl edi, cl
or eax, edi
@skip:
shr edx, 1
dec ecx
dec esi
jnz @loop
@return:
pop ebx
pop edi
pop esi
retn
end;

procedure initHashTbl(buffer: Pointer);
asm
push ebx
push esi
push edi
mov esi, buffer
xor edi, edi
@loop:
push edx
mov dl,8
mov eax,edi
call getHashVal
pop edx
mov edx, 8
shl eax, 18h
mov [esi], eax
mov ebx, eax
@inner_loop:
mov ecx, ebx
mov eax, ecx
and eax, 80000000h
neg eax
sbb eax, eax
add ecx, ecx
and eax, 4C11DB7h
xor eax, ecx
dec edx
mov ebx, eax
jnz @inner_loop
mov [esi], ebx
push edx
mov dl,20h
call getHashVal
pop edx
mov [esi], eax
add esi, 4
inc edi
cmp edi, 100h
jl @loop
pop edi
pop esi
pop ebx
end;

function calcHashTDB(buf: PByteArray; len: DWORD): DWORD;
var hash_tbl: TDwordArray;
x,crc: DWORD;
begin
crc:=0;
calcHashTDB:=crc;
if len=0 then exit;
GetMem(hash_tbl,1024);
initHashTbl(Addr(hash_tbl[0]));

crc:=crc or $0FFFFFFFF;
for x:=0 to len-1 do
crc:=(crc shr 8) xor hash_tbl[(crc and $FF) xor buf[x]];
FreeMem(hash_tbl);
calcHashTDB:=not crc;
end;

function unlock_tdb(fname: string): integer;
var fIn: Integer;
buf: PByteArray;
x,crc,len,off: DWORD;
blockid: BYTE;
blocksize: WORD;
MapSetName: PChar;
begin
unlock_tdb:=1;
fIn:=FileOpen(fname,fmOpenReadWrite);
if fIn<=0 then
begin
unlock_tdb:=-1;
writeln('can''t open '+fname);
exit;
end;
len:=FileSeek(fIn,0,2);
GetMem(buf,len);
FileSeek(fIn,0,0);

FileRead(fIn,buf^,len);

x:=0;

while (x+3)<len do
begin
Move(buf[x+0],Addr(blockid)^,1);
Move(buf[x+1],Addr(blocksize)^,2);

if blockid=$50 then
begin
off:=x+9;
GetMem(MapSetName,strlen(Addr(buf[off]))+1);
Move(Addr(buf[off])^,MapSetName^,strlen(Addr(buf[off]))+1);
off:=off+strlen(Addr(buf[off]));
CharToOem(MapSetName,MapSetName);
write('Unlocking mapset '+MapSetName);
FreeMem(MapSetName);
off:=off+3;
off:=off+strlen(Addr(buf[off]));
off:=off+1;
if blocksize>(off-x-3) then
begin
if buf[off]= 0 then
begin
writeln('...not locked');
FreeMem(buf);
FileClose(fIn);
unlock_tdb:=-2;
exit;
end
else
begin
buf[off]:=0;
end;
end
else
begin
writeln('...not locked');
FreeMem(buf);
FileClose(fIn);
unlock_tdb:=-2;
exit;
end;
end;

if blockid=$54 then
begin
crc:=calcHashTDB(buf,x);
buf[x+3+$2]:=crc shr $18;
buf[x+3+$9]:=(crc shr $10) and $FF;
buf[x+3+$C]:=(crc shr $8) and $FF;
buf[x+3+$11]:=crc and $FF;
end;

x:=x+3+blocksize;
end; // while
FileSeek(fIn,0,0);
FileWrite(fIn,buf^,len);

FreeMem(buf);
FileClose(fIn);
end;

procedure decrypt_tre(buf: PByteArray; len: DWORD; key: DWORD);
const dec_tbl: array[0..19] of BYTE = ($0B,$0C,$0A,$0,$8,$0F,$2,$1,$6,$4,$9,$3,$0D,$5,$7,$0E,$5C,$0BA,$9C,$0);
var v2,i,x,hi,lo: DWORD;
begin
if len=0 then exit;
i:=((key shr $18) + (key shr $10) + (key shr $8) + key) and $0F;
v2:=dec_tbl<i>;
i:=4;

for x:=0 to len-1 do
begin
hi:=(key shr (i*4)) and $0F;
hi:=((buf[x] shr 4)-dec_tbl[hi]-v2-hi) and $0F;
if i=0 then i:=4 else i:=i-1;
lo:=(key shr (i*4)) and $0F;
lo:=(buf[x]-dec_tbl[lo]-v2-lo) and $0F;
buf[x]:=(hi shl 4) or lo;
if i=0 then i:=4 else i:=i-1;
end;
end;

procedure dexor(buf: PByteArray; len: DWORD);
var x: BYTE;
i: DWORD;
begin
x:=buf[0];
if x<>0 then
for i:=0 to len-1 do
buf<i>:=buf<i> xor x;
end;

procedure calcHashTRE(buf: PByteArray);
const hash_tbl: array [0..15] of BYTE=($B,$C,$A,$0,$8,$F,$2,$1,$6,$4,$9,$3,$D,$5,$7,$E);
var
MapID: DWORD;
HdrLen: BYTE;
a,b,gvar1,const1: BYTE;
i:BYTE;
begin
HdrLen:=buf[0];
Move(buf[$74],Addr(MapID)^,4);

for i:=0 to $10-1 do
buf[i+$9A]:=0;

buf[0+$9A]:=$1;
buf[1+$9A]:=$0;
Move(Addr(MapID)^,buf[2+$9A],4);
buf[6+$9A]:=HdrLen;

const1:=hash_tbl[((MapID shr $18)+(MapID shr $10)+(MapID shr $8)+MapID) and $F];

gvar1:=0;

for i:=0 to $10-1 do
begin
a:=hash_tbl[MapID shr (gvar1 shl 2) and $0F];
b:=hash_tbl[MapID shr ((gvar1+1) shl 2) and $0F];

buf[i+$9A]:=((((a+const1) shl 4) + (buf[i+$9A] and $F0)) and $FF) or ((b+buf[i+$9A]+const1) and $0F);

gvar1:=(gvar1+2) and 7;
end;
end;


function unlock_img(fname: string): integer;
var off0,len,key,offset: DWORD;
MapName: Array [0..52] of Char;
imgF: TIMGFile;
begin
unlock_img:=1;

imgF:=TIMGFile.Create;
if not imgF.Open(fname) then
begin
unlock_img:=-1;
writeln('...can''t open '+fname);
exit;
end;

write(' ['+TrimRight(imgF.MapName)+']');

off0:=0;

if not imgF.OpenSubfile('TRE') then
if not imgF.OpenSubfile('GMP') then
begin
unlock_img:=-1;
writeln('...not a detail map');
imgF.CloseSubfile;
imgF.Close;
exit;
end
else
begin
write(' NT');
Move(imgF.subBuf[$19],Addr(off0)^,4);
end;

if imgF.subBuf[off0]<$BC then
begin
unlock_img:=-2;
writeln('...old header');
end
else
begin
Move(imgF.subBuf[off0+$21],offset,4);
Move(imgF.subBuf[off0+$25],len,4);
Move(imgF.subBuf[off0+$AA],key,4);

if key>0 then
begin
decrypt_tre(Addr(imgF.subBuf[offset+off0]),len,key);
imgF.subBuf[off0+$0D]:=0;
key:=0;
Move(key,imgF.subBuf[off0+$AA],4);
end;
calcHashTRE(Addr(imgF.subBuf[off0]));
end;

imgF.CloseSubfile;
imgF.Close;

end;

procedure unlock_imgset(Loc: String);
var sr: TSearchRec;
i: integer;
begin
if FindFirst(Loc+'\*.img',faAnyFile,sr) = 0 then
begin
writeln;
i:=1;
repeat
write(Format(' %d.%s',[i,sr.Name]));
if unlock_img(Loc+'\'+sr.Name)= 1 then writeln('...done');
Inc(i);
until FindNext(sr) <> 0;
SysUtils.FindClose(sr);
end;
end;

procedure unlock_mapset(TDB,Loc: String);
begin
if unlock_tdb(TDB)=1 then
unlock_imgset(Loc);
end;

var reg: TRegistry;
subfamilies,families: TStrings;
i,x: Integer;
id: WORD;
Loc,TDB: String;
begin
SetConsoleTitle('GARMIN Unlocker (c) whocares?');
writeln('GARMIN Unlocker by whocares?');
if ParamCount=0 then
begin
writeln('Usage: GarminUnlocker.exe [all]');
writeln(' - unlocks all installed in MapSource products');
writeln(' GarminUnlocker.exe [mapset <path to a tdb file> <path to a imgs dir>]');
writeln(' - unlocks a single mapset');
writeln(' GarminUnlocker.exe [tdb <path to a tdb file>]');
writeln(' - unlocks a single tdb file');
writeln(' GarminUnlocker.exe [img <img file>]');
writeln(' - unlocks a single img file');
writeln(' GarminUnlocker.exe [imgset <path to a img dir>]');
writeln(' - unlocks all files in the specified dir');
end;

writeln;

if CompareStr(LowerCase(ParamStr(1)),'all')=0 then
begin
reg:=TRegistry.Create;

reg.RootKey:=HKEY_LOCAL_MACHINE;
if not reg.KeyExists('Software\Garmin\MapSource') then
begin
writeln('Can''t open MapSource registry');
exit;
end;

if reg.KeyExists('Software\Garmin\MapSource\Families') then
begin
writeln('Unlocking all installed MapSource products');
families:=TStringList.Create;
subfamilies:=TStringList.Create;

reg.OpenKeyReadOnly('Software\Garmin\MapSource\Families');

reg.GetKeyNames(families);

for i:=0 to families.Count-1 do
begin
reg.CloseKey;
reg.OpenKeyReadOnly('Software\Garmin\MapSource\Families\'+families<i>);
if not reg.HasSubKeys then continue;
reg.ReadBinaryData('ID',Addr(ID)^,2);
reg.GetKeyNames(subfamilies);
for x:=0 to subfamilies.Count-1 do
begin
reg.CloseKey;
reg.OpenKeyReadOnly('Software\Garmin\MapSource\Families\'+families<i>+'\'+subfamilies[x]);
Loc:=reg.ReadString('Loc');
TDB:=reg.ReadString('TDB');
unlock_mapset(TDB,Loc);
end;
end;
families.Destroy;
subfamilies.Destroy;
reg.CloseKey;
end;

if reg.KeyExists('Software\Garmin\MapSource\FamiliesNT') then
begin
families:=TStringList.Create;
subfamilies:=TStringList.Create;

reg.OpenKeyReadOnly('Software\Garmin\MapSource\FamiliesNT');
reg.GetKeyNames(families);

for i:=0 to families.Count-1 do
begin
reg.CloseKey;
reg.OpenKeyReadOnly('Software\Garmin\MapSource\FamiliesNT\'+families<i>);
if not reg.HasSubKeys then continue;
reg.ReadBinaryData('ID',Addr(ID)^,2);
reg.GetKeyNames(subfamilies);
for x:=0 to subfamilies.Count-1 do
begin
reg.CloseKey;
reg.OpenKeyReadOnly('Software\Garmin\MapSource\FamiliesNT\'+families<i>+'\'+subfamilies[x]);
Loc:=reg.ReadString('Loc');
TDB:=reg.ReadString('TDB');
unlock_mapset(TDB,Loc);
end;
end;
families.Destroy;
subfamilies.Destroy;
reg.CloseKey;
end;

if reg.KeyExists('Software\Garmin\MapSource\Products') then
begin
reg.OpenKeyReadOnly('Software\Garmin\MapSource\Products');

families:=TStringList.Create;

reg.GetKeyNames(families);

for i:=0 to families.Count-1 do
begin
reg.CloseKey;
reg.OpenKeyReadOnly('Software\Garmin\MapSource\Products\'+families<i>);
Loc:=reg.ReadString('Loc');
TDB:=reg.ReadString('TDB');
unlock_mapset(TDB,Loc);
end;
end;
end;

if CompareStr(LowerCase(ParamStr(1)),'mapset')=0 then
begin
writeln('Unlocking a single mapset '+ParamStr(2)+' '+ParamStr(3));
unlock_mapset(ParamStr(2),ParamStr(3));
end;

if CompareStr(LowerCase(ParamStr(1)),'imgset')=0 then
begin
writeln('Unlocking imgs in the specified dir '+ParamStr(2));
unlock_imgset(ParamStr(2));
end;

if CompareStr(LowerCase(ParamStr(1)),'tdb')=0 then
begin
writeln('Unlocking a single tdb '+ParamStr(2));
unlock_tdb(ParamStr(2));
end;

if CompareStr(LowerCase(ParamStr(1)),'img')=0 then
begin
writeln('Unlocking a single img '+ParamStr(2));
if unlock_img(ParamStr(2))= 1 then writeln('...done');
end;

write('Press any key to exit');
readln;

end.
"
"
unit IMGFile;

interface

uses SysUtils,Windows;

type
TFATRecord = record
flag: BYTE;
name: array [0..7] of char;
ext: array [0..2] of char;
size: DWORD;
part_pad: BYTE;
part: BYTE;
pad: array [0..13] of BYTE;
blocks: array [0..239] of WORD;
end;

type
TIMGFile = class
private
fFile: Integer;
fBuf: PByteArray;
fLen: Integer;
fXor: BYTE;
fMapName: Array [0..52] of Char;
fBLOCKSize: WORD;
fFAToffset: WORD;
fFATrecords: WORD;
fSubBuf: PByteArray;
fSubFAT: array of WORD;
fSubFATRecords: integer;
fSubSize: DWORD;
procedure dexor(buf: PByteArray; len: DWORD);
function GetSubfilesCount(): integer;
function GetMapName: PChar;
public
function Open(FileName: String): boolean;
procedure Close;
property FATrecords: WORD read fFATRecords;
property SubfilesCount: integer read GetSubfilesCount;
function SubfileName(subfile: integer): string;
function OpenSubfile(subtype: string): boolean;
procedure CloseSubfile;
property subBuf: PByteArray read fSubBuf;
property subLen: DWORD read fSubSize;
property MapName: PChar read GetMapName;
protected
end;

implementation

function TIMGFile.GetMapName: PChar;
begin
GetMapName:=Addr(fMapName[0]);
end;

procedure TIMGFile.dexor(buf: PByteArray; len: DWORD);
var x: BYTE;
i: DWORD;
begin
x:=buf[0];
if x<>0 then
for i:=0 to len-1 do
buf<i>:=buf<i> xor x;
end;

function TIMGFile.Open(FileName: String): boolean;
var FATEnd: DWORD;
begin
Open:=false;
fFile:=FileOpen(FileName,fmOpenReadWrite);
if fFile<0 then exit;

fLen:=FileSeek(fFile,0,2);
FileSeek(fFile,0,0);
GetMem(fBuf,fLen);
FileRead(fFile,fBuf^,fLen);

fXor:=fBuf[0];
dexor(fBuf,fLen);

Move(fBuf[$49],Addr(fMapName[0])^,20);
Move(fBuf[$65],Addr(fMapName[20])^,31);
fMapName[52]:=Chr(0);
CharToOem(fMapName,fMapName);

fBLOCKSize:=1 shl (fBuf[$61]+fBuf[$62]);
fFATOffset:=fBuf[$40]*$200;

Move(fBuf[fFATOffset+$C],Addr(FATEnd)^,4);
fFATrecords:=ROUND((FATEnd-fFAToffset)/sizeof(TFATRecord));

Open:=true;
end;


function TIMGFile.GetSubfilesCount(): integer;
begin
GetSubfilesCount:=fFATRecords;
end;

function TIMGFile.SubfileName(subfile: integer): string;
var
FATRec: ^TFATRecord;
fname: array [0..12] of char;
begin
FATRec:=Pointer(Integer(Addr(fBuf[0]))+fFATOffset+sizeof(TFATRecord)*subfile);
Move(FATRec.name,Pointer(Integer(Addr(fname[0])))^,8);
Move(FATRec.ext,Pointer(Integer(Addr(fname[0]))+9)^,3);
fname[8]:='.';
fname[12]:=Chr(0);
SubfileName:=fname;
end;

function TIMGFile.OpenSubfile(subtype: string): boolean;
var x,i: Integer;
FATRec: ^TFATRecord;
ftype: array [0..3] of char;
begin
OpenSubfile:=false;
fSubFATRecords:=0;
for i:=1 to fFATRecords-1 do
begin
FATRec:=Pointer(Integer(Addr(fBuf[0]))+fFATOffset+sizeof(TFATRecord)*i);
Move(FATRec.ext,Addr(ftype[0])^,3);
ftype[3]:=Chr(0);
if (CompareStr(subtype,ftype)=0) and (FATRec.part=0) then
begin
fSubSize:=FATRec.size;
fSubFATRecords:=(Trunc(Int(fSubSize/fBLOCKSize/240))+1)*240;
SetLength(fSubFAT, fSubFATRecords);
break;
end;
end;

if fSubFATRecords<=0 then exit;

for i:=0 to fSubFATRecords-1 do fSubFAT<i>:=$FFFF;

for i:=1 to fFATRecords-1 do
begin
FATRec:=Pointer(Integer(Addr(fBuf[0]))+fFATOffset+sizeof(TFATRecord)*i);
Move(FATRec.ext,Addr(ftype[0])^,3);
ftype[3]:=Chr(0);
if (CompareStr(subtype,ftype)=0) then
for x:=0 to 239 do
fSubFAT[FATRec.part*240+x]:=FATRec.blocks[x];
end;

GetMem(fSubBuf,fSubFATRecords*fBLOCKSize);

for i:=0 to fSubFATRecords-1 do
begin
if fSubFAT<i>=$FFFF then break;
Move(Pointer(Integer(Addr(fBuf[0]))+fSubFAT<i>*fBLOCKSize)^,
Pointer(Integer(Addr(fSubBuf[0]))+i*fBLOCKSize)^,
fBLOCKSize);
end;
OpenSubfile:=true;
end;

procedure TIMGFile.CloseSubfile;
var i: Integer;
begin
for i:=0 to fSubFATRecords-1 do
begin
if fSubFAT<i>=$FFFF then break;
Move(Pointer(Integer(Addr(fSubBuf[0]))+i*fBLOCKSize)^,
Pointer(Integer(Addr(fBuf[0]))+fSubFAT<i>*fBLOCKSize)^,
fBLOCKSize);
end;

FreeMem(fSubBuf);
SetLength(fSubFAT,0);
fSubFATRecords:=0;
fSubSize:=0;
end;

procedure TIMGFile.Close;
begin
if fFile>0 then
begin
fBuf[0]:=fXor;
dexor(fBuf,fLen);
fBuf[0]:=fXor;
FileSeek(fFile,0,0);
FileWrite(fFile,fBuf^,fLen);
FileClose(fFile);
FreeMem(fBuf);
end;
end;

end.


"

Holsten
Сообщения: 255
Зарегистрирован: 15 дек 2016, 22:17

Re: patcher

Сообщение Holsten » 24 окт 2014, 17:27

> Он и сейчас у меня в архиве пылится. Кому нужен (я не специалист по программированию!")?

Засуньте обратно этот антиквариат, не надо тупить.
Нынче вам предъявляют слив незавершенного gimgunlock-0.03+MapSigPatch вопреки просьбам авторов не расшаривать до окончания разработки.

<noindex></noindex>

Adrenalin
Сообщения: 1153
Зарегистрирован: 21 май 2004, 15:48

Забегал на огонёк

Сообщение Adrenalin » 24 окт 2014, 18:25

Топик-то, аки в старые добрые времена!

Скриншоты 4пда у меня сохранились про нытьё велосипедистов.

Гармин уже примерно год как образец 2хх9 выпустил, и анлокер действительно не работал ещё тогда, начиная с бородатых 1.хх версий.
Но при наличии .map файлов, которые безалаберно гармин раздаривает всем подряд, защиты этой ценность нулевая (без подписи прошивок, да, привет kunix).

По остальным приборам беспокоится нечего, всё только свежее будет иметь подпись (привет сенсорным собачникам), а старое продолжит работать.


<noindex></noindex>

Аватара пользователя
AlexWhiter
Сообщения: 384
Зарегистрирован: 09 дек 2016, 16:50

Re: patcher

Сообщение AlexWhiter » 24 окт 2014, 18:28

Teh drama!
/me принес попкорна.

Анлокер уже слили, какой смысл сейчас спорить и ругаться?

MapSigPatch был нифига не из области ядерной физики, а всего лишь результатом сравнения двух (ну трех, ладно) последовательных версий одной карты, ну и еще ряда тестов на разных девайсах.

Если я ничего не напутал, то минимум три команды параллельно нашли дырку в гарминовских проверках. Даже если бы не утёк gimgunlock-0.03+MapSigPatch, утекли бы чьи-либо другие наработки.
Причем даже не имея самого анлокера, а просто получив доступ к исправленной карте, гарминовцы легко смогли бы выяснить, что конкретно и как конкретно было исправлено в карте.
Это был всего лишь вопрос времени - ну ввели бы тотальную проверку подписи в TRE на месяц позже. Принципиальной разницы не было бы.

<noindex></noindex>

Аватара пользователя
giomen
Сообщения: 4420
Зарегистрирован: 06 май 2001, 02:26

Re: Забегал на огонёк

Сообщение giomen » 24 окт 2014, 19:27

Да уж спасибо Вам лично! Garmin почему-то вас упомянул господин Andrew Zinkov, когда их спросили почему на 2хх9 не работает нынче замечательная карта проекта kartaby.by. Как все таки национальная принадлежность определяет человеческие качества - всего пару раз пострадал от стукачества в наше время (время, когда можно ругаться и поливать грязью в открытую от души, а не из под тишка), и оба стукача с Белоруссии.

<noindex>Любишь жену - купи себе навигатор, и у тебя всегда будет точный ответ на вопрос: Милый, ты где? </noindex>
Любишь жену - купи себе навигатор, и у тебя всегда будет точный ответ на вопрос: Милый, ты где?

Аватара пользователя
giomen
Сообщения: 4420
Зарегистрирован: 06 май 2001, 02:26

Re: patcher

Сообщение giomen » 24 окт 2014, 19:39

Давай еще посчитаем сколько я MicroSoft должен с каждого напечатанного в Word инвойса :) Лицензия на программу куплена и все по честному. Не надо считать чужие деньги, что бы сделать карты надо тоже вложиться и при этом самому все объехать, что сегодня съедает всю прибыль практически.
А вы как раз имеете доход по причине того, что не идете ко мне за картами, а ставите их сами благодаря честной и открытой позиции автора, можно пару сотен рублей ему и отправить, ибо я возьму гораздо больше :)

<noindex>Любишь жену - купи себе навигатор, и у тебя всегда будет точный ответ на вопрос: Милый, ты где? </noindex>
Любишь жену - купи себе навигатор, и у тебя всегда будет точный ответ на вопрос: Милый, ты где?

Holsten
Сообщения: 255
Зарегистрирован: 15 дек 2016, 22:17

Re: patcher

Сообщение Holsten » 24 окт 2014, 20:03

> Даже если бы не утёк gimgunlock-0.03+MapSigPatch, утекли бы чьи-либо другие наработки.

Да, и хрен бы с ним, суть не в этом. Дело в гнилых поступках конкретного индивидуума...

<noindex></noindex>

Adrenalin
Сообщения: 1153
Зарегистрирован: 21 май 2004, 15:48

Копию переписки в студию

Сообщение Adrenalin » 24 окт 2014, 20:30

иначе балаболка.

<noindex></noindex>

Adrenalin
Сообщения: 1153
Зарегистрирован: 21 май 2004, 15:48

Re: patcher

Сообщение Adrenalin » 24 окт 2014, 20:36

да так было всегда, кто первый - тот больше лайков соберет. Только это же ценится.

А чем раньше опубликуют решение, тем лучше, быстрее Garmin думать начнёт.

<noindex></noindex>

Adrenalin
Сообщения: 1153
Зарегистрирован: 21 май 2004, 15:48

Пара вопросов

Сообщение Adrenalin » 24 окт 2014, 20:43

это мапсигпатч003?
Так он не работает на 2хх9 и так было задумано, чтобы работал на остальных (и будет продолжать). Наверное, кто-то в гармине гордится там своими достижениями по внедрению защиты. Но патчить прошивку всё равно возможно. Пора поговорки менять, обещанного лет семь ждут.
Есть другое решение?

Да что уж, дыра такая, что карты 1790 ещё существуют и обновляются. А мы про высокие материи...

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 215 гостей