Since the time I sent about the post to the forum I had the chance to check the contents of two new dongles, which belongs two other versions (version 9 and 12). I checked the Dev. ID’s (Cell 01) and they are exactly same with preceding dongles. And serials of dongles seem from the same serie.(4004 /4B04 /4A04/3504). I opened the .exe file with IDA and applied Killer_3K’s flirt signature. Dev. ID isn’t pushed directly (which something new for me) and check the calls for sproRead and sproQuerry APIs, found something interesting. Is it something I thought? A call for the Cell 00 (serial number of the dongle)?
00C6AFD0 sub esp, 4
00C6AFD3 test byte ptr ds:dword_C6891C, 70h
00C6AFDA mov [esp+4+var_2], 0
00C6AFE1 jz short loc_C6B017
00C6AFE3 lea eax, [esp+4+var_2]
00C6AFE7 push eax ; store address?
00C6AFE8 push 0 : cell to read?
00C6AFEA push 0C5FCC8h
acket record?
00C6AFEF call sproRead
00C6AFF4 test ax, ax
00C6AFF7 jnz loc_C6B0E7
00C6AFFD mov cx, ds:word_C600D0
00C6B004 cmp [esp+4+var_2], cx
00C6B009 jz loc_C6B0E7
00C6B00F mov ax, 3
00C6B013 add esp, 4
00C6B016 retn
00C6B0A7 ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
00C6B0A7
00C6B0A7 loc_C6B0A7: ; CODE XREF: sub_C6AFD0+69 j
00C6B0A7 push 4
00C6B0A9 mov ds:dword_C5FC60, eax
00C6B0AE mov ds:dword_C5FC64, 0
00C6B0B8 push 0
00C6B0BA push 0C5FC64h
00C6B0BF push 0C5FC60h
00C6B0C4 push 0 ; Algorithm starting point?
00C6B0C6 push 0C5FCC8h : packet record?
00C6B0CB call sproQuery
00C6B0D0 test ax, ax
00C6B0D3 jnz short loc_C6B0E7
00C6B0D5 mov ecx, ds:dword_C5FC64
00C6B0DB cmp ecx, ds:dword_C6891C
00C6B0E1 jz short loc_C6B0E7
00C6B0E3 mov ax, 3
00C6B0E7
00C6B0E7 loc_C6B0E7: ; CODE XREF: sub_C6AFD0+27 j
00C6B0E7 ; sub_C6AFD0+39 j ...
00C6B0E7 add esp, 4
00C6B0EA retn
00C6B0EA sub_C6AFD0 endp
00C6B0EA
and I have another question about sproRead, you can see that the cell to read is pushed in eax at line 00C6B962, two lines before the byte from offset 00C5E00C moved (movzx) to eax. If the content of offset 00C5E00C is;
00C5E00C byte_C5E00C db 0A2h ; DATA XREF: _
which byte does it move into the eax? Is eax 0002 or 000A? Same trick is used in pushing the Dev ID before sproFindFirstUnit.
00C6B94C cmp ds:byte_C5E00C, 0FFh
00C6B953 jz short loc_C6B982
00C6B955 movzx ax, ds:byte_C5E00C
00C6B95D push 0C600CCh
00C6B962 push eax ;Cell to read?
00C6B963 push 0C5FCC8h
00C6B968 call sproRead
00C6B96D test ax, ax
00C6B970 jnz loc_C6BA39
00C6B976 xor eax, eax
00C6B978 mov ax, ds:word_C600CC
00C6B97E mov [esp+24h], eax
I thank everybody for being patient while reading my post. Special thanks to CrackZ and CyberHeg for useful advices.