作者的话:
本文首发于我的好友kaka的博客“籽籽在发芽”<http://honeyhan.cn/>,虽然在大学时期就得闻看雪论坛盛名,但真正注册却是昨天的事。本文自发布后连续修订过3次共发布了4个版本,这是第4次修订即第5个版本,一直忙着没有发布,既然刚在看雪注册,就发在看雪吧,作为新人的一点知识分享。
从技术上来说,本文没有什么高深的地方;只是看到看雪自09年开辟了与手机有关系的板块,所以觉得此文也许还有点抛砖的价值;另外,本文假设的是读者对BlackBerry和CDMA甚至相关软件操作都不熟悉,因此描述得相对来说比较详细和仔细(因为很多手机用户需要用到该知识,希望任何一个普通用户都能按文操作达到目标),这也许是本文能够作为一个通俗教材的另一点小小的价值吧。
最后,关于本文任何的批评、建议,请朋友们随时联系我。
本文最早于2009年6月初发布,目前是v1.4版。

BlackBerry 9530 CDMA烧号过程分享(手工写入ESN/MEID)v1.4

Coolfrog <coolfrog#gmail.com>
KaKa <kaka.maillist#gmail.com>

因为本文的形成与kaka同志的贡献密不可分,因此,我们选择把文章首先发表在kaka的博客上,大家转载请注明出处,也请大家支持kaka的博客“籽籽在发芽”<http://honeyhan.cn/>,谢谢!

修订:
V1.4 2009/12/12 改进meid在重启后会自动恢复的处理方法,绝对稳定,可靠,可操作

V1.3 2009/6/23做一些小的调整(错别字、措辞等)

V1.2 2009/6/18制作发布版PDF

v1.1 2009/6/18 对方法进行改进,改进后的方法更加稳定,避免了原方法中的一些偶然因素,重点修改在第十三章。其他修改:
第七章,软件版本的说明;
第十章,增加准备工作中的网络设置;
第十一章,增加对软件版本的说明;
第十二章,对IMSI增加补充说明;
备注也进行了修改;
对内存地址也进行了标准化,都加上了0x标记。

一、  致谢
感谢kaka同志提供BB 9530供我随意折腾,10年来的hacking工作给了我们不断学习不断提高的机会;
感谢1007对于9530内存扫描问题的解答(ROM版本问题),并感谢1007对于我解决该问题思路的启发;
感谢Jacky和我的面对面沟通,让我更清晰地了解了很多技术问题。
在此本人把最近研究BlackBerry Storm 9530烧号的进展汇报一下,主要是手工写入ESN/MEID部分的技术攻关。
希望朋友们能够在此方法的基础上进行测试(注意不要弄坏你的BB,注意安全操作,宁愿多问,不要冒险),如果将来证明方法确实如我所认为的那样稳定可行,加之如果时间宽裕的话,也许会写个烧号程序供大家使用,因为这个过程还是有些繁琐的。

二、  背景
08年底,我开始使用189;不久后,kaka和另外一个兄弟各买了一台BlackBerry Storm 9530,于是他们决定也支持一下电信,考虑对9530进行CDMA烧号。
经过kaka在网上的大量查阅资料,并进行筛选,给了我工作的基础,依靠这些资料,我基本了解了CDMA烧号到底是啥意思。
随后的烧号尝试不断碰壁,首先是找人帮忙,可能由于该机器刚刚面市,国内外又没有多少人研究,所以在电信工作的朋友们尝试了很多种方法,都失败了(注:只考虑在手机上烧号,不考虑去电信后台更改配置)。
Kaka怒了,就去买了一个正版CDMA Workshop 3.3.5软件,结果发现这个软件也搞不定。
困难在哪里呢?就是ESN的问题无法将手机号对应的UIM卡ESN写入手机设备。
在网上查阅了无数的国内外资料,没有找到搞定9530的ESN的方法。其间,kaka经常会打电话给我,说在某论坛又看到某人搞定了9530写号问题,经过总结,我告诉kaka,理论上这些人都没搞定ESN,肯定都是在电信开后门把机身ESN写到电信设备上了,因为在全球范围内还真没找到这个问题的解决方法……于是,在经历了数轮打击之后,kaka同志很郁闷,并愤而在博客上发了一篇文章《作风一定要严谨》(http://honeyhan.cn/200903/05_767.html),当然他说的“作风”其实是指对待技术的态度,通过此文表达了对于那些研究技术、阐述问题不严谨的朋友们的强烈不忿。
后来大家工作也忙,就休息了相当长一段时间(2月下旬至5月底),没有继续研究这个东西。
2台9530在睡觉,其间kaka还丢了一台8300,不爽啊。
5月底,kaka的战斗热情再次燃起。某日与kaka夫妇、swan博士吃完陕北菜后,kaka把9530又翻出来了,再次交给我,让我继续研究。
其实我偷懒了好几天,直到大约6.1之后才开始折腾,这中间kaka打电话问进展,我就说没进展(本来就没进展嘛)……

三、  如何阅读本文
在写这篇文章的过程中,很多朋友在问相关的问题,如果要一一解答确实很累。其实要写一篇对大家真的有所帮助的文章还真难,因为不同的朋友技术基础不同,所需要的内容也不尽相同。有的朋友只需要操作步骤和截图,有的朋友会在过程中碰到问题,需要一些分析和解释说明,还有些朋友只关心关键几个节点的原理、手段或测试思路等,甚至有朋友会关心一些扩展或更深入的话题。
为了适应不同朋友对本文的不同要求,我把文章内容的不同针对性部分进行了标示:
操作步骤表示这一部分是对操作步骤的记录和指导;
原理知识表示这一部分是对技术原理的说明,属于知识方面的内容;
分析说明表示这一部分是对问题的分析、推导、测试碰壁的记录,以及思路的梳理等内容;
重要数据表示这一部分列出了重要的数据信息;
特别注意表示容易出错、容易忽视、需要特别注意的问题。
请大家在阅读时各取所需,跳过自己不需要的部分。
注意:请大家先通读本文,具备整体印象,并了解我的实际操作和总结方法之间的差异,同时对所有可能碰到的问题有一个概念,然后再实际去操作。
另外,我是在大量的尝试中最终烧号成功的,过程中可能有些运气的成分,本文是我事后的整理,虽然我尽力将我的理解、我的操作描述得更加详细,但本文可能仍然不够准确或难免有所遗漏,实际情况也未必跟你的机器完全一样,通常你还会碰到一些问题,需要独立思考或与大家探讨来解决,特别是对于计算机基本知识和BB手机本身不太熟悉的朋友,你碰到的问题一定会很多,记得要坚持!
同时,也希望大家将碰到的问题或总结的经验都记录下来,以便我们不断完善这个方法。

四、  工作基础
[分析说明]
年初虽然没有搞定烧号问题,但至少知道已经尝试过的方法是不行的。经过实验并确认无法完成写号的方法和相关重要结论如下:
1、  IMSI、A-Key的写入,在9530上不是问题,不需要专门研究,网上有很多兄弟都给出了方法,建议用工具软件写入A-Key,工具软件或手编输入IMSI,在本文就不浪费篇幅做具体详细描述(当然大家如果有疑问也可以提出);
2、  用CDMA Workshop 3.3.5无法直接对9530进行ESN修改操作(该软件的各种方式均不适合9530);
3、  用UniCDMA2005、CDMA Universal无法直接对9530进行ESN修改操作;
4、  用扫描内存(找出可读内存段)、导出内存镜像文件(.bin)、搜索ESN位置并改写的方法,在机器重启后,ESN会自动复原。

  • 标 题:答复
  • 作 者:coolfrog
  • 时 间:2010-03-18 22:56:18

五、  知识准备(CDMA烧号的基本概念)
根据网上查阅的资料和帖子,以及向各位热心朋友的请教解答,我们可以简单整理一下烧号所需要的知识点。
这里只列出本文所需的知识点,更多详细的知识请查看网上的其他整理帖,例如lingxw 兄弟的转帖《关于智能机中CDMA手机写号问题的汇总》(转载于 www.anranpda.com ),该帖URL请参见http://bbs.maxpda.com/thread-240701-1-1.html,或请大家去翻阅原文。
[原理知识]
假设:
我现在用的是中国电信189号码,三星CDMA手机(型号S259+)+UIM卡
现在希望用BB 9530的CDMA模式,9530是双模单待手机,是支持CDMA2000的3G手机,该机型GSM模式是机卡分离(需要插入SIM卡),CDMA模式是机卡一体(需要把号码写入到手机中);
所谓“烧号”,就是把号码写入到手机中,那么我们到底需要把哪些东西写到手机中呢?
其实,一共需要三个信息:
a)  IMSI:国际移动用户识别码(唯一标识),IMSI = MCC + MNC + MSIN,其中MCC是指移动台国家代码(3 位,中国460),MNC是指移动网代码(2位,中国电信03),MSIN是指移动用户识别号码(10 位),例如上海电信的189号段常见MSIN是6010******、6181******等。
b)  ESN(MEID):ESN是“电子序列号Electronic Serial Number”的缩写,是移动手机的身份识别符。ESN为32位,即8个十六进制数字标识,例如F5XXXXXX。
而Mobile Equipment IDentifier (MEID) 是全球唯一的56bit移动终端标识号。由于ESN号段是有限的资源,基本上耗尽,所以制定了56位的MEID号段,用来取代32位的ESN号段。MEID主要分配给CDMA制式的手机。
MEID的格式:
MEID由14个十六进制数字标识,第15位为校验位,不参与空中传输。
RR:范围A0-FF,由官方分配
XXXXXX:范围 000000-FFFFFF,由官方分配
ZZZZZZ:范围 000000-FFFFFF,厂商分配给每台终端的流水号
C/CD:0-F,校验码
例如我们手上的9530 MEID可能是:0xA000000D******
c)  A-Key:Akey也叫鉴权码,16位16进制的一组数字,是存储在MS(标准名称叫做移动站,简单点理解就当它是整部手机好了)中进行鉴权和加密的密钥,是分配给MS的64bit数据,并且仅对MS和相关的归属位置寄存器/鉴权中心(HLR/AC)是可知的。

