Symbian S60 3rd Reverse CrAcKiNg Tutorial

作者:Cater.Qiu

得去年 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二版。(包含OS6OS7OS8 三个系列)

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

 

2nd And 3rd

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

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

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

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

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

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

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

 

ARM CPU

ARM 公司是专门从事基于 RISCreduced 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/Symbian_EPOC6_EPOC9_Unleashed_IDS_Files_for_IDA_Pro_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  EXEDLL工具

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

Blog WwW.CaterQiu.Cn

 

RESEdit.exe

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

 

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

WwW.CaterQiu.Cn/Article/Symbian_S60_3rd_Reverse_CrAcKiNg_Tutorial_By_CaterQiu.html

 



实战操作

ExampleDVDPlayer 1.26.SISx http://www.viking.tm

 

Setp 1Unpack Sis/Sisx File

Use_SisContents_Unpack_S60_3rd_Target_Sis_File


Setp 2UnComPress 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 3Analysis 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 EBPESP

ADD ESPXXX

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

 

 

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

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

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

当串号为 357062008960014

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

暂时这么猜测吧

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

还好只有一处

 

 

 

返回到这里

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

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

 

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

 

很显然 sub_9114 也是一个子函数

 

 

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

 

 

 

CompareF 比较函数

再猜测下咯

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

这里的比较

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

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

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

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

 

加个注解解释下吧

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+0×90 Memory

BEQ     loc_922C        ; IF R0=0 Then Call Loc_922C Function

 

很明显要改变程序流程

需要patch下代码

修改

CMP R0#0

变成

CMP R0R0

可以一直作用下列的流程

自然而然

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


Setp 4Make 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   R0R0)
Setp 5Patch Data

 

 

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

0x000012AC

 

 

原来的

 

 

修改后就这样了

 

最后存盘即可。


Setp 6Compress ELF File

 

Use_Symbian_OS_9.x_ELF_Toolz_ComPress_Target_ELF_File


Setp 7Pack S60 3rd File

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

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

D:Symbian_Reverse_ToolzToolzSisContents121DVDPlayer 1.26

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

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

D:Symbian_Reverse_ToolzToolzSisContents121DVDPlayer 1.26sysbin

替换掉解包出来的

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

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

 

 

 

Setp 8Run Patched .Sis File With Mobile

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

 

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


学习小结

ARM指令集需要掌握

遇到BCALL指令用即可

BL是调用系统函数

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

R0-R3可以用作参数传递

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

 

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

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

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

 

Symbian解密注意事项

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

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

       打包前一定要给EXEDLL压缩下

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

 

 

 

WwW.CaterQiu.Cn/Article/Symbian_S60_3rd_Reverse_CrAcKiNg_Tutorial_By_CaterQiu.html

 

 

 

Symbian S60 3rd Reverse CrAcKiNg_Tutorial

 

By CaterQiu

Blog www.caterqiu.cn

Mail Cater.Qiu@Gmail.com

2009-5-1


相关文件下载

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

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

顺带说下,明天是某人生日,某人很寂寞,先睡觉了。
大成,大成成就你一个家。

随机日志


    5 Responses to “Symbian S60 3rd Reverse CrAcKiNg Tutorial”

    1. gz1x 说:

      不错,看着很新颖。嵌入式平台的安全确实是个好方向。

      [回复]

    2. dge 说:

      文章写的很好,很漂亮

      [回复]

    3. lwjef 说:

      页面不是很流畅~
      好迟滞~~
      Cater以前是OPDA编程组的成员~~

      [回复]

    4. lwjef 说:

      郁闷来~~
      原来也是Cater的博客呀~~

      [回复]

      robinh00d 回复:

      @lwjef, 这是一个集体的BLOG呵呵

      [回复]

    Post a Comment