simtrace之探秘SIM卡中的世界
0×00 关于SIM卡
众所周知SIM卡是一张插在手机上的小卡,其全称为Subscriber Identity Module 客户识别模块。不过,这个世界上并没有多少人知道SIM卡中的操作系统是基于jvm的。该系统简称SCF(Smart Card Filesystem)又称SAT(SIM Application Toolkit)。
那么这个系统能够做什么呢?
允许运营商给你的SIM卡下载固件
加密解密
读取手机数据
获取用户输入
甚至截取你的微信聊天记录
SAT系统中的文件不像Windows或Linux,它的文件名是一串8或16字节的编号,它的文件结构也十分独特,如下图:

SAT中的系统指令
READ 读取
SELECT 修改
DOWN 下载
GET 接收
等等等等....
那么你一定会说:既然是系统就一定会安全问题
确实,根据国外媒体,曾有黑客通过自制发射器录制运营商加密信息后修改,造成巴西大量市民SIM卡属性泄露,之后便再也没有报道
说了那么多,那怎么访问这个系统呢?
0×01 SIMtrace介绍

这块板使用T=0 线+ AT91SAM7 微控.
它主动接收SIM卡与手机间交流的内容并上传到电脑通过电脑程序解密转换成TCP/UDP协议的包,可以通过Wireshark获得可视化内容。
特性:
完全的主动式扫描器
能够检测到RST和ATR
支持PPS / PTS
能够分割APDUs
作为手机与卡的中间人
0×02 使用方法
将SIMtrace如下连接:

安装:
sudo apt-get install libusb-1.0--dev
git clone git://git.osmocom.org/simtrace.git
cd simtrace/host/
make
sudo groupadd osmocom
sudo adduser $USERNAME osmocom
sudo tee /etc/udev/rules.d/-osmocom.rules << EOF
# to use, install this file in /etc/udev/rules.d as -osmocom.rules
# rule to grant read/write access on SIMtrace to group named osmocom.
SUBSYSTEM=="usb", ATTR{idProduct}=="", ATTRS{idVendor}=="16c0", MODE="", GROUP="osmocom"
EOF
sudo service udev reload
运行:
sudo ./simtrace


APDU: (): a0 a4 6f 9f 0fAPDU: (): a0 c0 0f 6f 78APDU: (): a0 a4 6f 9f 0fAPDU: (): a0 c0 0f 6f 78APDU: (): a0 b0 ff 3f ff ff 3f 78APDU: (): a0 a4 6f ad 9f 0fAPDU: (): a0 b0 78APDU: (): a0 a4 6f 9f 0fAPDU: (): a0 b0 78APDU: (): a0 a4 6f 7e 9f 0fAPDU: (): a0 b0 0b ff ff ff ff f0 ff fe 78APDU: (): a0 a4 6f 9f 0fAPDU: (): a0 b0 78APDU: (): a0 a4 6f 9f 0fAPDU: (): a0 b0 78APDU: (): a0 a4 6f 9f 0fAPDU: (): a0 b0 ff ff ff ff ff ff ff ff 78APDU: (): a0 a4 6f 9f 0fAPDU: (): a0 c0 0f f0 6f
使用wireshark
socat -u udp-recv: /dev/null
./simtrace -i 192.168.0.1

接下来,就能看见你的手机和SIM卡是怎么交流的
比如SIM卡告诉手机他能干嘛

有兴趣的朋友可以继续深入研究,如给SIM卡刷入系统等,不过这一领域是毫无资料的
附上simtrace购买地址:
官方:http://shop.sysmocom.de/products/simtrace –90欧元 freebuf:http://shop.freebuf.com/item/51 –20FB
simtrace之探秘SIM卡中的世界的更多相关文章
- sim卡中的汉字存储格式
		
Sim卡中的ucs2格式 Sim卡中的中文都是以ucs2格式存储的,ucs2和unicode只是字节序不同,unicode是小头在前,ucs2是大头在前. Ucs2与GB2312互换可以用VC中的Wi ...
 - SIM卡中UCS2编码的三种格式(80,81,82)分析
		
网上看到一篇比较好的说ucs2编码的文章,保存一下,原文地址: http://hi.baidu.com/youren4548/blog/item/fa08bd1bf61005058618bf1d.ht ...
 - android中判断sim卡状态和读取联系人资料的方法
		
