📄 jmain.pas
字号:
UNIT JMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, ComCtrls, StdCtrls, IniFiles, FileCtrl,
ComPort, HexUtils, Crc16, BFB, CryptEEP, l55boots, MD5, EEP, Mask, HWID_EGOLD, SWPio;
const
BitEEP0067 =1;
BitEEP0076 =2;
BitEEP5005 =4;
BitEEP5007 =8;
BitEEP5008 =16;
BitEEP5009 =32;
BitEEP5077 =64;
BitEEP5121 =128;
BitEEP5122 =256;
BitEEP5123 =512;
BitHASH =1024;
BitBKey =2048;
BitEEPROM =4096;
BitBCORE =8192;
BitClrBC =16384;
BitEEP5012 =32768;
BitEEP5093 =65536;
type
tBootsMode=(BootsMode,BFBMode);
TFormMain = class(TForm)
MemoInfo: TMemo;
ProgressBar: TProgressBar;
OpenDialog: TOpenDialog;
SaveDialog: TSaveDialog;
PanelMain: TPanel;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
Panel1: TPanel;
RadioGroupFlash: TRadioGroup;
ButtonRead: TButton;
GroupBoxFManual: TGroupBox;
Label1: TLabel;
Label2: TLabel;
MaskEditAddr: TMaskEdit;
MaskEditSize: TMaskEdit;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
Panel2: TPanel;
GroupBox3: TGroupBox;
ButtonSendSkey: TButton;
ButtonSkey: TButton;
CheckBoxSaveSecBlkOTP: TCheckBox;
CheckBoxSaveSecBlkEEP: TCheckBox;
GroupBox2: TGroupBox;
CheckBoxExtIMEI: TCheckBox;
EditJImei: TEdit;
CheckBoxUseOTPImei: TCheckBox;
Panel5: TPanel;
ButtonSimSim: TButton;
ButtonPhoneOff: TButton;
ButtonSrvm: TButton;
ButtonMasterKeys: TButton;
ButtonPhoneCode: TButton;
ButtonDelInst: TButton;
Button5005: TButton;
TabSheet4: TTabSheet;
Panel3: TPanel;
ButtonSetContrast: TButton;
ScrollBarContrast1: TScrollBar;
LabelContrast: TLabel;
ButtonRead5007: TButton;
ButtonWrite5007: TButton;
ButtonLightOff: TButton;
ButtonLightOn: TButton;
ButtonSrvm1: TButton;
ButtonPhoneOff1: TButton;
Image1: TImage;
ScrollBarContrast2: TScrollBar;
ButtonBackupEEP: TButton;
ButtonRdKeys: TButton;
CheckBoxSrvCreateBlk: TCheckBox;
ButtonDefragEEP: TButton;
ButtonAbout: TButton;
GroupBox1: TGroupBox;
CheckBoxBcorePr: TCheckBox;
CheckBoxBkEEP: TCheckBox;
CheckBoxPrFacEEP: TCheckBox;
ButtonWrite: TButton;
ButtonInfoBFB: TButton;
ButtonNormMode: TButton;
TabSheet5: TTabSheet;
Panel4: TPanel;
ButtonSrvm2: TButton;
ButtonPhoneOff2: TButton;
GroupBox4: TGroupBox;
ButtonFreeze: TButton;
EditFImei: TEdit;
ButtonGetImei: TButton;
Label3: TLabel;
ButtonRdEepFile: TButton;
ButtonPhoneOn: TButton;
RadioGroupTelType: TRadioGroup;
RadioGroupComPort: TRadioGroup;
RadioGroupBaud: TRadioGroup;
RadioGroupBootType: TRadioGroup;
CheckBoxIgnitionMode: TCheckBox;
ButtonClearMemo: TButton;
GroupBox5: TGroupBox;
Button0071: TButton;
Button0280: TButton;
CheckBoxClrBC: TCheckBox;
ButtonConfig: TButton;
ButtonBFEEP: TButton;
ButtonReCalcKey: TButton;
CheckBoxReCalcKeys: TCheckBox;
Button1: TButton;
ButtonNameCh: TButton;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ButtonSkeyClick(Sender: TObject);
procedure ButtonSendSkeyClick(Sender: TObject);
// procedure ButtonBootClick(Sender: TObject);
procedure MaskEditAddrChange(Sender: TObject);
procedure MaskEditSizeChange(Sender: TObject);
procedure ButtonReadClick(Sender: TObject);
procedure ButtonWriteClick(Sender: TObject);
procedure CheckBoxExtIMEIClick(Sender: TObject);
procedure EditJImeiChange(Sender: TObject);
procedure RadioGroupFlashClick(Sender: TObject);
procedure RadioGroupTelTypeClick(Sender: TObject);
procedure CheckBoxUseOTPImeiClick(Sender: TObject);
procedure CheckBoxSaveSecBlkOTPClick(Sender: TObject);
procedure CheckBoxSaveSecBlkEEPClick(Sender: TObject);
procedure ButtonSimSimClick(Sender: TObject);
procedure ButtonPhoneOffClick(Sender: TObject);
procedure ButtonPhoneOnClick(Sender: TObject);
procedure ButtonSrvmClick(Sender: TObject);
procedure ButtonRdKeysClick(Sender: TObject);
procedure ButtonMasterKeysClick(Sender: TObject);
procedure ButtonPhoneCodeClick(Sender: TObject);
procedure ButtonDelInstClick(Sender: TObject);
procedure Button5005Click(Sender: TObject);
procedure ButtonSetContrastClick(Sender: TObject);
procedure ScrollBarContrast1Change(Sender: TObject);
procedure ButtonRead5007Click(Sender: TObject);
procedure ButtonLightOffClick(Sender: TObject);
procedure ButtonLightOnClick(Sender: TObject);
procedure ButtonWrite5007Click(Sender: TObject);
procedure ScrollBarContrast2Change(Sender: TObject);
procedure ButtonDefragEEPClick(Sender: TObject);
procedure ButtonBackupEEPClick(Sender: TObject);
procedure CheckBoxReCalcKeysClick(Sender: TObject);
procedure CheckBoxBcorePrClick(Sender: TObject);
procedure ButtonAboutClick(Sender: TObject);
procedure CheckBoxPrFacEEPClick(Sender: TObject);
procedure CheckBoxBkEEPClick(Sender: TObject);
procedure Button0071Click(Sender: TObject);
procedure ButtonInfoBFBClick(Sender: TObject);
procedure ButtonNormModeClick(Sender: TObject);
procedure ButtonReCalcKeyClick(Sender: TObject);
procedure ButtonGetImeiClick(Sender: TObject);
procedure EditFImeiChange(Sender: TObject);
procedure ButtonFreezeClick(Sender: TObject);
procedure ButtonRdEepFileClick(Sender: TObject);
procedure ButtonClearMemoClick(Sender: TObject);
procedure Button0280Click(Sender: TObject);
procedure CheckBoxClrBCClick(Sender: TObject);
procedure ButtonConfigClick(Sender: TObject);
procedure ButtonBFEEPClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ButtonNameChClick(Sender: TObject);
// procedure ButtonReadClick(Sender: TObject);
private
{ Private declarations }
procedure ReadIniImeiKeys;
procedure WriteIniImeiKeys(flgBkey : boolean);
function SendAllBoot : boolean;
function ComOpen : boolean;
procedure ComClose;
procedure Terminate;
procedure Stop;
procedure AllKeyDisable;
function CalcSkey(xesn,xskey:dword): boolean;
procedure CalcHashAndBkey(xskey,xesn:Dword);
function TestSkey(xskey,xesn: dword; flgTstBkey:boolean): boolean;
function TestAndCalcSkey : boolean;
function StartServiceMode(mode : byte) : boolean;
function Ignition : boolean;
function InfoBFB : boolean;
function StartBoot( mode : tBootsMode) : boolean;
function GetFlashInfo : boolean;
function ReadFlashSeg(addr, size: dword; stepx : integer): boolean ;
function StartBootAndInfo : boolean;
function SendSwpBoot : boolean;
procedure ShowTabFlash;
function PingBFB : boolean;
function CalcMasterKeys : boolean;
function TestSecurityMode : boolean;
function BFB_Write_EEP_block(flgok : boolean; num,ver,len : dword ; var buf : array of byte): boolean;
function BootBackupEEP : boolean;
function ReadAllEepBlocks : boolean;
function Write_BFB_EELITE_blks : boolean;
function Write_BFB_EEFULL_blks : boolean;
function EepInfo(ShowWarn : boolean) : boolean;
function CreateFileMobileName : boolean;
function ReCalcEEPSeg(addr: dword; xb: integer; var buf: array of byte): dword;
function RestoreEEPSeg(addr: dword; xb: integer; var buf: array of byte): dword;
function GreateFileNameBackup(s : string) : string;
function SaveNewSecBlocks : boolean;
procedure ChangeInfo(flgrec : dword; s : string);
procedure Test5008;
function ReadHWID : boolean;
public
{ Public declarations }
procedure AddLinesLog(s: string);
end;
var
FormMain: TFormMain;
BinMemoryStream : TMemoryStream;
IniFile : TIniFile = nil;
IniFileX : TIniFile = nil;
IniFileName : string = '.\Joker.ini';
PhoneName : string;
debug : boolean;
flgalready : boolean = False;
flgBootLoad : boolean = False;
flgHASH : boolean = False;
FSN : dword;
FlashID : array[0..7] of byte;
HASH : array[0..15] of byte;
BootKey : array[0..15] of byte;
IMEI : string;
OTPIMEI : string;
SKEY : dword;
HWID : word;
SecMode : byte;
Mkey : array[0..5] of dword;// = (12345678,12345678,12345678,12345678,12345678,12345678);
tabnnbin : array[0..nManual] of pchar = ('FF','BC','EE','LG','T9','ES','FS','FB','FC','MN');
FlashInfo : tFlashInfo;
EEP0067 : array[0..19] of byte;
EEP5005 : array[0..127] of byte; // 64 bytes!!!
EEP5007 : array[0..31] of byte; // 10 bytes!!!
Len5007 : dword = 12;
Ver5007 : byte;
EEP5012 : array[0..13] of byte; // 12 or 14 徉轵 Ver 0 Battery Display Level
EEP5093 : array[0..75] of byte; // A55-A57,C55,M55/56,S55 32 徉轵 Ver 0,
// SL65 64 徉轵 Ver 1
// A60... 76 徉轵 Ver 1, Battery Ri-measurement
// FlgReadEEP5009 : boolean;
LogFile : THandle = 0;
LogFileName : string = '';
FlgBkEEP : dword;
CryptModel : integer = C55;
// SpeedBFB : integer = 115200;
sDisplayController : array[0..63] of pchar =
('Unknown or misses',
'Epson Hitachi HD66728',
'Hyundai Samsung KS0718',
'Hyundai Hitachi HD66728',
'Sharp Rohm BU97979',
'Philips Epson SED1568',
'Philips Nec UPD16682a',
'Hyundai Epson SED1568',
'Hyundai Samsung KS0724-old',
'Samsung Samsung KS0724',
'Philips Philips OM6206-old',
'Epson Epson SED1568',
'Epson Epson SED15E0',
'Hyundai Solomon SSD1812',
'Sharp Samsung KS0718',
'Tecdis Emmarin EM6124',
'Hyundai Radio NJU6578',
'Optrex HD66740',
'Hyundai S6B0718',
'Optrex BU41142',
'Optrex dialog',
'Epson SED15E0',
'Hyundai Samsung KS0724',
'Epson Epson SED1065',
'Philips Philips OM6206',
'Philips Philips OM6206-2',
'Sharp LH15A1',
'Hitachi HD66760',
'Epson S1D15G14',
'Philips PCF8813',
'Hyundai D0986EA',
'Epson BU97865',
'Philips PCF8813-old',
'Philips NJU6821',
'Sharp Hynix HM17CM4101',
'Hyundai D0986ED',
'Samsung S6B1400X',
'Philips Epson S1D15G14',
'Epson L2F50126T',
'Sharp Nec PD161691',
'Sharp Sharp LH15KAH2',
'Hyundai Samsung S6B33B1X',
'Epson L2F50250',
'Hyundai Dialog DA8912A',
'Sharp Sharp LR38836',
'Philips Hitachi HD66773R',
'Wintek STE2020',
'Epson Rohm BU98232',
'Sharp Sharp LR38826A',
'Alps Solomon SSD1286',
'Philips Philips PCf8882',
'Byd Solomon SSD1779',
'Hyundai D0986EF',
'Sharp Dialog DA8912A',
'Philips Leadis LDS183',
'Byd Solomon SSD1783',
'Byd Solomon SSD1788',
'Byd Samsung S6B33B2',
'Sharp Dialog DA8934A',
'Epson L2F50333T',
'Philips Philips PCF8882 serial',
'Alps Solomon SSD1286 serial',
'Sharp Nec PD161700',
'Byd Toppoly C1C104'); //63
ErrChFileName: string ='\/:*?"<>|.';
implementation
uses Blk5005, About, Config, DelInsts, NewSkey, ChName;
{$R *.DFM}
function RepairFileName(var FileName : string) : boolean;
var
b : Byte;
i,x : integer;
begin
result:=False;
for i:=1 to Length(FileName) do begin
b:=byte(FileName[i]);
if (b>=Ord(' ')) then begin
for x:=1 to Length(ErrChFileName) do
if Char(b) = ErrChFileName[x] then begin
FileName[i]:='_';
result:=True;
break;
end;
end
else begin
FileName[i]:='#';
result:=True;
end;
end;
end;
procedure TFormMain.ButtonConfigClick(Sender: TObject);
var
i : integer;
buf : array[0..15] of byte;
begin
with ConfigDlg do begin
CheckBoxLog.Checked:=IniFile.ReadBool('System','LogFileOn',True);
SpinEditSkey.Value:=IniFile.ReadInteger('System','SKEY',12345678);
SpinEditM0.Value:=IniFile.ReadInteger('System','Mkey0',12345678);
SpinEditM1.Value:=IniFile.ReadInteger('System','Mkey1',12345678);
SpinEditM2.Value:=IniFile.ReadInteger('System','Mkey2',12345678);
SpinEditM3.Value:=IniFile.ReadInteger('System','Mkey3',12345678);
SpinEditM4.Value:=IniFile.ReadInteger('System','Mkey4',12345678);
SpinEditM5.Value:=IniFile.ReadInteger('System','Mkey5',12345678);
EditBkey.Text:=IniFile.ReadString('System','BKEY','6E75747A6F6973746865626573740000');
end;
ConfigDlg.Top := Top+120;
ConfigDlg.Left := Left+60;
ConfigDlg.ShowModal;
if ConfigDlg.ModalResult=mrOk then begin
with ConfigDlg do begin
IniFile.WriteBool('System','LogFileOn',CheckBoxLog.Checked);
IniFile.WriteInteger('System','SKEY',SpinEditSkey.Value);
IniFile.WriteInteger('System','Mkey0',SpinEditM0.Value);
IniFile.WriteInteger('System','Mkey1',SpinEditM1.Value);
IniFile.WriteInteger('System','Mkey2',SpinEditM2.Value);
IniFile.WriteInteger('System','Mkey3',SpinEditM3.Value);
IniFile.WriteInteger('System','Mkey4',SpinEditM4.Value);
IniFile.WriteInteger('System','Mkey5',SpinEditM5.Value);
i:=Length(EditBkey.Text);
if i>=32 then begin
HexTopByte(@EditBkey.Text[1],16,@buf[0]);
IniFile.WriteString('System','BKEY',BufToHexStr(@buf[0],16));
end
else
IniFile.WriteString('System','BKEY','6E75747A6F6973746865626573740000');
end;
IniFile.UpdateFile;
ReadIniImeiKeys;
end;
end;
procedure TFormMain.ReadIniImeiKeys;
var
i : integer;
begin
for i:=0 to 5 do Mkey[i]:=IniFile.ReadInteger(IMEI,'Mkey'+IntToStr(i),IniFile.ReadInteger('System','Mkey'+IntToStr(i),12345678));
HexTopByte(@IniFile.ReadString(IMEI,'BKEY',IniFile.ReadString('System','BKEY','6E75747A6F6973746865626573740000'))[1],16,@BootKey);
SKEY:=IniFile.ReadInteger(IMEI,'SKEY',IniFile.ReadInteger('System','Skey',12345678));
if (SKEY=0) or (SKEY>99999999) then SKEY:=12345678;
end;
procedure TFormMain.WriteIniImeiKeys( flgBkey : boolean);
begin
IniFile.WriteString(IMEI,'FSN',IntToHex(FSN,8));
IniFile.WriteString(IMEI,'HASH',BufToHexStr(@HASH[0],16));
if flgBkey then IniFile.WriteString(IMEI,'BKEY',BufToHexStr(@BootKey[0],16));
IniFile.WriteInteger(IMEI,'SKEY',SKey);
end;
procedure TFormMain.FormCreate(Sender: TObject);
var
i : integer;
s : string;
begin
iComBaud:=57600;
if IniFile = nil then IniFile := TIniFile.Create(IniFileName);
if IniFile.ReadString('System','Version','') = '' then begin
IniFile.WriteString('System','Version',Caption);
// IniFile.WriteInteger('System','SpeedBFB',115200);
IniFile.WriteInteger('Setup','ComPort',iComNum);
IniFile.WriteString('System','DirLogs','.\Logs');
IniFile.WriteString('System','DirBackup','.\Backup');
IniFile.WriteBool('System','LogFileOn',True);
IniFile.WriteInteger('System','SKEY',12345678);
for i:=0 to 5 do IniFile.WriteInteger('System','Mkey'+IntToStr(i),12345678);
IniFile.WriteString('System','BKEY','6E75747A6F6973746865626573740000');
end
else begin
IniFile.WriteString('System','Version',Caption);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -