不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
从sis文件中提取UID
编辑:dnawo 日期:2009-09-03
在sis打包过程中,经常出现将A.sis包含到B.sis一起打包的情况,这时需要知道A.sis的UID,否则B.sis无法包含A.sis,一个简单的方法是在SISWare中打开A.sis,便可看到UID:

仔细研究下sis文件格式,发现每个sis文件开头16个字节有如下规律:
00-03字节:UID1
04-07字节:UID2
08-11字节:UID3
12-15字节:UID Checksum

知道这点,要取出UID就不难了:
测试发现,S60二版sis的UID是UID1的值,S60三版、五版sis的UID是UID3的值(前4个字节固定为7A 1A 20 10)!
附:Symbian OS资源UID说明
Symbian OS资源的UID是由32位二进制数字构成,分三种类型:UID1、UID2和UID3:
UID1:确定文件是文档还是可执行码,应将它看作一个系统级的标志符,用于区分可执行文件、DLL等文件;
UID2:对于文档文件,UID2确定文档类型(应用程序数据文件或.aif文件);对于可执行代码文件,UID2确定可执行文件的类型(.app、.dll、.tsy);
UID3:是一个应用程序级的标志符,应用程序的UID3必须不同于其他所有应用程序。只有Symbian才可以发布这些值。通过电子邮件到Symbian获取,开发实验时,可以使用0x01000000~0x0FFFFFFF,但发布时不能再使用;
UID Checksum为校验总和,放在3个UID后边。

仔细研究下sis文件格式,发现每个sis文件开头16个字节有如下规律:
00-03字节:UID1
04-07字节:UID2
08-11字节:UID3
12-15字节:UID Checksum

知道这点,要取出UID就不难了:
复制内容到剪贴板
程序代码

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
byte[] b = new byte[16];//取出开始16字节
using (FileStream fs = new FileStream(@"C:\Documents and Settings\Administrator\桌面\QQ2008_S60V2_Build070_n70.sis", FileMode.Open))
{
fs.Read(b, 0, 16);
}
string uid1 = "";
for (int i = 3; i >= 0; i--)
uid1 += Hex(b[i]);
Console.WriteLine("UID1:{0}", uid1);
string uid2 = "";
for (int i = 7; i >= 4; i--)
uid2 += Hex(b[i]);
Console.WriteLine("UID2:{0}", uid2);
string uid3 = "";
for (int i = 11; i >= 8; i--)
uid3 += Hex(b[i]);
Console.WriteLine("UID3:{0}", uid3);
string uidchecksum = "";
for (int i = 15; i >= 12; i--)
uidchecksum += Hex(b[i]);
Console.WriteLine("UID Checksum:{0}", uidchecksum);
Console.ReadKey();
}
static string Hex(byte b)
{
string t = b.ToString("x").ToUpper();
if (t.Length == 1)
t = "0" + t;
return t;
}
}
}
using System.Collections;
using System.Collections.Generic;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
byte[] b = new byte[16];//取出开始16字节
using (FileStream fs = new FileStream(@"C:\Documents and Settings\Administrator\桌面\QQ2008_S60V2_Build070_n70.sis", FileMode.Open))
{
fs.Read(b, 0, 16);
}
string uid1 = "";
for (int i = 3; i >= 0; i--)
uid1 += Hex(b[i]);
Console.WriteLine("UID1:{0}", uid1);
string uid2 = "";
for (int i = 7; i >= 4; i--)
uid2 += Hex(b[i]);
Console.WriteLine("UID2:{0}", uid2);
string uid3 = "";
for (int i = 11; i >= 8; i--)
uid3 += Hex(b[i]);
Console.WriteLine("UID3:{0}", uid3);
string uidchecksum = "";
for (int i = 15; i >= 12; i--)
uidchecksum += Hex(b[i]);
Console.WriteLine("UID Checksum:{0}", uidchecksum);
Console.ReadKey();
}
static string Hex(byte b)
{
string t = b.ToString("x").ToUpper();
if (t.Length == 1)
t = "0" + t;
return t;
}
}
}
测试发现,S60二版sis的UID是UID1的值,S60三版、五版sis的UID是UID3的值(前4个字节固定为7A 1A 20 10)!
附:Symbian OS资源UID说明
Symbian OS资源的UID是由32位二进制数字构成,分三种类型:UID1、UID2和UID3:
UID1:确定文件是文档还是可执行码,应将它看作一个系统级的标志符,用于区分可执行文件、DLL等文件;
UID2:对于文档文件,UID2确定文档类型(应用程序数据文件或.aif文件);对于可执行代码文件,UID2确定可执行文件的类型(.app、.dll、.tsy);
UID3:是一个应用程序级的标志符,应用程序的UID3必须不同于其他所有应用程序。只有Symbian才可以发布这些值。通过电子邮件到Symbian获取,开发实验时,可以使用0x01000000~0x0FFFFFFF,但发布时不能再使用;
UID Checksum为校验总和,放在3个UID后边。
评论: 0 | 引用: 0 | 查看次数: 5609
发表评论
请登录后再发表评论!