flat assembler
Message board for the users of flat assembler.
Index
> Windows > reading sim card using windows api? |
Author |
|
Dex4u 16 Aug 2008, 16:15
Try this link http://www.ladyada.net/make/simreader/resources.html
|
|||
16 Aug 2008, 16:15 |
|
Tomasz Grysztar 17 Aug 2008, 20:49
Doesn't your driver provide PC/SC interface?
I have some small programs written in fasm that I once used to copy SMS archive from one sim card to another - using the USB smart card reader through PC/SC API. |
|||
17 Aug 2008, 20:49 |
|
sleepsleep 17 Aug 2008, 22:40
the driver, A-Men Technologies, USB to serial comes in one install shield .exe
after unzip it. i got. Code: Setup.exe (install shield) data1.cab data2.cab Setup.ini ikernel.ex_ data1.hdr setup.inx layout.bin i tried the python sim reader through dex link. but to no avail. the only dll that reside with the sim utility software folder that came with the sim reader CD is ISO7816.dll using depencency walker, all functions that reside on it are here, http://pastebin.com/m1ae2f8c if i use the depecency walker on the sim editor exe, the function that gets called (on iso7816.dll) are below. Code: @DecodingItem$qpuc @STKPassword$qpuc @IsSTKCard$qv @IsAutoMenuOn$qv @EndDebug$qv @BeginDebug$qv @UpdateRecord$qpucucuci @ReadRecord$qpucucuci @UpdateBinary$qpucii @ReadBinary$qpucii @GetResponse$qpuci @SelectFile$qus @Verify$qucpuc @IncomeingAPDU$qpuc @OutgoingAPDU$qpuct1 @Disconnect$qv @ConnectCard$qi i dont' know if this the helper dll you mentioned? btw, did you wrote it based on dll that shipped with win os only? like no 3rd party dll? thanks in advance. |
|||
17 Aug 2008, 22:40 |
|
Tomasz Grysztar 18 Aug 2008, 06:44
Yes, PC/SC is shipped with OS, at least with Windows 2000 or higher. The only thing you need is a PC/SC-compliant driver for your reader.
|
|||
18 Aug 2008, 06:44 |
|
Tomasz Grysztar 18 Aug 2008, 08:42
Please try to use this tool to determine whether you have a PC/SC interface for you reader working.
|
|||||||||||
18 Aug 2008, 08:42 |
|
sleepsleep 18 Aug 2008, 23:11
|
|||
18 Aug 2008, 23:11 |
|
Tomasz Grysztar 18 Aug 2008, 23:31
Maybe you haven't got the driver installed correctly. What reader model is it? The FAQ on the A-MEN official page states that their readers are compatible with PC/SC.
|
|||
18 Aug 2008, 23:31 |
|
sleepsleep 19 Aug 2008, 00:06
the reader is actually not from A-Men, it is from "china SUN-500", cheap SIM reader & writer
regarding the A-Men technologies, USB to serial Comm Port. because i saw it on the below image. [img=http://img208.imageshack.us/img208/7775/15959914sm6.th.png] the driver imho, probably provide the functionality to fake USB into Comm port, so the device could read from COM3, but without PC/SC functionality to R/W the SIM card. btw, their SIM software could functions (at the moment i run the pcscdiag.exe, like reading my SIM sms/contacts) |
|||
19 Aug 2008, 00:06 |
|
Alphonso 19 Aug 2008, 04:32
sleepsleep, I bought something very similar with the idea of using multiple sims on one sim card (maxis and digi prepaid come to mind) but never did get the blank. You can get software to read/write your sim here (free). MagicSim V22
It comes with both serial and smart card drivers and is a biggish download (38M) but most of that is help files (chinese / eng). It's been a long time since I looked at this but I think the serial device is just a straight 232 + level converter so it should just be fairly easy to program. |
|||
19 Aug 2008, 04:32 |
|
Tomasz Grysztar 19 Aug 2008, 08:25
Still, just in case someone visites here with a similar problem (and a PC/SC standard reader), here are the sources for my small programs I used to transfer SMS archive from one card to another.
Note that write.asm was assembler after executing the first program, as it uses FILE directive to include the SMS archive from file created by it the read.exe. Also there's no error messaging, all error checking is just "jc exit". This is because these programs was written for my single personal use.
|
|||||||||||
19 Aug 2008, 08:25 |
|
sleepsleep 19 Aug 2008, 22:20
thanks tomasz for the help
btw, alphonso, are you somehow located in malaysia? the software that came with the sim r/w device is something like magicsim, but they couldn't read more than 30 sms... they even gave me some rectagular fonts if the message is crossing 2 pages. and without time/date info maybe i could do something with the DLL ..... let see.... waiting for holiday |
|||
19 Aug 2008, 22:20 |
|
Alphonso 20 Aug 2008, 14:33
No, not located in Malaysia but sometimes work there.
If your device is similar to mine (very probable) the RST is used to reset the SIM so if you try something like the attached you may get an ATR response, Answer To Reset I think. It will probably start with'3B' if it works. At least then you can at least establish comm's. After that it's a case of finding the right command codes to do what you want. Code: format PE GUI 4.0 include 'win32a.inc' RBufferLength = 32 SETXOFF = 1 SETXON = 2 SETRTS = 3 CLRRTS = 4 SETDTR = 5 CLRDTR = 6 RESETDEV = 7 SETBREAK = 8 CLRBREAK = 9 PURGE_TXABORT = 00001h PURGE_RXABORT = 00002h PURGE_TXCLEAR = 00004h PURGE_RXCLEAR = 00008h PURGE_ALL = 0000Fh struc DCB { .DCBlength dd 28 .BaudRate dd 9600 .Flags dd 11100000h .wReserved dw 0 .XonLim dw 100h .XoffLim dw 40h .ByteSize db 8 ;8 bits .Parity db 2 ;Even .StopBits db 2 ;2 stop bits .XonChar db 11h .XoffChar db 13h .ErrorChar db 0 .EofChar db 0 .EvtChar db 0 .wReserved1 dw 0 } struc COMMTIMEOUTS { .ReadIntervalTimeout dd 0 .ReadTotalTimeoutMultiplier dd 0 .ReadTotalTimeoutConstant dd 10 ;seems to be 10ms even if set to 1 .WriteTotalTimeoutMultiplier dd 1 .WriteTotalTimeoutConstant dd 50 } section '.code' code readable executable invoke CreateFile,CPName,GENERIC_WRITE+GENERIC_READ,0,0,OPEN_EXISTING,0,0 ;Open Comm Port mov [CPHandle],eax cmp eax,-1 je NoComms invoke GetCommTimeouts,[CPHandle],OriginalCOMMTIMEOUTS ;Save original state cmp eax,0 ; je exit ; ; invoke GetCommState,[CPHandle],OriginalDCB ; cmp eax,0 je exit invoke SetCommState,[CPHandle],SimDCB invoke SetCommTimeouts,[CPHandle],SimCOMMTIMEOUTS invoke EscapeCommFunction,[CPHandle],SETDTR ;probably not required invoke EscapeCommFunction,[CPHandle],SETRTS ;Reset SIM invoke Sleep,10 invoke PurgeComm,[CPHandle],PURGE_ALL ;Clear buffers invoke GetTickCount ;Start timing mov [StartTime],eax invoke EscapeCommFunction,[CPHandle],CLRRTS ;Clear Reset (SIM RST High) again: invoke ReadFile,[CPHandle],[RBufferP],RBufferLength,ActualBytes,0 cmp eax,0 je ReadError inc [Counts] mov eax,[ActualBytes] cmp [Counts],50 ;50x 10ms, 500ms should be enough jg TimeOut ;longer than 0.5s cmp eax,0 jz again ;no bytes received add [RBufferP],eax cmp [RBufferP],RBuffer+RBufferLength jge BufferFull cmp [RBufferP],RBuffer+2 jl again ;Get a least the first two bytes cmp [DataLength],2 jne CheckLength mov al,byte [RBuffer+1] ;Work out number of expected bytes mov ebx,BitCount ;number of bits per byte mov dl,al shr al,4 xlatb ;al = number of high nibble bits set and dl,0fh add dl,al add byte [DataLength],dl ;expected data length CheckLength: mov eax,[RBufferP] sub eax,RBuffer cmp eax,[DataLength] jl again ;Have all bytes been received? invoke GetTickCount sub eax,[StartTime] ;How long it took to get an ATR invoke wsprintf,AccessTime,wsformat,eax BytesReceived: mov ecx,[DataLength] mov esi,RBuffer ;Hex... mov edi,Result ;converted to Ascii Conv: lodsb mov dl,al shr al,4 cmp al,9 jle Dec1 add al,7 Dec1: add al,30h stosb mov al,dl and al,0fh cmp al,9 jle Dec2 add al,7 Dec2: add al,30h stosb dec ecx jnz Conv xor al,al stosb ;end string with a zero invoke MessageBox,NULL,AccessTime,CPName,MB_OK ;Display ATR result, jmp ReInstate ;no checks for legitimacy BufferFull: invoke MessageBox,NULL,TooMuchData,CPName,MB_OK jmp ReInstate TimeOut: invoke MessageBox,NULL,TooLong,CPName,MB_OK ReInstate: invoke SetCommState,[CPHandle],OriginalDCB ;Restore original state invoke SetCommTimeouts,[CPHandle],OriginalCOMMTIMEOUTS ; exit: invoke CloseHandle,[CPHandle] invoke ExitProcess,0 NoComms: invoke MessageBox,NULL,CommFailure,CPName,MB_OK invoke ExitProcess,0 section '.data' data readable writeable CPHandle dd 0 ActualBytes dd 0 Counts dd 0 StartTime dd 0 DataLength dd 2 RBufferP dd RBuffer BitCount db 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4 SimDCB DCB OriginalDCB DCB SimCOMMTIMEOUTS COMMTIMEOUTS OriginalCOMMTIMEOUTS COMMTIMEOUTS wsformat db 'ATR reponse time = %4u ms. ',0dh,0dh,0 Lenwsformat=$-wsformat CPName db 'COM4',0 ;Comport SIM card is on TooLong db 'Timed out >500ms',0 CommFailure db 'Unable to open port',0 TooMuchData db 'Too much data',0 ReadError db 'Error reading data',0 AccessTime rb Lenwsformat Result rb RBufferLength*2 rb 1 RBuffer rb RBufferLength*2 section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL' import kernel32,\ Sleep,'Sleep',\ GetTickCount,'GetTickCount',\ CreateFile,'CreateFileA',\ ReadFile,'ReadFile',\ CloseHandle,'CloseHandle',\ GetCommState,'GetCommState',\ GetCommTimeouts,'GetCommTimeouts',\ SetCommTimeouts,'SetCommTimeouts',\ SetCommState,'SetCommState',\ PurgeComm,'PurgeComm',\ EscapeCommFunction,'EscapeCommFunction',\ ExitProcess,'ExitProcess' import user32,\ wsprintf,'wsprintfA',\ MessageBox,'MessageBoxA' Last edited by Alphonso on 22 Aug 2008, 13:31; edited 1 time in total |
|||
20 Aug 2008, 14:33 |
|
sleepsleep 20 Aug 2008, 15:08
thanks alphonso, (btw, if you somehow reach malaysia, let me know damn hard to find a fasm member in malaysia. as far as i knew, 2 guys only probably or me alone? lol.
your code, i will try it later, today got client problem with..... virus. |
|||
20 Aug 2008, 15:08 |
|
< Last Thread | Next Thread > |
Forum Rules:
|
Copyright © 1999-2025, Tomasz Grysztar. Also on GitHub, YouTube.
Website powered by rwasa.