分析symbian软件总结笔记
一、symbian API
这里只说说对分析破解symbian软件用得到的API接口。
1、获取手机IMEI码:
CTelephony::TPhoneIdV1::TPhoneIdV1(void)
CTelephony::GetPhoneId(TRequestStatus &, TDes8 &)
获取的IMEI码的数据类型为unicode字符串类型,这是目前软件注册验证最喜欢用的,也是最直接有用的突破口。
2、比较函数:
TDesC8::Compare(TDesC8 const&)
TDesC16::Compare(TDesC16 const&)
TDesC16::CompareF(TDesC16 const&)
返回值为0即两个数据相同,一般在IDA Pro搜索Compare文本即可,这是最常用的之一了。
3、文件类:
RFile::Open(RFs &,TDesC16 const&,uint) //打开文件,返回文件句柄
RFile::Read(TDes8 &) //读取文件
RFile::Size(int &) //文件大小
注册方式用授权文件时也是很好的突破点。
4、窗口类:
CAknNoteDialog::CAknNoteDialog(void)
提示对话框,通过窗口类找突破口目前我还没有成功用过,所以对这些类了解很少。
5、字符串资源加载:
StringLoader::Load(TDes16 &,int,CCoeEnv *)
CCoeEnv::AllocReadResourceAsDes16LC(int) //一般搜索Resource就可以搜到一堆相关API
这个要用得先对资源文件的结构有所了解才能用,其中那个int类型参数值是字符串数据索引表起始地址+索引值,一般程序中是用字符串数据索引表起始地址+一个字符串的索引值,然后再用这个值加上与要加载的目的字符串的索引值差值,通过索引值来判断字符串内容进而确认是否是关键点,这个方法的关键是要对资源文件结构有所了解,找到字符串数据索引表的起始位置的地址,又因为加载字符串的地方非常多,所以实际使用很困难,不太推荐用这个方法。
6、加密类
(1)CRC32加密
Mem::Crc32(ulong &,void const*,int) //对内存数据进行CRC32验证,用于防止程序数据被修改
(2)Base64加密
TImCodecB64::TImCodecB64(void)
TImCodecB64::Encode(TDesC8 const&,TDes8 &) //编码
TImCodecB64::Decode(TDesC8 const&,TDes8 &) //解码
(3)SHA1加密
CSHA1::NewL(void)
调用SHA1执行加密的对象方法的汇编代码一般类似BL R3,R3寄存器的值即该加密方法的 函数地址。
(4)RSA加密
RInteger::NewL(TDesC8 const&)
RInteger::NewL(int) //这两句是用来创建大数的,第一句一般是生成模数n,第二句是生成公钥e
CRSAPublicKey::NewLC(RInteger &,RInteger &) //用前两句生成的模数n和公钥e来生成公钥对象
CRSAPKCS1v15Verifier::NewLC(CRSAPublicKey const&) //用公钥对象生成验证对象
CRSASignature::NewLC(RInteger &) //RInteger一般为明文,即注册码数据,生成签名对象
接下来的汇编代码中会按顺序出现一句BL R3和一句BL R2,执行BL R2后的R0值即密文,用RSA加密一般是用IMEI的数据(可以先做一些处理)作为密文,软件作者通过解密程序(即注册机)算出明文生成注册码,而程序用加密把注册码加密还原出IMEI数据,然后再把还原出的数据与IMEI数据进行比对,具体RSA加密的原理请自行搜索了解。
7、数据拷贝:
TDes8::Copy(TDesC8 const&)
TDes16::Copy(TDesC8 const&)
TDes16::Copy(TDesC16 const&)
一般R0为返回值,R1为参数,即把R1指向的数据复制一份到R0指向的内存地址内,ARM汇编代码一般为:
LDR R1,[SP,#100+var_10] //将要复制的数据地址加载到R1
LDR R0,[SP,#100+var_20] //把要存储数据备份的内存地址加载到R0
TDes16::Copy(TDesC16 const&) //调用函数,R1即函数的参数,R0为返回值。
8、堆栈数据安全清除:
CleanupStack::PushL(CBase *)
CleanupStack::PopAndDestroy(int)
CleanupStack::PopAndDestroy(void)
这个对分析没多大用处,但在修改代码时需要注意,PushL和PopAndDestroy需要配对使用,如果修改程序流程跳过了PushL,后面却执行PopAndDestroy也许会造成程序崩溃,所以如果发现改完程序运行崩溃了,可以检查一下是否是这个原因。
分析symbian软件总结笔记相关推荐
- 《软件调试分析技术》学习笔记
<软件调试分析技术>学习笔记(一) 今天开始写写一些心得体验. <软件调试分析技术>是好友Monster的处女作品.作为一直以的好伙伴,他是我看着长大的,(*^__^*) 嘻嘻 ...
- android录音笔记软件,录音笔记app
录音笔记app这是一款超好用的录音软件了,在这个里面你可以轻松的记录下每一个会议的记录,还包括各种的学习什么的,你下载了这样一个软件以后,就相当于有了一款实用的手机了,可以很好的帮你去进行各种的工作会 ...
- 嵌入式之uboot源码分析-启动第二阶段学习笔记(下篇)
接上部分---->嵌入式之uboot源码分析-启动第二阶段学习笔记(上篇) 注:如下内容来自朱老师物联网大讲堂uboot课件 3.2.14 CFG_NO_FLASH (1)虽然NandFlash ...
- 软考-软件设计师 笔记一(计算机组成与体系结构)
本栏博客目录 软考-软件设计师 笔记一(计算机组成与体系结构) 软考-软件设计师 笔记二(操作系统基本原理) 软考-软件设计师 笔记三(数据库系统) 软考-软件设计师 笔记四(计算机网络) 软考-软件 ...
- 软考-软件设计师 笔记九(多媒体基础)
本栏博客目录 软考-软件设计师 笔记一(计算机组成与体系结构) 软考-软件设计师 笔记二(操作系统基本原理) 软考-软件设计师 笔记三(数据库系统) 软考-软件设计师 笔记四(计算机网络) 软考-软件 ...
- 软考-软件设计师 笔记十(软件工程)
本栏博客目录 软考-软件设计师 笔记一(计算机组成与体系结构) 软考-软件设计师 笔记二(操作系统基本原理) 软考-软件设计师 笔记三(数据库系统) 软考-软件设计师 笔记四(计算机网络) 软考-软件 ...
- SGX技术的分析与研究 学习笔记
SGX技术的分析与研究 学习笔记 SGX技术的分析与研究 学习笔记 1 SGX架构概述 2 SGX关键技术 2.1 Enclave安全容器 2.2 Enclave保护机制 2.2.1 内存访问语义 2 ...
- 软考-软件设计师 笔记十二(数据流图)
本栏博客目录 软考-软件设计师 笔记一(计算机组成与体系结构) 软考-软件设计师 笔记二(操作系统基本原理) 软考-软件设计师 笔记三(数据库系统) 软考-软件设计师 笔记四(计算机网络) 软考-软件 ...
- 分析一个软件要考虑的问题
分析一个软件要考虑的问题 1.要分析它的所有功能,每一个细节都要注意到. 要知道它是干什么用的,它删除之后对其它地方有什么影响? 2.要找出它的设计缺陷所在.不合理的地方在哪里?并提出更好的改进措施. ...
最新文章
- android 使用NDK
- table取tr对象 vue_javascript的DOM对象终极总结:你必看的js面向对象
- 特征工程——categorical特征 和 continuous特征
- CRM One Order 事件处理元数据初始化的准确位置
- rss spring 接口_spring 接口支持返回多种格式
- 【2018.4.14】模拟赛之二-ssl2392 蚂蚁【图论】
- JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)
- ZedGraph使用经验
- Mysql也可以联合多表更新和删除
- margin和padding的区别和用法
- C#进阶系列——WebApi 路由机制剖析:你准备好了吗?
- triz矛盾矩阵_怎样利用项目TRIZ矛盾定义法,突破产品“创
- spss可以关键词词频分析吗_做关键词分析,我有4款免费词云工具
- 数字信号处理期末总复习
- 累计独立访客(UV)不低于 1000 是什么意思,快速开通流量主
- macOSX下格式化外接固态硬盘
- 为明天计划,而不要为明天忧虑
- QUIC 技术创新 让视频和图片分发再提速
- 完全用GNU/Linux工作,摈弃Windows---你我共勉
- winpe加载raid_为WinPE添加RAID卡驱动的几种步骤