用户操作
[即时聊天] [发私信] [加为好友]
娃娃猪ID:jennyvenus
14647次访问,排名7980(1)好友204人,关注者217
.
jennyvenus的文章
原创 38 篇
翻译 0 篇
转载 0 篇
评论 24 篇
最近评论
jennyvenus:Snooper当然可以卖,整套也没多少钱。具体事情可以给我发邮件

jenny.venus@163.com

如果你发select file却返回9122,这流程好像不正常,select file应该返回9fxx才对,如果是91xx,应该用a0 12来取数据,并用a0 14来返回执行结果。

Snooper的用户群是stk应用的开发……
benyueng:Hi Jenney,
不好意思,又有个问题想问你:

现在我的“snooper“貌似工作,但是到了STK那块就不行,我观察了下,手机给卡发6F AE的SELECT File时,sim卡返回91 22,然后我返回ME,Me 应该发送Menu envelope,对吧?但是我观察了下,它没有发这个,而是直接Select file 6F 38,请问问题大概出在哪里?我手……
benyueng:Hi Jenney,
不好意思,又有个问题想问你:

现在我的“snooper“貌似工作,但是到了STK那块就不行,我观察了下,手机给卡发6F AE的SELECT File时,sim卡返回91 22,然后我返回ME,Me 应该发送Menu envelope,对吧?但是我观察了下,它没有发这个,而是直接Select file 6F 38,请问问题大概出在哪里?我手……
benyueng:我刚才测了下,有数据回来,只是需要等待一段时间,谢谢!
benyueng:首先,非常感谢你的回复,我的通讯具体过程如下:

ME: RESET
CARD: ATR(我改装了下,保留历史子节,别的通讯参数都是默认)

ME: a0 a4 00 00 02
card: 7F 21

