如何直接从手机内存中获取CellID?
来源:互联网 发布:上网管理行为软件 编辑:程序博客网 时间:2024/05/17 09:34
前几天在研究通过RIL_GetCellTowerInfo的API获取CellID的问题,当时发现了一些机型没法直接通过这个API来获取CellID的问题,在网上查了一些资料如何使用C#在Windows mobile裝置上擷取CellID说可以直接从内存直接读取这些信息,我这两天验证了一把,这里给大家share一下,这个方法的缺点就是我们每个机型都要一个个分析,但是可行:)!
首先我们需要下载一个开源的工具包,主要是把机器当时的内存信息给导出来,然后通过WinHEX工具分析导出来的内存信息,找到MCC,因为国内的MCC是460,各个国家的MCC可以网上查到。
我的环境:
VS2008 + WM6 SDK + P800(多普达真机) + C#/C++
首先需要说明的一点需要得到该信息需要对程序进行签名,要不然直接会出现访问异常:),刚开始写了C#版本的一直报异常,最后加上签名就OK了!
首先我们先分析:
下载到工具后进入CMD到解压的目录,看一下内存的map:
我们可以看到v代表虚的,p代表映射的物理内存,最后一列代表地址区间的大小,我们可以用最笨的办法一块一块dump出来,我首次选择0x8a000000这一块,结果一步找到:)
接下来我们就开始分析我们dump出来的0x8a0.bin文件,同过WinHEX打开它:
我们找需要有根据,国内的MCC是460,那么我们找16进制的04 06 00 03,最有的03代表长度,我感觉是字符串类型的写入:)
我们可以找到第一个04060003的位置,然后分析后面的数据:
我们可以看到后面又连续着120位这样的信息,ok,位置找到了,那么我们就可以开始code了,记录下这个地址:0x003b2958,那么我们在程序中要找的地址就是0x8a000000+0x003b2958=???????
代码很简单,我下面给出我的C++代码:
-------------------------------------------------------------------
// 内存Cell的结构
struct MEMCellStruct
{
byte MCC[3];
byte MCCLength[1];
byte MNC[2];
byte UnKnow1[2];
byte LAC[2];
byte UnKnow2[4];
byte CID[2];
byte UnKnow3[104];
//total=120
};
struct CellStruct
{
CString MCC;
CString MNC;
CString LAC;
CString CID;
UINT Strength;
};
BOOL bPerMode = SetKMode(TRUE);
DWORD dPermissions = SetProcPermissions(0xFFFFFFFF);
UINT MemLoation = 0x8a3b2958;
MEMCellStruct* Mem = NULL;
MEMCellStruct MEMCellTower;
UINT CPermissions;
CellStruct CellTower[7];
CRITICAL_SECTION CriticalSection;
// Initialize the critical section one time only.
/*if (!InitializeCriticalSectionAndSpinCount(&CriticalSection, MemLoation) )
return;*/
InitializeCriticalSection(&CriticalSection);
EnterCriticalSection(&CriticalSection);
int i = 0;
while (i < 7)
{
//读内存
Mem = (MEMCellStruct*)MemLoation;
MEMCellTower = *Mem;
short *pCID = (short*)(MEMCellTower.CID);
CString strTmp =_T("");
strTmp.Format(_T("%d"),*pCID);
CellTower[i].CID = strTmp;
short *pLAC = (short*)(MEMCellTower.LAC);
strTmp.Format(_T("%d"),*pLAC);
CellTower[i].LAC = strTmp;
strTmp.Format(_T("%d%d%d"),MEMCellTower.MCC[0],MEMCellTower.MCC[1],MEMCellTower.MCC[2]);
CellTower[i].MCC = strTmp;
strTmp.Format(_T("%d%d"), MEMCellTower.MNC[0],MEMCellTower.MNC[1]);
CellTower[i].MNC = strTmp;
//CellTower[i].Strength = Mem->Strength[0];
MemLoation = MemLoation + 0x78;
i++;
}
// Release ownership of the critical section.
LeaveCriticalSection(&CriticalSection);
// Release resources used by the critical section object.
DeleteCriticalSection(&CriticalSection);
SetProcPermissions(dPermissions);
SetKMode(bPerMode);
代码比较乱,编译过了,没有问题,数据也得到了,不过和网上文章有些不一样的地方,感觉他前面的信息有些多余:),或者不正确。
至于程序怎么签名,我这里就不多少了,直接放在你的手机里测试一下:),这里说明一点,很多手机的内存结构可能不一样,每款都需要你自己分析,需要有耐心:),兴奋吧!我们也hacking!!!
转载注明出处,谢谢!
wangweixing2000 2009-06-22
- 如何直接从手机内存中获取CellID?
- 获取cellID
- 如何从内存中获取图片
- 如何从函数中获取动态内存
- 为什么我的CDMA手机获取不了CellID?
- Android - 如何获取手机内存
- WM5.0下如何获取基站信息(LAC、Cellid)
- Windows Mobile如何获取基站信息(LAC,CellID)
- Cellid LAC(获取)监听
- 直接从内存中读取osg节点
- LAC+CELLID定位手机位置
- 如何从手机里面获取通讯录
- 通过j2me获取手机imei号码和cellid(基站号)
- 探讨:通过j2me获取手机imei号码和cellid(基站号)
- [转载]通过j2me获取手机imei号码和cellid(基站号)
- 从手机内存rom中读取数据
- 如何从电脑直接控制安卓手机 监控安卓手机 安卓手机如何控制安卓手机
- ffmpeg 如何探测网络流格式/如何从内存中获取数据
- 初来csdn,大家多多关照哈
- 怎样能提高网站的收录
- sql server常用函数
- 走过用友软件技术支持的第一个月
- 提取FCK编辑器中上传的图片地址
- 如何直接从手机内存中获取CellID?
- 隐藏/恢复远程选项卡(找回丢失的远程选项卡)
- 网页中播放音乐的实现方法代码
- mrtg安装过程中遇到问题的整理
- (转贴)一套.net窗体身份验证方案(解决了防止用户重复登陆,session超时等问题)
- Ubuntu上编译Android过程
- 使用Winpcap示例程序的时候,会出现很多错误。
- Linux下patch的制作和应用(转)
- 转:互联网周刊:手机搜索72变