⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ufstool.asm

📁 这可是一个重量级工具
💻 ASM
📖 第 1 页 / 共 5 页
字号:
					.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 + -