Archive for the ‘ P768 ’ Category

CatFileForP768-联想P768刷机包修改程序-教程

很久以前在论坛,在群里都有人想修改小p的手机内存里面的文件

image

也就是这些文件

现在就叫大家怎样修改他们,我已修改开机铃声为例:

首先我们要找到开机mid的位置

image

看到文件lenovoPowerOff.mid了吗?

他就是我们的目标,

你可以选中它将他导出来看看:

image 

现在准备一个合适的,自己喜欢的mid铃声替换掉它吧~~

先选择这个lenovoPowerOff.mid,然后选择替换文件,在弹出的对话框中选择你心仪的mid文件,

然后会提示你替换成功!

现在你可以继续替换其他文件,比如替换图片等文件。

当你选择图片资源时候会有预览窗口:

image

替换完成之后就要导出我们自己DIY的cat文件了

选择导出结果,选择不同的文件名,于是你的新cat文件就出来了,

接着将刷机包中的文件替换成现在的cat文件,记得要保持相同的文件名ffspreload.img.cat

然后开始刷机吧~~

请放心刷机,因为资源包就算刷机失败依然可以再次重刷的,请大家在确认好文件的功能过后再替换,不要未知位置文件。

 

本人已经成功修改开关机铃声,祝您成功

 

附上工具下载地址:http://www.fly7.cn/?p=32001

P768刷机包修改工具发布

前段时间研究小p的刷机包,终于将它的修改工具修出来了:

庆祝下吧~~

本程序用于修改联想P768的P768_S047_070612刷机包中的ffsffspreload.img.cat文件,其他版本的刷机包也是可以修改的。
本程序严禁用于商业目的,如有需要请联系p768@fly7.cn,或者访问www.fly7.cn。

如果有兴趣修改这个工具可以到www.fly7.cn联系我。

最后希望大家能把使用情况反馈给我,并且DIY跟多个性化的刷机包。

我会在未来继续提供修改手机程序文件genesis.img的工具,希望大家能够支持,有空到我的Blog:www.fly7.cn看看,点点
广告,让我们继续发挥小P的余热!
                                                                                    2009.9.24
                                                                                        神猫

http://cid-c02be930ae8e85a2.skydrive.live.com/self.aspx/.Public/CatFileForP768.rar

联想P768刷机包修改,完整版的主题替换(2)

上面一篇文章介绍了P768的ffspreload.img.cat文件的数据结构,基本上我们就可以开始对他动刀子了!

上一篇文章:http://www.fly7.cn/?p=28028

工具:winhex

打开手机的flash(用暗码790),看了看关于主题的那个文件夹flash/res/,以前多个图片文件,大家可以看看我提取后的文件:

image

image

如果我们从手机上复制到卡上那是多么好大的工程啊,没办法了硬着头皮从刷机包中提取吧,我的想法是去找点工具来提取,可是花了很久没有找到合适的工具,唉,自己写一个有不太熟悉,最后决定用winhex的脚本来提取。

关于winhex的脚本大家可以参看http://www.fly7.cn/?p=27063

最后经过半天的酝酿:终于把这个脚本写出来了,大家看看,写得很简陋

open "F:ffspreload.img.cat"
goto 0         //由于这个脚本在运行的时候会遇到cat文件中的关于文件夹的定义,上文已经说过文件夹定义的数据格式,由于简单起见我就没有对文件夹进行处理,当脚本运行到文件夹的地方就会报错,这样我们只要记录下这个位置,再次运行这个脚本叫可以跳过文件夹继续解压文件。初始时候goto到0.
Label ContinueHere
Find 0x2f666c6173682f Down   //向下查找“/flash/”这个字符串
IfFound
    move 6
    Assign fname1_s CurrentPos
    block1 CurrentPos
    Find 0×00000001 Down
    Assign fcont1_s CurrentPos
    IfFound
        move -1
        Assign fname2_s CurrentPos
        Block2 CurrentPos
        move 1
        Insert 0x000a
        //存储位置,用于删除
        Assign t_s CurrentPos
        //获取文件名
        goto fname1_s
        move 1
        ReplaceAll "/" "" BlockOnly
        ReadLn fname
        //返回,准备删除换行
        goto t_s
        move -2
        block1 CurrentPos
        move 1
        block2 CurrentPos
        Remove
        //删除结束
        //MessageBox fname
    EndIf
    //获取文件大小
    goto fcont1_s
    move 5
    Read fsize1 1
    Read fsize2 1
    Read fsize3 1
    Read fsize4 1
    Assign fsize (256*256*256*fsize1+256*256*fsize2+256*fsize3+fsize4)
    //MessageBox fsize
    block1 (fcont1_s+9)
    block2 (fcont1_s+8+fsize)
    //写入文件
    CopyIntoNewFile fname
    JumpTo ContinueHere

EndIf

 

关于脚本的介绍就到这里了,应为这个不是主要的问题了,毕竟文件我已经全部提取出来了,我们需要做的只是替换相应文件来达到修改刷机资源包的目的。

需要下在资源包也可以到这里下载:

http://cid-c02be930ae8e85a2.skydrive.live.com/browse.aspx/.Public?uc=2&isFromRichUpload=1

winhex脚本命令教程-官方翻译

为了从刷机包中把文件提取出来,找到的winhex脚本资料。

关于用法很多地方没有提及,脚本直接放在winhex目录下

image

用记事本打开whs文件,或者新建txt文件,把后缀改为whs就可以开始编辑了。

调用脚本的方法是打开winhex后按回车,出现如下界面:

image

看到我写的脚本catout了吧,双击它就可以执行你的脚本了,好,现在请看下面的关于脚本的说明,你也可以在winhex的帮助文档找到英文原版的。

winhex脚本命令教程–中文版 脚本命令适用的环境比较多。脚本文件中的注释以为双斜杠开头。脚本支持的最长255字符的参数。有疑点的地方是十六进制,文
本字符串(甚至10进制数值)都可以作为参数,你可以使用引号强制转换数字参数为文本参数。如果文本或者变量名中存在空格,
则引号是必须的,在引号中的所有字符都被被识别成一个参数而存在。
当在winhex中使用数学表达式的时候,可以引用数学表达式,但是必须用括号括起来。在数学表达式中不能有空格。同样可以在数
学表达式中应用数字变量。支持的操作有,加法(+),减法(-),乘法(*),整除(/),模除(%),逻辑运算符AND(&),
OR(|),以及XOR(^)。以下是有效的数学表达式:(5*2+1), (MyVar1/(MyVar2+4)), or (-MyVar)。
以下是目前支持的脚本命令的详细描述以及使用实例。
Create "D:My File.txt" 1000
创建一个1000字节的新文件,如果已经存在同名文件,则将其覆盖。
Open "D:My File.txt"
Open "D:*.txt"
打开指定格式的文件,如果通配符为“?”则winhex会让用户选择要打开的文件。
Open C:
Open D:
打开指定的逻辑驱动器。如果通配符为“:?”则winhex会让用户选择要打开的逻辑驱动器或者磁盘。
Open 80h
Open 81h
Open 9Eh
打开指定的物理介质。软盘的为00h,硬盘与u盘为80h,光盘为9Eh。
可以增加第二个参数来设定文件或者介质的编辑模式(“in-place”或者“read-only”)
CreateBackup
为活动文件的当前状态创建WHX备份。
CreateBackupEx 0 100000 650 true "F:My backup.whx"
备份当前活动磁盘中从0扇区到100000扇区的数据。备份文件将自动分割成650M大小。并且选择了压缩选项。输出文件的路径以及
名称作为最后的参数写入。
如果备份文件不需要分割,则第三个参数的数值该为0即可。如果不启动压缩功能则将“true”改为“false”。如果需要自动分配
文件名以及文件路径则最后的参数表示为“""”即可。
Goto 0×128
Goto MyVariable
将光标的位置移动到偏移量0×128位置(16进制表示)。同样也可以用数字变量(最长8字节)来定义光标移动的位置。
Move -100
将当前光标的位置向后移动100字节(16进制)。
Write "Test"
Write 0x0D0A
Write MyVariable
在光标当前位置(以覆盖模式)写入ASCII字符“Test”或者两个字节的16进制数“0D0A”。这里同样可以写入数字变量中的值。
同时将光标移动到被覆盖部分的后面。当到达文件的结尾时,将在文件尾部添加空字节以完成操作。下一个写命令将不会在文件尾

