仓酷云

标题: IOS制作之Android玩乐系列:修正汇编代码撑持原生高清来电年夜头贴(二)仓酷云 ... [打印本页]

作者: 柔情似水    时间: 2015-1-18 11:30
标题: IOS制作之Android玩乐系列:修正汇编代码撑持原生高清来电年夜头贴(二)仓酷云 ...
很简单OBJCAVFoundation---播放视频相关的库最近正在学习这些算是学iOS开发的一些方法(前三节有关背景先容请至:《Android玩乐系列:修正汇编代码撑持原生高清来电年夜头贴(一)》)
4、修正前的筹办事情
=======
这里先容一些Android上的逆向工程的基本。起首,我们要操纵Phone.apk,它实在也就是一个.zip文件,个中包含四个次要信息:
-资本文件:res*.*和resources.arsc
-代码文件:classes.dex
-使用形貌:AndroidManifest.xml
-署名信息:META-INF*.*
apktool这个工具能够处置前三种数据,而署名信息则必需利用一个signapk.jar(有些工具包称为AutoSign)。

1)解包(缺省至Phone目次)
apktoold-fPhone.apk

注重我们接上去的修正都不会动到资本,以是现实上也能够不解开个中的资本文件。能够如许利用命令行:
apktoold-f-rPhone.apk

如许在编译归去的时分会快一点,并且也能够制止一些毛病。——但良多时分的修正必要对比着资本文件来看,以是你也能够解一份有资本文件的版本放在中间作参照。

2)编译回.apk(指定从Phone目次)
apktoolb-fPhonePhone2.apk

3)对Phone2.apk加署名
java-jarsignapk.jarplatform.x509.pemplatform.pk8Phone2.apkPhone2_signed.apk
注重这时候利用的署名文件为platform.x509.pem和platform.pk8,而不是我们寻常用的testkey*.*。这是很关头的一处:Phone.apk必需利用platform.*来署名。
5、修正:开端
=======
我们将Phone.apk解到Phone目次以后。能够找到以下子目次:
Phonesmalicomandroidphone
我们接上去次要修正两个文件:
CallCard.smali
InCallScreen.smali
注重这里的*.smali是另外一种格局的源代码,它反编译自Dalvik假造机中实行码(opcode)。基础上,你能够以为这*.smali就是汇编代码(基于存放器的假造机引擎)。好吧,但我们既然要“原生的”,那末就只好来改改这些汇编代码了。:(

1)对InCallScreen.smali只必要做一处修正
---------
找到:
改成:
我们必要在CallCard.smali中会见这个成员,以是它必需是公然的(public)。


2)修正CallCard.smali,针对updateDisplayForPerson()办法
---------
找到:
在该办法中,找到独一一处showCachedImage()挪用:
注重两点,一是我们要修正这个:
以是要先记下这个cond_2。第二点,下面的v0,v1,v4大概在详细的代码中有所分歧,这也要寄望,查找时不克不及根据这些存放器。而修正时,也要注重存放器的抵触和利用,有修正履历的就未几言了;没有履历的,则要细心回忆一下汇编言语的常识。


接上去,我们修改上述一行,使之酿成为:
这里,if-nez酿成了if-eqz,而:cond_20这一标签用于拔出一段代码,当这些代码实行完成时,仍旧会到:
这就是下面要记着cond_2的缘故原由。至于:cond_20是能够随便取的,编译程序是按16进制主动升序来编号这些标签,而0x20号标签一样平常已对照年夜了,不会与现有的标签抵触。固然,写成cond_30或cond_50也行的。

别的,这里还必需要注重v0,v5,v1和v4这四个存放器的利用,必需参考这里的代码高低文为决意利用哪些个余暇的存放器。个中v1是承继利用了后面的存放器值,假如此前v1中不是放着CallerInfo的话,则要依据高低文再调剂。归正,假如存放器用错了的话……哈哈……Crash~~

【注:有一个复杂的办法能够制止用错存放器的成绩,就是在将办法入手下手处的.localsnnn这里的nnn值改年夜几个,必要用几个存放器,就加上几个。然后在我们拔出的代码中,只利用最初的这几个存放器号,也就不会抵触了。比方本来是.locals4,改成.locals8,则v4,v5,v6,v7这新增加的4个存放器号,就老是平安的。】

3)修正CallCard.smali,针对updatePhotoForCallState()办法
---------
这里的修正与上一例是类似的,只不外是针对updatePhotoForCallState()办法罢了。找到:
修改下面最初一行。酿成:
4)增加新下面代码所必要的办法:showCachedBackground()
---------
下面两段函数都挪用了一个办法,这个showCachedBackground()是我们这里“来电全屏年夜头贴”的次要功效完成代码。别的的修正,实在只是插个桩罢了。代码以下,把它间接插到CallCard.smali这个文件的某个办法前/前面就能够了(我一样平常将它放在showCachedImage()函数声明的前面):
6、对开端修正的申明
=======
除2、3步中的插桩代码以外,全部功效实在就依附一个完整手写汇编的showCachedBackground()。它必要操纵到以后类CallCard的
成员。而该成员在InCallScreen类中被声明为private,以是必要在第1步中把InCallScreen中的该声明改成public。

