记得去年 Cater 曾经在某群里说过要写六个手机平台的解密教程
只是 Cater 真的好忙 好辛苦的说
Symbian 是我06年久接触了,那个时候S60 2nd 版本的手机有碰过
感觉 ARM 的汇编指令也不是很难,也过了几个软件
时隔今日,塞班 S60 三版的(OS 9.x)的系统也总结总结些个教程
满足下 某人 总是威逼 小 Cater 的野兽般的欲望吧。

--------------------------------------------------------------------------------

Symbian S60 3rd 
 
Reverse CrAcKiNg Tutorial
 
By_CaterQiu
 

Mail: Cater.Qiu[At]Gmail.Com

MyBlog: Http://www.caterqiu.cn

 
May 1th,2009

--------------------------------------------------------------------------------

基础知识
Symbain OS

Symbian OS(中文译音“塞班系统”)由诺基亚、索尼爱立信、摩托罗拉、西门子等几家大型移动通讯设备商共同出资组建的一个合资公司,专门研发智能手机操作系统,现在已经被诺基亚收购。

Symbian OS硬件CPU采用的是ARM系列,使用的是ARM 32位指令而非THUMB。

EPCO

Symbian操作系统的前身是EPOC,"EPOC”这个词起源于世界将会进入“a new epoch of personal convenience”。EPOC是一个开放的操作系统,一开始的时候EPOC就加上了无线通信和一个外加应用程序的体系,因此在无线通信方面与其他操作系统相比具备先天的优势。

Symbian S60

Nokia S60 系列手机是市面上智能机里流行最广的手机。

Symbian Series 60 是Symbian S60 的全称

S60可以细化分为第一版、第二版、第三版、第四版、第五版

第一版和第二版差别不大,笼统概括为S60 2nd 、S60二版。(包含OS6、OS7、OS8 三个系列)

第三版第四版第五版核心是 OS9系列的,笼统概括为S60 3rd 、S60三版

2nd And 3rd

S60 3rd 和 S60 2nd从操作系统上看有很大的区别:

1、三版引入了权限签名这一安全机制,可通过对程序安装包进行签名授权。

2、S60 2nd是EPOC6,S60 3rd 是EPOC9,这也意味着其ELF (Executable and Linking Format)是可执行连接格式也发生了改变

在 S60 2nd 版本中,可执行体是 EPOC6 格式的 .APP 文件和 .DLL 文件

在 S60 3rd 版本中,可执行体是 EPOC9 格式的 .EXE 文件和 .DLL 文件

3、三版和二版的程序安装包,格式是不一样的,尽管都是.sis 结尾的文件 

EPOC9 格式的可执行文件是可以压缩的,三版签名后的安装包一般是.sisx

ARM CPU

ARM 公司是专门从事基于 RISC(reduced instruction set computer,精简指令集计算机) 微处理芯片制造的企业。设计出的产品性能高、成本低和能耗省的特点,适用于多种领域,例如嵌入式系统、DSP、和手机。

ARM处理器本身是32位设计,但也配备Thumb 16位指令集

--------------------------------------------------------------------------------


准备工作

IDA Pro 5.2

鬼斧神工逆向分析利器

下载地址:http://bbs.pediy.com/showthread.php?t=55801


IDS files for EPOC6 and EPOC9

Symbian EPOC格式标示符文件,配合IDA5.2使用,解压置IDA相关目录即可

下载地址:

http://arteam.biz.hr/downloads/Symbi...ro_by_argv.rar

 
WinHex

强大的磁盘编辑工具,也是非常棒的十六进制编辑器。


SisContents

S60 三版程序(Sis,Sisx) 打包、解包、签名工具。

http://symbiandev.cdtools.net


CeleASM

用于查看ARM OPCODE

宇宙杰出青年Yonsm(郭春杨) 之作 

主页:WWW.Yonsm.NET


Symbian_OS_9.x-ELF_Toolz

用于解压和压缩3rd  EXE和DLL工具

当然我不是宇宙杰出青年,博客还是有的

Blog: WwW.CaterQiu.Cn

 
RESEdit.exe

S60 三版程序RSC资源修改工具,主要用作汉化

 
这四款小工具我的博客有文件打包,详情参阅

http://WwW.CaterQiu.Cn/Article/Symbi..._CaterQiu.html


--------------------------------------------------------------------------------


实战操作
Example:DVDPlayer 1.26.SISx (http://www.viking.tm)


Setp 1:Unpack Sis/Sisx File


Use_SisContents_Unpack_S60_3rd_Target_Sis_File


Setp 2:UnComPress ELF File



Use_Symbian_OS_9.x_ELF_Toolz_UnComPress_Target_ELF_File

 
Compare File Size Between Original(BAK_dvdplayer.exe) And NoCompress(dvdplayer.exe),

You Have Found dvdplayer.exe Was Unpacked.


Setp 3:Analysis Program Flow

 

把脱壳后的程序拖入IDA中


勾上 堆栈指针和机器码字节数为8



Shift+F12设置下字符串类型,Unicode 要的



字符串窗口中 357062008960014

类似IMEI的串号,双击过来



继续向上回溯字符串被调用的地方



回溯到到sub_8A2C


注意:

MOV R12,SP

STMFD SP!,{R4,R5,R7,R11,R12,LR,PC}

这两句类似Win32程序汇编代码中

PUSH EBP

MOV EBP,ESP

ADD ESP,XXX

意味着什么呢?意味着这个是子功能函数的函数入口



既然这个已经是子函数的入口了

我大致猜测刚才显示的那个串号是作者自己用来做的手机串号

我估计写入这个串号是为了检测

当串号为 357062008960014

就不需要启动软件注册功能

暂时这么猜测吧

按下X按键看看有哪些地方调用

还好只有一处



返回到这里

分析代码详细过程我就不在这里细说了

Loc _8280 这里与解密有关的部分,我们进入分析



进来后,再进入 sub_9114 分析看看

 


很显然 sub_9114 也是一个子函数


这里这号是图形化的,看看整个分支流程

 

CompareF 比较函数

再猜测下咯

刚才是作者手机串号的代码

这里的比较

很大何能是判断是不是作者的手机

R0寄存器和8x86 EAX寄存器一样常用语函数返回值

没查SDK了,和Windows比较函数一样

一般返回0 说明两参数比较相等

 
ATTACH]25409[/ATTACH]
加个注解解释下吧

LDR          R0, [R6,#0x98]    ;     相当于    MOV R0,[R6+0x98]

MOV     R1, R10         ;      相当于    MOV R1,R10

BL         TDesC16::CompareF(TDesC16 const&) ;     相当于 Comparf(R0,R1)

CMP     R0, #0          ; R0为函数的返回值,为0,说明参数 R0和参数 R1 相等

MOVEQ    R8, #1          ; IF R0=0 Then R8=1

STREQ   R8, [R6,#0x90]     ; IF R0=0 Then Storage R8 To R6+0x90 Memory

BEQ     loc_922C        ; IF R0=0 Then Call Loc_922C Function

 

很明显要改变程序流程

需要patch下代码

修改

CMP R0,#0

变成

CMP R0,R0

可以一直作用下列的流程

自然而然

我们的补丁代码也就是这个了



Setp 4:Make ARM OPCODE


 

Use_CeleASM_Make_OPCODE

 

生成的OPCODE是

    5 00000004 e3500000         CMP R0,#0 

    6 00000008 e1500000         CMP R0,R0

 

看看 CMP R0,#0 的OPCODE和我们途中的 OPCODE是否相同

 



不难看出

5 00000004 e3500000         CMP R0,#0

是对应Little-Endianl数据存储类型的ARM CPU

也就是低位字节排在内存较低地址

 

Patch_OPCODE: 00 00 50 E1 (CMP   R0,R0)
Setp 5:Patch Data



先从IDA中查看需要修改代码对应的文件偏移

0x000012AC



原来的




修改后就这样了


最后存盘即可。


Setp 6:Compress ELF File

 

Use_Symbian_OS_9.x_ELF_Toolz_ComPress_Target_ELF_File


Setp 7:Pack S60 3rd File

1、把之前破解好,加压缩的dvdplayer.exe 复制一份到别处

2、删除之前解包出来的文件夹

D:\Symbian_Reverse_Toolz\Toolz\SisContents121\DVDPlayer 1.26

3、再次用SisContents打开原版的.sis文件,点击 Extract Files 图标

4、拷贝之前破解好,加压缩的dvdplayer.exe,复制到

D:\Symbian_Reverse_Toolz\Toolz\SisContents121\DVDPlayer 1.26\sys\bin

替换掉解包出来的

5、删除原来的签名:回到SisContents中, Tools->Delete Signatures

6、File->Save As->另存文件即可。

 
Setp 8:Run Patched .Sis File With Mobile

在手机上测试我们修改后的程序,破解成功。

 

说明那个串号是一个作者留下的小路吧,当然如果替换作者原来测试机的串号357062008960014 成自己的串号,那么程序也是一路绿灯通行的。


学习小结
ARM指令集需要掌握

遇到B当CALL指令用即可

BL是调用系统函数

Bxx是条件调用类似条件跳转Jxx指令

R0-R3可以用作参数传递

R0和Win32汇编中EAX作用一样常用语存放函数返回值

 

解密思路和Windows上的解密思路是一样的

可以通过字符串来定位关键代码,

也可以通过相关API找关键代码

 

Symbian解密注意事项

       解包后记得先解压EXE或者DLL文件

修改后的EXE、DLL程序不可以直接替换到手机中使用,需要做成安装包

       打包前一定要给EXE、DLL压缩下

       打包时要注意签名,最好先删除所有的签名



http://WwW.CaterQiu.Cn/Article/Symbi..._CaterQiu.html

 

Symbian S60 3rd Reverse CrAcKiNg_Tutorial

 

By CaterQiu

Blog www.caterqiu.cn

Mail Cater.Qiu@Gmail.com

2009-5-1


--------------------------------------------------------------------------------

文中提到的附件我已打包
Symbian_Reverse_Toolz.rar  [附件请到原帖下载:http://bbs.pediy.com/showthread.php?t=87583 ]
相关资料.rar

 实话的说,本来教程想拿英文写的,顺带练习练习的

只是越写越困 越不通顺~所以后面 就用中文混淆一下吧~

顺带说下,明天是某人生日,某人很寂寞,先睡觉了。


感谢:水水、老k、RoBinhood、我的群主