每个手机出厂时都有一个ESN号,MIN号是运营商分配的,用以区别用户,一个手机能够正常服务,在交换上写号时必须输入ESN。这个ESN号和MIN号是一一对应的,在鉴权时使用,对于机卡一体手机,需要写号时只需提供手机中的ESN号给交换人员,他们会分配一个MIN号给你,在手机中写入即可。在用户鉴权时会用到手机中固有的ESN号,所以对于不同的机卡一体手机,由于ESN号不同,把获得的MIN值写入其它手机,手机可以识别网络,但无法通过鉴权,故无法通话(准确地说是在国内只能拨打10000号);对于机卡分离的手机,手机出厂时也有ESN号,但在写号时在UIM卡中另外写入一个ESN号,所以手机鉴权时不用手机中固有的ESN号,而是用UIM卡中人为写入的ESN号,这样UIM卡就可以做到放入任何一个C网手机中都可以打电话。
一个机卡合一的手机进入CDMA网工作,最初只需要三个数据:一是ESN码;二是IMSI码(机卡合一写在手机里面,机卡分离的ESN IMSI在卡里面);三是鉴权码,存储的位置和IMSI一样。

六、  整体流程
为了大家对整个烧号过程有更好的全局观,知道自己每一步需要做什么,特对整个过程大的步骤进行说明如下(注意本文讨论的是自己动手将UIM卡中的ESN写入手机的方式,如果您是通过其他途径将手机中的ESN写到电信设备上,则本文对您并无帮助):
1、  获得自己需要写入的号码的IMSI(MIN)、ESN/MEID、A-Key(若通过其他途径关闭A-Key则不需要);
2、  通过手编方式,将自己UIM卡的IMSI(MIN)、HOME SID(所属地标示,上海电信是13840)等基本信息写入手机,确保可以拨打中国电信10000号客服热线;
3、  通过软件,将A-Key写入手机;
4、  通过本文描述方法,将自己UIM卡的ESN写入手机并验证;
5、  测试通话并修改手机通话的相关设置,例如国家码(+86)等等;
6、  再次测试并验证,如未成功则返回一一检查,排除故障。

七、  准备工具软件和所需物品
BlackBerry Desktop Manager(即大家常说的DM,我用的是4.70 B059多国语言版,我们需要的其实是其中的设备管理器,即Device Managment)该软件用于把手机连接到电脑(驱动、端口)
CDMA Universal Unpacked(或UniCDMA 2005)读手机信息、扫描内存等;
QPST 2.7 build 323、QXDM 3.11.36QUALCOMM提供的强大工具,后面详细介绍
我还有CDMA Workshop 3.4.1正式版(kaka赞助的,多谢kaka),这个工具比较贵,不必强求,事实上,在本文的基础上,你只要用好QXDM即可,呵呵。当然,如果你能准备一下3.4.1demo版也很好,或者2.7破解版。
此外还需要Windows的计算器、UltraEdit(或其他的16进制编辑器)。
当然,还需要一根USB线(BB能用的就行,我用的是Nokia 6500c自带的USB线)。
最后,强烈建议,准备3张A4大小的白纸,准备好两支不用颜色的笔,在你操作的过程中,一定要尽量记录关键的内存地址、修改前后数值、你的疑问等等重要的内容!这一点真的很重要。
特别注意:如果你用的是Vista或Windows Server 2008,或者你安装了IE的最新版本,又使用的是QXDM 3.9.19版本,可能会碰到QXDM无法安装的问题(因为安装程序不能识别IE最新版本,所以会提示“需要IE 5以后的版本”,这个问题有解决方案,但受篇幅所限,不在本文中阐述,有困难的朋友可以联系我,等我有空也会另外写文章或工具提供给大家参考。)

  • 标 题:答复
  • 作 者:coolfrog
  • 时 间:2010-03-18 23:03:04

八、  准备工作1:获得UIM卡三码
首先,A-Key这个东西只能通过电信内部的人拿到,或者还有个办法,就是找人帮你关闭鉴权,这样就不需要A-Key了(不推荐);
其次,我们可以通过UIM卡获得IMSI(如前所述,其实我们需要的只是MSIN而已)和ESN;方法很多:
[操作步骤]
i)  把UIM卡插在我的三星CDMA手机(S259+)中,依次按“菜单、4、*”键,出现一个输入密码的界面“系统程序”[图1]:输入000000;这时会出现“Service Mode”,第一页显示的就是ESN(请看最后一行的8个16进制数)[图2];按“确定”可以看到第二个页面,就是MSIN[图3];继续按“确定”,直到手机重新启动[图4];你用其他手机也可以,只不过操作方式略有差异,请大家查阅网上资料;