Write2
和“Write”的功能类似,当时当到达文件结尾的时候,不会在文件添加空字节。So it is
not safe to assume that Write2 always moves the current position forward by the number of bytes
written.
Insert "Test"
功能与“Write”类似,但是在“insert”模式只能应用于文件。
Read MyVariable 10
从当前位置读入10个字节的数据到“MyVariable”变量中。如果变量不存在,它将会创建一个。winhex同时可以支持48个不同的变
量。另一个创建变量的命令是“Assign”。
ReadLn MyVariable
从当前位置读入一整行的数据到“MyVariable”变量中直到遇到换行符。如果变量已经存在了,则变量的大小将会被从新调整。
Close
不保存的关闭当前活动窗口。
CloseAll
不保存的关闭所有窗口。
Save
保存当前活动窗口中打开的文件或磁盘的修改。
SaveAs "C:New Name.txt"
将当前活动窗口打开的文件另存为指定目录下的文件。如果通配符为“?”,则winhex会让用户自己选择保存的路径以及文件名。
SaveAll
保存所有窗口中修改。
Terminate
中断脚本的执行。
Exit
中断脚本的执行并且关闭winhex。
ExitIfNoFilesOpen
如果在winhex中没有打开的文件将终止脚本文件的执行。
Block 100 200
Block "My Variable 1" "My Variable 2"
在当前活动窗口中定义一个偏移量从100到200的选块(10进制)。下一行命令表示定义从变量"My Variable 1"到"My Variable 2"
的选块(最长8字节)
Block1 0×100
在偏移量0×100处定义一个字节的选块。同样可以使用变量。
Block2 0×200
定义一个从开头到偏移量0×200部分的选块。同样可以使用变量。
Copy
将当前选块复制进剪切板中。如果没有定义选块,其功能和编辑菜单中的复制命令相同。
Cut
将当前选块中的文件剪切到剪切板中。
Remove
将当前选块中的数据从文件中移除。
CopyIntoNewFile "D:New File.dat"
CopyIntoNewFile "D:File +MyVariable+.dat"
将当前选块中的数据复制进指定的新文件,而不复制进剪切板。如果没有定义选块,其功能和编辑菜单中的复制命令相同。同样可
以复制磁盘扇区中的数据作为一个新文件。新建的文件不会自动在winhex的编辑窗口中打开。可以在“+”之间加入变量,变量名
将被解释为不大于2^24(16M)的整数。通常在循环应用以及文件恢复中比较有用。
Paste
将剪切板中的数据粘贴入文件中,并且不改变光标当前位置。
WriteClipboard
将剪切板中的数据写入文件或磁盘扇的当前位置中,不改变光标当前位置,并且覆盖从当前光标所在位置以后的数据。
Convert Param1 Param2
将当前活动文件中的数据从一种格式转换成另一种格式。有效的参数是ANSI,IBM,EBCDIC,Binary,HexASCII,IntelHex,
MotorolaS, Base64, UUCode, LowerCase, 以及UpperCase,与转换菜单中的转换菜单命令功能相同。
AESEncrypt "My Password"
使用AES加密当前活动文件或者磁盘,或其选块,使用指定的密钥(最高32位)。
AESDecrypt "My Password"
解密当前活动文件或磁盘。
Find "John" [MatchCase MatchWord Down Up BlockOnly SaveAllPos Unicode Wildcards]
Find 0×1234 [Down Up BlockOnly SaveAllPos Wildcards]
分别搜索当前活动窗口中名为“john”的字符串或16进制值数0×1234,并且在第一个搜索到的地方停下来。其他的参数是可选的。
默认的winhex搜索整个文件或磁盘。其他的可选参数功能和通常的winhex搜索选项相同。
ReplaceAll "Jon" "Don" [MatchCase MatchWord Down Up BlockOnly Unicode Wildcards]
ReplaceAll 0x0A 0x0D0A [Down Up BlockOnly Wildcards]
在当前活动窗口中使用其他的值替换所有存在上述字符串或16进制数值的地方。在“in-place”模式下只能应用与磁盘。