showCachedBackground()的思绪很复杂。因为CallCard.smali老是要从“接洽人”中装载头像,而此前我们已用“HDContactPhotos”把这个头像存成了“高清、全屏年夜头贴(图片)”,那末就只需将这个掏出来的头像贴在背景上就能够了。
高清全屏来电年夜头贴,不就是把年夜头贴在背景上嘛。^^.

以是在剖析全部Phone.apk时,我发明它底本取到一个mPhoto以后,为了便于显现就将它存在CallerInfo.cachedPhoto里了。既云云,那末在原有流程的updatePhotoForCallState()与updateDisplayForPerson()办法中,当它挪用showCachedImage()来显现了图片以后,我们也就只必要把这个图片在背景上“贴”一下就能够了。

而这个背景,就是:CallCard.InCallScreen.mMainFrame

很复杂嘛。

下面的showCachedBackground()汇编代码翻译成java代码就是:

继承自相应的不可变类比如NSMutableArray继承自NSArray他们都添加了可以改变对象内容的方法比如-(void)addObject:(id)anObject添加对象-(void)removeObject:(id)anObject删除对象上面只是一个大概的总结
作者: 第二个灵魂    时间: 2015-1-21 08:52
看完这个你就可以有多种选择来踏入做应用的阶段
作者: 不帅    时间: 2015-1-21 08:52
近期由于IOS7的发布,所以应用的适配潮可谓是都搞的锣鼓喧天,甚是热闹,因此呢,因适配IOS7而产生的问题也是铺天盖地的卷来,
作者: 爱飞    时间: 2015-1-25 17:41
要学会通过各种方法将面前的事情变成自己感兴趣的,那专研起来就不会是无聊和折磨了。
作者: 莫相离    时间: 2015-2-3 12:15
自从苹果公司开放iOS SDK以来,大量的国内外的软件开发者将关注的目光聚集在苹果的iOS平台上。由于iPhone和iPad自一出现就给人带来了颠覆性的感觉
作者: 兰色精灵    时间: 2015-2-7 10:00
看完这个你就可以有多种选择来踏入做应用的阶段
作者: 再见西城    时间: 2015-2-8 10:18
在百度搜索你想要了解的类名(苹果的cocoa和cocoatouch框架的类名很有特点很容易搜到,前缀都是NS or UI),看别人写的博客详解
作者: 柔情似水    时间: 2015-2-25 09:08
特别是在校的学生,都存在一个小小的尴尬——虽然学习iOS开发的热情高涨,但由于没有多余的银子购买昂贵的Mac电脑而踟蹰不前。其实,针对初学者,如果想进入iOS开发的天地
作者: 乐观    时间: 2015-2-27 23:59
众多研发人员积极参与到iOS平台的开发中来也就不足为奇了。
作者: 灵魂腐蚀    时间: 2015-3-3 20:31
同很多iOS开发者一样,我也是通过培训进入到iOS开发这个行业,开始没有打算培训,只准备自己学习一些计算机编程相关的知识,毕业时找一份编程相关工作(本人是信息与计算科学这个专业,是数学系)。
作者: 飘灵儿    时间: 2015-3-4 11:08
要学会通过各种方法将面前的事情变成自己感兴趣的,那专研起来就不会是无聊和折磨了。
作者: 再现理想    时间: 2015-3-4 20:38
在此,某不才愿将安装成功的Mac OS X系统的vmware虚拟机向有志学习iOS开发的各位学友们免费开放出来,经测试,可以在WindowsXP/Win7系统上完美运行,即便你的机器只有2GB内存。
作者: 愤怒的大鸟    时间: 2015-3-8 15:04
这个办法就是在WindowsXP或Win7的电脑上,使用vmware虚拟机来搭建一个真实的Mac OS X环境。
作者: 因胸联盟    时间: 2015-3-16 02:35
还有开发工具是用Xcode,是在Mac系统的,你多摸索一下就可以开发简单的应用了,建议你买一本iphone开发秘籍第二版看看,希望可以帮到你,谢谢。
作者: 小女巫    时间: 2015-3-18 03:44
看《iPhone 4与iPad开发基础教程》,跟着一步步来
作者: 深爱那片海    时间: 2015-3-25 11:13
还有开发工具是用Xcode,是在Mac系统的,你多摸索一下就可以开发简单的应用了,建议你买一本iphone开发秘籍第二版看看,希望可以帮到你,谢谢。
作者: 海妖    时间: 2015-4-1 23:59
从C语言入门,因为IOS开发用的是OC语言,是在C基础上的,不过也跟C不是很搭界,你可以直接学习OC语言也可以,
作者: 小魔女    时间: 2015-4-3 19:47
培训的时候很痛苦,每天要待12个小时,上午讲课,下午和晚自习解决作业,看文档,学习的时候感觉就是资料太少,而且看着资料也不明所以,非常痛苦,
作者: 冷月葬花魂    时间: 2015-4-8 22:24
有办法利用自己手头的电脑立刻开始这个美妙旅程的。
作者: 简单生活    时间: 2015-4-10 23:28
iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2