基础知识SymbainOSSymbianOS(中文译音“塞班系统”)由诺基亚、索尼爱立信、摩托罗拉、西门子等几家大型移动通讯设备商共同出资组建的一个合资公司,专门研发智能手机操作系统,现在已经被诺基亚收购。SymbianOS硬件CPU采用的是ARM系列,使用的是ARM32位指令而非THUMB。EPCOSymbian操作系统的前身是EPOC,EPOC”这个词起源于世界将会进入“anewepochofpersonalconvenience”。EPOC是一个开放的操作系统,一开始的时候EPOC就加上了无线通信和一个外加应用程序的体系,因此在无线通信方面与其他操作系统相比具备先天的优势。SymbianS60NokiaS60系列手机是市面上智能机里流行最广的手机。SymbianSeries60是SymbianS60的全称S60可以细化分为第一版、第二版、第三版、第四版、第五版第一版和第二版差别不大,笼统概括为S602nd、S60二版。(包含OS6、OS7、OS8三个系列)第三版第四版第五版核心是OS9系列的,笼统概括为S603rd、S60三版2ndAnd3rdS603rd和S602nd从操作系统上看有很大的区别:1、三版引入了权限签名这一安全机制,可通过对程序安装包进行签名授权。2、S602nd是EPOC6,S603rd是EPOC9,这也意味着其ELF(ExecutableandLinkingFormat)是可执行连接格式也发生了改变在S602nd版本中,可执行体是EPOC6格式的.APP文件和.DLL文件在S603rd版本中,可执行体是EPOC9格式的.EXE文件和.DLL文件3、三版和二版的程序安装包,格式是不一样的,尽管都是.sis结尾的文件EPOC9格式的可执行文件是可以压缩的,三版签名后的安装包一般是.sisxARMCPUARM公司是专门从事基于RISC(reducedinstructionsetcomputer,精简指令集计算机)微处理芯片制造的企业。设计出的产品性能高、成本低和能耗省的特点,适用于多种领域,例如嵌入式系统、DSP、和手机。ARM处理器本身是32位设计,但也配备Thumb16位指令集准备工作IDAPro5.2鬼斧神工逆向分析利器下载地址:http://bbs.pediy.com/showthread.php?t=55801IDSfilesforEPOC6andEPOC9SymbianEPOC格式标示符文件,配合IDA5.2使用,解压置IDA相关目录即可下载地址:http://arteam.biz.hr/downloads/Symbian_EPOC6_EPOC9_Unleashed_IDS_Files_for_IDA_Pro_by_argv.rarWinHex强大的磁盘编辑工具,也是非常棒的十六进制编辑器。SisContentsS60三版程序(Sis,Sisx)打包、解包、签名工具。http://symbiandev.cdtools.netCeleASM用于查看ARMOPCODE宇宙杰出青年Yonsm(郭春杨)之作主页:WWW.Yonsm.NETSymbian_OS_9.x-ELF_Toolz用于解压和压缩3rdEXE和DLL工具当然我不是宇宙杰出青年,博客还是有的Blog:WwW.CaterQiu.CnRESEdit.exeS60三版程序RSC资源修改工具,主要用作汉化这四款小工具我的博客有文件打包,详情参阅WwW.CaterQiu.Cn/Article/Symbian_S60_3rd_Reverse_CrAcKiNg_Tutorial_By_CaterQiu.html实战操作Example:DVDPlayer1.26.SISx(http://www.viking.tm)Setp1:UnpackSis/SisxFileUse_SisContents_Unpack_S60_3rd_Target_Sis_FileSetp2:UnComPressELFFileUse_Symbian_OS_9.x_ELF_Toolz_UnComPress_Target_ELF_FileCompareFileSizeBetweenOriginal(BAK_dvdplayer.exe)AndNoCompress(dvdplayer.exe),YouHaveFounddvdplayer.exeWasUnpacked.Setp3:AnalysisProgramFlow把脱壳后的程序拖入IDA中勾上堆栈指针和机器码字节数为8.Shift+F12设置下字符串类型,Unicode要的字符串窗口中357062008960014类似IMEI的串号,双击过来继续向上回溯字符串被调用的地方回溯到到sub_8A2C注意:MOVR12,SPSTMFDSP!,{R4,R5,R7,R11,R12,LR,PC}这两句类似Win32程序汇编代码中PUSHEBPMOVEBP,ESPADDESP,XXX意味着什么呢?意味着这个是子功能函数的函数入口既然这个已经是子函数的入口了我大致猜测刚才显示的那个串号是作者自己用来做的手机串号我估计写入这个串号是为了检测当串号为357062008960014就不需要启动软件注册功能暂时这么猜测吧按下X按键看看有哪些地方调用还好只有一处返回到这里分析代码详细过程我就不在这里细说了Loc_8280这里与解密有关的部分,我们进入分析进来后,再进入sub_9114分析看看很显然sub_9114也是一个子函数这里这号是图形化的,看看整个分支流程CompareF比较函数再猜测下咯刚才是作者手机串号的代码这里的比较很大何能是判断是不是作者的手机R0寄存器和8x86EAX寄存器一样常用语函数返回值没查SDK了,和Windows比较函数一样一般返回0说明两参数比较相等加个注解解释下吧LDRR0,[R6,#0x98];相当于MOVR0,[R6+0x98]MOVR1,R10;相当于MOVR1,R10BLTDesC16::CompareF(TDesC16const&);相当于Comparf(R0,R1)CMPR0,#0;R0为函数的返回值,为0,说明参数R0和参数R1相等MOVEQR8,#1;IFR0=0ThenR8=1STREQR8,[R6,#0x90];IFR0=0ThenStorageR8ToR6+0x90MemoryBEQloc_922C;IFR0=0ThenCallLoc_922CFunction很明显要改变程序流程需要patch下代码修改CMPR0,#0变成CMPR0,R0可以一直作用下列的流程自然而然我们的补丁代码也就是这个了Setp4:MakeARMOPCODEUse_CeleASM_Make_OPCODE生成的OPCODE是500000004e3500000CMPR0,#0600000008e1500000CMPR0,R0看看CMPR0,#0的OPCODE和我们途中的OPCODE是否相同不难看出500000004e3500000CMPR0,#0是对应Little-Endianl数据存储类型的ARMCPU也就是低位字节排在内存较低地址Patch_OPCODE:000050E1(CMPR0,R0)Setp5:PatchData先从IDA中查看需要修改代码对应的文件偏移0x000012AC原来的修改后就这样了最后存盘即可。Setp6:CompressELFFileUse_Symbian_OS_9.x_ELF_Toolz_ComPress_Target_ELF_FileSetp7:PackS603rdFile1、把之前破解好,加压缩的dvdplayer.exe复制一份到别处2、删除之前解包出来的文件夹D:\Symbian_Reverse_Toolz\Toolz\SisContents121\DVDPlayer1.263、再次用SisContents打开原版的.sis文件,点击ExtractFiles图标4、拷贝之前破解好,加压缩的dvdplayer.exe,复制到D:\Symbian_Reverse_Toolz\Toolz\SisContents121\DVDPlayer1.26\sys\bin替换掉解包出来的5、删除原来的签名:回到SisContents中,Tools->DeleteSignatures6、File->SaveAs->另存文件即可。Setp8:RunPatched.SisFileWithMobile在手机上测试我们修改后的程序,破解成功。说明那个串号是一个作者留下的小路吧,当然如果替换作者原来测试机的串号357062008960014成自己的串号,那么程序也是一路绿灯通行的。学习小结ARM指令集需要掌握遇到B当CALL指令用即可BL是调用系统函数Bxx是条件调用类似条件跳转Jxx指令R0-R3可以用作参数传递R0和Win32汇编中EAX作用一样常用语存放函数返回值解密思路和Windows上的解密思路是一样的可以通过字符串来定位关键代码,也可以通过相关API找关键代码Symbian解密注意事项解包后记得先解压EXE或者DLL文件修改后的EXE、DLL程序不可以直接替换到手机中使用,需要做成安装包打包前一定要给EXE、DLL压缩下打包时要注意签名,最好先删除所有的签名WwW.CaterQiu.Cn/Article/Symbian_S60_3rd_Reverse_CrAcKiNg_Tutorial_By_CaterQiu.htmlSymbianS603rdReverseCrAcKiNg_TutorialByCaterQiuBlogwww.caterqiu.cnMailCater.Qiu@Gmail.com2009-5-1