IfFound
如果发现了值则执行下面的命令。
IfEqual MyVariable "Hello World"
IfEqual 0×12345678 MyVariable
IfEqual MyVariable 1000
IfEqual MyVariable MyOtherVariable
IfEqual MyVariable (10*MyOtherVariable)
比较两个整数值(其中每个值可以是常量,整数变量或者数学表达式)或者两个变量,ASCII字符串,或16进制数值(2进制模式)
。比较两个对象的2进制数值长度,如果不相同的话则返回结果为false。只有返回值为true时,下面的命令才会被执行。if条件不
可以镶套使用。
IfGreater MyVariable "Hello World"
IfGreater 0×12345678 MyVariable
IfGreater MyVariable 1000
IfGreater MyVariable MyOtherVariable
IfGreater MyVariable (10*MyOtherVariable)
和IfEqual拥有相同的参数。第一个参数大于第二个参数,返回值为true,则下面的命令才能被执行。if条件不可以镶套使用。
Else
应用在IfFound或IfEqual之后。如果没有任何对象被搜索到或者比较的目标不相同,则执行else后面的代码。
EndIf
结束if条件命令执行(在IfFound或IfEqual之后)。
{…
ExitLoop
…}
退出循环。其后会有一个方括号来定义其循环次数,可以是变量也可以是关键字“unlimited”(无限循环)。winhex脚本中循环
只能使用ExitLoop命令来退出。循环不可以镶套使用。
举例:
{ Write "Loop" }[10] 将输出“Loop”字符串10次。
Label ContinueHere
创建一个标签并命名为“ContinueHere”
JumpTo ContinueHere
脚本跳转到标签处继续执行.
NextObj
循环在所有窗口中进行切换“活动”窗口。如果有三个窗口被打开,并且窗口#3状态为活动窗口,则“NextObj”命令将会让窗口
#1变为活动窗口。
ForAllObjDo
在ForAllObjDo与EndDo之间的脚本代码将在所有打开的文件或者磁盘中执行。
CopyFile C:A.dat D:B.dat
将C:A.dat文件中的内容复制到D:B.dat中。
MoveFile C:A.dat D:B.dat
将C:A.dat文件转移到D盘中并命名为D:B.dat。
DeleteFile C:A.dat
将C:A.dat文件删除。
InitFreeSpace
InitSlackSpace
使用当前初始化设置清理当前逻辑驱动器中的所有自由空间或松散空间,InitSlackSpace将驱动器的模式临时转换为“in-place”
模式,以保存未保存的修改。
InitMFTRecords
使用当前初始化设置在当前NTFS格式的逻辑驱动器中清理未使用的MFT FILE记录。对于其他的文件系统无效。修改立即就会写入硬
盘中。
Assign MyVariable 12345
Assign MyVariable 0x0D0A
Assign MyVariable "I like WinHex"
Assign MyVariable MyOtherVariable
将整数,二进制数值,ASCII文本,或其他变量内容保存到“MyVariable”变量中。如果这个变量不存在,将会被自动创建。其他
的创建变量的方法:Read,GetUserInput,InttoStr。同时可以允许有48个变量存在。
Release MyVariable
删除一个已存在的变量,因为winhex脚本中只支持48个变量存在,所以用过的不再使用变量我们可以将其删除以释放变量空间。
GetUserInput MyVariable "Please enter your name:"
在脚本运行期间,保存用户指定的ASCII文本或二进制数据(0x…)到变量“MyVariable”中。第二个参数给除了用户提示。如果
变量不存在,它将重新创建一个。其他创建变量的方式:Assign,Read。
GetUserInputI MyIntegerVariable "Please enter your age:"
与GetUserInput功能相同,但是只允许整数型变量。
Inc MyVariable
将变量解释为整数(不大于8位)并且每运行一次变量自动加1。在循环中有用。
Dec MyVariable
将变量解释为整数(不大于8位)并且每运行一次变量自动减1。在循环中有用。
IntToStr MyStr MyInt
IntToStr MyStr 12345
将第一个变量中的ASCII文本转换成整数并保存到第二个变量中。
StrToInt MyInt MyStr
将第一个变量中的整数转换成ASCII文本并保存到第二个变量中。
GetClusterAlloc MyStr
在逻辑卷中,找回哪个文件被储存在当前簇中的文本描述,然后将描述保存到指定的变量中。
GetClusterAllocEx IntVar
在逻辑卷中,找回一个整数值指示簇是否被分配,1或者非0,表示该簇已被分配。并且将描述保存在指定变量中。
GetClusterSize IntVar
返回逻辑卷中簇的大小,并将数值保存到指定的变量中。
InterpretImageAsDisk
将磁盘镜像或证据文件作为原始物理磁盘或分区一样对待。需要specialist或forensic许可。
CalcHash HashType MyVariable
CalcHashEx HashType MyVariable
与工具菜单中的hash命令功能相同并且将变量储存在指定变量中(如果变量不存在,则会自动创建)。HashType参数必须为以下类
型中的一种:CS8, CS16, CS32, CS64, CRC16, CRC32, MD5, SHA-1, SHA-256, PSCHF。CalcHashEx命令将在windows窗口中显示
hash值。
MessageBox "Caution"
显示信息对话框,并且提供ok和cancel两个按钮。按下cancel按脚本本。
ExecuteScript "ScriptName"
在脚本的当前运行处运行另一个脚本。调用其他外部脚本可以镶套使用。当被调用的脚本执行完成以后,脚本继续执行下面的命令
。这个特征可以帮助用户清楚的了解脚本的结构。
Turbo On
Turbo Off
管理道模式开关。
Debug
用户可以利用该命令确定脚本中的每一条命令都是否有效。
UseLogFile
错误信息被写入当前文件夹下的日志文件“scripting.log”。这些信息不会显示在信息对话框中。非常有用,特别在运行的脚本
主机无法远程连接的时候。
CurrentPos
GetSize
unlimited
以上三个是winhex脚本中的关键字,可以被使用在应用数字参数的地方。在脚本执行过程中,CurrentPos表示当前活动文件或者磁
盘窗口中光标的偏移地址,GetSize表示了它的大小。unlimited实际上表示的是整数2,147,483,647。

联想P768刷机包修改,完整版的主题替换(1)

好了,标题写的那么的模棱两可,先介绍我的工作吧:

首先,经常捣鼓自己手机(小p)的同志们都知道她是没有自定义短信铃声,以及主题也是不可以完整更改的,总之,在朋友们的diy精神下还是发现了很多隐藏的功能!

再次由于小p是在当时是比较高级的芯片以及开发平台了,所以很多高手也来了,于是论坛都很热闹,

但是其实就我而说,她不是一个完整的产品,很多功能都没有弄完就发布出来了,也不知道联想的想法,呵呵.

大家现在还在用小p的话就继续听我唠叨下去吧.

 

 

对于为了让我们能够更好的diy,首先就是能够修改到flash中的文件(用790打开~~),我们想过很多办法,其中有:

1.通过暗码:这个应用做广泛的就是离线安装java (####9999# ####99**#)

2.通过网络:这个主要是在zol论坛的时候大家发现的关于小p可以下载主题文件(*.thm)的时候,当时还是让我兴奋不已,曾经写过主题的制作方法~~,但是遗憾的是仅仅能改变待机画面.

3.修改刷机包,然后再通过升级刷进手机,当时是想的修改genesis.img这个文件,它是手机的程序文件,想法是把一些重要文件的路径修改到卡上面,于是就可以通过卡来修改了,但是实验后发现开不了机,也许是手机自检不通过,要手机启动后才能识别卡。

4.最近又看到有人想制作驱动程序来映射手机为移动U盘,这个很高深~~我就没办法实践了。

5.这就是我现在要说的了,修改手机资源文件,然后刷!

资源文件是ffsffspreload.img.cat这个文件,用winhex打开可以看到文件:

image

看到的就是这些~我只简单说说他的数据结构:

1、看第二行@之前都是关于这个文件的描述,文件名及路径

2.@后面的四个字节:

image

这四个字节是文件大小,这个就是大家打开手机flash(790)后的看到的ebookhelp_en文件,它的大小是00000260,转换为十进制就是608字节。

3.这四个字节之后就是文件内容了,文件内容到哪个地方结束呢,当然就是文件开头+文件大小就可以计算出了,当然你也可以查找下一个"/flash/”来确定位置。关于winhex我就暂时不提了,应为用不了多少,现在只是介绍而已。

4.还有其他一些文件夹的定义

image

比如说这里,res文件夹会单独出现,这个我们可以忽略他就是了。

为了方便修改主题,再看看gif文件的样子:

Skin1_menu0401.gif

image

其中选中的就是文件开始的部分了,“GIF89a”

再看看结束部分

image

依然是选中部分

假设我们要替换这个图片那么我们需要的就是修改文件大小将00001454修改成我们要替换文件的大小(记得16进制),然后就是同样用winhex将目标文件替换掉源文件内容。

对于其他的文件,你也可以对它们进行删除,修改操作。好了今天就到这里吧,明天继续~~

下次将说说怎样替换文件,将这个cat包中的所有资源文件解压出来,以及我做好的修改版047的包。

顺便将修改后的刷机包放在这里:

http://cid-c02be930ae8e85a2.skydrive.live.com/browse.aspx/.Public?uc=2&isFromRichUpload=1

你面还有解压出来的资源文件,大家都可以下载下来看看。