📄 ufstool.asm
字号:
.else
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szUpdateFail
.endif
.endif
.endif
popa
.elseif (eax == IDC_BTN_Calculator) ;3F9h
invoke SendDlgItemMessage,hWindow,IDC_EDT_Info,EM_SETSEL ,0,-1
invoke SendDlgItemMessage,hWindow,IDC_EDT_Info,WM_CLEAR,NULL,NULL
invoke GetDlgItemText,hWindow,IDC_EDT_EnterSN,addr FTInBuf,16
.if (!eax)
invoke lstrcpy,addr TempString ,addr szEnterSerial
.else
mov ecx,eax
lea edi,FTInBuf
xor eax,eax
mov EEP_SN,eax
mov al,2Bh ;FTDI_SN+EEP_SN
cld
repne scasb
jnz @F
mov byte ptr [edi-1],0
mov eax,edi
call Str2Int
and eax,0FFFFFFh
mov EEP_SN,eax
@@:
lea eax,FTInBuf
call Str2Int
and eax,0FFFFFFh
mov ecx,eax
mov FTDI_SN,eax
mov eax,EEP_SN
or eax,eax
jnz @F
mov EEP_SN,ecx
@@:
invoke CheckBoxType,ecx
.if (eax==-1)
lea eax,szBlackListBox
.elseif (eax==1)
lea eax,szTornado1
.elseif (eax==2)
lea eax,szTornado2
.elseif (eax==3)
lea eax,szTwister
.elseif (eax==4)
lea eax,szNBox
.elseif (eax==5)
lea eax,szPowFlasher
.elseif (eax==6)
lea eax,szSFlasher
.else
lea eax,szUnknownBox
.endif
mov edx,EEP_SN
.if (FTDI_SN == edx)
invoke wsprintf,addr FTOutBuf,addr szActStrFor,ecx,ecx,eax
.else
invoke wsprintf,addr FTOutBuf,addr szFTDI_SN,ecx,ecx,edx,edx,eax
.endif
invoke lstrcpy,addr TempString,addr szReseller
invoke GetDlgItemText,hWindow,IDC_EDT_Reseller,addr FTInBuf,30h
.if (!eax)
mov dword ptr TempString,eax
invoke lstrcat,addr TempString ,addr FTOutBuf
.else
invoke lstrcat,addr TempString ,addr FTInBuf
invoke lstrcat,addr TempString ,addr szCRLF
invoke wsprintf,addr FTInBuf,addr szFmt1,FTDI_SN
invoke lstrcat,addr TempString ,addr szSn
invoke lstrcat,addr TempString ,addr FTInBuf
invoke lstrcat,addr TempString ,addr szCRLF
.endif
invoke IsDlgButtonChecked,hWindow,IDC_CHK_HWK
cmp eax,BST_CHECKED
jz @F
invoke CalcActCode,FTDI_SN,EEP_SN,NokiaActSeed,5,addr FTInBuf,1
invoke lstrcat,addr TempString ,addr szNokia
invoke lstrcat,addr TempString ,addr FTInBuf
invoke lstrcat,addr TempString ,addr szCRLF
invoke CalcActCode,FTDI_SN,EEP_SN,EricssonActSeed,1,addr FTInBuf,1
invoke lstrcat,addr TempString ,addr szEricsson
invoke lstrcat,addr TempString ,addr FTInBuf
invoke lstrcat,addr TempString ,addr szCRLF
invoke CalcActCode,FTDI_SN,EEP_SN,SamsungActSeed,12,addr FTInBuf,1
invoke lstrcat,addr TempString ,addr szSamsung
invoke lstrcat,addr TempString ,addr FTInBuf
invoke lstrcat,addr TempString ,addr szCRLF
invoke CalcActCode,FTDI_SN,EEP_SN,FreiaActSeed,13,addr FTInBuf,0
invoke lstrcat,addr TempString ,addr szFreia
invoke lstrcat,addr TempString ,addr FTInBuf
invoke lstrcat,addr TempString ,addr szCRLF
invoke CalcActCode,FTDI_SN,EEP_SN,MotorolaActSeed,6,addr FTInBuf,1
invoke lstrcat,addr TempString ,addr szMotorola
invoke lstrcat,addr TempString ,addr FTInBuf
invoke lstrcat,addr TempString ,addr szCRLF
invoke lstrcat,addr TempString ,addr szCRLF
invoke lstrcat,addr TempString ,addr szOldActStr ; Activation strings for old versions
invoke CalcActCode,FTDI_SN,EEP_SN,NokiaActSeed,5,addr FTInBuf,0
invoke lstrcat,addr TempString ,addr szNokia
invoke lstrcat,addr TempString ,addr FTInBuf
invoke lstrcat,addr TempString ,addr szCRLF
invoke CalcActCode,FTDI_SN,EEP_SN,EricssonActSeed,1,addr FTInBuf,0
invoke lstrcat,addr TempString ,addr szEricsson
invoke lstrcat,addr TempString ,addr FTInBuf
invoke lstrcat,addr TempString ,addr szCRLF
invoke CalcActCode,FTDI_SN,EEP_SN,SamsungActSeed,12,addr FTInBuf,0
invoke lstrcat,addr TempString ,addr szSamsung
invoke lstrcat,addr TempString ,addr FTInBuf
invoke lstrcat,addr TempString ,addr szCRLF
invoke CalcActCode,FTDI_SN,EEP_SN,FreiaActSeed,13,addr FTInBuf,0
invoke lstrcat,addr TempString ,addr szFreia
invoke lstrcat,addr TempString ,addr FTInBuf
invoke lstrcat,addr TempString ,addr szCRLF
invoke CalcActCode,FTDI_SN,EEP_SN,MotorolaActSeed,6,addr FTInBuf,0
invoke lstrcat,addr TempString ,addr szMotorola
invoke lstrcat,addr TempString ,addr FTInBuf
invoke lstrcat,addr TempString ,addr szCRLF
invoke lstrcat,addr TempString ,addr szCRLF
@@:
invoke lstrcat,addr TempString ,addr szForModHwk
invoke CalcActCode,FTDI_SN,EEP_SN,Dctx1HwkActSeed,30,addr FTInBuf,1
invoke lstrcat,addr TempString ,addr szNok_hwk
invoke lstrcat,addr TempString ,addr FTInBuf
invoke lstrcat,addr TempString ,addr szCRLF
invoke CalcActCode,FTDI_SN,EEP_SN,Kfz1HwkActSeed,29,addr FTInBuf,1
invoke lstrcat,addr TempString ,addr szSe_hwk
invoke lstrcat,addr TempString ,addr FTInBuf
invoke lstrcat,addr TempString ,addr szCRLF
invoke CalcActCode,FTDI_SN,EEP_SN,Sams1HwkActSeed,28,addr FTInBuf,1
invoke lstrcat,addr TempString ,addr szSam_hwk
invoke lstrcat,addr TempString ,addr FTInBuf
invoke lstrcat,addr TempString ,addr szCRLF
invoke lstrcat,addr TempString ,addr szCRLF
invoke lstrcat,addr TempString ,addr szCRLF
invoke IsDlgButtonChecked,hWindow,IDC_CHK_SaveLOG
.if (eax == BST_CHECKED)
invoke CreateFile,addr szLogFile,GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL
.if (eax != -1)
mov hFile,eax
invoke SetFilePointer,hFile,0,0,FILE_END
invoke lstrlen,addr TempString
invoke WriteFile,hFile,addr TempString ,eax,addr NumberOfBytesRead,NULL
invoke CloseHandle,hFile
.endif
.endif
.endif
invoke SetDlgItemText,hWindow,IDC_EDT_Info,addr TempString
.elseif (eax == IDC_BTN_Clipboard)
invoke SendDlgItemMessage,hWindow,IDC_EDT_Info,EM_SETSEL,0,-1
invoke SendDlgItemMessage,hWindow,IDC_EDT_Info,WM_COPY,NULL,NULL
invoke SendDlgItemMessage,hWindow,IDC_EDT_Info,EM_SETSEL,0,0
.elseif (eax == IDC_BTN_Reseller)
invoke SendDlgItemMessage,hWindow,IDC_EDT_Reseller,EM_SETSEL,0,-1
invoke SendDlgItemMessage,hWindow,IDC_EDT_Reseller,WM_CLEAR,NULL,NULL
invoke SendDlgItemMessage,hWindow,IDC_EDT_Reseller,EM_SETSEL,0,0
invoke SendDlgItemMessage,hWindow,IDC_EDT_Reseller,WM_PASTE,NULL,NULL
.elseif (eax == IDC_BTN_EnterSN)
invoke SendDlgItemMessage,hWindow,IDC_EDT_EnterSN,EM_SETSEL,0,-1
invoke SendDlgItemMessage,hWindow,IDC_EDT_EnterSN,WM_CLEAR,NULL,NULL
invoke SendDlgItemMessage,hWindow,IDC_EDT_EnterSN,EM_SETSEL,0,0
invoke SendDlgItemMessage,hWindow,IDC_EDT_EnterSN,WM_PASTE,NULL,NULL
.elseif (eax == IDC_BTN_FBI)
call FBICalc
.endif
.ELSEIF uMsg==WM_CLOSE
.if ftHandle != 0
invoke FT_Close,ftHandle
mov ftHandle,0
.endif
invoke DestroyWindow,hWnd
.ELSEIF uMsg==WM_DESTROY
invoke PostQuitMessage,NULL
.ELSE
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.ENDIF
xor eax,eax
ret
MainDlgFunc endp
Str2Int proc uses ebx edi esi
mov edi,eax
xor eax,eax
mov ecx,0Ah
@@:
movzx edx,byte ptr [edi]
or dl,dl
jz @F
lea eax,[eax+eax*4]
lea eax,[edx+eax*2-30h]
inc edi
loop @B
@@:
ret
Str2Int endp
ReadBox proc uses ebx ecx esi,InBufAddr:DWORD,BytesToRead:DWORD,QueuedTimes:DWORD
;Read from UFS Box and caculate the Checksum
LOCAL BytesReturned:DWORD
mov ebx,QueuedTimes
.if (!ebx)
mov ebx,BytesToRead
.endif
shl ebx,3
invoke GetTickCount
add ebx,eax
@@:
invoke FT_GetQueueStatus,ftHandle,addr BytesReturned
or eax,eax
jnz @F
invoke GetTickCount
cmp eax,ebx
ja @F
mov eax,BytesReturned
cmp eax,BytesToRead
jl @B
@@:
mov ebx,BytesReturned
test ebx,ebx
jle Done
cmp ebx,BytesToRead
jl @F
mov ebx,BytesToRead
@@:
invoke FT_Read,ftHandle,InBufAddr,ebx,addr BytesReturned
or eax,eax
jz @F
xor ebx,ebx
jmp Done
@@:
mov ebx,BytesReturned
dec ebx
test ebx,ebx
jl Done
inc ebx
mov eax,InBufAddr
lea esi,CheckSum
@@:
mov cl,[eax]
add [esi],cl
inc eax
dec ebx
jnz @B
mov ebx,BytesReturned
Done:
mov eax,ebx
ret
ReadBox endp
WriteThenRead proc uses esi edi ecx,BytesToWrite:DWORD,BytesToRead:DWORD,QueuedTimes:DWORD,ClearInBufFlag:DWORD
LOCAL BytesWritten: DWORD
invoke FT_Purge,ftHandle,FT_PURGE_RX or FT_PURGE_TX
invoke FT_Write,ftHandle,addr FTOutBuf,BytesToWrite,addr BytesWritten
mov eax,ClearInBufFlag
.if (EAX)
xor eax,eax
mov ecx,100h
mov edi,offset FTInBuf
rep stosb
.endif
invoke ReadBox,addr FTInBuf,BytesToRead,QueuedTimes
ret
WriteThenRead endp
ProgressDlgFunc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
.if uMsg==WM_INITDIALOG
.if lParam != 0
mov FlashNoCompleted,0
invoke CreateThread,NULL,0,lParam,hWnd,THREAD_PRIORITY_NORMAL,addr ThreadId
.endif
.elseif uMsg==WM_CLOSE
invoke EndDialog,hWnd,lParam
.elseif uMsg==WM_COMMAND
mov eax,wParam
mov edx,eax
and eax,0FFFFh
shr edx,10h
.if (!edx)
.if eax == IDC_BTN_Break
mov FlashNoCompleted,1
.endif
.endif
.else
mov eax,0
ret
.endif
mov eax,1
ret
ProgressDlgFunc endp
;invoke SendMessage,hWnd,WM_CLOSE,0,eax
;invoke ExitThread,0
;ret
FlashingFunc proc hWnd:DWORD
LOCAL CKSum:DWORD
invoke Sleep,100
invoke SetDlgItemText,hWnd,IDC_LBL_ReadAddr,addr szErasingFirmware
invoke SendDlgItemMessage,hWnd,IDC_PGB_Flash,PBM_SETRANGE,0,17C00000h
mov eax,ftHandle
or eax,eax
jz ErrDone
invoke FT_Purge,ftHandle,FT_PURGE_RX or FT_PURGE_TX
invoke IsDlgButtonChecked,hWindow,IDC_CHK_Firmware
cmp eax,BST_CHECKED
jnz EEPROM
lea edi,FTOutBuf
mov dword ptr [edi],0C355AA5Ah ;Erasing Firmware
invoke WriteThenRead,4,1,800,1
lea esi,FTInBuf
movzx eax,byte ptr [esi]
cmp al,3Eh
jz @F
invoke MessageBox,hWnd,addr szErasingError,addr szError,MB_OK or MB_ICONERROR
jmp ErrDone
@@:
lea edi,FTOutBuf
mov dword ptr [edi],43h
mov dword ptr [edi+4],0
invoke WriteThenRead,8,20,110,1
lea esi,FTInBuf
movzx eax,byte ptr [esi]
cmp al,3Eh
jz @F
invoke MessageBox,hWnd,addr szDecryptionKeyErr,addr szError,MB_OK or MB_ICONERROR
jmp ErrDone
@@:
xor ecx,ecx
.Repeat
mov eax,FlashNoCompleted
or eax,eax
jnz ErrDone
mov CKSum,0
push ecx
lea edi,FTOutBuf
mov byte ptr [edi],46h
mov [edi+1],ch
mov [edi+2],cl
movzx eax,ch
add CKSum,eax
movzx eax,cl
add CKSum,eax
mov byte ptr [edi+3],40h
add CKSum,40h
push ecx
lea esi,FirmWareBuffer
add esi,ecx
add edi,4
mov ecx,40h
xor eax,eax
cld
@@:
lodsb
add CKSum,eax
stosb
loop @B
xor eax,eax
sub eax,CKSum
mov [edi],al
mov ecx,[esp]
invoke SendDlgItemMessage,hWnd,IDC_PGB_Flash,PBM_SETPOS,ecx,0
pop ecx
invoke wsprintf,addr TempString ,addr szProgramBlock,ecx
invoke SetDlgItemText,hWnd,IDC_LBL_ReadAddr,addr TempString
invoke WriteThenRead,45h,1,1000,1
pop ecx
lea eax,FTInBuf
movzx eax,byte ptr [eax]
cmp al,3Eh
jz @F
invoke MessageBox,hWnd,addr szErrFlashingFirmware,addr szError,MB_OK or MB_ICONERROR
jmp ErrDone
@@:
add ecx,40h
.Until (ecx >= 1800h)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -