分类 移动应用开发 下的文章

移动APP营销的8大创意路径

这是一个以APP为主要载体的时代,连楼下卖羊肉串的大叔,订单80%都来自微信,人们的时间和精力几乎被各类APP瓜分。但提醒各位,对移动App来说,用户数量的多少决定着它的成败。如何通过得当的营销方式快速获取用户?

- 阅读剩余部分 -

如何让你的APP变快

大家都知道不管网页还是移动 APP,响应速度都是最重要的体验指标之一,并且移动应用的网络环境不稳定,速度的体验显得尤为重要。其实速度优化不仅是程序员的事,设计,也能够让APP变得更快。

- 阅读剩余部分 -

Apache Flex 4.12发布,支持iOS 7

Apache Flex是一个高效的、开源应用程序框架,其作用主要是构建和维护表达性应用程序,而这些应用程序都是可以部署在主流浏览器上、桌面程序以及包括智能手机、平板电脑和电视在内的设备上。

Apache Flex 4.12.0是Apache Flex 4.11.0的升级版本,改进的功能包括:

  • 支持最新版本的Flash Player
  • 支持最新的AIR运行时
  • 改进了内存占用和性能
  • 改善了针对移动平台的组件的样式
  • 支持iOS7系统
  • 修复了超过80个漏洞

iOS平台游戏安全之IPA破解原理及防御

<div>破解软件的问题,其实不仅仅是iOS上,几乎所有平台上,无论是pc还是移动终端,都是顽疾。可能在中国这块神奇的国度,大家都习惯用盗版了, 并不觉得这是个问题,个人是这么想,甚至某些盈利性质的公司也这么想,著名的智能手机门户网站91.com前不久就宣传自己平台上盗版全,不花钱。其实这 种把盗版软件当成噱头的网站很多,当然还没出现过91这种义正言辞地去宣传用盗版是白富美,买正版是傻X的公司。大家都是做实诚样,把最新最受欢迎的盗版 应用一一挂在首页来吸引用户。同步助手就是这种内有好货,不要错过的代表,并且在盗版圈子里,享有良好的口碑,号称同步在手,江山我有。<div style="page-break-after: always;"><span style="display: none;"><!--more-->& nbsp ;</span></div></div><p> </p><div>其实iOS破解软件的问题,既不起源于中国,现阶段也没有发扬光大到称霸的地位,目前属于老二,当然很有希望赶超。据统计,全球范围内,排名前五的破解app分享网站有以下几家:</div><div><div><div style="line-height: 22px;"> </div><div style="line-height: 22px;">1. Apptrack    代表软件:<span style="line-height: 22px;">Crackulous,clutch </span></div><div style="line-height: 22px;"><font color="#ff0000">破解界的老大哥,出品了多款易用的破解软件,让人人都会破解,鼓励分享破解软件,破解app共享卡正以恐怖的速度扩充。</font></div><div style="line-height: 22px;"> </div><div style="line-height: 22px;">2. AppCake代表软件:<span style="line-height: 22px;"><font color="#ff0000" style="line-height: 22px;">CrackNShare</font></span></div><div style="line-height: 22px;"><font color="#ff0000">新秀,支持三种语言,中文(难得!)、英文、德文,前景很可观</font></div><div style="line-height: 22px;"> </div><span style="line-height: 22px;">3.</span> KulApps<span style="line-height: 22px;"> 北美</span></div><div><div style="line-height: 22px;">4. iDownloads 俄国</div><div style="line-height: 22px;">5. iGUI 俄国</div><div style="line-height: 22px;"> </div><div style="line-height: 22px;">以上消息,对于依靠安装包收费的iOS开发来说,无疑是噩耗,其实由不少人也在网上号召支持正版,要求知识产权保护的力度加强。这些愿望或许终有一天会实现,但从技术的角度来分析问题的所在,给出有效的防御方案,无疑比愿望更快。</div></div><div>----破解原理部分---------------------------------------------</div><div> </div><div> </div><div>Appstore 上的应用都采用了DRM(digital rights management)数字版权加密保护技术,直接的表现是A帐号购买的app,除A外的帐号无法使用,其实就是有了数字签名验证,而app的破解过程, 实质也是去除数字签名的过程。去除过程包括两部分,如下所示:</div><div> </div><div><font size="3">条件一,设备越狱,获得root权限,去除掉设备上的签名检查,允许没有合法签名的程序在设备上运行</font></div><div> </div><div>代表工具:<font color="#ff0000">AppSync</font>(作者:Dissident ,Apptrack网站的核心人物)</div><div>(iOS 3.0 出现,不同的iOS版本,原理都不一样)</div><div>iOS 3.0后,<span style="line-height: 22px;">MobileInstallation将可执行文件的签名校验委托给独立的二进制文件/usrlibexec/installd来处理,而AppSync 就是该执行文件的一个补丁,用来绕过签名校验。</span></div><div> </div><div><span style="line-height: 22px;">iOS 4.0后,apple留了个后门(</span><span style="line-height: 22px;">app给开发者预留的用于测试的沙盒环境)</span><span style="line-height: 22px;">, 只要在/var/mobile/下建立tdmtanf目录,就可以绕过installd的签名校验,但该沙盒环境会造成没法进行IAP购买,无法在 GameCenter查看游戏排名和加好友,特征是进入Game Center会出现SandBox字样。AppSync for iOS 4.0 +修复了这一问题。</span></div><div> </div><div style="text-align: justify;"><span style="line-height: 22px;">iOS 5.0后,apple增加了新的安全机制来保护二进制文件,例如去掉二进制文件的符号表,给破解带来了难度。新版的AppSync for iOS 5.0+ 使用MobileSubstrate来hook libmis.dylib库的</span><span style="background-color: rgb(249, 249, 249); color: rgb(90, 90, 90); font-family: tahoma, helvetica, arial, sans-serif; line-height: 21px; text-align: justify;">MISValidateSignatureAndCopyInfo</span><span style="line-height: 22px;">函数来绕过签名验证</span></div><div> </div><div> </div><div> </div><div><span style="line-height: 22px;"><font size="3">条件二,解密mach-o可执行文件</font></span></div><div>一般采用自购破解的方法,即先通过正常流程购买appstore 中的app,然后采用工具或手工的方式解密安装包中的mach-o可执行文件。</div><div>之所以要先获得正常的IPA的原因是mach-O文件是有DRM数字签名的,是加密过的,而解密的核心就是解密加密部分,而我们知道,当应用运行时,在内存中是处于解密状态的。所以首要步骤就是让应用先正常运行起来,而只有正常购买的应用才能达到这一目的,所以要先正常购买。</div><div> </div><div>购 买后,接着就是破解了。随着iOS设备cpu 的不同(arm 6 还是arm 7),mach-o文件格式的不同(thin binary 还是fat binary),应用是否对破解有防御措施(检测是否越狱,检测应用文件系统的变化),破解步骤也有所不同,但核心步骤如下:</div><div> </div><div><span style="font-family: Arial, Helvetica, simsun, u5b8bu4f53; line-height: 22px;"><font color="#ff0000">第一步:获得cryptid,cryptoffset,cryptsize</font></span></div><div><div style="line-height: 22px;"><font color="#ff0000" face="monospace" style="line-height: 22px;"><span style="line-height: 22px; white-space: pre;">cryptid为加密状态,0表示未加密,1表示解密;</span></font></div><div style="line-height: 22px;"><font color="#ff0000" face="monospace" style="line-height: 22px;"><span style="line-height: 22px; white-space: pre;">cryptoffset未加密部分的偏移量,单位bytes</span></font></div><div style="line-height: 22px;"><font color="#ff0000" face="monospace" style="line-height: 22px;"><span style="line-height: 22px; white-space: pre;">cryptsize加密段的大小,单位bytes</span></font></div></div><div><div style="line-height: 25px; font-family: Arial, Helvetica, simsun, u5b8bu4f53;"><span style="line-height: 22px;"><font color="#ff0000">第二步:将cryptid修改为0</font></span></div><div style="line-height: 25px; font-family: Arial, Helvetica, simsun, u5b8bu4f53;"><span style="line-height: 22px;"><font color="#ff0000">第三步:gdb导出解密部分</font></span></div><div style="font-family: Arial, Helvetica, simsun, u5b8bu4f53;"><font color="#ff0000">第四步:用第二步中的解密部分替换掉加密部分</font></div><div style="line-height: 25px; font-family: Arial, Helvetica, simsun, u5b8bu4f53;"><span style="line-height: 22px;"><font color="#ff0000">第五步:签名</font></span></div><div style="line-height: 25px; font-family: Arial, Helvetica, simsun, u5b8bu4f53;"><span style="line-height: 22px;"><font color="#ff0000">第六步:打包成IPA安装包</font></span></div></div><div> </div><div>整个IPA破解历史上,代表性的工具如下:</div><div> </div><div>代表工具:<font color="#ff0000">Crackulous</font>(GUI工具)(来自Hackulous)</div><div> </div><div>crackulous最初版本<span style="line-height: 22px;">由</span>SaladFork<span style="line-height: 22px;">编写,</span>是基于DecryptApp shell脚本的,后来crackulous的源码泄露,SaladFork放弃维护,由Docmorelli接手,创建了基于Clutch工具的最近版本。</div><div> </div><div>代表工具:<font color="#ff0000">Clutch</font>(命令行工具)<span style="line-height: 22px;">(来自Hackulous)</span></div><div>由dissident编写,Clutch从发布到现在,是最快的破解工具。Clutch工具支持绕过ASLR(apple在iOS 4.3中加入ASLR机制)保护和支持Fat Binaries,基于icefireicecrack工具,objective-c编写。</div><div> </div><div>代表工具:<font color="#ff0000">PoedCrackMod</font>(命令行工具)<span style="line-height: 22px;">(来自Hackulous)</span></div><div>由Rastignac编写,基于poedCrack,是第一个支持破解fat binaries的工具。shell编写</div><div> </div><div> </div><div>代表工具:<font color="#ff0000">CrackTM</font><span style="line-height: 22px;">(命令行工具)</span><span style="line-height: 22px;">(来自Hackulous)</span></div><div>由MadHouse编写,最后版本为3.1.2,据说初版在破解速度上就快过poedCrack。shell编写</div><div> </div><div> </div><div>(<span style="line-height: 22px;">以下是bash脚本工具的发展历史(脚本名(作者)),虽然目前都已废弃,但都是目前好用的ipa 破解工具的基础。</span></div><div style="line-height: 22px;">autop(Flox) ——>xCrack(SaladFork)——>DecryptApp(uncon)—— >Decrypt(FloydianSlip)——>poedCrack(poedgirl)—— >CrackTM(MadHouse)</div> <div> </div><div>代表工具:<font color="#ff0000">CrackNShare</font> (GUI工具)(来自appcake)</div><div>基于PoedCrackMod 和 CrackTM</div><div> </div><div> </div><div>我们可以通过分析这些工具的行为,原理及产生的结果来启发防御的方法。</div><div> </div><div>像AppSync这种去掉设备签名检查的问题还是留给apple公司来解决(属于iOS系统层的安全),对于app开发则需要重点关注,app是如何被解密的(属于iOS应用层的安全)。</div><div> </div><div>我们以PoedCrackMod和Clutch为例</div><div> </div><div><div style="line-height: 22px;"><font color="#ff0000" style="line-height: 22px;">一、PoedCrackMod分析(v2.5)</font></div><div style="line-height: 22px;"><div style="line-height: 22px; color: rgb(44, 44, 44); font-family: Arial, Helvetica, simsun, u5b8bu4f53;">源码及详细的源码分析见:</div><div style="line-height: 22px;">http://danqingdani.blog.163.com/blog/static/18609419520129261354800/</div><div style="line-height: 22px;"> </div></div><div style="line-height: 22px;"><div style="line-height: 25px; color: rgb(44, 44, 44); font-family: Arial, Helvetica, simsun, u5b8bu4f53;"><div style="line-height: 25px;"><div style="line-height: 25px;"><p style="line-height: 25px; margin-top: 0px;"><span style="line-height: 22px;">通过分析源码,我们可以知道,整个破解过程,除去前期检测依赖工具是否存在(例如ldid,plutil,otool,gdb等),伪造特征文件,可以总结为以下几步:</span></p></div></div><div style="line-height: 22px; color: rgb(0, 0, 0); font-family: Arial, Helvetica, sans-serif;"><div style="line-height: 22px;">第一步. 将fat binary切分为armv6,armv7部分(采用swap header技巧)</div><div style="line-height: 22px;">第二步:<span style="line-height: 22px; color: rgb(44, 44, 44); font-family: Arial, Helvetica, simsun, u5b8bu4f53;">获得cryptid,cryptoffset,cryptsize</span></div><div style="line-height: 22px;">第三步. 将armv6部分的cryptid修改为0,gdb导出对应的armv6解密部分(<font color="#ff0000" style="line-height: 22px;">对经过swap header处理的Mach-O文件进行操作,使其在arm 7设备上,强制运行arm 6部分</font>),替换掉armv6加密部分,签名</div><div style="line-height: 22px;">第四步. 将armv7部分的cryptid修改为0,gdb导出对应的armv7解密部分(<font color="#ff0000" style="line-height: 22px;">对原Mach-O文件进行操作)</font>,替换掉armv7加密部分,签名</div><div style="line-height: 22px;">第五步.合并解密过的armv6,armv7</div><div style="line-height: 22px;">第六步.打包成ipa安装包</div></div></div></div><div style="line-height: 25px; color: rgb(44, 44, 44); font-family: Arial, Helvetica, simsun, u5b8bu4f53;"> </div><div style="line-height: 22px; color: rgb(44, 44, 44); font-family: Arial, Helvetica, simsun, u5b8bu4f53;">注明:第三步和第四步是破解的关键,破解是否成功的关键在于导出的解密部分是否正确完整。</div><div style="line-height: 22px; color: rgb(44, 44, 44); font-family: Arial, Helvetica, simsun, u5b8bu4f53;">由于binary fat格式的mach-o文件在arm 7设备上默认运行arm 7对应代码,当需要导出arm 6对应的解密部分时,要先经过swap header处理,使其在arm 7 设备上按arm 6运行。</div><div style="line-height: 22px; color: rgb(44, 44, 44); font-family: Arial, Helvetica, simsun, u5b8bu4f53;"> </div><div style="line-height: 22px; color: rgb(44, 44, 44); font-family: Arial, Helvetica, simsun, u5b8bu4f53;"> </div></div><div> </div><div><font color="#ff0000">二、clutch分析</font></div><div>对于最有效的clutch,由于只找到了clutch 1.0.1的源码(最新版本是1.2.4)。所以从ipa破解前后的区别来观察发生了什么。</div><div><div style="line-height: 22px;">使用BeyondCompare进行对比,发现有以下变动。</div><div style="line-height: 22px;"> </div><div style="line-height: 22px;">1. 正版的iTunesMetadata.plist被移除</div><div style="line-height: 22px;">该文件用来记录app的基本信息,例如购买者的appleIDapp购买时间、app支持的设备体系结构,app的版本、app标识符</div><div style="line-height: 22px;"> </div><div style="line-height: 22px;"><div style="line-height: 22px;">2.正版的SC_Info目录被移除<wbr style="line-height: 22px;" /></div><div style="line-height: 22px;">SC_Info目录包含appname.sinf和appname.supp两个文件。</div><div style="line-height: 22px;">(1)SINF为metadata文件</div><div style="line-height: 22px;">(2)SUPP为解密可执行文件的密钥</div><div style="line-height: 22px;"> </div>3.可执行文件发生的变动非常大,但最明显的事是cryptid的值发生了变化</div><div style="line-height: 22px;"><div style="line-height: 22px;"><div style="line-height: 22px;">leetekiMac-mini:xxx.app leedani$ otool -l appname | grep &quot;cmd LC_ENCRYPTION_INFO&quot; -A 4</div><div style="line-height: 22px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cmd LC_ENCRYPTION_INFO</div><div style="line-height: 22px;">&nbsp; &nbsp; &nbsp; cmdsize 20</div><div style="line-height: 22px;">&nbsp; &nbsp; cryptoff &nbsp;8192</div><div style="line-height: 22px;">&nbsp; &nbsp; cryptsize 6053888</div><div style="line-height: 22px;"><b style="line-height: 22px;">&nbsp; &nbsp; cryptid &nbsp; 0</b></div><div style="line-height: 22px;">--</div><div style="line-height: 22px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cmd LC_ENCRYPTION_INFO</div><div style="line-height: 22px;">&nbsp; &nbsp; &nbsp; cmdsize 20</div><div style="line-height: 22px;">&nbsp; &nbsp; cryptoff &nbsp;8192</div><div style="line-height: 22px;">&nbsp; &nbsp; cryptsize 5001216</div><div style="line-height: 22px;">&nbsp;&nbsp;<b style="line-height: 22px;">&nbsp; cryptid &nbsp; 0</b></div></div></div></div><div>&nbsp;</div><div><img alt="iOS平台游戏安全之IPA破解 - danqingdani - 碳基体" src="http://img1.ph.126.net/JhCXIA4zZqFk7kdkU32NOA==/6598187969981632681.jpg" style="line-height: 22px; margin: 0px 10px 0px 0px;" /></div><div>&nbsp;</div><div><b style="line-height: 22px;">iTunesMetadata.plist&nbsp;</b><span style="line-height: 22px;">与</span><b style="line-height: 22px;">&nbsp;</b><b style="line-height: 22px;">SC_Info</b><span style="line-height: 22px;">目录的移除只是为了避免泄露正版购买者的一些基本信息,是否去除不影响ipa的正常安装运行。</span></div><div>&nbsp;</div><div><span style="line-height: 22px;">----破解防御部分---------------------------------------------</span></div><div>在IPA防御方面,目前没有预防破解的好办法,但可以做事后检测,使得破解IPA无法正常运行以达到防御作用。</div></div><div>而该如何做事后检测呢,最直接的检测方法是将破解前后文件系统的变化作为特征值来检测。</div><div>&nbsp;</div><div>通过分析PoedCrackMod源码,会发现根据破解前后文件时间戳的变化,或文件内容的变化为特征来判断是不可靠的,因为这些特征都可以伪造。如下所示,摘自于PoedCrackMod脚本</div><div><div>&nbsp;</div></div><div>&nbsp;</div><div><b>1.Info.plist</b></div><div><b>增加SignerIdentity,(目前主流的</b><b style="line-height: 25px; color: rgb(44, 44, 44); font-family: monospace; white-space: pre;"><span style="line-height: 25px; color: rgb(0, 136, 0); background-color: rgb(255, 255, 255);">MinimumOSVersion</span></b><b style="line-height: 22px;">版本为3.0,版本3.0之前的需要伪造SignerIdentity)</b></div><div><span>&nbsp;plutil -key </span>&#39;SignerIdentity&#39;<span> -value </span>&#39;Apple iPhone OS Application Signing&#39;<span> </span>&quot;$WorkDir/$AppName/Info.plist&quot;<span> </span><span>2</span><span>&gt;&amp;</span><span>1</span><span>&gt; /dev/null</span></div><div>&nbsp;</div><div><b>伪造Info.plist文件时间戳</b></div><div><span>touch -r </span>&quot;$AppPath/$AppName/Info.plist&quot;<span> </span>&quot;$WorkDir/$AppName/Info.plist&quot;</div><div>&nbsp;</div><div><b>2.iTunesMetadata.plist</b></div><div><b>伪造iTunesMetadata.plist文件</b></div><div><p style="line-height: 22px;"><span style="line-height: 22px;">plutil -xml&nbsp;</span>&quot;$WorkDir/iTunesMetadataSource.plist"<span style="line-height: 22px;"> </span><span style="line-height: 22px;">2</span><span style="line-height: 22px;">>&</span><span style="line-height: 22px;">1</span><span style="line-height: 22px;">> /dev/null</span></p><p style="line-height: 22px;"> </p><p><span>echo -e </span>"t<key>appleId</key>"<span> >> </span>"$WorkDir/iTunesMetadata.plist&quot; #伪造AppleID</p><p><span>echo -e </span>&quot;\t&lt;string&gt;ChatMauve@apple.com&lt;/string&gt;&quot;<span> &gt;&gt; </span>&quot;$WorkDir/iTunesMetadata.plist"</p><p><span>echo -e </span>"t<key>purchaseDate</key>"<span> >> </span>"$WorkDir/iTunesMetadata.plist&quot;<span style="line-height: 22px;">&nbsp;</span><span style="line-height: 22px;">#伪造购买时间</span></p><p><span>echo -e </span>&quot;\t&lt;date&gt;2010-08-08T08:08:08Z&lt;/date&gt;&quot;<span> &gt;&gt; </span>&quot;$WorkDir/iTunesMetadata.plist"</p><p> </p><p> </p><p style="line-height: 22px;">伪造iTunesMetadata.plist文件的时间戳</p><p style="line-height: 22px;"><span style="line-height: 22px;">touch -r </span>"$AppPath/$AppName/Info.plist"<span style="line-height: 22px;"> </span>"$WorkDir/iTunesMetadata.plist&quot;</p><p style="line-height: 22px;">&nbsp;</p><p style="line-height: 22px;"><b>3.mach-O文件</b></p><p style="line-height: 22px;"><b>Lamerpatcher方法中,靠替换mach-O文件中用于检测的特征字符串来绕过检测</b></p><p style="line-height: 22px;"><b>(题外话:设备是否越狱也可以通过检测文件系统的变化来判断,例如常见越狱文件,例如/Application/Cydia.app</b></p><p style="line-height: 22px;">&nbsp;</p><p>/Library/MobileSubstrate/MobileSubstrate.dylibd)</p><p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sed --<span>in</span>-place=.BCK \</p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -e </span>&#39;s=/Cydia\.app=/Czdjb\.bpp=g&#39;<span> \</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -e </span>&#39;s=/private/var/lib/apt=/prjvbtf/vbr/ljb/bpt=g&#39;<span> \</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -e </span>&#39;s=/Applicat\d0\d0\d0ions/dele\d0\d0\d0teme\.txt=/Bppljcbt\d0\d0\d0jpns/dflf\d0\d0\d0tfmf\.txt=g&#39;<span> \</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -e </span>&#39;s=/Appl\d0\d0\d0ications/C\d0\d0ydi\d0a\.app=/Bppl\d0\d0\d0jcbtjpns/C\d0\d0zdj\d0b\.bpp=g&#39;<span> \</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -e </span>&#39;s=ations/Cy\d0\d0\d0/Applic\d0pp\d0\d0dia.a=btjpns/Cz\d0\d0\d0/Bppljc\d0pp\d0\d0djb.b=g&#39;<span> \</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -e </span>&#39;s=ate/va\d0\d0/priv\d0\d0\d0pt/\d0b/a\d0r/li=btf/vb\d0\d0/prjv\d0\d0\d0pt/\d0b/b\d0r/lj=g&#39;<span> \</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -e </span>&#39;s=pinchmedia\.com=pjnchmfdjb\.cpm=g&#39;<span> \</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -e </span>&#39;s=admob\.com=bdmpb\.cpm=g&#39;<span> \</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -e </span>&#39;s=doubleclick\.net=dpvblfcljck\.nft=g&#39;<span> \</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -e </span>&#39;s=googlesyndication\.com=gppglfszndjcbtjpn\.cpm=g&#39;<span> \</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -e </span>&#39;s=flurry\.com=flvrrz\.cpm=g&#39;<span> \</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -e </span>&#39;s=qwapi\.com=qwbpj\.cpm=g&#39;<span> \</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -e </span>&#39;s=mobclix\.com=mpbcljx\.cpm=g&#39;<span> \</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -e </span>&#39;s=http://ad\.=http://bd/=g&#39;<span> \</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -e </span>&#39;s=http://ads\.=http://bds/=g&#39;<span> \</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -e </span>&#39;s=http://ads2\.=http://bds2/=g&#39;<span> \</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -e </span>&#39;s=adwhirl\.com=bdwhjrl\.cpm=g&#39;<span> \</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -e </span>&#39;s=vdopia\.com=vdppjb\.cpm=g&#39;<span> \</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span>&quot;$WorkDir/$AppName/$AppExecCur"</p><p> </p><p><span>            </span>#    "/Applications/Icy.app"</p><p><span>            </span>#    "/Applications/SBSettings.app"</p><p><span>            </span>#    "/Library/MobileSubstrate"</p><p><span>            </span>#    "%si %sg %sn %se %sr %sI %sd %st %sy"</p><p><span>            </span>#    "Sig nerId%@%@     ent ity "</p><p><span>            </span>#    "Si  gne rIde    ntity"</p><p> </p><p style="line-height: 22px;">伪造Mach-O文件时间戳</p></div><div><p><span style="line-height: 22px;"><span>touch -r </span>"$AppPath/$AppName/$AppExec&quot;<span> </span>&quot;$WorkDir/$AppName/$AppExec"</span></p></div><div> </div><div><span style="line-height: 22px;"> 所以最可靠的方法是根据cryptid的值来确定,为0便是破解版。当检测出破解版本时注意,为了避免逆向去除检测函数,需要多处做检测。同时检测函数要做加密处理,例如函数名加密,并要在多处进行检测。</span></div><div> </div><div><span style="line-height: 22px;">而根据特征值来检测破解的方法也不是完全没用的,可以将特征值加密成无意义的字符串,最起码</span>Lamerpatcher方法就无效了。同样,检测函数需要做加密处理,并要在多处进行检测。</div><div> </div><div>看了破解ipa的原理,你会发现,所有的工具和方法都必须运行在越狱机上,因此将安全问题托付给苹果,幻想他可以将iOS系统做得无法越狱,他提供的一切安全措施都能生效(例如安全沙箱,代码签名,加密,ASLR,non executable memory,stack smashing protection)。这是不可能的,漏洞挖掘大牛门也不吃吃素的,自己的应用还是由自己来守护。</div><div> </div><div>目前iOS平台游戏安全系列已完成3篇</div><div>《iOS平台游戏安全之八门神器内存修改,IAP Free游戏内购破解的防御》</div><div>《iOS平台游戏安全之存档修改与防御》</div><div>《iOS平台游戏安全之IPA破解原理与防御》</div><div> </div><div>计划再写两篇</div><div>《iOS平台游戏安全之逆向》</div><div><span style="line-height: 22px;">《iOS平台游戏安全之通信协议安全》</span></div><div><span style="line-height: 22px;">来完成本系列。</span></div><div><span style="line-height: 22px;">-----------------------------------------------------------补充部分-------------------------------------------------</span></div><div><span style="line-height: 22px;">感谢cdteam的huangzhuliang,指出了我文章中错误的地方</span></div><div> </div><div>补充:</div><div>iOS 应用软件保护的问题,除了上文提到的<span style="line-height: 22px;">在越狱机上安装破解软件外。还有一种,针对非越狱机的方法。</span></div><div>以PP助手和快用苹果助手为例,不越狱,也可以安装app store里的“正版”应用。</div><div>我们可以通过逆向PP助手的dll文件,发现其原理是将正版购买相关信息同步到设备上,让其通过签名检查。</div><div> </div><div><span style="line-height: 22px;">具体原理待分析</span></div><div> </div><div>欢迎交流!</div><div> </div><div>参考:</div><p>http://hackulo.us/wiki/</p><div><wbr style="line-height: 22px;" /></div>

- 阅读剩余部分 -

回归简约,做最真实的设计

<div><p></p><div style="page-break-after: always;"><span style="display: none;"><!--more-->& nbsp ;</span></div><p> </p><p>最近“扁平化”的界面设计风格风靡一时,早在Android4.0推出的时候此设计风格就已经得到了广泛的认可,再到iOS7的发布,则将这一设计风格推向了高潮。流行 “平”的界面风格不仅是一种趋势,它的内在本质是希望遏制和消除多余的视觉元素,做真实的设计。</p><p>技 术进步有时会过犹不及,在十九世纪,由于大规模的机械化生产,装饰品被快速及廉价的生产出来,导致商品被过度装饰。类似的事情发生在最近几年,由于显示和 样式技术允许设计人员能够创建丰富的视觉界面,导致拟物化设计(软件界面模仿现实世界中的实物纹理)和复杂样式的过度使用。</p><p>出于对在真实设计的追求,现代设计运动摒弃了19世纪过度装饰的设计风格,使设计更加适合大规模生产。今天,我们看到对“真实的设计”的追求以“扁平化”的趋势呈现出来,它拒绝拟物化设计以及过多的视觉效果,追求简单,干净,以内容为中心的设计。</p><p>  现代设计的诞生</p><p>19 世纪后期,工业革命爆发,机械化大生产,对已有装饰风格的疯狂复制导致了大量劣质、扎眼的商品,一些有影响力的现代设计先驱诸如奥地利建筑师阿道夫·洛斯 的对此深感不满,同时现代设计先驱以自己的实际设计作品影响世人,倡导现代设计,例如:“现代建筑的旗手”——著名建筑师勒·柯布西耶、“摩天大楼之父” ——路易斯·沙利文。到了20世纪中期,随着德国现代设计运动先驱赫尔曼·穆特修斯的奔走相告、现代派建筑师菲利普·约翰逊的作品在纽约现代艺术博物馆的 成功展出,将现代设计运动逐步推向高潮。</p><p>经过大半个世纪的时间,现代主义运动开始盛行,直到20世纪中期,传统的风格和技巧被新的设计方法所超越。其主旨是:远离不必要的装饰,走向一个更干净,更内敛克制的设计形式,其美在于内容本身,而不是外在装饰,寻求一个和谐的形式与功能的融合。</p><p>  数字化装饰</p><p>如 果我们将短暂的软件设计、网页设计和现代设计的历史来做比较的话可以发现,两者有着相同的发展过程,机械化大规模生产导致的过度的装饰在软件和网页设计中 也可以看到,由于显示和样式技术的迅猛发展,在软件界面和网站中,大量的装饰性的元素被过度使用。在早年的Web设计师中热衷于使用动画、声音与图像,产 生过于丰富的效果。</p><p>早期的带有图形用户界面的操作系统在外观和感觉上是相当基本的。当然,现实世界的隐喻,也得到了运用,比如用图像文件夹 来表示文件目录,带有斜面的按钮让用户知道它们是可以点击的。但整体的审美感觉是“扁平化”且克制的。不管设计者是否想提供一个丰富的视觉体验,但是黑白 两色且低分辨率的显示器限制了他们。</p><p>  第一代Mac OS图形界面只用了两种颜色,苹果通过模仿现实生活中的物体来在传达深度、纹理、按钮和图标等概念,界面的美观受制于当时的技术,而不是设计师。</p><p>随着技术的发展,设计师们获得了广阔的施展空间,视觉的自由度得到了极大的提升。对于Windows XP,微软推出了一个丰富多彩的风格,通过运用大量的亮部,阴影和渐变来模拟一个现实物理外观。</p><p>苹 果发布的Mac OS X则走得更远,富有光泽的塑料气泡造型的界面,拉丝铝的逼真图标等等。随着时间的推移,操作系统的视觉样式得到加强,微软赋予Windows光泽,透明玻 璃般的主题,而苹果公司则为其桌面和移动操作系统赋予材质感、拟物化更强的设计风格,如带有皮革纹理的日历应用程序,以及电子书阅读器逼真的翻页效果。</p><p>  Windows Vista的界面特色Aero主题,其光泽以及像玻璃一样的窗口镶边。</p><p>模 仿现实生活中对象和纹理的样式,被说成是“拟物化”——借用现实世界里的符号作为设计元素,目的是为了让界面为用户所熟悉。最近,设计师们开始质疑笔记类 的应用程序是否一定要设计成纸质笔记本的样式,或日历类应用程序是否一定要设计成皮革和翻页效果。这样的做法确实能够给用户来视觉上趣味性,但是同时它为 了配合现实生活中的静态感受却与数字界面的流动性和活力格格不入。</p><p></p><p>  当前版本的OS X的日历有一个模仿真实日历外观的缝制的皮革质地和纸边撕裂的效果。</p><p>随着最新版本的Windows 8发布,微软迈出了勇敢的一步,远离这些多余的视觉效果,试图给其操作系统的全数字化的感受,用本文的观点来说,这是“真实的设计”。最新的界面是建立在微软开发其早期的移动版本。所呈现给用户的审美准则毫无现实生活中物体纹理。</p><p>相 反,Windows8依赖排版,间距和颜色带来优雅而有秩序的数字模块。现实生活中的效果以及多余的样式被摒弃,剩下的就是简单的内容本身。非常像海尔 曼·穆特修斯曾经提到的以火车站作为例子的“机器美学”,微软设计师指出以火车站标志为灵感的新Windows界面,以前被称为“Metro”。</p><p>  Windows 8的开始屏幕上打破传统的桌面设计方式,由扁平的,丰富多彩的磁片组成,而不是图标。磁片不仅是一种风格上的选择,而且他们让有用的信息以仪表板的方式在启动画面上呈现。</p><p>多 年来,在网上已经看到了类似的转变。早期基于表格和Flash的设计让开发者能够以像素级别的细致度来完美实现界面,所以设计师毫不犹豫地为内容设计出丰 富的视觉容器。当我们开始面对新媒体的流动性时,将展示和内容分开,网页设计变得更加克制。高度装饰的容器不能轻易改变它们的宽度和位置,所以设计师较少 使用图像,并更多地依靠简单的CSS样式,使他们的布局适应性更强且更易于维护。</p><p>响应式设计(为使一个页面适应不同的屏幕尺寸和设备)的最 新发展要求设计师的工作在一开始就要跳过可视化编辑器(如Photoshop),介入到代码当中去,让我们进一步实现一个简单的,以内容为中心的网页设计 美学,它的美感源于排版,间距和颜色,而不是靠真实的设计运用纹理和装饰性的图片。</p><p>最近,苹果、作为 “拟物化”设计的引领者,通过iOS7的发布,也已经迈出了向数字化设计的第一步。缝制的皮革纹理和撕开纸张边缘的拟物化设计已经一去不复返了,取而代之 的是一个简约而扁平界面,它色彩丰富、图标简单、表面半透明。苹果iOS7对过去的“拟物化”设计做了一次彻底的转向。</p><p>  真实的设计</p><p>促使现代设计理念在软件和网页设计中盛行的关键在于对设计真实性的追求,这种追求使得设计师将装饰性的东西从他们的工作中剔除,将数字设计引向干净、以功能为主的美学标准。然而到底是什么使设计变得“真实”呢?</p><p>真 实的设计旨在避免虚假的装饰,它倾向于使用材料本身的质感,没有遮掩、没有虚假的纹理,展示材质自身的优点,而不是试图隐藏弱点。真实的设计是以一个用户 熟悉且能感知有用的方式来展示功能。真实的设计是以功能优先于形式、目的在于提高效率。真实的设计是摒弃外在装饰转而寻找美丽纯净的内在本质。</p><p>在数字化设计中,真实设计可以概括为着以下几点:</p><p>  拥抱数字化的外观。</p><p>在设计中我们没有必要去模仿诸如金属,木材和皮革的纹理。他们不是数字化的界面,所以模仿这些毫无意义。这并不意味着设计只是平面背景颜色,而是我们不应该试图模仿或受限于现实世界中的纹理。</p><p>  破除“拟物化”设计。</p><p>数 字图书不需要模仿物理纸张翻页效果,也不需要一个记笔记的应用程序看起来像一个物理的纸本子,皮革封面,撕裂的边缘和手写风格的字体。“拟物化”设计也并 非一无是处,但它总是在界面上增加了视觉负担。例如,纸本是静态的,一维的,但数字界面却非这样,一旦这个界面模仿了现实中的纸本,它就陷入到物理隐喻的 约束当中了。</p><p>  以内容为中心的设计风格。</p><p>聚焦内容,而不是它的样式和装饰。你可能会认 为这点是老生常谈,但有多少次你在网站上看到一个现成的,现成的主题?主题是始终建立在虚构内容,所以,就其本质而言,绝不可能完美的代表内容。虚构文本 的主题推动设计师专注于造型和装饰,而不是内容上,因为那里根本就没有内容。只有当你在处理实际的内容时,你才开始真正将功能和形式有机结合。</p><p>  并非极简主义</p><p>基于功能的设计美学不能等同于极简主义风格,前者试图去除多余的设计,使产品更易理解,有更好的表现同时让其展现材质本身的美感,后者则是试图建立一个极简的美感,给设计对象一个简单和干净的光环而已。一个是基于功能的设计准则,另一个则是一种风格的选择。</p><p>生 硬的套用极简的设计美学,将界面设计的简单而数字化,时常会是个误区。举个例子,一股脑地消除视觉效果,如阴影,颜色和不同的背景样式未必会让界面更容易 使用。在某些情况下,这相反的破坏了界面的层次结构和重点,而之前这些层次结构和重点都是建立在阴影和背景颜色之上的。</p><p>在《The Laws of Simplicity》中John Maeda指出,“要达到至简的最简方式就是通过深思熟虑做减法。当有疑问时,只是做删除​​,但要小心你所删除的。”最后的警告是非常重要的。删除东西 导致简化,往往只因为需要用户关注的东西变少了,但是减少视觉元素可以在情感上帮助用户来处理界面信息,比如项目分组、按钮和标签的区分、突出对象所用到 的图形元素都会分散用户注意力,如果运用不当都会给用户造成更多的干扰,而非是让所谓的样式、原则来指导设计。</p><p>  为什么真实的设计如此重要</p><p>“Rise”这个应用是一个完美的例子。闹钟在现实生活中是一个已经解决了的问题,但是Simplebots决定重构这个概念,重新思考一个基于纯数字环境的界面。</p><p>  在Rise应用程序中,用户以一个创新的全屏幕滑块来设置的时间,以背景颜色的变换来反应映天空的颜色</p><p>“Rise” 界面设有一个全屏幕的滑块,在你设定的时间的时候背景色的改变用以反映天空的颜色。它没有试图去模仿一个物理的时钟或物理滑块或现实生活中的纹理。相反, 设计师充分利用智能手机的触屏,以介质本身来创造一种全新的体验。创新性的设计不仅使其有一个伟大的用户体验,并让它在应用市场上脱颖而出。</p><p>像 “Rise”界面的设计只有当你对数字化画面有一个全面的掌控,而非仅仅是照搬现实世界中的一些解决方案才能得到的。数字;屏幕可以产生抽象的形式,动 画、鲜艳的色彩以及均匀的色调,没有必要被限制在压抑的色调或静态展示当中,也无需被绑死在“拟物化”的设计形式上。如何通过利用像素网格找到最好的展示 内容,我们可以得出更好,更简单的解决方案,创新的界面设计让用户有宾至如归的感觉,提供更好的用户体验,让产品脱颖而出。</p><p>最近广为推崇的 “扁平化”的设计风格可能会是一个趋势,但它也是对“真实的设计”追求的一种体现,这种追求体现在抑制多余的装饰,专注于内容本身。技术进步有时会过犹不 及,就像在19世纪机械化批量生产造成装饰的真实的设计使用,以及显示和样式技术在早年的网页和软件设计中的泛滥。随着时间的推移,过度装饰得到抑制,现 代主义的设计先驱寻求基于功能的美学标准,软件和网页设计中的过度设计也会得到抑制,转而去追寻“真实的设计”。</p></div>

- 阅读剩余部分 -

Android、iOS和WP平台的六大差异

<div><div><p>iPhone、Galaxy S3 以及 Lumia 920是 市场上如今最引人注目的三款智能手机,正好对应iOS、Android及Windows Phone三大平台,尽管三大操作系统在市场份额、出货量以及用户认可方面都有着不小的差异。 但更能我们兴趣,更有讨论价值的其实是这三大平台在设计方面的差异,这不仅最终决定着用户的体验,也决定了开发者的参与热情。</p><p>来自微信公众帐号“互联网er的早读课”的这篇文章从包括变局、导航逻辑、设计风格等六大方面的差异对三大平台的交互设计进行了较为深入的分析和讨论,极具参考价值。</p><div style="page-break-after: always;"><span style="display: none;"><!--more-->& nbsp ;</span></div><p>一 布局形式的差异</p><p>1)iOS 经典的“tab bar”</p><p>在 iOS 应用内如果要切换不同的模块,或者页面内要切换不同的栏目,往往都会用到“tab bar”这一形式的控件。这个经典设计从 iOS 早期沿用至今,大部分 iOS 应用都是这样设计的。当然,iOS 本身是很包容的,最近也很流行抽屉式导航。但是 tab bar 一直是最受欢迎也最好被用户认知的方式:</p><center>Android、iOS和WP平台的六大差异</center><p>2)Android 提供了 2 种视图控制方式</p><p>在 Android 4.0 规范出来之后,Android 提出了 2 种视图控制方式,一种是直接在导航栏的标题下加入一个触控按钮,点击后会弹出切换栏目的菜单(图中 2 标注的位置)</p><center>Android、iOS和WP平台的六大差异</center><p>比如日历应用点击后可以切换不同的视图,另外一种是直接在导航栏的下面加入了一个视图控制栏(下右图中 2 标注位置),和 iOS 的 tab bar 很像,不过是仅放在了上面,而且提倡支持手势滑动切换:</p><center>Android、iOS和WP平台的六大差异</center><p>3) Windows Phone 的创新</p><p>Windows Phone 与上面两个平台就差距很大了,因为 Windows Phone 独特的 Metro UI 提倡回归传统的阅读体验,像浏览报纸和杂志一样浏览手机上的内容,更关注与内容而不是修饰,所以 Windows Phone 整体都给人一种像在看杂志的感觉。Windows Phone 的视图控制通过一种叫做“全景视图”的方式展开(下图)。</p><center>Android、iOS和WP平台的六大差异</center></div><div><p>实际上,4 个视图的内容是在一个页面上的,而且是一个页面同时加载的。用户的手机默认只显示第一屏的内容,通过滑动把后面的内容拉出来。</p><p>这种视图方式很创新,而且方便阅读,不得不说浏览的体验好了很多。但是需要注意的是:</p><p>因为其实这3个栏目是同一页面视图,所以不要将内容放的过多,否则加载会很慢影响效率;</p><p>对交互设计过程中的排版和视觉提出了很高的要求;</p><p>另外,Windows Phone 还提供了一种叫做枢轴的方式,枢轴和 iOS 的 tab bar 相差不是很大,只不过完全是通过滑动来切换栏目的:</p><center>Android、iOS和WP平台的六大差异</center><p align="center">(枢轴布局)</p><p>二 导航逻辑的差异</p><p>大家都知道 iOS 是没有实体返回按键的,所有返回都是通过导航栏的 back 按钮来完成。</p><center>Android、iOS和WP平台的六大差异</center><p>在 iOS的导航逻辑中,我们可以明显的看出来,整个程序是一页一页的切换,就像一个幻灯片。而返回按钮也就是切换到上一页。所以,iOS 的返回控制的是页面。</p><p>但是 Android 和 Windows Phone 就不是这样了,Android 和 Windows Phone 是有物理返回按钮的,点击物理返回按钮,控制的不光是一个页面,而且包括了上一步的操作,比如说:</p><p>进入页面 A,点击文本框弹出键盘。那么点击返回按键就是收起键盘。</p><p>所以 Android 和 Windows Phone 的返回逻辑是按照时间流来判断的,而不仅仅是页面,返回按钮控制的是动作。</p><p>需要特意提一下的是:Windows Phone 的返回逻辑不单限于应用内,还影响到应用之间。也就是说你当前正在桌面,再点击一次 back,就会进入你上一次打开的应用。</p><p>另外在 Android 4.0 开始,提出了一个向上的概念,就是导航栏标题前面的一个小箭头,点击这个箭头,是回到该页面的上一个层级:</p><center>Android、iOS和WP平台的六大差异</center><p>三 应用之间联系的差异</p><p>众所周知,iOS 是一个封闭的系统,而 Android 是一个开放的系统。</p><p>我 们可以比喻 iOS 每一个应用都是一个小房间,每个应用都在自己的房间里做自己的事情,互相之间不进行任何来往。而 Android 则是一个大大的办公区,每个应用虽然也有自己的工位,但是可以互相串门或者借用东西,而 Windows Phone 则遵循着和 iOS 差不多的方式。到了 iOS 6 的时候可以支持应用直接互相跳转了,但那也仅限于你跳出去了,就不再回来了,也就是说到了那个房间你就是那个房间的人了,与之前的房间没有关联了。</p><p>这样的差异意味着,iOS 和 Windows Phone 应用的权限变得很低,身为应用的你既不能修改系统的一些属性(除非越狱了),也不能修改其他应用的内容。而 Android 的一款应用不但可以控制系统的一些操作,还可以控制其他应用执行某些特定的操作。</p><p>这 种差异会让 Android 上的应用设计有了更多的可能,身为设计师的你可以根据这一特性设计很多不错的功能,比如系统美化或者系统优化,杀毒,拦截电话等功能,而 iOS 和 Windows Phone 就不能。但是这也让 Android 系统面临了很严峻的安全问题,所以Android上各种优化和杀毒软件很流行。</p><div><p>四 多任务的差异</p><p>多任务的差异用一句话来形容就是:iOS 和 Windows Phone 都是假的多任务,而 Android 是真的多任务。</p><p>如果你设计的应用有下载,那么 iOS 和 Windows Phone 切换到后台下载就被暂停了,而 Android 不但不会暂停,你还可以设计一些偷偷在后台运行的功能。</p><p>五 分辨率的差异</p><p>亲,你知道Android现在有多少种分辨率吗?</p><center>Android、iOS和WP平台的六大差异</center><p>(TECH2IPO 注:此数据图显示的是 2011 年 Android 手机状况,现在,相关问题已经有所缓解和减轻。)</p><p>适 配一直是 Android 很头痛的问题,身为前端往往要为不同的分辨率调效果而保证界面不会变形和模糊。而分辨率问题不仅仅影响视觉这一块,对交互设计也有很大的影响。因为这些手 机往往屏幕比例也是不同的,你需要考虑不同的长宽比下,你的界面布局应该是怎样的。所以在设计 Android 的时候,你不能要求把界面布局写死,应该尽量保证每个控件都是浮动的,而且自己能评估出各种古怪的布局下的效果。</p><p>iOS 和 Windows Phone 就会好很多。iOS 分辨率分为 320x480,640x960,640x1136,Windows Phone 分辨率分为 480x800,800x1280,800x1136。虽然看起来也蛮多的,但是界面的比例基本上没有什么变化。所以对于交互上的布局影响并不是很大,视 觉设计师也可以通过脚本缩小裁图简单的解决问题。</p><p>六 设计风格的差异</p><p>设计风格是这 3 个客户端自己独特的个性,设计风格不单影响的是视觉设计的层面,对交互设计也非常的重要。尤其是在考虑动效,拟物化交互的时候需要重视。iOS 的设计风格偏向拟物化风格,这个拟物化不光是视觉上做出很多拟物的小按钮小控件的,为了配合视觉,你往往在交互上也可以加一些生动有趣的内容。</p><center>Android、iOS和WP平台的六大差异</center><p>比如说像最新的 Path,进入商店时遮阳板会有一个收起的效果,小卡片也会根据重力感应而摇摆。如果交互上就能体现出平台的设计风格的话,无疑会非常讨好用户,增加产品细节上的亮点。</p><p>Android 平台就简单一些了,在整体的布局和交互形式和 iOS 差不多的情况下,尽量的简洁,呈现一种科幻的风格即可以了。Android 平台尽量少用拟物化的动效,因为 Android 系统对于动画效果的渲染比较差,如果太复杂的话可能会让界面非常的卡。</p><p>Windows Phone 平台则有着很大的不同,Metro UI 的理念要求设计者更多的考虑如何展现内容,使用平滑的过渡动画。而且还对设计者的排版和平面设计提出了一些考验。所以建议交互设计的人好好读读 WindowsPhone界面设计准则,并且平时就积累一些Windows Phone界面的视觉界面感觉,不然视觉设计师很可能会埋怨你哦!</p></div></div></div>