在写程序中,有时候可能需要获取sim卡中的一些联系人资料.在获取sim卡联系人前,我们一般会先判断sim卡状态,找到sim卡后再获取它的资料,如下代码我们可以读取sim卡中的联系人的一些信息. Pho ...
 - 十九、android中判断sim卡状态和读取联系人资料的方法
		
在写程序中,有时候可能需要获取sim卡中的一些联系人资料.在获取sim卡联系人前,我们一般会先判断sim卡状态,找到sim卡后再获取它的资料,如下代码我们可以读取sim卡中的联系人的一些信息. Pho ...
 - Android向手机通讯录中的所有的联系人(包括SIM卡),向手机通讯录中插入联系人
		
package com.example.myapi.phonepersion; import java.util.ArrayList; import java.util.List; import an ...
 - Android 判断SIM卡属于哪个移动运营商
		
第一种方法:获取手机的IMSI码,并判断是中国移动\中国联通\中国电信 TelephonyManager telManager = (TelephonyManager) getSystemServic ...
 - Android本机号码及Sim卡状态的获取
		
SIM卡存储的数据可分为四类:第一类是固定存放的数据.这类数据在移动电话机被出售之前由SIM卡中心写入,包括国际移动用户识别号(IMSI).鉴权密钥(KI).鉴权和加密算法等等.第二类是暂时存放的有关 ...
 - SIM卡应用-OPN,PLMN,SPN
		
SIM卡应用 移动运营商已经将SIM卡用於很多不同的应用,下面列出了其中最主要的应 用∶ ·漫游应用∶确保手机可以在漫游之後选择缺省的运营商网络.一个SIM应用是可以在手机漫游到某个合作夥伴运营商网络 ...
 - SIM卡里的文件
		
SIM卡里的所有文件按树来组织:主文件MF(Master File)——每一块SIM卡只有一个唯一的主文件, 其他所有文件都是它的子孙, 主文件只有文件头,里面存放着整个SIM卡的控制和管理信息专用文 ...
 
随机推荐
- hdu5876 Sparse Graph(补图最短路 bfs)
			
题目链接:hdu5876 Sparse Graph 详见代码.. #include<cstdio> #include<cstring> #include<algorith ...
 - 最小生成树练习2(Kruskal)
			
两个BUG鸣翠柳,一行代码上西天... hdu4786 Fibonacci Tree(生成树)问能否用白边和黑边构成一棵生成树,并且白边数量是斐波那契数. 题解:分别优先加入白边和黑边,求出生成树能包 ...
 - java中将一个字符数组赋值给另一个,两者同时变化
			
java中将一个字符数组赋值给另一个,两者的变化怎么是同步的?怎么才能让他们独立开? 比如有一个int[][] a 已经存在值,现在定义int[][] b=a;之后改变a的值,为何b也跟着改变?怎么才 ...
 - struts2视频学习笔记 28(OGNL表达式)
			
课时28 OGNL表达式 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts 2框架使用OGNL作为默认的表达式语 ...
 - PHP超级全局变量——Session 变量
			
PHP session 变量用于存储有关用户会话的信息,或更改用户会话的设置.Session 变量保存的信息是单一用户的,并且可供应用程序中的所有页面使用. PHP Session 变量 当您运行一个 ...
 - BZOJ1218 [HNOI2003]激光炸弹
			
题目后面写着DP就当它是DP吧.. 本来是扫描线+线段树的说,但是捏5000^2还是能过滴,于是暴力枚举正方形+所谓的DP就解决了. /******************************** ...
 - 无需激活用户直接登入discuz
			
//打开discuz/api/uc.php //synlogin方法(180行)处,往下找到 if(($member = getuserbyuid($uid, 1))) { dsetcookie('a ...
 - sqlserver 2008 存储过程调用存储过程或方法
			
函数:拆分字符串,并返回一个table CREATE FUNCTION [dbo].[f_splitSTR](@s varchar(max), --待分拆的字符串@split varchar(10) ...
 - 关于职位的解释---转CSDN的文章
			
摘要我在IT职场打滚超过15年了,从小小的程序员做到常务副总.相对于其它行业,IT职场应该算比较光明的了,但也陷阱重重,本文说说我的亲身体会,希望大家能在IT职场上战无不胜! 通用法则 法则1:忍耐是 ...
 - HookIAT的启动程序
			
// 启动程序.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h> #include &l ...