www.pudn.com > UFSTool.rar > UFSTool.Asm
include UFSTool.inc
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
MainDlgFunc proto :HWND,:UINT,:WPARAM,:LPARAM
WriteThenRead proto :DWORD,:DWORD,:DWORD,:DWORD
ReadBox proto :DWORD,:DWORD,:DWORD
ProgressDlgFunc proto :DWORD,:DWORD,:DWORD,:DWORD
FlashingFunc proto :DWORD
CalcActCode proto :DWORD,:DWORD,:DWORD,:DWORD,:LPSTR,:DWORD
CheckBoxType proto :DWORD
Random proto :DWORD
include ufs2xx.inc
includelib UFS2XX.lib
include UFSToolData.inc
include UFSToolBBS.inc
.code
SHA1_EnCode proc
pusha
mov ESP_Saved,esp
cld
mov ecx,[esp+28h]
mov esi,[esp+2Ch]
mov Total_Length,ecx
or ComputeFlag,0FFFFFFFFh
mov Message_Length,ecx
mov Intermediate_Hash[00h],67452301h
mov Intermediate_Hash[04h],0EFCDAB89h
mov Intermediate_Hash[08h],98BADCFEh
mov Intermediate_Hash[0Ch],10325476h
mov Intermediate_Hash[10h],0C3D2E1F0h
L1:
cmp Message_Length,40h ;nSize必须以64字节(40h)对齐
jb @F
mov eax,Intermediate_Hash[00h]
mov ebx,Intermediate_Hash[04h]
mov ecx,Intermediate_Hash[08h]
mov edx,Intermediate_Hash[0Ch]
mov ebp,Intermediate_Hash[10h]
SHA1FUNC1 Message_Block[00h],eax,ebp,ecx,edx,ebx
SHA1FUNC1 Message_Block[04h],ebp,edx,ebx,ecx,eax
SHA1FUNC1 Message_Block[08h],edx,ecx,eax,ebx,ebp
SHA1FUNC1 Message_Block[0Ch],ecx,ebx,ebp,eax,edx
SHA1FUNC1 Message_Block[10h],ebx,eax,edx,ebp,ecx
SHA1FUNC1 Message_Block[14h],eax,ebp,ecx,edx,ebx
SHA1FUNC1 Message_Block[18h],ebp,edx,ebx,ecx,eax
SHA1FUNC1 Message_Block[1Ch],edx,ecx,eax,ebx,ebp
SHA1FUNC1 Message_Block[20h],ecx,ebx,ebp,eax,edx
SHA1FUNC1 Message_Block[24h],ebx,eax,edx,ebp,ecx
SHA1FUNC1 Message_Block[28h],eax,ebp,ecx,edx,ebx
SHA1FUNC1 Message_Block[2Ch],ebp,edx,ebx,ecx,eax
SHA1FUNC1 Message_Block[30h],edx,ecx,eax,ebx,ebp
SHA1FUNC1 Message_Block[34h],ecx,ebx,ebp,eax,edx
SHA1FUNC1 Message_Block[38h],ebx,eax,edx,ebp,ecx
SHA1FUNC1 Message_Block[3Ch],eax,ebp,ecx,edx,ebx
SHA1FUNC2 Message_Block[34h],Message_Block[20h],Message_Block[08h],Message_Block[00h],ebp,edx,ebx,ecx,eax
SHA1FUNC2 Message_Block[38h],Message_Block[24h],Message_Block[0Ch],Message_Block[04h],edx,ecx,eax,ebx,ebp
SHA1FUNC2 Message_Block[3Ch],Message_Block[28h],Message_Block[10h],Message_Block[08h],ecx,ebx,ebp,eax,edx
SHA1FUNC2 Message_Block[00h],Message_Block[2Ch],Message_Block[14h],Message_Block[0Ch],ebx,eax,edx,ebp,ecx
SHA1FUNC3 Message_Block[04h],Message_Block[30h],Message_Block[18h],Message_Block[10h],eax,ebp,ebx,ecx,edx
SHA1FUNC3 Message_Block[08h],Message_Block[34h],Message_Block[1Ch],Message_Block[14h],ebp,edx,eax,ebx,ecx
SHA1FUNC3 Message_Block[0Ch],Message_Block[38h],Message_Block[20h],Message_Block[18h],edx,ecx,ebp,eax,ebx
SHA1FUNC3 Message_Block[10h],Message_Block[3Ch],Message_Block[24h],Message_Block[1Ch],ecx,ebx,edx,ebp,eax
SHA1FUNC3 Message_Block[14h],Message_Block[00h],Message_Block[28h],Message_Block[20h],ebx,eax,ecx,edx,ebp
SHA1FUNC3 Message_Block[18h],Message_Block[04h],Message_Block[2Ch],Message_Block[24h],eax,ebp,ebx,ecx,edx
SHA1FUNC3 Message_Block[1Ch],Message_Block[08h],Message_Block[30h],Message_Block[28h],ebp,edx,eax,ebx,ecx
SHA1FUNC3 Message_Block[20h],Message_Block[0Ch],Message_Block[34h],Message_Block[2Ch],edx,ecx,ebp,eax,ebx
SHA1FUNC3 Message_Block[24h],Message_Block[10h],Message_Block[38h],Message_Block[30h],ecx,ebx,edx,ebp,eax
SHA1FUNC3 Message_Block[28h],Message_Block[14h],Message_Block[3Ch],Message_Block[34h],ebx,eax,ecx,edx,ebp
SHA1FUNC3 Message_Block[2Ch],Message_Block[18h],Message_Block[00h],Message_Block[38h],eax,ebp,ebx,ecx,edx
SHA1FUNC3 Message_Block[30h],Message_Block[1Ch],Message_Block[04h],Message_Block[3Ch],ebp,edx,eax,ebx,ecx
SHA1FUNC3 Message_Block[34h],Message_Block[20h],Message_Block[08h],Message_Block[00h],edx,ecx,ebp,eax,ebx
SHA1FUNC3 Message_Block[38h],Message_Block[24h],Message_Block[0Ch],Message_Block[04h],ecx,ebx,edx,ebp,eax
SHA1FUNC3 Message_Block[3Ch],Message_Block[28h],Message_Block[10h],Message_Block[08h],ebx,eax,ecx,edx,ebp
SHA1FUNC3 Message_Block[00h],Message_Block[2Ch],Message_Block[14h],Message_Block[0Ch],eax,ebp,ebx,ecx,edx
SHA1FUNC3 Message_Block[04h],Message_Block[30h],Message_Block[18h],Message_Block[10h],ebp,edx,eax,ebx,ecx
SHA1FUNC3 Message_Block[08h],Message_Block[34h],Message_Block[1Ch],Message_Block[14h],edx,ecx,ebp,eax,ebx
SHA1FUNC3 Message_Block[0Ch],Message_Block[38h],Message_Block[20h],Message_Block[18h],ecx,ebx,edx,ebp,eax
SHA1FUNC3 Message_Block[10h],Message_Block[3Ch],Message_Block[24h],Message_Block[1Ch],ebx,eax,ecx,edx,ebp
SHA1FUNC4 Message_Block[14h],Message_Block[00h],Message_Block[28h],Message_Block[20h],eax,ebp,ebx,ecx,edx
SHA1FUNC4 Message_Block[18h],Message_Block[04h],Message_Block[2Ch],Message_Block[24h],ebp,edx,eax,ebx,ecx
SHA1FUNC4 Message_Block[1Ch],Message_Block[08h],Message_Block[30h],Message_Block[28h],edx,ecx,ebp,eax,ebx
SHA1FUNC4 Message_Block[20h],Message_Block[0Ch],Message_Block[34h],Message_Block[2Ch],ecx,ebx,edx,ebp,eax
SHA1FUNC4 Message_Block[24h],Message_Block[10h],Message_Block[38h],Message_Block[30h],ebx,eax,ecx,edx,ebp
SHA1FUNC4 Message_Block[28h],Message_Block[14h],Message_Block[3Ch],Message_Block[34h],eax,ebp,ebx,ecx,edx
SHA1FUNC4 Message_Block[2Ch],Message_Block[18h],Message_Block[00h],Message_Block[38h],ebp,edx,eax,ebx,ecx
SHA1FUNC4 Message_Block[30h],Message_Block[1Ch],Message_Block[04h],Message_Block[3Ch],edx,ecx,ebp,eax,ebx
SHA1FUNC4 Message_Block[34h],Message_Block[20h],Message_Block[08h],Message_Block[00h],ecx,ebx,edx,ebp,eax
SHA1FUNC4 Message_Block[38h],Message_Block[24h],Message_Block[0Ch],Message_Block[04h],ebx,eax,ecx,edx,ebp
SHA1FUNC4 Message_Block[3Ch],Message_Block[28h],Message_Block[10h],Message_Block[08h],eax,ebp,ebx,ecx,edx
SHA1FUNC4 Message_Block[00h],Message_Block[2Ch],Message_Block[14h],Message_Block[0Ch],ebp,edx,eax,ebx,ecx
SHA1FUNC4 Message_Block[04h],Message_Block[30h],Message_Block[18h],Message_Block[10h],edx,ecx,ebp,eax,ebx
SHA1FUNC4 Message_Block[08h],Message_Block[34h],Message_Block[1Ch],Message_Block[14h],ecx,ebx,edx,ebp,eax
SHA1FUNC4 Message_Block[0Ch],Message_Block[38h],Message_Block[20h],Message_Block[18h],ebx,eax,ecx,edx,ebp
SHA1FUNC4 Message_Block[10h],Message_Block[3Ch],Message_Block[24h],Message_Block[1Ch],eax,ebp,ebx,ecx,edx
SHA1FUNC4 Message_Block[14h],Message_Block[00h],Message_Block[28h],Message_Block[20h],ebp,edx,eax,ebx,ecx
SHA1FUNC4 Message_Block[18h],Message_Block[04h],Message_Block[2Ch],Message_Block[24h],edx,ecx,ebp,eax,ebx
SHA1FUNC4 Message_Block[1Ch],Message_Block[08h],Message_Block[30h],Message_Block[28h],ecx,ebx,edx,ebp,eax
SHA1FUNC4 Message_Block[20h],Message_Block[0Ch],Message_Block[34h],Message_Block[2Ch],ebx,eax,ecx,edx,ebp
SHA1FUNC5 Message_Block[24h],Message_Block[10h],Message_Block[38h],Message_Block[30h],eax,ebp,ebx,ecx,edx
SHA1FUNC5 Message_Block[28h],Message_Block[14h],Message_Block[3Ch],Message_Block[34h],ebp,edx,eax,ebx,ecx
SHA1FUNC5 Message_Block[2Ch],Message_Block[18h],Message_Block[00h],Message_Block[38h],edx,ecx,ebp,eax,ebx
SHA1FUNC5 Message_Block[30h],Message_Block[1Ch],Message_Block[04h],Message_Block[3Ch],ecx,ebx,edx,ebp,eax
SHA1FUNC5 Message_Block[34h],Message_Block[20h],Message_Block[08h],Message_Block[00h],ebx,eax,ecx,edx,ebp
SHA1FUNC5 Message_Block[38h],Message_Block[24h],Message_Block[0Ch],Message_Block[04h],eax,ebp,ebx,ecx,edx
SHA1FUNC5 Message_Block[3Ch],Message_Block[28h],Message_Block[10h],Message_Block[08h],ebp,edx,eax,ebx,ecx
SHA1FUNC5 Message_Block[00h],Message_Block[2Ch],Message_Block[14h],Message_Block[0Ch],edx,ecx,ebp,eax,ebx
SHA1FUNC5 Message_Block[04h],Message_Block[30h],Message_Block[18h],Message_Block[10h],ecx,ebx,edx,ebp,eax
SHA1FUNC5 Message_Block[08h],Message_Block[34h],Message_Block[1Ch],Message_Block[14h],ebx,eax,ecx,edx,ebp
SHA1FUNC5 Message_Block[0Ch],Message_Block[38h],Message_Block[20h],Message_Block[18h],eax,ebp,ebx,ecx,edx
SHA1FUNC5 Message_Block[10h],Message_Block[3Ch],Message_Block[24h],Message_Block[1Ch],ebp,edx,eax,ebx,ecx
SHA1FUNC5 Message_Block[14h],Message_Block[00h],Message_Block[28h],Message_Block[20h],edx,ecx,ebp,eax,ebx
SHA1FUNC5 Message_Block[18h],Message_Block[04h],Message_Block[2Ch],Message_Block[24h],ecx,ebx,edx,ebp,eax
SHA1FUNC5 Message_Block[1Ch],Message_Block[08h],Message_Block[30h],Message_Block[28h],ebx,eax,ecx,edx,ebp
SHA1FUNC5 Message_Block[20h],Message_Block[0Ch],Message_Block[34h],Message_Block[2Ch],eax,ebp,ebx,ecx,edx
SHA1FUNC5 Message_Block[24h],Message_Block[10h],Message_Block[38h],Message_Block[30h],ebp,edx,eax,ebx,ecx
SHA1FUNC5 Message_Block[28h],Message_Block[14h],Message_Block[3Ch],Message_Block[34h],edx,ecx,ebp,eax,ebx
SHA1FUNC5 Message_Block[2Ch],Message_Block[18h],Message_Block[00h],Message_Block[38h],ecx,ebx,edx,ebp,eax
SHA1FUNC5 Message_Block[30h],Message_Block[1Ch],Message_Block[04h],Message_Block[3Ch],ebx,eax,ecx,edx,ebp
add Intermediate_Hash[00h],eax
add Intermediate_Hash[04h],ebx
add Intermediate_Hash[08h],ecx
add Intermediate_Hash[0Ch],edx
add Intermediate_Hash[10h],ebp
sub Message_Length,40h ;每次64字节
jmp L1
@@:
cmp ComputeFlag,0
jz @F
mov esp,ESP_Saved
call SHATail
jmp L1
@@:
mov esp,ESP_Saved
mov edi,[esp+24h]
mov esi,offset Intermediate_Hash[00h]
mov ecx,5
@@:
mov eax,[esi+ecx*4-4]
bswap eax
mov [edi+ecx*4-4],eax
loop @B
mov ecx,19h
xor eax,eax
mov edi,offset Message_Block[00h]
rep stosd
popa
retn 0Ch
SHA1_EnCode endp
SHATail proc
mov ecx,Message_Length
mov ComputeFlag,0
mov Message_Length,40h
mov eax,ecx
mov edi,offset Message_Block[00h]
test eax,eax
jz @F
rep movsb
@@:
mov ecx,eax
mov byte ptr [edi],80h
sub ecx,37h
inc edi
neg ecx
jz L1
jns @F
add Message_Length,40h
add ecx,40h
@@:
xor al,al
rep stosb
L1:
xor edx,edx
mov eax,Total_Length
mul multiplier
bswap eax
bswap edx
mov [edi],edx
mov [edi+4],eax
mov esi,offset Message_Block[00h]
ret
SHATail endp
multiplier dd 8
SHA2_EnCode proc
pusha
mov ESP_Saved,esp
cld
mov ecx,[esp+28h]
mov esi,[esp+2Ch]
mov Total_Length,ecx
or ComputeFlag,0FFFFFFFFh
mov Message_Length,ecx
mov Intermediate_Hash[00h],12A57023h
mov Intermediate_Hash[04h],3EC24F15h
mov Intermediate_Hash[08h],4641DCEFh
mov Intermediate_Hash[0Ch],72354168h
mov Intermediate_Hash[10h],55129475h
L1:
cmp Message_Length,40h
jb @F
mov eax,Intermediate_Hash[00h]
mov ebx,Intermediate_Hash[04h]
mov ecx,Intermediate_Hash[08h]
mov edx,Intermediate_Hash[0Ch]
mov ebp,Intermediate_Hash[10h]
SHA2FUNC1 Message_Block[00h],eax,ebp,ecx,edx,ebx
SHA2FUNC1 Message_Block[04h],ebp,edx,ebx,ecx,eax
SHA2FUNC1 Message_Block[08h],edx,ecx,eax,ebx,ebp
SHA2FUNC1 Message_Block[0Ch],ecx,ebx,ebp,eax,edx
SHA2FUNC1 Message_Block[10h],ebx,eax,edx,ebp,ecx
SHA2FUNC1 Message_Block[14h],eax,ebp,ecx,edx,ebx
SHA2FUNC1 Message_Block[18h],ebp,edx,ebx,ecx,eax
SHA2FUNC1 Message_Block[1Ch],edx,ecx,eax,ebx,ebp
SHA2FUNC1 Message_Block[20h],ecx,ebx,ebp,eax,edx
SHA2FUNC1 Message_Block[24h],ebx,eax,edx,ebp,ecx
SHA2FUNC1 Message_Block[28h],eax,ebp,ecx,edx,ebx
SHA2FUNC1 Message_Block[2Ch],ebp,edx,ebx,ecx,eax
SHA2FUNC1 Message_Block[30h],edx,ecx,eax,ebx,ebp
SHA2FUNC1 Message_Block[34h],ecx,ebx,ebp,eax,edx
SHA2FUNC1 Message_Block[38h],ebx,eax,edx,ebp,ecx
SHA2FUNC1 Message_Block[3Ch],eax,ebp,ecx,edx,ebx
SHA2FUNC2 Message_Block[34h],Message_Block[20h],Message_Block[08h],Message_Block[00h],ebp,edx,ebx,ecx,eax
SHA2FUNC2 Message_Block[38h],Message_Block[24h],Message_Block[0Ch],Message_Block[04h],edx,ecx,eax,ebx,ebp
SHA2FUNC2 Message_Block[3Ch],Message_Block[28h],Message_Block[10h],Message_Block[08h],ecx,ebx,ebp,eax,edx
SHA2FUNC2 Message_Block[00h],Message_Block[2Ch],Message_Block[14h],Message_Block[0Ch],ebx,eax,edx,ebp,ecx
SHA2FUNC3 Message_Block[04h],Message_Block[30h],Message_Block[18h],Message_Block[10h],eax,ebp,ebx,ecx,edx
SHA2FUNC3 Message_Block[08h],Message_Block[34h],Message_Block[1Ch],Message_Block[14h],ebp,edx,eax,ebx,ecx
SHA2FUNC3 Message_Block[0Ch],Message_Block[38h],Message_Block[20h],Message_Block[18h],edx,ecx,ebp,eax,ebx
SHA2FUNC3 Message_Block[10h],Message_Block[3Ch],Message_Block[24h],Message_Block[1Ch],ecx,ebx,edx,ebp,eax
SHA2FUNC3 Message_Block[14h],Message_Block[00h],Message_Block[28h],Message_Block[20h],ebx,eax,ecx,edx,ebp
SHA2FUNC3 Message_Block[18h],Message_Block[04h],Message_Block[2Ch],Message_Block[24h],eax,ebp,ebx,ecx,edx
SHA2FUNC3 Message_Block[1Ch],Message_Block[08h],Message_Block[30h],Message_Block[28h],ebp,edx,eax,ebx,ecx
SHA2FUNC3 Message_Block[20h],Message_Block[0Ch],Message_Block[34h],Message_Block[2Ch],edx,ecx,ebp,eax,ebx
SHA2FUNC3 Message_Block[24h],Message_Block[10h],Message_Block[38h],Message_Block[30h],ecx,ebx,edx,ebp,eax
SHA2FUNC3 Message_Block[28h],Message_Block[14h],Message_Block[3Ch],Message_Block[34h],ebx,eax,ecx,edx,ebp
SHA2FUNC3 Message_Block[2Ch],Message_Block[18h],Message_Block[00h],Message_Block[38h],eax,ebp,ebx,ecx,edx
SHA2FUNC3 Message_Block[30h],Message_Block[1Ch],Message_Block[04h],Message_Block[3Ch],ebp,edx,eax,ebx,ecx
SHA2FUNC3 Message_Block[34h],Message_Block[20h],Message_Block[08h],Message_Block[00h],edx,ecx,ebp,eax,ebx
SHA2FUNC3 Message_Block[38h],Message_Block[24h],Message_Block[0Ch],Message_Block[04h],ecx,ebx,edx,ebp,eax
SHA2FUNC3 Message_Block[3Ch],Message_Block[28h],Message_Block[10h],Message_Block[08h],ebx,eax,ecx,edx,ebp
SHA2FUNC3 Message_Block[00h],Message_Block[2Ch],Message_Block[14h],Message_Block[0Ch],eax,ebp,ebx,ecx,edx
SHA2FUNC3 Message_Block[04h],Message_Block[30h],Message_Block[18h],Message_Block[10h],ebp,edx,eax,ebx,ecx
SHA2FUNC3 Message_Block[08h],Message_Block[34h],Message_Block[1Ch],Message_Block[14h],edx,ecx,ebp,eax,ebx
SHA2FUNC3 Message_Block[0Ch],Message_Block[38h],Message_Block[20h],Message_Block[18h],ecx,ebx,edx,ebp,eax
SHA2FUNC3 Message_Block[10h],Message_Block[3Ch],Message_Block[24h],Message_Block[1Ch],ebx,eax,ecx,edx,ebp
SHA2FUNC4 Message_Block[14h],Message_Block[00h],Message_Block[28h],Message_Block[20h],eax,ebp,ebx,ecx,edx
SHA2FUNC4 Message_Block[18h],Message_Block[04h],Message_Block[2Ch],Message_Block[24h],ebp,edx,eax,ebx,ecx
SHA2FUNC4 Message_Block[1Ch],Message_Block[08h],Message_Block[30h],Message_Block[28h],edx,ecx,ebp,eax,ebx
SHA2FUNC4 Message_Block[20h],Message_Block[0Ch],Message_Block[34h],Message_Block[2Ch],ecx,ebx,edx,ebp,eax
SHA2FUNC4 Message_Block[24h],Message_Block[10h],Message_Block[38h],Message_Block[30h],ebx,eax,ecx,edx,ebp
SHA2FUNC4 Message_Block[28h],Message_Block[14h],Message_Block[3Ch],Message_Block[34h],eax,ebp,ebx,ecx,edx
SHA2FUNC4 Message_Block[2Ch],Message_Block[18h],Message_Block[00h],Message_Block[38h],ebp,edx,eax,ebx,ecx
SHA2FUNC4 Message_Block[30h],Message_Block[1Ch],Message_Block[04h],Message_Block[3Ch],edx,ecx,ebp,eax,ebx
SHA2FUNC4 Message_Block[34h],Message_Block[20h],Message_Block[08h],Message_Block[00h],ecx,ebx,edx,ebp,eax
SHA2FUNC4 Message_Block[38h],Message_Block[24h],Message_Block[0Ch],Message_Block[04h],ebx,eax,ecx,edx,ebp
SHA2FUNC4 Message_Block[3Ch],Message_Block[28h],Message_Block[10h],Message_Block[08h],eax,ebp,ebx,ecx,edx
SHA2FUNC4 Message_Block[00h],Message_Block[2Ch],Message_Block[14h],Message_Block[0Ch],ebp,edx,eax,ebx,ecx
SHA2FUNC4 Message_Block[04h],Message_Block[30h],Message_Block[18h],Message_Block[10h],edx,ecx,ebp,eax,ebx
SHA2FUNC4 Message_Block[08h],Message_Block[34h],Message_Block[1Ch],Message_Block[14h],ecx,ebx,edx,ebp,eax
SHA2FUNC4 Message_Block[0Ch],Message_Block[38h],Message_Block[20h],Message_Block[18h],ebx,eax,ecx,edx,ebp
SHA2FUNC4 Message_Block[10h],Message_Block[3Ch],Message_Block[24h],Message_Block[1Ch],eax,ebp,ebx,ecx,edx
SHA2FUNC4 Message_Block[14h],Message_Block[00h],Message_Block[28h],Message_Block[20h],ebp,edx,eax,ebx,ecx
SHA2FUNC4 Message_Block[18h],Message_Block[04h],Message_Block[2Ch],Message_Block[24h],edx,ecx,ebp,eax,ebx
SHA2FUNC4 Message_Block[1Ch],Message_Block[08h],Message_Block[30h],Message_Block[28h],ecx,ebx,edx,ebp,eax
SHA2FUNC4 Message_Block[20h],Message_Block[0Ch],Message_Block[34h],Message_Block[2Ch],ebx,eax,ecx,edx,ebp
SHA2FUNC5 Message_Block[24h],Message_Block[10h],Message_Block[38h],Message_Block[30h],eax,ebp,ebx,ecx,edx
SHA2FUNC5 Message_Block[28h],Message_Block[14h],Message_Block[3Ch],Message_Block[34h],ebp,edx,eax,ebx,ecx
SHA2FUNC5 Message_Block[2Ch],Message_Block[18h],Message_Block[00h],Message_Block[38h],edx,ecx,ebp,eax,ebx
SHA2FUNC5 Message_Block[30h],Message_Block[1Ch],Message_Block[04h],Message_Block[3Ch],ecx,ebx,edx,ebp,eax
SHA2FUNC5 Message_Block[34h],Message_Block[20h],Message_Block[08h],Message_Block[00h],ebx,eax,ecx,edx,ebp
SHA2FUNC5 Message_Block[38h],Message_Block[24h],Message_Block[0Ch],Message_Block[04h],eax,ebp,ebx,ecx,edx
SHA2FUNC5 Message_Block[3Ch],Message_Block[28h],Message_Block[10h],Message_Block[08h],ebp,edx,eax,ebx,ecx
SHA2FUNC5 Message_Block[00h],Message_Block[2Ch],Message_Block[14h],Message_Block[0Ch],edx,ecx,ebp,eax,ebx
SHA2FUNC5 Message_Block[04h],Message_Block[30h],Message_Block[18h],Message_Block[10h],ecx,ebx,edx,ebp,eax
SHA2FUNC5 Message_Block[08h],Message_Block[34h],Message_Block[1Ch],Message_Block[14h],ebx,eax,ecx,edx,ebp
SHA2FUNC5 Message_Block[0Ch],Message_Block[38h],Message_Block[20h],Message_Block[18h],eax,ebp,ebx,ecx,edx
SHA2FUNC5 Message_Block[10h],Message_Block[3Ch],Message_Block[24h],Message_Block[1Ch],ebp,edx,eax,ebx,ecx
SHA2FUNC5 Message_Block[14h],Message_Block[00h],Message_Block[28h],Message_Block[20h],edx,ecx,ebp,eax,ebx
SHA2FUNC5 Message_Block[18h],Message_Block[04h],Message_Block[2Ch],Message_Block[24h],ecx,ebx,edx,ebp,eax
SHA2FUNC5 Message_Block[1Ch],Message_Block[08h],Message_Block[30h],Message_Block[28h],ebx,eax,ecx,edx,ebp
SHA2FUNC5 Message_Block[20h],Message_Block[0Ch],Message_Block[34h],Message_Block[2Ch],eax,ebp,ebx,ecx,edx
SHA2FUNC5 Message_Block[24h],Message_Block[10h],Message_Block[38h],Message_Block[30h],ebp,edx,eax,ebx,ecx
SHA2FUNC5 Message_Block[28h],Message_Block[14h],Message_Block[3Ch],Message_Block[34h],edx,ecx,ebp,eax,ebx
SHA2FUNC5 Message_Block[2Ch],Message_Block[18h],Message_Block[00h],Message_Block[38h],ecx,ebx,edx,ebp,eax
SHA2FUNC5 Message_Block[30h],Message_Block[1Ch],Message_Block[04h],Message_Block[3Ch],ebx,eax,ecx,edx,ebp
add Intermediate_Hash[00h],eax
add Intermediate_Hash[04h],ebx
add Intermediate_Hash[08h],ecx
add Intermediate_Hash[0Ch],edx
add Intermediate_Hash[10h],ebp
sub Message_Length,40h
jmp L1
@@:
cmp ComputeFlag,0
jz @F
mov esp,ESP_Saved
call SHATail
jmp L1
@@:
mov esp,ESP_Saved
mov edi,[esp+24h]
mov esi,offset Intermediate_Hash[00h]
mov ecx,5
@@:
mov eax,[esi+ecx*4-4]
bswap eax
mov [edi+ecx*4-4],eax
loop @B
mov ecx,19h
xor eax,eax
mov edi,offset Message_Block[00h]
rep stosd
popa
ret 0Ch
SHA2_EnCode endp
; ---------------------------------------------------------------------------
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke GetCommandLine
invoke InitCommonControls
mov CommandLine,eax
invoke LoadLibrary,addr LibFileName
.if (eax)
mov hUFS2XXLibModule,eax
invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
.if (ftHandle)
invoke FT_Close,ftHandle
.endif
invoke FreeLibrary,hUFS2XXLibModule
.else
invoke MessageBox,NULL,addr NoUFS2XX,addr szError,MB_OK or MB_ICONERROR
.endif
invoke ExitProcess,eax
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
mov wc.cbSize,SIZEOF WNDCLASSEX
mov wc.style,CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc,OFFSET MainDlgFunc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,DLGWINDOWEXTRA
push hInst
pop wc.hInstance
mov wc.hbrBackground,COLOR_BTNFACE+1
mov wc.lpszMenuName,NULL
mov wc.lpszClassName,OFFSET ClassName
invoke LoadIcon,hInstance,IDI_ICON
mov wc.hIcon,eax
mov wc.hIconSm,eax
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
invoke RegisterClassEx,addr wc
invoke CreateDialogParam,hInstance,IDC_MainDlg,NULL,addr MainDlgFunc,NULL
mov hWindow ,eax
invoke ShowWindow,hWindow,SW_SHOWNORMAL
invoke UpdateWindow,hWindow
.WHILE TRUE
invoke GetMessage,ADDR msg,NULL,0,0
.BREAK .IF (!eax)
invoke TranslateMessage,ADDR msg
invoke DispatchMessage,ADDR msg
.ENDW
mov eax,msg.wParam
ret
WinMain endp
MainDlgFunc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
LOCAL i:DWord
LOCAL j:DWord
LOCAL SN_Extension:DWord
LOCAL BytesWriten:DWord
LOCAL FTDI_SN:DWORD
LOCAL EEP_SN:DWORD
.IF uMsg==WM_INITDIALOG
push hWnd
pop hWindow
invoke CheckDlgButton,hWindow,IDC_CHK_EEPROM,BST_CHECKED
invoke SendDlgItemMessage,hWindow,IDC_CBO_Firmware,CB_ADDSTRING,NULL,addr szFwV2_5
invoke SendDlgItemMessage,hWindow,IDC_CBO_Firmware,CB_ADDSTRING,NULL,addr szFwV2_6
invoke SendDlgItemMessage,hWindow,IDC_CBO_Firmware,CB_SETCURSEL,1,0
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo1
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo2
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo3
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szSpace
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szSpace
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szSpace
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo5
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo6
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo7
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szSpace
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szSpace
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szSpace
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo8
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szDasher
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo9
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo10
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo11
;invoke GetDlgItem,hWindow,IDC_CHK_HWK
;invoke EnableWindow,eax,TRUE
xor ecx,ecx
mov ftHandle,ecx
mov FuseBits,ecx
mov dword_40D7A4,ecx
@@: invoke SendDlgItemMessage,hWindow,IDC_CBO_SelDevice,CB_RESETCONTENT,NULL,NULL
invoke FT_ListDevices,addr FTDeviceCount,NULL,FT_LIST_NUMBER_ONLY
.if (EAX)
xor eax,eax
.if (ftHandle != eax)
push ftHandle
mov ftHandle,eax
call FT_Close
.endif
invoke SetDlgItemText,hWindow,IDC_BTN_Connect,addr szConnect
invoke GetDlgItem,hWindow,IDC_BTN_Connect
invoke EnableWindow,eax,FALSE
invoke MessageBox,hWindow,addr szFT_ListDevices,addr szError,MB_OK or MB_ICONERROR
.else
mov i,eax
mov j,eax
mov eax,FTDeviceCount
.if (eax <= 0)
xor eax,eax
.if (ftHandle != eax)
push ftHandle
mov ftHandle,eax
call FT_Close
.endif
invoke SetDlgItemText,hWindow,IDC_BTN_Connect,addr szConnect
invoke GetDlgItem,hWindow,IDC_BTN_Connect
invoke EnableWindow,eax,FALSE
invoke MessageBox,hWindow,addr szUfxNotFound,addr szAttention,MB_OK or MB_ICONINFORMATION
.else
.REPEAT
xor eax,eax
mov ecx,50h
mov edi,offset FTDeviceStrSN
rep stosb
invoke FT_ListDevices,i,addr FTDeviceStrSN,FT_LIST_BY_INDEX or FT_OPEN_BY_SERIAL_NUMBER
.if (!EAX)
invoke FT_ListDevices,i,addr FTDeviceStrDES,FT_LIST_BY_INDEX or FT_OPEN_BY_DESCRIPTION
.if (!EAX)
mov eax,i
inc eax
invoke wsprintf,addr TempString ,addr szDesSN,eax,addr FTDeviceStrDES,addr FTDeviceStrSN
invoke SendDlgItemMessage,hWindow,IDC_CBO_SelDevice,CB_ADDSTRING,NULL,addr TempString
inc j
.endif
.endif
inc i
mov eax,i
.UNTIL (eax >= FTDeviceCount)
.if (j > 0)
invoke SendDlgItemMessage,hWindow,IDC_CBO_SelDevice,CB_SETCURSEL,0,NULL
invoke GetDlgItem,hWindow,IDC_BTN_Connect
invoke EnableWindow,eax,TRUE
.endif
.endif
.endif
.ELSEIF uMsg==WM_COMMAND
mov eax,wParam
and eax,0FFFFh
.if (eax == IDC_BTN_Close)
invoke SendMessage,hWindow,WM_CLOSE ,NULL,NULL
.elseif (eax == IDC_BTN_Refresh)
jmp @B
.elseif (eax == IDC_BTN_Connect)
mov eax,ftHandle
.if (EAX)
Init:
invoke FT_Close,ftHandle
.if (!EAX)
mov ftHandle,eax
invoke SetDlgItemText,hWindow,IDC_BTN_Connect,addr szConnect
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING ,0,addr szDeviceClosed
invoke SendDlgItemMessage,hWindow,IDC_EDT_SN ,EM_SETSEL,0,-1
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,WM_CLEAR,0,0
.endif
.else
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_RESETCONTENT,0,0
invoke SendDlgItemMessage,hWindow,IDC_EDT_SN,EM_SETSEL,0,-1
invoke SendDlgItemMessage,hWindow,IDC_EDT_SN,WM_CLEAR,0,0
invoke SendDlgItemMessage,hWindow,IDC_EDT_EnterSN,EM_SETSEL,0,-1
invoke SendDlgItemMessage,hWindow,IDC_EDT_EnterSN,WM_CLEAR,0,0
invoke SendDlgItemMessage,hWindow,IDC_CBO_SelDevice,CB_GETCURSEL,0,0
mov FTDeviceCount,eax
xor eax,eax
mov ecx,50h
mov edi,offset FTDeviceStrSN
rep stosb
invoke FT_ListDevices,FTDeviceCount,addr FTDeviceStrSN,FT_LIST_BY_INDEX or FT_OPEN_BY_SERIAL_NUMBER
or eax,eax
jnz Init
invoke FT_ListDevices,FTDeviceCount,addr FTDeviceStrDES,FT_LIST_BY_INDEX or FT_OPEN_BY_DESCRIPTION
or eax,eax
jnz Init
invoke FT_OpenEx,addr FTDeviceStrSN,FT_OPEN_BY_SERIAL_NUMBER,addr ftHandle
.if (EAX)
invoke FT_OpenEx,addr FTDeviceStrDES,FT_OPEN_BY_DESCRIPTION,addr ftHandle
.if (EAX)
invoke MessageBox,hWindow,addr szCanNotOpen,addr szError,MB_OK or MB_ICONERROR
jmp Init
.endif
.endif
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo1
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo2
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo3
mov dword ptr TempString ,2D2D2Dh
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString
invoke wsprintf,addr TempString ,addr szSNOpened,addr FTDeviceStrDES,addr FTDeviceStrSN
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString
lea eax,FTDeviceStrSN
call Str2Int
invoke CheckBoxType,eax
.if (eax == BalckListBox)
lea eax,szBlackListSN
.elseif (eax == Tornado1Box)
lea eax,szTornado1
.elseif (eax == Tornado2Box)
lea eax,szTornado2
.elseif (eax == TwisterBox)
lea eax,szTwister
.elseif (eax == NBoxBox)
lea eax,szNBox
.elseif (eax == PowFlasherBox)
lea eax,szPowFlasher
.elseif (eax == SFlasherBox)
lea eax,szSFlasher
.else
lea eax,szUnknownBox
.endif
invoke wsprintf,addr TempString ,addr szManufacturer,eax
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString
invoke FT_ResetDevice,ftHandle
or eax,eax
jnz Connected
invoke FT_SetTimeouts,ftHandle,2710h,2710h
or eax,eax
jnz Connected
invoke FT_ResetDevice,ftHandle
or eax,eax
jnz Connected
invoke FT_Purge,ftHandle,FT_PURGE_RX or FT_PURGE_TX
or eax,eax
jnz Connected
invoke FT_SetUSBParameters,ftHandle,8000h,8000h
or eax,eax
jnz Connected
invoke FT_SetEventNotification,ftHandle,FT_EVENT_RXCHAR,NULL
or eax,eax
jnz Connected
lea eax,FTDeviceStrSN
call Str2Int
lea edi,dword_40D504
mov [edi+0Ch],eax
mov byte ptr [edi+0Fh],6
lea edi,SHABuffer1
mov [edi],eax
invoke FT_SetDataCharacteristics,ftHandle,FT_DATA_BITS_8,FT_STOP_BITS_1,FT_PARITY_NONE
or eax,eax
jnz Connected
invoke FT_SetFlowControl,ftHandle,FT_FLOW_NONE,11h,13h
or eax,eax
jnz Connected
invoke FT_SetDivisor,ftHandle,4138h
or eax,eax
jnz Connected
invoke FT_ClrDtr,ftHandle
or eax,eax
jnz Connected
invoke FT_ClrRts,ftHandle
or eax,eax
jnz Connected
invoke FT_Purge,ftHandle,FT_PURGE_RX or FT_PURGE_TX
or eax,eax
jnz Connected
invoke Sleep,64h
invoke FT_SetRts,ftHandle
or eax,eax
jnz Connected
invoke Sleep,0C8h
invoke FT_ClrRts,ftHandle
or eax,eax
jnz Connected
invoke FT_SetRts,ftHandle
or eax,eax
jnz Connected
invoke FT_SetDtr,ftHandle
or eax,eax
jnz Connected
xor edi,edi
lea eax,FTInBuf
mov [eax],edi
lea eax,FTOutBuf
mov dword ptr [eax],3Fh ;Enter to BOOT
.REPEAT
invoke FT_Purge,ftHandle,FT_PURGE_RX or FT_PURGE_TX
invoke FT_Write,ftHandle,addr FTOutBuf,1,addr BytesWriten
invoke ReadBox,addr FTInBuf,2,10
cmp eax,2
jz @F
inc edi
.UNTIL (edi > 10)
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szCantIntoBoot
invoke MessageBox,hWindow,addr szNotCompatDevice,addr szError,MB_OK or MB_ICONERROR
jmp Init
@@:
lea esi,FTInBuf
movzx eax,byte ptr [esi]
movzx ebx,byte ptr [esi+1]
invoke wsprintf,addr TempString ,addr szInToBoot,eax,ebx
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString
invoke SetDlgItemText,hWindow,IDC_EDT_SN,addr FTDeviceStrSN
invoke SetDlgItemText,hWindow,IDC_EDT_EnterSN,addr FTDeviceStrSN
lea edi,dword_40D504
lea esi,FTInBuf
mov ax,[esi]
mov [edi+4],ax
lea edi,FTOutBuf
mov byte ptr [edi],56h
invoke WriteThenRead,1,40h,100,1
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr FTInBuf
lea edi,FTOutBuf
mov byte ptr [edi],41h
invoke WriteThenRead,1,40h,100,1
lea esi,FTInBuf
mov al,[esi]
.if (al == 0FFh)
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szFirmCleared
mov FirmwareCleared,1
.else
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr FTInBuf
mov FirmwareCleared,0
.endif
lea edi,FTOutBuf
mov word ptr [edi],1D55h ;Get Features
invoke WriteThenRead,2,3,100,0
lea esi,FTInBuf
movzx eax,byte ptr [esi+1]
mov ah,[esi]
invoke wsprintf,addr TempString ,addr szFeatures,eax
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString
lea edi,FTOutBuf
mov word ptr [edi],1F55h ;Get 1F Section
invoke WriteThenRead,2,3,100,0
lea esi,FTInBuf
movzx eax,byte ptr [esi+1]
mov ah,[esi]
invoke wsprintf,addr TempString ,addr szSection,eax
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString
lea edi,FTOutBuf
mov word ptr [edi],1C55h ;Get EEProm_SN_extension
invoke WriteThenRead,2,3,100,0
lea esi,FTInBuf
movzx ecx,byte ptr [esi+1]
mov ch,[esi]
push ecx
lea edi,FTOutBuf
mov byte ptr [edi],54h ;Get EEProm_SN
invoke WriteThenRead,1,3,100,0
lea esi,FTInBuf
movzx eax,byte ptr [esi+1]
mov ah,[esi]
push eax
invoke wsprintf,addr TempString ,addr szEEPromSN,eax,eax,ecx
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString
pop ecx
pop eax
imul eax,0FDE8h
add eax,ecx
invoke wsprintf,addr TempString ,addr szEESN,eax,eax
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString
lea edi,FTOutBuf
mov byte ptr [edi],53h ;Get FuseBits
invoke WriteThenRead,1,10,50,0
lea esi,FTInBuf
mov eax,[esi]
and eax,0FFFFFFh
mov FuseBits,eax
movzx eax,byte ptr [esi]
movzx ebx,byte ptr [esi+1]
movzx ecx,byte ptr [esi+2]
lea edi,dword_40D504
mov [edi+6],al
mov [edi+7],bl
mov [edi+8],cl
invoke wsprintf,addr TempString ,addr szFuseBits,eax,ebx,ecx
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString
lea edi,FTOutBuf
mov word ptr [edi],1042h
invoke FT_Write,ftHandle,edi,2,addr BytesWriten
invoke Sleep,8
invoke FT_Purge,ftHandle,FT_PURGE_RX or FT_PURGE_TX
invoke FT_SetDivisor,ftHandle,50001Ah
invoke Sleep,32h
invoke WriteThenRead,7,1,20,1
lea esi,FTInBuf
movzx eax,byte ptr [esi]
cmp al,3Eh ;'>'
jz @F
lea edi,FTOutBuf
mov dword ptr [edi],1F1D1D4Ch
mov dword ptr [edi+4],980D02h
invoke WriteThenRead,7,1,20,1
lea esi,FTInBuf
movzx eax,byte ptr [esi]
cmp al,3Eh
jz @F
lea edi,FTOutBuf
mov dword ptr [edi],283EDC4Ch
mov dword ptr [edi+4],470D6Ah
invoke WriteThenRead,7,1,20,1
lea esi,FTInBuf
movzx eax,byte ptr [esi]
cmp al,3Eh
jz @F
lea edi,FTOutBuf
mov dword ptr [edi],283EDC4Ch
mov dword ptr [edi+4],480C6Ah
invoke WriteThenRead,7,1,20,1
lea esi,FTInBuf
movzx eax,byte ptr [esi]
cmp al,3Eh
jz @F
lea edi,FTOutBuf
mov dword ptr [edi],6D43D94Ch
mov dword ptr [edi+4],510224h
invoke WriteThenRead,7,1,20,1
lea esi,FTInBuf
movzx eax,byte ptr [esi]
cmp al,3Eh
jz @F
lea edi,FTOutBuf
mov dword ptr [edi],6D43D94Ch
mov dword ptr [edi+4],520124h
invoke WriteThenRead,7,1,20,1
lea esi,FTInBuf
movzx eax,byte ptr [esi]
cmp al,3Eh
jz @F
lea edi,FTOutBuf
mov dword ptr [edi],91EF8C4Ch
mov dword ptr [edi+4],0FD06F1h
invoke WriteThenRead,7,1,20,1
lea esi,FTInBuf
movzx eax,byte ptr [esi]
cmp al,3Eh
jz @F
lea edi,FTOutBuf
mov dword ptr [edi],91EF8C4Ch
mov dword ptr [edi+4],0FE05F1h
invoke WriteThenRead,7,1,20,1
lea esi,FTInBuf
movzx eax,byte ptr [esi]
cmp al,3Eh
jz @F
lea edi,FTOutBuf
mov dword ptr [edi],4152454Ch
mov dword ptr [edi+4],0D30154h
invoke WriteThenRead,7,1,20,1
lea esi,FTInBuf
movzx eax,byte ptr [esi]
cmp al,3Eh
jz @F
lea edi,FTOutBuf
mov dword ptr [edi],4152454Ch
mov dword ptr [edi+4],0D20254h
invoke WriteThenRead,7,1,20,1
lea esi,FTInBuf
movzx eax,byte ptr [esi]
cmp al,3Eh
jz @F
lea edi,FTOutBuf
mov byte ptr [edi],54h
invoke WriteThenRead,1,3,10,1
lea esi,FTInBuf
xor eax,eax
mov ah,[esi]
mov al,[esi+1]
invoke CalcActCode,eax,eax,FreiaActSeed,13,addr FTInBuf,0
lea esi,dword_40D8DC
lea edi,FTOutBuf
mov dword ptr [edi],80DA54Eh
add edi,4
mov ecx,8
mov i,0BAh
.Repeat
movzx eax,byte ptr [esi]
add i,eax
mov [edi],al
inc esi
inc edi
dec ecx
.Until (ecx == 0)
xor eax,eax
sub eax,i
mov [edi],al
invoke WriteThenRead,13,1,20,1
lea edi,FTOutBuf
mov dword ptr [edi],1F1D1D4Ch
mov dword ptr [edi+4],980D02h
invoke WriteThenRead,7,1,20,1
lea esi,FTInBuf
movzx eax,byte ptr [esi]
cmp al,3Eh
jnz Connected
@@:
mov dword ptr [edi],787F31h
invoke WriteThenRead,3,10,100,1
lea edi,FTOutBuf
invoke FT_GetModemStatus,ftHandle,edi
or eax,eax
jnz Connected
mov eax,[edi]
and eax,80h
.if (eax != 80h)
lea edi,FTOutBuf
mov byte ptr [edi],58h
invoke WriteThenRead,1,10,100,0
jmp Connected
.endif
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szHwkFound
mov byte ptr [edi],58h
invoke WriteThenRead,1,2,50h,0
lea edi,FTOutBuf
mov byte ptr [edi],36h
invoke WriteThenRead,1,1,200h,0
dec eax
jnz Connected
lea esi,FTInBuf
cmp byte ptr [esi],54h
jnz Connected
mov byte ptr [edi],30h
invoke WriteThenRead,1,1,10,0
dec eax
jnz Connected
lea esi,FTInBuf
cmp byte ptr [esi],54h
jnz Connected
mov byte ptr [edi],32h
invoke WriteThenRead,1,1,200h,0
dec eax
jnz Connected
lea esi,FTInBuf
cmp byte ptr [esi],0A5h
jnz Connected
mov dword ptr [edi],1010336h
invoke WriteThenRead,4,5,300h,0
cmp eax,5
jnz Connected
lea esi,FTInBuf
cmp byte ptr [esi],54h
jnz Connected
cmp byte ptr [esi+3],0A5h
jnz Connected
cmp byte ptr [esi+4],54h
jnz Connected
movzx eax,word ptr [esi+1]
mov HWK_Number ,eax
mov dword ptr [edi],2031136h
mov word ptr [edi+4],1000h
invoke WriteThenRead,6,19,500h,0
cmp eax,13h
jnz Connected
lea esi,FTInBuf
cmp byte ptr [esi],54h
jnz Connected
cmp byte ptr [esi+11h],0A5h
jnz Connected
cmp byte ptr [esi+12h],54h
jnz Connected
lea esi,FTInBuf
inc esi
lea edi,HID
mov ecx,10h
cld
rep movsb
lea edi,FTOutBuf
mov byte ptr [edi],31h
invoke WriteThenRead,1,1,10,0
lea esi,FTInBuf
mov byte ptr [edi],39h
invoke WriteThenRead,1,10,100,0
mov byte ptr [edi],58h
invoke WriteThenRead,1,1,20,0
lea esi,HID
mov edx,[esi+0Ch]
bswap edx
mov ecx,[esi+8]
bswap ecx
mov ebx,[esi+4]
bswap ebx
mov eax,[esi]
bswap eax
invoke wsprintf,addr TempString ,addr szHid,eax,ebx,ecx,edx
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString
invoke wsprintf,addr TempString ,addr szHwk,HWK_Number
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString
Connected:
invoke SetDlgItemText,hWindow,IDC_BTN_Connect,addr szDisconnect
.endif
.elseif (eax == IDC_BTN_Backup)
mov eax,ftHandle
or eax,eax
jz @F
invoke MessageBox,hWindow,addr szReadFirmware,addr AppName,MB_ICONINFORMATION or MB_OK
@@:
.elseif (eax == IDC_BTN_Restore)
mov RestoreOrFix,0
mov eax,ftHandle
.if (eax)
mov OFNA.lStructSize,SIZEOF OPENFILENAMEA
push hWindow
pop OFNA.hwndOwner
push hInstance
pop OFNA.hInstance
mov OFNA.lpstrFilter,offset szBinFiles
mov OFNA.nFilterIndex,0
mov OFNA.lpstrFile,offset FileName
mov OFNA.lpstrDefExt,offset szBinFileExt
mov OFNA.nMaxFile,104h
mov OFNA.Flags,OFN_LONGNAMES or OFN_EXPLORER or OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_HIDEREADONLY
invoke GetOpenFileName,addr OFNA
.if eax == 1
invoke CreateFile,addr FileName,GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,NULL
.if eax != -1
mov hFile,eax
xor eax,eax
mov ecx,2000h
mov edi,offset FirmWareBuffer
rep stosb
mov ecx,80h
mov edi,offset EE93c46Buffer
rep stosb
dec eax
mov ecx,200h
mov edi,offset EEPROMBuffer
rep stosb
invoke ReadFile,hFile,addr FirmWareBuffer,2280h,addr NumberOfBytesRead,NULL
invoke CloseHandle,hFile
invoke DialogBoxParam,hInstance,addr ProgressDlg,hWindow,addr ProgressDlgFunc,addr FlashingFunc
.if eax == 1
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szUpdateSuccesfull
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szChangSNWarning
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szPressRefresh
jmp Init
.else
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szUpdateFail
.endif
.else
invoke MessageBox,hWindow,addr szErrOpenFile,szError,MB_ICONERROR or MB_OK
.endif
.endif
.endif
.elseif (eax == IDC_BTN_Fix) ;3F4h
pusha
mov RestoreOrFix,1
mov eax,ftHandle
.if (eax)
invoke SendDlgItemMessage,hWindow,IDC_CBO_Firmware,CB_GETCURSEL,NULL,NULL
.if (!eax)
mov dword ptr dword_40D51B,0E637DD09h
lea esi,FirmWare2_5Data
.else
mov dword ptr dword_40D51B,0B16C8E48h
lea esi,FirmWare2_6Data
.endif
lea edi,FirmWareBuffer
mov ecx,2280h
cld
rep movsb
invoke GetDlgItemText,hWindow,IDC_EDT_SN,addr TempString ,1Eh
invoke lstrlen,addr TempString
cmp eax,8
jb @F
lea edi,TempString
mov dword ptr [edi+7],0
@@:
lea eax,TempString
call Str2Int
and eax,7FFFFFh
mov Box_SN,eax
mov ecx,0FDE8h
cdq
idiv ecx
mov SN_Extension,eax
mov EEProm_SN,edx
invoke wsprintf,addr FTDeviceStrSN,szFmt1,Box_SN
invoke SetDlgItemText,hWindow,IDC_EDT_SN,addr FTDeviceStrSN
invoke CheckBoxType,Box_SN
cmp eax,-1
jnz @F
invoke MessageBox,hWindow,addr szBlackListSN2,szWarning,MB_ICONWARNING or MB_OKCANCEL
.if (eax != IDCANCEL)
@@:
mov [edi+6],ax
shr eax,10h
mov [edi+8],al
invoke GetTickCount
xor al,ah
and al,7Fh
mov [edi+16h],al
mov byte ptr [edi+15h],3Eh
lea edi,SHABuffer1
mov dword ptr [edi],1A992E25h
xor [edi],ebx
mov dword ptr [edi+4],0AA761E09h
mov eax,EEProm_SN
mov [edi+8],eax
mov eax,Box_SN
shr eax,10h
mov [edi+0Ah],al
mov byte ptr [edi+0Bh],0C6h
mov ebx,FuseBits
or ebx,ebx
jnz @F
mov ebx,0C82ECCh
@@:
mov [edi+0Ch],ebx
mov byte ptr [edi+0Fh],5Ah
mov byte ptr [edi+10h],62h
mov byte ptr [edi+11h],0CFh
mov eax,EEProm_SN
mov [edi+12h],ah
mov [edi+13h],al
lea esi,SHABuffer2
mov eax,EEProm_SN
mov [esi+8],ah
mov [esi+9],al
mov byte ptr [esi+0Bh],0A5h
mov eax,[edi]
mov [esi],eax
mov eax,[edi+8]
mov [esi+4],eax
call GetTickCount
xor al,ah
and al,7Fh
mov [esi+0Ah],al
lea eax,SHABuffer2
push eax
push 0Ch
add eax,0Ch
push eax
call SHA1_EnCode
lea esi,SHABuffer2
lea edi,FTInBuf
mov ecx,20h
cld
rep movsb
lea esi,byte_40805F
lea edi,FTInBuf
movzx ebx,byte ptr [edi+0Ah]
add esi,ebx
xor ecx,ecx
@@:
mov al,[ecx+esi]
xor [ecx+edi],al
inc ecx
cmp ecx,20h
jb @B
mov [edi+0Ah],bl
lea edi,EEPROMBuffer
mov eax,EEProm_SN
mov [edi+2],ah
mov [edi+3],al
mov eax,SN_Extension
mov [edi+148h],ah
mov [edi+149h],al
add edi,1E0h
xor ecx,ecx
@@:
lea esi,byte_40819F
movzx ebx,byte ptr [ecx+esi]
lea esi,FTInBuf
add esi,ebx
mov al,[esi]
mov [ecx+edi],al
inc ecx
cmp ecx,20h
jb @B
lea eax,SHABuffer1
push eax
push 14h
add eax,14h
push eax
call SHA1_EnCode
lea eax,SHABuffer1
push eax
push 28h
add eax,28h
push eax
call SHA2_EnCode
mov ecx,14h
lea esi,SHABuffer1
add esi,28h
lea edi,EEPROMBuffer
add edi,1C0h
cld
rep movsb
mov ecx,0Ch
lea esi,SHABuffer1
add esi,14h
lea edi,EEPROMBuffer
add edi,1D4h
cld
rep movsb
lea eax,dword_40D504
push eax
push 2Ch
add eax,2Ch
push eax
call SHA2_EnCode
lea esi,dword_40D504
lea edi,FTInBuf
mov ecx,40h
cld
rep movsb
lea esi,byte_40805F
lea edi,FTInBuf
movzx ebx,byte ptr [edi+16h]
add esi,ebx
xor ecx,ecx
@@:
mov al,[ecx+esi]
xor [ecx+edi],al
inc ecx
cmp ecx,40h
jb @B
mov [edi+16h],bl
lea edi,FirmWareBuffer
add edi,17C0h
xor ecx,ecx
@@:
lea esi,byte_40815F
movzx ebx,byte ptr [ecx+esi]
lea esi,FTInBuf
add esi,ebx
mov al,[esi]
mov [ecx+edi],al
inc ecx
cmp ecx,40h
jb @B
invoke CalcActCode,Box_SN,Box_SN,NokiaActSeed,5,addr FTInBuf,1
lea esi,dword_40D8DC
lea edi,EEPROMBuffer+38h
mov ecx,8
cld
rep movsb
invoke CalcActCode,Box_SN,Box_SN,EricssonActSeed,1,addr FTInBuf,1
lea esi,dword_40D8DC
lea edi,EEPROMBuffer+18h
mov ecx,8
cld
rep movsb
invoke CalcActCode,Box_SN,Box_SN,SamsungActSeed,12,addr FTInBuf,1
lea esi,dword_40D8DC
lea edi,EEPROMBuffer+70h
mov ecx,8
cld
rep movsb
invoke CalcActCode,Box_SN,Box_SN,FreiaActSeed,13,addr FTInBuf,0
lea esi,dword_40D8DC
lea edi,EEPROMBuffer+78h
mov ecx,8
cld
rep movsb
invoke CalcActCode,Box_SN,Box_SN,MotorolaActSeed,6,addr FTInBuf,1
lea esi,dword_40D8DC
lea edi,EEPROMBuffer+40h
mov ecx,8
cld
rep movsb
lea eax,EEPROMBuffer
invoke DialogBoxParam,hInstance,addr ProgressDlg,hWindow,addr ProgressDlgFunc,addr FlashingFunc
.if eax == 1
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szUpdateSuccesfull
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szChangSNWarning
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szPressRefresh
jmp Init
.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)
EEPROM:
invoke IsDlgButtonChecked,hWindow,IDC_CHK_EEPROM
cmp eax,BST_CHECKED
jnz EE93c46
invoke SetDlgItemText,hWnd,IDC_LBL_ReadAddr,addr szFlashingEEProm
invoke SendDlgItemMessage,hWnd,IDC_PGB_Flash,PBM_SETRANGE,0,1C00000h
invoke SendDlgItemMessage,hWnd,IDC_PGB_Flash,PBM_SETPOS,0,0
xor ecx,ecx
.Repeat
mov eax,FlashNoCompleted
or eax,eax
jnz ErrDone
mov CKSum,0
push ecx
lea edi,FTOutBuf
mov byte ptr [edi],50h
mov [edi+1],ch
mov [edi+2],cl
movzx eax,ch
add CKSum,eax
movzx eax,cl
add CheckSum,eax
mov byte ptr [edi+3],10h
add CKSum,10h
lea esi,EEPROMBuffer
add esi,ecx
add edi,4
pusha
invoke SendDlgItemMessage,hWnd,IDC_PGB_Flash,PBM_SETPOS,ecx,0
popa
mov ecx,10h
xor eax,eax
cld
@@:
lodsb
add CKSum,eax
stosb
loop @B
xor eax,eax
sub eax,CKSum
mov [edi],al
invoke WriteThenRead,21,1,1000,1
pop ecx
lea eax,FTInBuf
movzx eax,byte ptr [eax]
cmp al,3Eh
jz @F
invoke MessageBox,hWnd,addr szErrFlashingEEPROM,addr szError,MB_OK or MB_ICONERROR
jmp ErrDone
@@:
or ecx,ecx
jnz @F
mov eax,RestoreOrFix
or eax,eax
jnz @F
add ecx,0F0h
@@:
add ecx,10h
.Until (ecx >= 200h)
EE93c46:
invoke IsDlgButtonChecked,hWindow,IDC_CHK_93c46
cmp eax,BST_CHECKED
jnz OKDone
mov eax,RestoreOrFix
or eax,eax
jz @F
lea eax,Manufacturer
mov pProgramData.Manufacturer,eax
lea eax,ManufacturerID
mov pProgramData.ManufacturerID,eax
lea eax,Description
mov pProgramData.Description,eax
lea eax,SerialNumber
mov pProgramData.SerialNumber,eax
lea eax,pProgramData
mov dword ptr [eax],0 ;Signature1
mov dword ptr [eax+4],0FFFFFFFFh ;Signature2
mov dword ptr [eax+8],0 ;Version
invoke FT_EE_Read,ftHandle,eax
or eax,eax
jnz ErrDone
lea eax,szUfs3
mov pProgramData.Manufacturer,eax
lea eax,szUfs3Sarassoft
mov pProgramData.Description,eax
lea eax,FTDeviceStrSN
mov pProgramData.SerialNumber,eax
movzx eax,word ptr [eax]
mov dword ptr ManufacturerID,eax
lea eax,pProgramData
mov dword ptr [eax],0 ;Signature1
mov dword ptr [eax+4],0FFFFFFFFh ;Signature2
mov dword ptr [eax+8],0 ;Version
invoke FT_EE_Program,ftHandle,eax
or eax,eax
jnz ErrDone
jmp short OKDone
@@:
invoke SetDlgItemText,hWnd,IDC_LBL_ReadAddr,addr szFlashing93c46
xor ecx,ecx
lea edi,EE93c46Buffer
.Repeat
push ecx
mov ax,[edi+ecx*2]
invoke FT_WriteEE,ftHandle,ecx,eax
pop ecx
or eax,eax
jnz ErrDone
inc ecx
.Until (ecx >= 40h)
OKDone:
mov eax,1
jmp short loc_405FE9
ErrDone:
xor eax,eax
loc_405FE9:
push eax
invoke MessageBeep,MB_OK
pop eax
invoke SendMessage,hWnd,WM_CLOSE,NULL,eax
invoke ExitThread,0
ret
FlashingFunc endp
CalcActCode proc arg_0:DWORD,SN:DWORD,Seed:DWORD,arg_C:DWORD,lpBuffer:LPSTR,Ver:DWORD
LOCAL var_4:DWORD
LOCAL EEP_SN:DWORD
LOCAL SN_EXT:DWORD
pusha
mov SN_EXT,0
mov eax,SN
mov EEP_SN,eax
and eax,0FFFFFFh
mov ecx,0FDE8h
cdq
idiv ecx
mov SN_EXT,eax
mov EEP_SN,edx
mov eax,Seed
mov var_4,eax
mov eax,Ver
or eax,eax
jz @F
mov eax,SN
lea edi,FTInBuf
mov [edi],eax
shr eax,18h
mov ecx,arg_C
add ecx,SN_EXT
xor eax,ecx
mov [edi+3],al
mov eax,arg_0
shr eax,5
mov [edi+4],al
mov eax,arg_0
xor al,0CAh
mov [edi+5],al
mov eax,arg_0
shr eax,11h
mov [edi+6],al
mov eax,arg_0
shr eax,17h
mov ecx,arg_C
add ecx,SN_EXT
xor eax,ecx
xor al,0DAh
mov [edi+7],al
push edi
push 8
push edi
call SHA2_EnCode
mov ebx,arg_C
add ebx,SN_EXT
imul ebx,4217853h
xor [edi],ebx
shr ebx,0Fh
xor [edi+7],bl
mov al,[edi+2]
shl eax,8
mov al,[edi+1]
shl eax,8
mov al,[edi]
shl eax,8
mov al,[edi+7]
xor eax,Seed
mov var_4,eax
@@:
mov eax,EEP_SN
mov ebx,0FFh
sub bl,ah
xor bl,al
movzx eax,bl
mov ecx,8
Lop1:
shr eax,1
jnb @F
xor eax,var_4
@@:
loop Lop1
lea edi,dword_40D8DC
mov [edi],eax
mov ebx,eax
mov eax,arg_C
mov [edi+8],al
mov eax,EEP_SN
movzx eax,al
mov ecx,8
Lop2:
shr eax,1
jnb @F
xor eax,var_4
@@:
loop Lop2
mov [edi+4],eax
mov edx,lpBuffer
or edx,edx
jz @F
mov ecx,arg_C
and ecx,0FFh
bswap ebx
bswap eax
invoke wsprintf,lpBuffer,addr szFmt2,ecx,ebx,eax
@@:
popa
ret
CalcActCode endp
FBICalc proc
LOCAL var_4:dword
mov OFNA .lStructSize,SIZEOF OPENFILENAMEA
push hWindow
pop OFNA .hwndOwner
push hInstance
pop OFNA .hInstance
mov OFNA .lpstrFilter,offset szReqFile ; "Request files (*.req)"
mov OFNA .nFilterIndex,0
mov OFNA .lpstrFile,offset FileName
mov OFNA .nMaxFile,104h
mov OFNA .Flags,OFN_LONGNAMES or OFN_EXPLORER or OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_HIDEREADONLY
invoke GetOpenFileName,addr OFNA
cmp eax,1
jnz Done
invoke CreateFile,addr FileName,GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,NULL
cmp eax,-1
jz ErrorCreateFile
mov hFile,eax
invoke GetFileSize,hFile,0
cmp eax,100h
jz @F
invoke CloseHandle,hFile
invoke MessageBox,hWindow,addr szErrBadSizeOfReqFile,addr szError,MB_ICONERROR or MB_OK
jmp Done
@@:
invoke ReadFile,hFile,addr ReqFileBuffer,100h,addr NumberOfBytesRead,0
invoke CloseHandle,hFile
lea esi,ReqFileBuffer+0A0h
lea edi,FTInBuf
xor ecx,ecx
@@:
mov al,[ecx+esi]
lea ebx,byte_40819F
movzx ebx,byte ptr [ecx+ebx]
mov [ebx+edi],al
inc ecx
cmp ecx,20h
jb @B
lea esi,byte_40805F
lea edi,FTInBuf
movzx ebx,byte ptr [edi+0Ah]
add esi,ebx
xor ecx,ecx
@@:
mov al,[ecx+esi]
xor [ecx+edi],al
inc ecx
cmp ecx,20h
jb @B
mov [edi+0Ah],bl
lea esi,FTInBuf
lea edi,ReqFileBuffer+0A0h
mov ecx,20h
cld
rep movsb
lea eax,FTInBuf
push eax
push 0Ch
add eax,0Ch
push eax
call SHA1_EnCode
lea esi,ReqFileBuffer+0A0h
lea edi,FTInBuf
mov ecx,20h
repe cmpsb
jz @F
invoke MessageBox,hWindow,addr szErrReqFileCorrupted,addr szError,MB_ICONERROR or MB_OK
jmp Done
@@:
lea esi,ReqFileBuffer+40h
lea edi,FTInBuf
xor ecx,ecx
@@:
mov al,[ecx+esi]
lea ebx,byte_40815F
movzx ebx,byte ptr [ecx+ebx]
mov [ebx+edi],al
inc ecx
cmp ecx,40h
jb @B
lea esi,byte_40805F
lea edi,FTInBuf
movzx ebx,byte ptr [edi+16h]
add esi,ebx
xor ecx,ecx
@@:
mov al,[ecx+esi]
xor [ecx+edi],al
inc ecx
cmp ecx,40h
jb @B
mov [edi+16h],bl
lea esi,FTInBuf
lea edi,ReqFileBuffer+40h
mov ecx,40h
cld
rep movsb
lea eax,FTInBuf
push eax
push 2Ch
add eax,2Ch
push eax
call SHA2_EnCode
lea esi,ReqFileBuffer+40h
lea edi,FTInBuf
mov ecx,40h
repe cmpsb
jz @F
invoke MessageBox,hWindow,addr szErrReqFileCorrupted,addr szError,MB_ICONERROR or MB_OK
jmp Done
@@:
lea esi,ReqFileBuffer+0A0h
lea edi,FTInBuf
mov eax,[esi]
mov [edi],eax
mov eax,[esi+4]
mov [edi+8],eax
movzx ebx,ax
movzx eax,byte ptr [esi+6]
imul eax,0FDE8h
add eax,ebx
mov [ebp+var_4],eax
mov ax,[esi+8]
mov [edi+12h],ax
lea esi,ReqFileBuffer+40h
mov eax,[esi+1Bh]
mov [edi+4],eax
mov eax,[esi+6]
mov [edi+0Ch],eax
mov byte ptr [edi+0Fh],5Ah
mov ax,[esi+4]
mov [edi+10h],ax
lea eax,FTInBuf
push eax
push 14h
add eax,14h
push eax
call SHA1_EnCode
lea eax,FTInBuf
push eax
push 28h
add eax,28h
push eax
call SHA2_EnCode
lea esi,dword_410768
lea edi,FTInBuf
mov ecx,14h
cld
rep movsb
Lop1:
call GetTickCount
mov RandomSeed,eax
lea edi,FTOutBuf
mov ecx,100h
@@:
invoke Random,100h
or al,al
jz @B
mov [ecx+edi-1],al
loop @B
lea edi,FTOutBuf
movzx ecx,byte ptr [edi]
and ecx,3Eh
or ecx,1
mov byte ptr [ecx+edi],36h
mov edx,80h
sub edx,ecx
mov byte ptr [edx+edi],5Ah
mov al,[edi]
xor al,69h
mov [edx+edi-1],al
push ebx
xor ebx,8463h
mov [ecx+edi+0A0h],bh
mov [ecx+edi+0A2h],bl
pop ebx
mov eax,ecx
lea esi,FTInBuf
lea edi,dword_410BC0
mov ecx,20h
cld
rep movsb
lea edi,dword_410BC0
lea esi,FTOutBuf[eax]
mov ecx,20h
@@:
mov al,[esi]
xor [edi],al
inc esi
inc edi
loop @B
lea eax,FTOutBuf
push eax
push 0ECh
add eax,0ECh
push eax
call SHA2_EnCode
xor edx,edx
lea esi,FTOutBuf
mov ecx,80h
Lop2:
cmp byte ptr [esi],0
jnz @F
inc edx
@@:
inc esi
loop Lop2
lea esi,FTOutBuf
mov ecx,4
Lop3:
cmp byte ptr [esi],0
jnz @F
inc edx
@@:
inc esi
loop Lop3
lea esi,dword_410BE0
mov ecx,60h
Lop4:
cmp byte ptr [esi],0
jnz @F
inc edx
@@:
inc esi
loop Lop4
lea esi,FTOutBuf
cmp byte ptr [esi],0
jnz @F
inc edx
@@:
cmp byte ptr [esi+0A0h],0
jnz @F
inc edx
@@:
cmp edx,5
jg Lop1
invoke CheckBoxType,ebx
cmp eax,-1
jnz @F
invoke MessageBox,hWindow,addr szBlackListSN1,addr szWarning,MB_ICONWARNING or MB_OK
@@:
movzx eax,ReqFileBuffer+46h
and al,33h
jz @F
invoke MessageBox,hWindow,addr szReqFileNotProtected,addr szWarning,MB_ICONWARNING or MB_OKCANCEL
cmp eax,IDOK
jz @F
jmp Done
@@:
invoke lstrlen,addr FileName
pushf
lea edi,FileName
add edi,eax
mov al, '\'
std
repne scasb
inc edi
inc edi
mov dword ptr [edi],0
popf
invoke wsprintf,addr TempString ,szFBIFile,var_4
invoke lstrcat,addr FileName,addr TempString
mov OFNA .lStructSize,SIZEOF OPENFILENAMEA
push hWindow
pop OFNA .hwndOwner
push hInstance
pop OFNA .hInstance
mov OFNA .lpstrFilter,offset szUfsUpFile ;"UFS updates files (*.fbi)"
mov OFNA .nFilterIndex,0
mov OFNA .lpstrFile,offset FileName
mov OFNA .lpstrDefExt,offset szFbiFileExt ;".fbi"
mov OFNA .nMaxFile,104h
mov OFNA .Flags,OFN_LONGNAMES or OFN_EXPLORER or OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_HIDEREADONLY
invoke GetSaveFileName,addr OFNA
cmp eax,1
jnz Done
invoke CreateFile,addr FileName,GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ or FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE,NULL
cmp eax,-1
jz ErrorCreateFile
mov hFile,eax
invoke WriteFile,hFile,addr FTOutBuf,100h,addr NumberOfBytesRead,NULL
invoke CloseHandle,hFile
jmp Done
ErrorCreateFile:
invoke MessageBox,hWindow,addr szErrCreatFile,addr szError,MB_ICONERROR or MB_OK
Done:
ret
FBICalc endp
Random proc uses edx ecx,Range:DWORD
mov eax,RandomSeed
xor edx,edx
mov ecx,1F31Dh
div ecx
mov ecx,eax
mov eax,41A7h
mul edx
mov edx,ecx
mov ecx,eax
mov eax,0B14h
mul edx
sub ecx,eax
xor edx,edx
mov eax,ecx
mov RandomSeed,ecx
div Range
mov eax,edx
ret
Random endp
CheckBoxType proc uses ecx,arg:DWORD
xor eax,eax
xor ecx,ecx
mov BoxType,eax
mov eax,arg
cmp eax,15518
jnz @F
inc ecx
@@:
cmp eax,10
jl @F
cmp eax,5888
jge @F
cmp dword_40D7A4,1
jnz @F
inc ecx
@@:
cmp eax,5889
jl @F
cmp eax,6000
jge @F
cmp dword_40D7A4,1
jnz @F
inc ecx
@@:
cmp eax,6021
jl @F
cmp eax,65535
jge @F
cmp dword_40D7A4,1
jnz @F
inc ecx
@@:
cmp eax,100
jl @F
cmp eax,2000
jge @F
inc ecx
@@:
cmp eax,2000
jl @F
cmp eax,2700
jge @F
mov BoxType,TwisterBox
@@:
cmp eax,3157
jl @F
cmp eax,4000
jge @F
inc ecx
@@:
cmp eax,4601
jl @F
cmp eax,5000
jge @F
inc ecx
@@:
cmp eax,4000
jl @F
cmp eax,4600
jge @F
mov BoxType,Tornado2Box
@@:
cmp eax,5010
jl @F
cmp eax,6000
jge @F
inc ecx
@@:
cmp eax,6020
jl @F
cmp eax,7999
jge @F
inc ecx
@@:
cmp eax,8000
jl @F
cmp eax,10000
jge @F
mov BoxType,Tornado1Box
@@:
cmp eax,10000
jl @F
cmp eax,11000
jge @F
mov BoxType,TwisterBox
@@:
cmp eax,11000
jl @F
cmp eax,14000
jge @F
mov BoxType,Tornado1Box
@@:
cmp eax,14000
jl @F
cmp eax,16000
jge @F
mov BoxType,TwisterBox
@@:
cmp eax,16000
jl @F
cmp eax,17000
jge @F
mov BoxType,Tornado1Box
@@:
cmp eax,17000
jl @F
cmp eax,17600
jge @F
mov BoxType,Tornado2Box
@@:
cmp eax,17600
jl @F
cmp eax,18000
jge @F
inc ecx
@@:
cmp eax,18000
jl @F
cmp eax,20000
jge @F
mov BoxType,Tornado2Box
@@:
cmp eax,20000
jl @F
cmp eax,21000
jge @F
mov BoxType,TwisterBox
@@:
cmp eax,21000
jl @F
cmp eax,23000
jge @F
mov BoxType,Tornado2Box
@@:
cmp eax,23000
jl @F
cmp eax,25000
jge @F
mov BoxType,Tornado1Box
@@:
cmp eax,25000
jl @F
cmp eax,27000
jge @F
mov BoxType,TwisterBox
@@:
cmp eax,27000
jl @F
cmp eax,29000
jge @F
mov BoxType,Tornado1Box
@@:
cmp eax,29000
jl @F
cmp eax,30000
jge @F
mov BoxType,Tornado2Box
@@:
cmp eax,30000
jl @F
cmp eax,31000
jge @F
mov BoxType,NBoxBox
@@:
cmp eax,31000
jl @F
cmp eax,32000
jge @F
mov BoxType,Tornado2Box
@@:
cmp eax,33000
jl @F
cmp eax,34000
jge @F
mov BoxType,Tornado1Box
@@:
cmp eax,34000
jl @F
cmp eax,35000
jge @F
mov BoxType,Tornado1Box
@@:
cmp eax,35000
jl @F
cmp eax,37000
jge @F
mov BoxType,TwisterBox
@@:
cmp eax,38000
jl @F
cmp eax,39000
jge @F
mov BoxType,Tornado1Box
@@:
cmp eax,39000
jl @F
cmp eax,40000
jge @F
mov BoxType,Tornado2Box
@@:
cmp eax,40000
jl @F
cmp eax,41000
jge @F
mov BoxType,TwisterBox
@@:
cmp eax,41000
jl @F
cmp eax,42000
jge @F
mov BoxType,Tornado1Box
@@:
cmp eax,42000
jl @F
cmp eax,43000
jge @F
mov BoxType,Tornado2Box
@@:
cmp eax,43000
jl @F
cmp eax,44000
jge @F
mov BoxType,TwisterBox
@@:
cmp eax,44000
jl @F
cmp eax,45000
jge @F
mov BoxType,NBoxBox
@@:
cmp eax,45000
jl @F
cmp eax,47000
jge @F
mov BoxType,Tornado1Box
@@:
cmp eax,47000
jl @F
cmp eax,49000
jge @F
mov BoxType,Tornado2Box
@@:
cmp eax,49000
jl @F
cmp eax,51000
jge @F
mov BoxType,TwisterBox
@@:
cmp eax,51000
jl @F
cmp eax,53000
jge @F
mov BoxType,NBoxBox
@@:
cmp eax,54000
jl @F
cmp eax,56000
jge @F
mov BoxType,TwisterBox
@@:
cmp eax,56000
jl @F
cmp eax,58000
jge @F
mov BoxType,Tornado1Box
@@:
cmp eax,58000
jl @F
cmp eax,59000
jge @F
mov BoxType,PowFlasherBox
@@:
cmp eax,59000
jl @F
cmp eax,61000
jge @F
mov BoxType,Tornado1Box
@@:
cmp eax,61000
jl @F
cmp eax,62000
jge @F
mov BoxType,Tornado2Box
@@:
cmp eax,62000
jl @F
cmp eax,63000
jge @F
mov BoxType,TwisterBox
@@:
cmp eax,63000
jl @F
cmp eax,64000
jge @F
mov BoxType,Tornado2Box
@@:
cmp eax,64000
jl @F
cmp eax,65000
jge @F
mov BoxType,Tornado1Box
@@:
cmp eax,65000
jl @F
cmp eax,65500
jge @F
mov BoxType,TwisterBox
@@:
cmp eax,70000
jl @F
cmp eax,79999
jge @F
mov BoxType,Tornado1Box
@@:
cmp eax,80000
jl @F
cmp eax,89999
jge @F
mov BoxType,Tornado2Box
@@:
cmp eax,90000
jl @F
cmp eax,99999
jge @F
mov BoxType,TwisterBox
@@:
cmp eax,100000
jl @F
cmp eax,109999
jge @F
mov BoxType,NBoxBox
@@:
cmp eax,110000
jl @F
cmp eax,119999
jge @F
mov BoxType,PowFlasherBox
@@:
cmp eax,120000
jl @F
cmp eax,129999
jge @F
mov BoxType,SFlasherBox
@@:
cmp eax,130000
jl @F
cmp eax,139999
jge @F
mov BoxType,TwisterBox
@@:
cmp eax,140000
jl @F
inc ecx
@@:
cmp eax,0
jnz @F
inc ecx
@@:
cmp eax,65535
jnz @F
inc ecx
@@:
mov eax,BoxType
or ecx,ecx
jz @F
mov eax,0FFFFFFFFh
@@:
ret
CheckBoxType endp
end start