- 阅读剩余部分 -

iOS 7人机交互指南-设计策略-From Concept to Product(从概念到产品)

<div>定义你的App</div><div>在这个阶段需要明确app的主要使用目的和目标受众。在开发初期要对app进行明确的定义,从而帮你把一个想法或者功能列表变成清晰明了的产品。在整个开发过程中用app定义描述来决定潜在功能和交互行为是否有意义。步骤如下:</div><div> </div><div>1.列出所有你认为用户可能喜欢的功能</div><div>集思广益,尽量捕捉所有跟主要产品理念有关的任务,不要担心列表太长,后期你会进行大量删减。<div style="page-break-after: always;"><span style="display: none;"><!--more-->& nbsp ;</span></div></div><div> </div><div>假设你最初是想开发一款grocery-shopping app,可以帮人们在杂货店购物,随后你列出了相关的任务,也就是产品潜在的功能,这是你认为用户可能感兴趣的地方。比如:</div><div>创建列表</div><div>获得食谱</div><div>注释食谱</div><div>比较价格</div><div>定位商店</div><div>获得和使用优惠券</div><div>查看烹饪演示</div><div>...</div><div>...</div><div></div><div>2. 弄清目标用户是谁</div><div>弄清楚你的用户与其他iOS 用户有什么区别?在你想象的场景中,用户最需要的是什么?拿 grocery-shopping app举例,你可能会问你的客户:</div><div>经常在家做饭,还是更喜欢现成的</div><div>使用优惠券还是觉得优惠券不值得兑换</div><div>喜欢搜罗特别的烹饪原料,还是很少冒险尝试基本材料以外的</div><div>跟着食谱做还是把食谱作为灵感的来源</div><div>经常性地购买小包装,还是偶尔购买大包装</div><div>经常购买某些特定的品牌,还是将就下选择最方便的</div><div>...</div><div>...</div><div> </div><div>经过一番思考,假设你使用三个特征来描述目标用户:喜欢尝试不同的食谱,经常处于匆忙状态中,节俭。</div><div> </div><div>3.通过定义用户来筛选功能列表</div><div>在选定用户特征后,最终筛选出了几个功能,说明你走对路了,伟大的iOS app专注于帮用户完成任务。</div><div> </div><div>你在Step 1中列出了多个app可能需要的功能,即便它们都是非常有用的功能,但并非你在Step 1定义的所有用户都会欣赏这些。当你针对目标受众检查app功能列表时,你推断你的app应当主要关注三个功能:创建列表,获得和使用优惠券以及获得食谱。</div><div> </div><div>现在你可以细化app的定义陈述,app的使用目的什么,用户是谁。那么对于grocery-shopping app,它的描述可能是:是一个为喜欢烹饪,爱节俭的用户创建购物清单的工具。</div><div> </div><div>4. 不要停在这里</div><div>在开发过程中要使用app定义描述来确定app的功能、控件以及措辞。比如:</div><div> </div><div>当考虑添加新功能的时候,你要问问自己,从app的使用目的和受众看,新功能是否必不可少。如果不是,那就先放一边。当你考虑UI的外观和交互性时,你要问问自己,用户是否欣赏简洁的,流线型风格,或者一个更明显的主题风格。</div><div> </div><div>把“用户希望用你的app做什么?”作为指导,比如说用户可能希望用app完成严肃性的任务,或者得到快速回复,或者深入更全面的内容,或者进行娱乐活动。</div><div> </div><div>举个例子,即便你的grocery list app是简单的、易理解的、可以快速上手的,但你的用户可能也会欣赏跟美食、食材相关的主题UI图片。</div><div> </div><div>当你考虑术语措辞的时候,要努力使之与目标用户的专业知识相匹配。即便你的用户可能不是专业厨师,但你要相信他们也希望看见适当的跟配料和技术相关的术语。</div><div> </div><div>5.为任务量身定制UI</div><div>最好的iOS app会用清晰的目的和易用性来平衡定制UI。为了达到这种平衡,你应该在设计之初就开始考虑自定义。因为品牌、创意以及可销售性常常会影响定制的决定。</div><div> </div><div>首先考虑用户多久使用一次,在什么情景下使用?</div><div> </div><div>用phone app来举例。假定app使用的不是小键盘,而是一个漂亮的,仿真旋转式拨号盘。用户会因精致的渲染而欣赏它的品质,会因听到与众不同的声音而快乐。但对 于经常需要拨号的用户而言,最初的欣赏会变成挫折,因为使用老式拨号盘远没有小键盘效率高。在这款phone app中,漂亮的定制UI就是个障碍。</div><div></div><div> </div><div>当你思考自定义如何增强或偏离app允许的任务时,可以参看以下指南。</div><div>总有定制化的理由。理想情况下,UI定制可使人们想要完成的任务变得简单,增强用户体验。你需要尽可能地让任务驱动定制的决策。</div><div> </div><div>可能避免增加用户的认知负担。用户熟悉标准UI的外观和交互行为,所以不需要停下来思考如何使用它们。当看到外观和交互动作与标准UI不一致的元素,用户就失去了经验优势。除非app独特的元素可以让任务变得更简单,用户可能不会喜欢被强迫着学习新程序,且所得经验又不能用至其他app。</div><div> </div><div>App自定义外观和交互性应保持一致。UI越是定制化,在app中保持外观和交互的一致性就越重要。如果用户花时间学习不熟悉的控件,他们会希望这些知识能应用在整个app中。</div><div> </div><div>依从于内容。标准UI元素是如此的熟悉,以致于它们不会与内容争夺用户的注意力。当app使用定制UI时,要确保它们不会“掩盖”用户关注的内容。</div><div> </div><div>比如,你的app主要用来观看视频,你可能会选择设计定制“playback”控件。但不管使用自定义控件还是标准的“playback”控件,都没有控件隐藏(开始观看视频控件隐藏)或者重现重要(观看过程中点击屏幕重现控件)。</div><div> </div><div>重新设计标准控件前要三思。如果你不仅仅想自定义标准控件, 那要确定你重新设计的控件可以尽可能多地提供标准元素所能提供的信息。比如,一个自定义开关控件没能表现出对立的价值,那用户可能不会意识到这个控件有两种状态。 </div><div> </div><div>确定自定义UI元素经过彻底的用户测试。在测试中要密切观察用户,看看他们是否知道自定义UI元素的用途,能否与之进行简单的交互。如果控件的hit target小于44 x 44 points,用户就很难激活它。</div><div></div><div> </div><div>原型和迭代</div><div>在投入大量工程资源进行设计之前,为用户测试创建原型是个很好的方法。即使仅有几个同事对原型进行了测试,你也将从他们的反馈中获益。</div><div> </div><div>在 设计的早期阶段,你可以使用纸上原型或者线框图来布置主要的视图和控件。你可以从测试线框图中得到有用的反馈。但它的局限性也可能误导测试者,因为他们很 难想象在线框图被真实内容实现后,用户体验会发生什么样的变化。如果人们可以在设备上与原型进行交互,那他们更有可能发现app缺失的功能,或者什么地方 的用户体验太过复杂。</div><div> </div><div>创建一个可靠的原型,最简单的方法是使用基于storyboard的xcode模板来创建最基本的一个程序。然后用适当的占位符内容进行填充(<u>storyboard</u>文件可以捕获整个APP的UI,包括不同界面之间的切换)。接着在设备上安装原型,这样测试者就能尽可能地获得真实的用户体验。</div><div> </div><div>你不需要提供大量的内容,或者在原型app中应用每个控件,但要确定所提供的内容足够实现逼真的体验。要针对典型用户体验和不寻常的边缘用户体验进行平衡。比如,如果你的app可能处理很长的项目列表,那你要避免创建一个仅显示一两个列表项目的原型。</div><div> </div><div>用户交互测试方面,只要测试者可以点击屏幕上任意区域进入下一个逻辑视图,或者执行主要任务,他们将能提供建设性的反馈。</div><div> </div><div>当你利用xcode模板来构建原型时,不仅可以使用许多免费的功能,且能够简单地根据反馈调整设计。在确定设计和提交需要实现的资源之前,你应该能够测试几个迭代原型</div>

- 阅读剩余部分 -

随机文章

最近回复

  • 转身后仰~刷: 都说中庸是思维毒瘤,...
  • ouzo: Thanks to ...
  • ouzo: No problem...
  • Smithe741: I like wha...
  • maomao: 找到这个了很好的推荐...
  • 里斯: 终于找到在windo...
  • ouzo: 确实有点慢了. 最近太忙了
  • UXD: 写了这么久还是两篇文...

分类

其它

友情连接

推广链接