card: 9f 1A
ME: a0 c0 00 00 1A
card: c0
文章分类
收藏
    相册
    max232
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 2G SIM卡中,文件返回信息简要格式收藏

    新一篇: 三点求圆与多个点的最小外接圆 | 旧一篇: 汇编中用在图形模式下显示汉字

     

    //SELECT

    A0 A4 00 00 02 3F 00

    9F 17

    //A0 A4 00 00 02 是命令头,CLA = A0表示GSM应用,INS = A4 表示SELECT,P1 P2 = 00 00 是参数,P3 = 02 是数据的长度(或返回数据的长度)表示( 2 )

    //选择文件,选中文件为3F 00 代表MF

    //9F 17 是返回状态,表示---成功,有23 个字节的信息等待GET RESPONSE

     

    //SELECT

    A0 A4 00 00 02 2F 01

    9F 0F

    //A0 A4 00 00 02 是命令头,CLA = A0表示GSM应用,INS = A4 表示SELECT,P1 P2 = 00 00 是参数,P3 = 02 是数据的长度(或返回数据的长度)表示( 2 )

    //选择文件,选中文件为2F 01 代表ATR

    //9F 0F 是返回状态,表示---成功,有15 个字节的信息等待GET RESPONSE

     

    //GET RESPONSE

    A0 C0 00 00 0F

    00 00 00 20 2F 01 04 00 00 FF FF 01 02 00 00

    90 00

    //A0 C0 00 00 0F 是命令头,CLA = A0表示GSM应用,INS = C0 表示GET RESPONSE,P1 P2 = 00 00 是参数,P3 = 0F 是数据的长度(或返回数据的长度)表示( 15 )

    //返回数据见上,其中

    //--00 00 保留

    //--00 20 占用的空间大小,表示32字节

    //--2F 01 选中File的ID

    //--04 文件类型,见11.11 9.3

    //----'00':保留 '01':MF '02':DF '04':EF

    //----此文件类型 EF

    //--00 见11.11 9.2.1 detail 3

    //----对于二进制和记录文件,该字节为保留字节。对于循环文件,除b6(0 based)外所有的bit都是保留的,b6=1表示当前所选择的循环文件可以执行INCREASE命令

    //--00 FF FF 访问权限

    //--01 文件状态,见11.11 9.3

    //----+--+--+--+--+--+--+--+--+

    //----|b7|b6|b5|b4|b3|b2|b1|b0|

    //----+--+--+--+--+--+--+--+--+

    //----  |  |  |  |  |  |  |  +-b0=0文件无效, b0=1文件有效

    //----  |  |  |  |  |  |  +----RFU

    //----  |  |  |  |  |  |       b2=0: 当文件无效时不允许读和写

    //----  |  |  |  |  |  +-------b2=1: 当文件无效时允许读和写

    //----  +--+--+--+--+----------RFU

    //----本字节表示文件有效,当文件无效时不允许读/写

    //--02 后面数据的长度,表示2

    //----00 文件结构,见11.11 9.3

    //------'00':二进制文件(透明文件) '01':记录文件(线性定长) '03':循环文件

    //------此文件结构二进制文件

    //----00 保留,见11.11 9.2.1 detail 4

    //------对于二进制,该字节为保留字节。对于记录文件和循环文件,该字节为记录长度

    //90 00 是返回状态,表示---成功

     

    //SELECT

    A0 A4 00 00 02 7F 10

    9F 17

    //A0 A4 00 00 02 是命令头,CLA = A0表示GSM应用,INS = A4 表示SELECT,P1 P2 = 00 00 是参数,P3 = 02 是数据的长度(或返回数据的长度)表示( 2 )

    //选择文件,选中文件为7F 10 代表TELECOM

    //9F 17 是返回状态,表示---成功,有23 个字节的信息等待GET RESPONSE

     

    //GET RESPONSE

    A0 C0 00 00 17

    00 00 A2 CB 7F 10 02 00 00 00 00 00 0A 91 08 18 06 00 83 8A 83 8A 00

    90 00

    //A0 C0 00 00 17 是命令头,CLA = A0表示GSM应用,INS = C0 表示GET RESPONSE,P1 P2 = 00 00 是参数,P3 = 17 是数据的长度(或返回数据的长度)表示( 23 )

    //返回数据见上,其中

    //--00 00 保留

    //--A2 CB 占用的空间大小,表示41675字节

    //--7F 10 选中File的ID

    //--02 文件类型,见11.11 9.3

    //----'00':保留 '01':MF '02':DF '04':EF

    //----此文件类型 DF

    //--00 00 00 00 00 保留

    //--0A 后面跟随数据的长度,表示10

    //----91 二进制  1 0 0 1 0 0 0 1 文件详细情况,见11.11 9.2.1 detail 1

    //------+--+--+--+--+--+--+--+--+

    //------|b7|b6|b5|b4|b3|b2|b1|b0|

    //------+--+--+--+--+--+--+--+--+

    //------  |  |  |  |  |  |  |  +--Clock stop (see below)(时钟停止)

    //------  |  |  |  |  |  |  |     For running the authentication algorithm, (为了运行鉴权算法)

    //------  |  |  |  |  |  |  |     or the ENVELOPE command for SIM Data Download, (或者执行SIM卡数据下载)

    //------  |  |  |  |  |  |  |     a frequency is required of at least (至少要用一个频率)

    //------  |  |  |  |  |  |  +-----13/8 MHz if b1=0 and 13/4 MHz if b1=1(若b1=0为13/8MHZ,若b1=1为13/4MHZ)

    //------  |  |  |  |  +--+--------Clock stop (see below)(时钟停止)

    //------  |  |  |  +--------------for coding (see TS 11.12 [28])

    //------  |  +--+-----------------RFU

    //------  +-----------------------b8=0: CHV1 enabled; b8=1: CHV1 disabled

    //--------时钟停止规则

    //--------+---+---+---+----------------------------------+

    //--------|b0 |b2 |b3 |               意义               |

    //--------+---+---+---+----------------------------------+

    //--------| 1 | 0 | 0 | 允许时钟停止,没有优先级         |

    //--------+---+---+---+----------------------------------+

    //--------| 1 | 1 | 0 | 允许时钟停止,首选高优先级       |

    //--------+---+---+---+----------------------------------+

    //--------| 1 | 0 | 1 | 允许时钟停止,首选低优先级       |

    //--------+---+---+---+----------------------------------+

    //--------| 0 | 0 | 0 | 不允许时钟停止                   |

    //--------+---+---+---+----------------------------------+

    //--------| 0 | 1 | 0 | 不允许时钟停止,除非在高优先级上 |

    //--------+---+---+---+----------------------------------+

    //--------| 0 | 0 | 1 | 不允许时钟停止,除非在低优先级上 |

    //--------+---+---+---+----------------------------------+

    //----------本字节所示时钟规则:相关值为 1  0  0 允许时钟停止,没有优先级

    //----------本字节所示时钟频率:13/8MHZ

    //----------本字节所示CHV1状态:Disabled

    //----08 DF的个数,表示8

    //----18 EF的个数,表示24

    //----06 Number of CHVs, UNBLOCK CHVs and administrative codes

    //----00 保留

    //----83 CHV1状态,见11.11 9.2.1 detail 2

    //------低4位是可用重试次数,当前剩余 3 次(0表示被锁),最高位是 1 表示secret code initialised,其他位保留

    //----8A unblock CHV1状态,见11.11 9.2.1 detail 2

    //------低4位是可用重试次数,当前剩余 10 次(0表示被锁),最高位是 1 表示secret code initialised,其他位保留

    //----83 CHV2状态,见11.11 9.2.1 detail 2

    //------低4位是可用重试次数,当前剩余 3 次(0表示被锁),最高位是 1 表示secret code initialised,其他位保留

    //----8A unblock CHV2状态,见11.11 9.2.1 detail 2

    //------低4位是可用重试次数,当前剩余 10 次(0表示被锁),最高位是 1 表示secret code initialised,其他位保留

    //----00 保留

    //90 00 是返回状态,表示---成功

     

    //SELECT

    A0 A4 00 00 02 6F 3A

    9F 0F

    //A0 A4 00 00 02 是命令头,CLA = A0表示GSM应用,INS = A4 表示SELECT,P1 P2 = 00 00 是参数,P3 = 02 是数据的长度(或返回数据的长度)表示( 2 )

    //选择文件,选中文件为6F 3A 代表ADN[CDMA-PL]

    //9F 0F 是返回状态,表示---成功,有15 个字节的信息等待GET RESPONSE

     

    //GET RESPONSE

    A0 C0 00 00 0F

    00 00 1B 58 6F 3A 04 00 11 FF 22 01 02 01 1C

    90 00

    //A0 C0 00 00 0F 是命令头,CLA = A0表示GSM应用,INS = C0 表示GET RESPONSE,P1 P2 = 00 00 是参数,P3 = 0F 是数据的长度(或返回数据的长度)表示( 15 )

    //返回数据见上,其中

    //--00 00 保留

    //--1B 58 占用的空间大小,表示7000字节

    //--6F 3A 选中File的ID

    //--04 文件类型,见11.11 9.3

    //----'00':保留 '01':MF '02':DF '04':EF

    //----此文件类型 EF

    //--00 见11.11 9.2.1 detail 3

    //----对于二进制和记录文件,该字节为保留字节。对于循环文件,除b6(0 based)外所有的bit都是保留的,b6=1表示当前所选择的循环文件可以执行INCREASE命令

    //--11 FF 22 访问权限

    //--01 文件状态,见11.11 9.3

    //----+--+--+--+--+--+--+--+--+

    //----|b7|b6|b5|b4|b3|b2|b1|b0|

    //----+--+--+--+--+--+--+--+--+

    //----  |  |  |  |  |  |  |  +-b0=0文件无效, b0=1文件有效

    //----  |  |  |  |  |  |  +----RFU

    //----  |  |  |  |  |  |       b2=0: 当文件无效时不允许读和写

    //----  |  |  |  |  |  +-------b2=1: 当文件无效时允许读和写

    //----  +--+--+--+--+----------RFU

    //----本字节表示文件有效,当文件无效时不允许读/写

    //--02 后面数据的长度,表示2

    //----01 文件结构,见11.11 9.3

    //------'00':二进制文件(透明文件) '01':记录文件(线性定长) '03':循环文件

    //------此文件结构记录文件

    //----1C 记录长度,见11.11 9.2.1 detail 4

    //------对于二进制,该字节为保留字节。对于记录文件和循环文件,该字节为记录长度

    //90 00 是返回状态,表示---成功

     

    发表于 @ 2008年05月09日 09:45:00|评论(loading...)|编辑|收藏

    新一篇: 三点求圆与多个点的最小外接圆 | 旧一篇: 汇编中用在图形模式下显示汉字

    评论

    #harold2007 发表于2008-06-12 14:56:44  IP: 58.246.14.*
    太感谢了~
    你的文章对刚刚接触智能卡的人来说简直就是雪中送炭
    希望你再接再厉,写出更好的文章~
    大家会顶起你的
    #jennyvenus 发表于2008-06-15 16:00:06  IP: 221.218.25.*
    谢谢,但是俺手头没时间写了,这阵子准备用同方的卡片重做一套系统,以求将来实现全部技术自主。
    #harold2007 发表于2008-06-16 13:37:47  IP: 58.246.14.*
    能不能把你QQ留下 便于以后向你请教?
    #harold2007 发表于2008-06-16 13:47:26  IP: 58.246.14.*
    有个问题向你请教:
    为EFacm文件增量操作两次;每次增量000020;再读取文件内容
    CHV1: 30303030FFFFFFFF
    CHV2: 30303030FFFFFFFF
    ---------------------------------
    我是这样写的:
    selevt
    A0 A4 00 00 02 3F 00
    9F 17
    select
    A0 A4 00 00 02 7F 20
    9F 17
    select
    A0 A4 00 00 02 6F 39
    9F 0F
    get response
    A0 C0 00 00 0F
    00 00 00 3C 6F 39 04 40 12 10 44 01 02 03 03
    90 00
    verify chv1
    A0 20 00 01 08 30303030FFFFFFFF
    9000
    increase
    A0 32 00 00 03 000020
    9f 06
    read record
    A0 B2 01 04 03
    112273
    9000
    ----------------------
    我现在想知道的是,2次增量操作,是否是把increase命令操作2次?还是有其他操作方式?
    最后read record时A0 B2 01 04 03最后这个03长度对不对?这个长度是增量过后的长度吗?




    #harold2007 发表于2008-06-16 13:48:49  IP: 58.246.14.*
    读出来的最后正确的文件内容是多少?
    #jennyvenus 发表于2008-06-16 21:08:56  IP: 221.221.149.*
    两次操作当然对6f39进行两次操作,increase指令俺由于用的少,所以不太清楚,好像是读最新一条,increase,然后存成最老的一条。

    如果原来的记录是 00 00 00,那么increase之后最老的一条好像是 00 00 20,再次increase 应该是 00 00 40吧,你为什么不找一张卡试试呢?
    #jennyvenus 发表于2008-06-16 21:51:29  IP: 221.221.147.*

    //SELECT
    A0A4000002 7F20
    9F17

    //SELECT
    A0A4000002 6F39
    9F0F

    //先读第一条
    //READ RECORD
    A0B2010403
    000000
    9000

    //INCREASE
    A032000003 000020
    9F06

    //GET RESPONSE
    A0C0000006
    000020000020
    9000

    //READ RECORD
    A0B2010403
    000020
    9000

    //读最老一条
    //READ RECORD
    A0B2000303
    000000
    9000


    //再次执行Increase
    //再读第一条
    //READ RECORD
    A0B2010403
    000020
    9000

    //INCREASE
    A032000003 000020
    9F06

    //GET RESPONSE
    A0C0000006
    000040000020
    9000

    //READ RECORD
    A0B2010403
    000040
    9000

    //READ RECORD
    A0B2000303
    000000
    9000


    ////////可见 Increase 是读最新的一条,Increase之后,存到最老的一条,再将第一条的指针指向最老的一条,这样,刚才最新的一条就变成了次新的一条

    比如有4个记录,开始时为
    000000 1
    000000 2
    000000 3
    000000 4

    执行increase时,读
    读最新的一条 000000 1,increase后值变成 000020 存到 4中,4再变成最新
    结果

    000000 2
    000000 3
    000000 4
    000020 1

    再increase时

    仍然读逻辑1条,存到逻辑4条

    变成
    000000 3
    000000 4
    000040 1
    000020 2

    而从外面读的时候,第一条始终是最后的结果
    #harold2007 发表于2008-06-18 14:09:13  IP: 58.246.14.*
    多谢,多谢!
    其实还有很多细节上的东西可能我还是不很理解
    比如在进行read record和update record时,参数P1P2如何设置的问题。
    如果P1=00表示什么?P1=01表示什么?
    P2的模式规范上说在CEF时只能用previous
    这个记录指针到底指向那个record就是搞不清楚

    请多赐教!
    #jennyvenus 发表于2008-06-30 08:15:20  IP: 123.112.25.*
    读的时候P2=00一般表示当前条,P2=01不知道,02下一条,03上一条,04绝对记录号,P1=记录号。
    #jennyvenus 发表于2008-06-30 08:16:08  IP: 123.112.25.*
    cyclic 文件的update只能用更新前一条方式来更新,也就是是
    00 d6 0003 长度 数据
    #harold2007 发表于2008-07-03 15:30:13  IP: 58.246.14.*
    Thanks
    以后有机会再向你请教 !
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © jennyvenus