Модуль "Flash Rainbow POG" (часть 18) - RemoveRSA

Рубрика: Исходники
Среда, 21 апреля 2010 г.
Просмотров: 120
последняя версия: 3.0.9 build 961 beta
от 07 декабря 2007 г.
function TfrmFlash_Work_with_POG.RemoveRSA(ABoot, ACG1: string): boolean;
var
  xAddr: word;
  fHandle: Integer;
  fSize: integer;
  xBuffer: pbytearray;
  patern1: word;
  patern3: word;
  patern2, xAddr2: word;
  posx,back, i, j : integer;

begin
  result:= false;
  posx:= FindBootAddr(ABoot);
  //ldr:= ExePath + 'Flash\ramldrs\V3xNoRSA.ldr';
  if posx < 1 then
    begin
      result:= false;
      Form1.spSkinMessage1.MessageDlg(fp_m_text10, mtError, [mbOk], 0);
      exit;
    end;
  // патчим CG1
  fHandle:= FileOpen(ACG1, fmOpenRead);
  fSize:= GetFileSize(fHandle, nil);
  xBuffer:= AllocMem(fSize);
  Form1.Update;
  Application.ProcessMessages;  
  try
    FileRead(fHandle, xBuffer^, fSize);
  finally
    FileClose(fHandle);
  end;
  Form1.Update;
  Application.ProcessMessages;
  if fSize < 1 then begin FreeMem(xBuffer); exit; end;
  // 1
  CopyMemory(@back, @xBuffer[0], 4);
  posx:= convert_dword(posx + $10000000);
  CopyMemory(@xBuffer[0], @posx, 4);
  // 2
  posx:= convert_dword($100400E0);
  CopyMemory(@xBuffer[$00000AC], @posx, 4);
  // 3
  posx:= convert_dword($1000E800);
  CopyMemory(@xBuffer[$00000E0], @posx, 4);
  posx:= convert_dword($000000B1);
  CopyMemory(@xBuffer[$00000E0+4], @posx, 4);
  posx:= convert_dword($00080406);
  CopyMemory(@xBuffer[$00000E0+8], @posx, 4);
  posx:= convert_dword($50060000);
  CopyMemory(@xBuffer[$00000E0+12], @posx, 4);
  // 4
  i:= $2FBBC;  // << 3FFFF
  CopyMemory(@xBuffer[i], @back, 4);
  RenameFile(ACG1, ACG1 + '_bak');
  fHandle:= FileCreate(ACG1);
  FileWrite(fHandle, xBuffer^, fSize);
  FileClose(fHandle);
  FreeMem(xBuffer);
  result:= true;
end;
Rambler's Top100