分析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一般为明文,即注册码数据,生成签名对象

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也许会造成程序崩溃,所以如果发现改完程序运行崩溃了,可以检查一下是否是这个原因。

文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览113643 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2010年4月28日
下一篇 2010年4月28日

相关推荐