ii)  还是用三星手机,插入UIM卡,开机,输入*759#813580,就可以进入测试模式,手机屏幕显示一个TEST NONE的界面[图5],这时候就可以输入测试指令了,例如“024”,就可以看到界面出现“Send ESN”字样[图6],这个时候慢慢按“*”键,就可以看到ESN了[图7];按4次*号键之后,你会发现024后面出现了一个“.”号[图7],表示这个指令结束了;如果你需要自己结束一条指令,开始下一条指令,也可以直接按“#”键;另外一个指令是“022”,按完之后也是用*翻页,就能看到MSIN了[图8]。
特别注意:这个手机通过此种方法看到的MSIN好像有点问题,大致是这样:
6181XX-XXX6181XX-XXX2A
说它有问题,一方面是它位数不符合我们所了解的知识,它一共有6+9+4个数字,再加一个字母,而我们需要的是10位数字;
另一方面,它的数字是有重复的,也就是我们可以猜测,它就是以6181开头的,不过第一次出现只有9位数字,第二次出现有10位数字,可惜的是第二次出现的10位,最后一位数字和前面一种方法看到的MSIN不一样,一个是0,一个是2,呵呵,不知道怎么回事。(我采用的是第一种方法看到的MSIN)
最后一条指令,002,手机会重启的。[图9]

(特别注意:三星有的CDMA机型指令是2位,不是3位,例如024,可能是24。)
iii)你还可以把UIM卡插在手机、CDMA上网卡等设备上,然后连接到电脑上,通过电脑上的工具软件去读取UIM卡信息(工具可以见后文);

特别注意:这个阶段,需要注意,ESN应该获取UIM卡的信息,不要搞错了,别拿到手机机身的ESN信息当作UIM卡信息。

九、  准备工作2:获得9530手机设备ESN/MEID
此外,在开始干活之前,还得记录下9530手机设备(机身)当前的ESN、MEID,因为你在工作中需要查找这些东西,并且修改它们,还要确认是否修改成功。先说一下方法:
[操作步骤]
1、拨号界面按##000000,拨号,就可以得到ESN,例如80YYYYYY
2、菜单,进Options,选Status,就能看到MEID,例如A000000DYYYYYY
当然,你也可以通过软件读取,并记录。

十、  准备工作梳理和信息确认:
我们了解了简单的基本知识
1)  准备好了UIM卡对应的三码:
a)  ESN:F5AABBCC
b)  IMSI:6181XXXXXX(MIN)
c)  A-Key:XXXXXXXXXXXXXXXX
2)  准备好了9530设备对应的ESN和MEID:
a)  ESN:80YYYYYY
b)  MEID:A000000DYYYYYY
3)  准备好了9530、USB线和自己的电脑,以及必备的工具软件;
4)  建议在手机中不要插入GSM网络的SIM卡,并且在开始时先将网络设置为1XEV。

  • 标 题:答复
  • 作 者:coolfrog
  • 时 间:2010-03-18 23:13:15

十一、  工具的安装和基本使用方法(扫盲)
有些朋友可能对这些软件工具还不会用,其实只要大家勤快点上网去搜索搜索就可以学会了,为了让大家更方便,这里也简单列一下每一种软件的最基本用法:
注意,以下部分图片所示的软件版本可能不是最新的,请根据你的具体情况参考,例如QPST,是2.7的老版本,不是build 323版本;例如QXDM,是3.9.19,不是3.11.36;CDMA Workshop是3.3.5,不是3.4.1,你最好使用尽量新的版本。(我现在就用的是最新版本,新改进的方法也是用的新版本反复验证的,当然,就本文描述的内容而言,这些不会影响结果,用新的版本,会在其他工作中带来帮助。)
特别说明:CDMA Workshop是收费软件,但并不是必须的,对于本文而言,不用这个软件也一样可以实现预期结果。
1、将9530连接至电脑
首先,我们需要把9530手机连接到电脑,这样就需要安装DM,然后用USB线将手机连接到电脑,然后打开DM的设备管理器:

可以看到,我们的9530已经连接成功了。
接下来要确认这个连接用的是哪个端口,“我的电脑”-右键-“属性”-“设备管理器”-“端口”,能看到两个RIM Virtual Serial Port v2:

在我机器上分别是COM8、COM9,通常我们要用的就是第二个(在我这里就是COM9),请把这个端口号记下来。
2、使用CDMA Workshop
如果你使用CDMA Workshop的话,可以在上述连接完成的基础上,打开这个软件:

如上图,你需要先选择Port(就是端口号,我这里是COM9);然后点击下面的“Connect”,如果连接成功,这个按钮会变成Disconnect。
为了测试是否连接成功,请点击旁边的“Read”,如果一切正常,你就可以看到左边的这些Phone Information(手机信息)了。
CDMA Workshop的Demo版有使用时间和功能的限制,但基本功能也够用了。
3、使用CDMA Universal
如果你没有CDMA Workshop正式版,又不喜欢Demo版,你也可以使用CDMA Universal或UniCDMA(其实一样的,不过UniCDMA 2005好像不支持COM8以上的端口,你需要手工修改COM端口号,这个我就不多说了)。
具体使用方法:

5、使用计算器
别不耐烦,你很可能还得用到计算器进行10进制、16进制的计算和转换。

6、使用QPST和QXDM
上述软件只要复制就可以使用,这两个软件都需要安装。
安装好了之后需要先打开QPST Configration:

点击“Add New Port”,添加你所要试用的COM端口。
然后打开PXDM,并从菜单“View”中选择“New”-“Common”,再选择“Command Output”和“Memory Viewer”两个窗口视图:

接着就可以看到如下界面:

本文中描述的方法只用到上述这两个视图:
在Memory Viewer中的“Address”输入框输入内存地址,下面的窗口中就会显示内存数据,如果你对内存进行了修改,需要点击旁边的“Write”按钮,使写入生效。
在主窗口下方的“Command”输入框中输入命令并回车,在Command Output窗口就能看到命令执行结果。

  • 标 题:答复
  • 作 者:coolfrog
  • 时 间:2010-03-18 23:17:47

十二、  将IMSI和A-Key写入手机(简述)
先简单说一下IMSI如何写进BB 9530,其实很简单。
在拨号界面,输入##000000,然后拨号,就出来手编界面,直接在IMSI_S那里写就行了(写10位阿拉伯数字的MIN:6181XXXXXX)。
当然你也可以用工具软件来写:



注意,你要填写MCC、MNC、MIN,这样才是完整的IMSI。
写好IMSI之后,在手编界面填写HOME SID(上海电信是13840)应该就可以拨打10000号了,试试看!如果拨打其他电话,会提示没有开通此功能之类的。
如果你现在希望将A-Key写入手机,建议用软件实现,这里也就不描述了,网上关于IMSI和A-Key的文章非常多:


  • 标 题:答复
  • 作 者:coolfrog
  • 时 间:2010-03-18 23:43:20

十三、  将ESN写入手机
接下去就是搞定ESN了,这个过程很痛苦,我2月份研究过,以完美的失败告终。最近几天是重新研究,尝试过很多方法,有些没意义的,就不写了,有些有意义的,我会记录下来,供大家参考。

[分析说明]
2月份研究过的方法包括:
1、通过CDMA Workshop 3.3.5直接写(有很多写的方式),全部失败;
2、经典的内存扫描+QXDM手写方式(此处只是分析,该方法的操作步骤见后文):
a)  通过CDMA Workshop(或CDMA Universal、或UniCDMA)扫描9530的可读内存;
b)  把可读内存段导出,存为.bin文件;
c)  用16进制编辑器在导出的.bin文件中搜索9530的ESN(按“字节反序”,即,如果你手上的9530的ESN是1A-2B-3C-4D的话,你要在文件中搜索4D-3C-2B-1A),找到之后把地址全部记下来,并且换算成真实地址(该方法的操作步骤后面详述);
d)  用QXDM,打开Memory Viewer,找到所有的上述ESN所在地址,把这些ESN全部清为00000000,或者改成自己UIM卡的ESN F5XXXXXX;
可是面临的问题是,一旦重启,ESN又会恢复成9530自己原先的ESN。

所以最近几天主要在研究这个ESN的问题。经过对年初写号失败的反思,我有如下思路:
[分析说明]
1)  年初写ESN失败,可能是存在一些未知问题;例如:我找到的可读内存地址段不准确,导致从内存中搜索到的ESN数量不够全面,有遗漏,所以即使把我找到的ESN全部改写了也无效?
2)  ESN是否存在硬件上或不可读取的系统文件内,9530的系统程序会从硬件上或系统文件中读取,所以我们无论如何修改内存都无效?
3)  我们修改内存,到底起到的是怎样的效果,拔掉电池之后我们写入的信息不会丢失吗?9530怎么才能将自己管理的ESN交给我们来修改呢?……

带着这些问题,最近几天,在google进行了一些关键字搜索,到国内外的网站上看了看帖子,了解到的新知识梳理如下:
[原理知识]
1、9530除了ESN之外,还有个MEID的东西(见上文的介绍),并且看起来好像9530是MEID控制硬件识别的(不好意思,之前一直不知道这么回事情,所以总是盯着ESN);
2、MEID和ESN有一定的对应关系(知道MEID可以推算出ESN,但反之不行);
3、9530中有一个SCM(可以翻译成状态类别码/状态类别标识、标记):
SCM (Station Class Mask)
If the Value is 0x2A then Phone is ESN Based
If the Value is 0x3A then Phone is MEID Based
这个大家都能看懂吧,不解释了。

[分析说明]
此时,再加上其他一些杂七杂八的信息,我在脑中仔细思考了一下摆在面前的困难,决定,坚决放弃原先只盯着ESN的思路,现在开始盯着ESN/MEID/SCM,我决定对这3个东西同时下手。

[A]ESN攻坚战预备阶段:
在ESN修改过程中,我们要做的第一阶段工作,就是扫描9530的可读内存段,并将这些可读内存导出来保存为.bin文件,然后在这些文件中找到MEID、ESN位置。
[操作步骤]
[A-1]扫描可读内存
2月份用CDMA Universal扫描内存、导出内存都很正常,最近却碰到了一些问题,不知道是不是因为我换了操作系统的缘故(当时是2003,现在是2008);所以我改用CDMA Workshop扫描内存(试用版也可以),大家可以根据各自情况选择CDMA Workshop、UniCDMA、CDMA Universal工具中的一个。
将9530连接到电脑,打开DM,再打看CDMA Workshop,选择COM端口(例如COM9),点“Connect”,如果连接成功,可以点击一下“Read”,看看读取9530信息是否正常,如果正常,则将CDMA Workshop切换到Memory一页进行内存扫描:

选择开始地址、结束地址以及步长,我选择的扫描步长是256字节,所以扫描速度很慢(一般用1024-4096),第一次扫描,从0000:0000开始,扫到3E24:1900时被我手工停掉了(没时间),扫描结果如下:
Scanning memory for readable areas:
Unreadable area from:  0000:0000
Readable area from:  01DF:2B00
Unreadable area from:  0268:5300
Readable area from:  17AE:B100
Unreadable area from:  17B2:6700
Readable area from:  17B2:8A00
Unreadable area from:  17FC:CB00
Process is stopped at:  3E24:1900
[特别注意]
上述扫描结果,我们需要从中挑出成对的“Readable”、“Unreadable”,例如第一对是:
Readable area from:  01DF:2B00
Unreadable area from:  0268:5300
表明从01DF:2B00到0268:5300这一段内存地址可读。
这是一个不严谨的说法,但是不影响我们的操作。如果要严谨地来说,应该是:
a)  从01DF:2B00开始的内存可读;
b)  也有可能在01DF:2B00之前某个地址的内存就已经可读,但不会提前到超过01DF:2A00(因为0x01DF2B00-0x100=0x01DF2A00,步长256就是0x100);
c)  我们所选择的这一段内存,也有可能中间会出现不可读的部分,因为我们是按照步长256字节进行跳跃式搜索的,不是一个字节一个字节地搜索的,可能不可读的部分被我们刚好跳过了,当然这种可能性很小,因为256字节在内存分配中是很小的数值了;
d)  直到0268:5300这个地址,内存开始不可读;
e)  也有可能在0268:5300这个地址之前,内存就已经不可读了,但不会提前到超过0268:5200(因为0x02685300-0x100=0x02685200,步长256就是0x100)。
f)  ……

是不是很罗嗦?呵呵,技术工作就是这么个东西,不能不严谨,有可能不严谨会侥幸没出问题,但是如果你的技术工作是关系到重要系统或重要事件,等你出问题了就太晚了,要养成严谨的习惯。
后来我有空的时候,又从3E24:1900开始扫描,到6724:F900结束,这一段没有扫到可读内存。再后来我就没继续扫下去了。
经过上述过程,我通过扫描得到的可读内存区间段如下:
[重要数据]
共三段(没有扫完,只扫了0000:0000到6724:F900的部分,因为我觉得后面的内存肯定没啥用)

第一段可读内存:
起始地址:01DF2B00
结束地址:02685300
总字节数:8988672 bytes(10进制)

第二段可读内存:
起始地址:17AEB100
结束地址:17B26700
总字节数:243200 bytes(10进制)
实际导出时在17B266E0处结束
实际字节数:243168 bytes(10进制)

第三段可读内存:
起始地址:17B28A00
结束地址:17FCCB00
总字节数:4866304 bytes(10进制)
(这一段我忘记是否全部导出了,反正不会相差太多,因为我的扫描步长是256字节,已经足够精确了。)

特别注意:关于扫描内存,我走过弯路,感谢maxpda论坛的1007给我解答,请大家务必注意新版本的ROM限制了内存扫描操作,请使用老版本ROM,否则你会发现无法进行。(我用的是9530AllLang_PBr4.7.0_rel140_PL4.0.0.125_A4.7.0.99)

[A-1]导出可读内存,存为.bin文件
大家可以根据各自情况选择CDMA Workshop、UniCDMA、CDMA Universal工具中的一个,将上述可读内存全部导出;我用的是CDMA Workshop 3.3.5。
[操作步骤]



[A-2]在内存镜像文件中搜索ESN、MEID
有了这3个.bin文件,我们就可以找ESN和MEID了;
[操作步骤]
打开UltraEdit,并依次用16进制编辑方式打开.bin文件,并在该文件中搜索16进制的内容(9530手机自身的MEID和ESN),注意,搜索的内容需要“按字节反序”,例如:
MEID是A0 00 00 0D F1 E2 D3
ESN是80 1A 2B 3C
则我们需要搜索的实际上分别是:
D3 E2 F1 0D 00 00 A0
3C 2B 1A 80
友情提醒:其实你可以搜索两、三个字节,即可。
如下图所示,我们在第一个.bin文件中,在0086ebdf-0086ebe6这个位置搜索到了第一个MEID:

由于第一个.bin文件实际上是从01DF2B00开始的,因此,我们找到的这个MEID实际上在内存中的位置是:0x01DF2B00 + 0x0086ebdf = 0x026616DF。
以此类推,你需要从所有的文件中找出所有的MEID和ESN。

下面是我找到的所有地址记录(我的9530用的是.99的ROM,你的可能跟我的不太一样):
[重要数据]
先说MEID,共3处(看绝对地址就行):
起始地址:0x01DF2B00
偏移地址:0x0086ebdf
绝对地址:0x026616DF

起始地址:0x17B28A00
偏移地址:0x0011dbb8
绝对地址:0x17C465B8

起始地址:0x17B28A00
偏移地址:0x0029fe10
绝对地址:0x17DC8810

还有两个地址,有时候会用来存放MEID:
0x17DC88E0
0x17DD1960
我觉得它们只是缓存,临时用的内存地址,不需要关注。
此外还有个特殊地址0x17FCB20D,请见ESN内存部分的描述。

接着说ESN,ESN比较不确定,我找到10余处,有些地址会永远都是ESN码,有些地址却有时候会变化。不多说,列在这里:
[重要数据]
0x02663F1C
0x02663F33(以上这两个地址非常重要,我们可以称它们为第一组ESN地址)
注:第一组ESN地址会发生变化,根据我最近操作过的所有记录来看,我一共发现过三组这样的ESN地址,其规律就是都在0x0266:0000至0x0266:FFFF这一段内存空间中。另外两组分别是0x02664042和0x02664059,以及0x0266405A和0x02664071。你也会有一组这样的ESN地址。
0x17AEB8A4
0x17B0FCDC
0x17B1C244
0x17B9F0B8
0x17C4613C
以上5个ESN地址也很重要,我们可以称它们为第二组ESN地址,目前我实验过N次,这些地址没有发生过变化。
下面还有几个地址,有时候会存放ESN,大部分时候是0,可以适当关注:
0x17C46214
0x17C4C8A0
0x17C5AC2C
还有一个特殊的地址:
0x17FCB20D
第一次研究的时候,发现该地址有时候是ESN,有时候是00000000;在本文刚写成的时候,在我修改esn成功的那一次,它还变成过MEID;在本文v1.1版本修订过程中,可以确定该地址为QXDM的command缓存地址,事实上可以不用关注。
这样,我们一共找到11处ESN,有些是会变的,大家记住这一点就行了,反正我们在操作过程中对这些地址进行多次检查,注意不要遗漏即可。

[B]正式开战
本部分包括如下操作:
1、用QXDM Memory Viewer改内存中的MEID,共3处,全部改为0;
2、用QXDM Memory Viewer改内存中的ESN,共7-10处左右(不一定每个都是必须,但为了保险,我全部改了);全部改为0;
[关键节点检查]
这个时候ESN和MEID在内存中均为0,此时应该出现一个现象,即,你可以使用命令修改ESN或MEID中的任意一个(我在这里列出关键节点,是为了让你方便检查错误,如果上述两个步骤没有成功,这个检查就会有重要帮助了;你不需要手工检查,直接做下面的第3步,如果出错,再回头检查上面的内容):
  可以用命令修改ESN为任意值,包括0;
  可以用命令修改MEID为一个非0值了(只有0x00000000000000不可以,其他都可以,如果你输入位数不足14位,它会自动在前面补0,如果你输入位数超过14位,系统会报错)这个仅仅是我自己感兴趣的测试,大家不需要测试,该动作不是必须的,而且,如果用命令修改了MEID,请注意ESN一定会随之发生变化;
3、接下来应该通过QXDM的命令把ESN修改为自己UIM卡的ESN,同时确保MEID为全0;
4、将网络设置为GSM,并尝试打开网络;
5、拔下USB线,然后冷启动(拔电池,再装上电池);
6、机器启动之后,检查GSM网络和信号标示状态,应该是SOS;
7、此时内存中的第一个MEID地址(0x026616DF)处应该已经恢复位MEID,用QXDM的Memory Viewer将其改为0;然后将网络改为1XEV,然后拨打10000号、拨打自己的其他手机,看是否正常;
8、如果正常就再次冷启动,就大功告成了。

下文详述:
[B-1]第一步,把9530内存中所有的MEID和ESN清0
得到上述重要数据(地址)之后,开始忙活,祭出法宝QXDM:
(要打开DM,并确认自己的9530连接电脑的端口是COM几,我的是COM9,然后用QPST Configuration配置一下端口,确认连接正常)
1、打开QXDM之后,先到Options-Communications里面设置连接的端口,然后打开两个窗口,一个Memory Viewer(F4),一个Command Output,并确认已经连接成功;



2、在QXDM主窗口的左下角,有个Command输入框,在这里输入命令,依次输入:
RequestNVItemRead meid(敲回车)
RequestNVItemRead esn(敲回车)
RequestNVItemRead scm(敲回车)
这样在Command Output窗口就可以看到返回的执行结果,如下:
RequestNVItemRead esn
DIAG TX item:
esn = 0x00000000
DIAG RX item:
esn = 0x80YYYYYY
RequestNVItemRead meid
DIAG TX item:
meid = 0x0000000000000000
DIAG RX item:
meid = 0x00A000000DYYYYYY
RequestNVItemRead scm
DIAG TX item:
scm = 0x00
DIAG RX item:
scm = 0x3A
不错,工作正常。
3、然后你可以试试看用RequestNVItemWrite命令改meid和esn,会很顺利地失败的:)

4、因为我在直接折腾ESN的时候,遭受过太多挫折,所以现在决定先灭掉MEID,具体方式如下:
在QXDM的Memory Viewer中,找到如下3个地址
绝对地址:0x026616DF
绝对地址:0x17C465B8
绝对地址:0x17DC8810
把它们统统改成00000000000000并点击“Write”;
然后再通过Command去Read一下,确认是否修改完成。
5、接着也别耽误了,用同样的方法找到所有的ESN,全部改为00000000
6、用Command确认一下:

嗯,很完美。
到目前,我们做了3件事情:
  SCM被改成了0x2A
  MEID被清为了0
  ESN被清为了0
[B-2]第二步,把9530内存中的ESN改为我们UIM卡上的ESN
7、现在试试看用Command去写ESN,写自己UIM卡上的ESN,发现没有报错:

8、继续通过Read的方式确认一下:

不错,经过反复确认,发现没什么问题(修正:不必关注上图中的scm值,按照改进后的方法,此时scm应该是0x3A)。
9、在手机上进入Manage Connections菜单,选择Mobile Network Options,然后将Network Technology设置为GSM/UMTS;然后再退到Manage Connections里面,勾上Mobile Network前面的勾,这时候手机屏幕右上角的信号标示应该是个叉号,或者是个SOS;
10、我们需要把机器重新启动一下。经过kaka推荐,我用的是冷启动,就是直接拔电池,然后启动。
11、等手机启动好了之后,先检查一下手机屏幕右上角的信号标示,应该是个SOS;
12、在QXDM中通过命令读一下scm、meid、esn的值,应该分别是0x2A、老的meid、自己UIM卡的esn;
13、如果你不放心,可以再次冷启动手机,并再次确认手机屏幕右上角的信号标示、scm、meid、esn;应该与11、12条一样;
14、在QXDM中输入命令RequestNVItemWrite meid_cd 1,并敲回车;然后通过QXDM的Memory Viewer,将meid修改为0,正常的话,应该只有0x026616DF这一个地址需要修改,另外两个meid地址处都是0,无需修改了;

15、在QXDM中输入命令RequestNVItemWrite meid_cd 0,并敲回车;在QXDM中通过命令读一下scm、meid、esn的值,应该分别是0x2A、0、自己UIM卡的esn;
16、在手机上进入Manage Connections菜单,选择Mobile Network Options,然后将Network Technology设置为1XEV;然后再退到Manage Connections里面,勾上Mobile Network前面的勾,这时候手机屏幕右上角的信号标示应该显示出网络信号正常;
17、请拨打10000号,如果正常,再拨打其他手机号码试试看,如果正常就重新冷启动手机;
18、如果一切顺利,现在你的手机已经可以正常使用电话功能了。
此外,你还可以进入手机菜单的Options-Status,确认一下状态:

你会看到两个重要变化:
  原先这个界面的最下面是MEID,现在变成pESN了!
  更重要的是,这里的ESN已经被改写成我们自己UIM的ESN啦!
但同时还会发现另外一个问题:
##000000进入手编界面,你看到的pESN是0

而Status里面看到的ESN是我们UIM卡上的ESN(上文图),这两个不一致(目前使用中没有影响)。
一切正常,恭喜你终于可以使用自己烧号的9530了!
不论上述测试过程对大家是否有所帮助,都希望大家多提意见,集思广益,互相帮助,谢谢!

备注:
1、  第一次发布的方法,大家在实际操作中最容易出现的一个问题,就是meid会自动还原,不能保持0的状态;
2、  因此,我仔细研究了这个问题,发现如下值得留意的信息:
A)  在MEID和ESN都是0的情况下,可以用命令修改MEID或ESN中的一个,不同的是如果修改MEID,ESN会自动随之变换成对应的值,如果修改ESN,MEID当时是0,而重启之后,MEID会变成上一个有效值;
我推测,9530会自动保存上一个有效值,那么它到底如何判断“有效”呢?
A)  要么是必须修改文件中的值;
B)  要么是必须用Write命令写成功;
C)  要么是它会根据上一次成功连接网络的情况自动保存一下MEID,下次启动时恢复;
D)  ……
所以我想,可能得先让9530“忘记”它的meid,因此,我通过设置GSM-1XEV网络来回切换的方式,最终修改了MEID,并让它记住了0这个值。最后的修改版本,更彻底,直接用修改meid_cd标记的方式使机器不再校验meid,从而达到我们的目的。
以上为推测,不知道RIM是如何设计它的保护措施的,因此,仅供参考。