版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGEIPAGEV毕业设计题目:APK反编译系统的设计与实现 摘要通过在多年在多家游戏公司工作经验,我发现了APK游戏可以使用一些工具进行反编译操作,大大减少前端工程师在游戏开发中所花的时间,从而使项目效率大大提升。随着国内外游戏平台迅速发展,HUAWEI也在海外各个国家开通了属于自己的游戏平台项目,让自己公司多样化发展,也给许多国内外公司提供了一个不可小觑的平台,譬如南太地区项目菲律宾GLOBE平台在盛行时间每个月流水高达500万美元,这个巨大的利润驱使着各大游戏公司加速开发及发行游戏,所以必须减少自己的开发时间使得利益最大化,期间也大量搜罗反编译信息及其他公司开发人员的开发时间和项目开发所用的引擎和语言,大批开发人员在在开发路上投入的时间如此之多且又重复浪费时间多。基于该目的,我决定我要开发一套完整的反编译游戏系统,鉴于还要普及测试人员或者其他没有从事过编程的人员,此系统必须简单易懂为节省各个环节的宝贵时间,甚至在其他游戏开发或者软件都能用到次系统。我做的这个反编译游戏系统,可以让前端开发人员大大减少开发上所需要的时间,从而更快开发游戏并上线到平台上获得利益,该系统为使用者提供了UNITY3D引擎游戏反编译后的dll修改注入和ASSET修改方法,从简单的注入广告插件到复杂的修改游戏本身的逻辑代码和修改删除游戏本身内的ASSET图集或者单张游戏资源,再比如游戏声音音效也可以修改。关键词:游戏引擎;UNITY3D;反编译;DecompileABSTRACTThroughyearsofexperienceinanumberofgamecompanies,IfoundthatAPKgamescanbedecompiledusinganumberoftools,greatlyreducingthetimespentbyfront-endengineersingamedevelopment,thusgreatlyimprovingprojectefficiency.Withtherapiddevelopmentofgameplatformsathomeandabroad,HUAWEIhasalsoopeneditsowngameplatformprojectsinvariousoverseascountriestodiversifyitsowncompany,andalsoprovidesaplatformformanydomesticandforeigncompaniestobereckonedwith,suchastheSouthPacificregion.ProjectPhilippineGLOBEplatformflowsupto5millionUSdollarspermonthduringtheprevailingtime.Thishugeprofitdrivesthemajorgamecompaniestoacceleratethedevelopmentandreleaseofgames,soitisnecessarytoreducetheirdevelopmenttimetomaximizethebenefits,andalsoalargenumberofdecompiledduringtheperiod.Informationandthedevelopmenttimeofothercompanydevelopersandtheenginesandlanguagesusedinprojectdevelopment,alargenumberofdevelopersspendsomuchtimeonthedevelopmentroadandwastemoretime.Forthispurpose,IdecidedthatIwoulddevelopacompletedecompiledgamesystem.Inviewoftheneedtopopularizetestersorotherpeoplewhohavenotprogrammed,thesystemmustbeeasytounderstandtosavevaluabletimeinallaspects,eveninotherSub-systemscanbeusedingamedevelopmentorsoftware.ThedecompiledgamesystemImadeallowsfront-enddeveloperstogreatlyreducethetimerequiredfordevelopment,therebydevelopinggamesfasterandgettingbenefitsontheplatform.ThesystemprovidesuserswiththeUNITY3Denginegamedecompiled.ThedllmodificationinjectionandASSETmodificationmethodsrangefromsimpleinjectionofadpluginstocomplexmodificationofthegame'sownlogiccodeandmodificationoftheASSETatlasorsinglegameresourceswithinthegameitself,aswellasgamesoundeffects.Keywords:gameengine;UNITY3D;decompilation;Decompile北京理工大学现代远程(继续)教育学院毕业设计(论文)PAGE25目录TOC\o"1-3"\h\u13825摘要 I7332ABSTRACT II21490目录 331572前言 612414一手机游戏对当今社会老百姓的影响 755061.1UNITY引擎的介绍 714361.2Unity游戏引擎的优势 845551.2.1可定制的IDE环境 8271221.2.2基于Mono的开发脚本 8299071.2.3基于组件的对象系统 9158401.2.4所见即所得 10313851.2.5代码驱动的开发模式 10158741.2.6多平台发布 108911.2.7良好的生态圈 1120135二Unity游戏反编译的规划 11313102.1总体规划 11286822.2反编译价值 1110732.3Unity游戏反编译的优势 1223892.4谨告 124107三安卓游戏的封装 12268043.1安卓游戏构成 12191473.2构建步骤 1223033.2.1AAPT 12263453.2.2AIDL 12291303.2.3JAVAC 13227163.2.4DX 13278653.2.5APKBUILDER 13303603.2.6JARSIGNER 13256723.3Google官方构建流程图 138923四Untiy游戏编译、反编译原理及环境系统环境布置简要阐述 1558694.1Unity游戏反编译工具介绍 1559594.1.1APKIDE 15319264.1.2Reflector 16257024.1.3UnityStudio 18171714.1.4UnityAssetsExplorer 1932684.1.5Apktool 2018868五Unity游戏及DLL的初次打包 2390305.1Unity3D引擎发布APK游戏 2325895.2mono编辑器生成DLL步骤 24196855.2.1新建 24268395.2.2Mono编辑器选择Unity的api 26188365.2.3写入简单函数 2895545.2.4生成DLL 3013185.2.5在Unity中使用新生成的DLL 3414595.2.6在Unity场景中在新DLL下添加脚本 35308135.2.7运行DLL 361566六反编译工具详细使用过程 3691076.1解包 36202816.1.1APKTOOL 36306266.1.2APKIDE 3656396.2提取并修改图片 37223406.2.1AssetStudio(原UnityStudio) 37265316.2.2修改图片 38130276.3DLL注入修改 38148406.3.1Reflector修改DLL 3842066.4重打包并签名 3859826.4.1APKIDE重打包并签名 3815176结论 3924139致谢 4024104参考文献 41前言通过在多年在多家游戏公司工作经验,我发现了APK游戏可以使用一些工具进行反编译操作,大大减少前端工程师在游戏开发中所花的时间,从而使项目效率大大提升。随着国内外游戏平台迅速发展,HUAWEI也在海外各个国家开通了属于自己的游戏平台项目,让自己公司多样化发展,也给许多国内外公司提供了一个不可小觑的平台,譬如南太地区项目菲律宾GLOBE平台在盛行时间每个月流水高达500万美元,这个巨大的利润驱使着各大游戏公司加速开发及发行游戏,所以必须减少自己的开发时间使得利益最大化,期间也大量搜罗反编译信息及其他公司开发人员的开发时间和项目开发所用的引擎和语言,大批开发人员在在开发路上投入的时间如此之多且又重复浪费时间多。基于该目的,我决定我要开发一套完整的反编译游戏系统,鉴于还要普及测试人员或者其他没有从事过编程的人员,此系统必须简单易懂为节省各个环节的宝贵时间,甚至在其他游戏开发或者软件都能用到次系统。本文关于反编译游戏系统,可以让前端开发人员大大减少开发上所需要的时间,从而更快开发游戏并上线到平台上获得利益,该系统为使用者提供了UNITY3D引擎游戏反编译后的dll修改注入和ASSET修改方法,从简单的注入广告插件到复杂的修改游戏本身的逻辑代码和修改删除游戏本身内的ASSET图集或者单张游戏资源,再比如游戏声音音效也可以修改。一手机游戏对当今社会老百姓的影响目前,我们的社会已经全面进入了全民智能手机时代,手机游戏已经普遍存在于各个老百姓的手机中也和生活娱乐息息相关,手机游戏目前又处于一个历史飞跃时期,由普通娱乐模式逐渐迈向手机游戏线上娱乐模式。在游戏如此高速发展的今天,各种各样的游戏逐渐迸发出来。随着智能手机的更新换代,手机的性能日渐攀升,我们可以发现在我们身边人们的智能手机中已经安装了各种各样的游戏应用程序,在线HTML5类游戏,本地安装包形式,而当前主流游戏应用程序全部爆发在本地版装包形式,游戏给我们带来了许多欢乐和消磨时间的快感,甚至各种棋牌类游戏都有了手机版,给上了年纪的老百姓带来了许多的便捷,更好的在家中甚至在远方就可以拿出手机来一把畅快的游戏,这些游戏应用程序都离不开一个完美的游戏引擎,如果想要快速开发游戏就有了反编译游戏。1.1UNITY引擎的介绍Unity3D的是一个屡获殊荣的工具,用于创建交互式3D应用程序在多个平台.Unity3D由游戏引擎和编辑器。该引擎包含的软件组件,在游戏的研究与开发中最常见的和经常性的任务。发动机所涵盖的主题包括声音,图形,物理和网络功能。该引擎支持C#,Boo,和\o"JavaScript知识库"JavaScript脚本编程。
另一个部分是Unity编辑,作为脚本和其他组件,包含游戏场景设置和游戏的预览窗口分层对象检查项目面板的集成开发环境。它还配备了几个多语言脚本编辑器和一个独特的预制装配系统。虽然有很多免费软件和专有的替代游戏引擎,如虚幻引擎™或C4™引擎选择了Unity的原因如下:
它可以部署在Windows,Mac
OSX,Web浏览器,Wii游戏机,iPhone,iPad的,\o"Android知识库"Android的,微软Xbox360和PlayStation3。它甚至在未来计划增加闪存和\o"Linux知识库"Linux部署。的的部署possbilities提供很多的可能性,使用的游戏引擎或游戏引擎货币化或进一步研究。
Unity社区非常支持和引擎,以及编辑器是有据可查的。Unity3D引擎是比较容易学习和工作,并通过提供所有的工具,快速原型和迭代以及快速的脚本编译支持快速软件开发的想法。可能部署的iPhone,iPad和iPodtouch的\o"iOS知识库"iOS基本许可证与其他厂商相比,相对低廉的价格。创建机甲和坦克使用Unity3.0,C#脚本和MonoDevelop的IDE进行开发。你可以找到一个Unity教程附录。1.2Unity游戏引擎的优势1.2.1可定制的IDE环境U3D这种ALLINONE的\t"/pizi0475/article/details/_blank"设计思路,我在一个叫神咒的代码中见到过。集所有编辑器于一身。虽然神咒的编辑器不能自由扩展,但由于是公司内部的引擎,所以,它的使用,也很方便。比如,在场景中突然想要对一个模型的材质进行编辑,则选中此模型,右键,弹出材质编辑器即可。
U3D的\t"/pizi0475/article/details/_blank"组件式思路,将这种关系变得更加紧密。你都感觉不到自己在使用一个材质编辑器。你会觉得,你是在操作这个模型本身。它的材质,它的碰撞器,它的对象结构等等。回想一开始进入游戏行业的时候,天天啃着代码。当时觉得代码就是一切,各种认为很牛X的代码,都忍不住读上一番。而随着时间的推移,特别是经过项目的洗礼后。突然发现编辑器是多么的重要。就我做的第一个页游来说,起手前两个星期,我们就做了动画编辑器,场景编辑器。而最终证明,因为这两个简陋的编辑器,使我们后面的工作变得更加容易。因此,一个好的引擎,必定得先有一个功能完备的\t"/pizi0475/article/details/_blank"编辑器。1.2.2基于Mono的开发脚本C/C++无疑是图形界的宠儿,也没有人想过用另一种语言来替代它。即使是U3D,亦是如此。但是,早期使用C/C++编写的引擎,都理所当然地使用C/C++来作为上层逻辑的开发。又有一些,采用了纯脚本的模式。比如Python,LUA。脚本的好处在于更低的编码成本(经过仔细研究,我发现,这是由于写脚本语言的心态和写C++的心态导致的。写C++的时候,总是想着代码的复用度,而在脚本的时候,很多时间会认为,这个脚本,就是为这个对象服务的,那我就按照策划需求来写就可以了。我想,这也是许多时候,脚本语言存在的意义。特别是早期引擎中,使用脚本来处理一些关键的事件响应)。
而大家熟知的虚幻引擎以及有一个名不见经转的Torque,则自己整了一套开发语言。我想,它们的目的,就是为了使大家能够以一种更安全的方式来\t"/pizi0475/article/details/_blank"编程,C++一不小心,则会带来内存和效率问题。它的使用成本,人员成本其实是高于其它语言的。
MonoC#JS,BOO的出现,再一次让大家的眼睛一亮,原来,引擎可以这样整。Mono的桥接,使得高效的C++图形引擎与带GC的内存安全语言进行结合。不仅减少了安全隐患,也使得大家编写跨平台代码时更佳容易。同时,这类语言的反射机制,更适合做\t"/pizi0475/article/details/_blank"编辑器。而比起先前的一些DIY语言和像LUA这样的小巧型语言,Mono使\t"/pizi0475/article/details/_blank"脚本编程可以进行DEBUG,而不单纯的靠PRINT输出。这里就顺带说一下三个语言的区别:C#这是我见过的大型项目中使用得最多的语言,也是我比较喜欢的语言。因为它和C++很像,同时严格的类型和语法检查。JS在帮一些朋友做小东西的时候,使用过这个语言,由于mono自带的提示功能,写起来还是挺顺手。但总给我一种摸不着头脑的感觉。并且U3D给的JS,不是严格的JS,有些语法不支持,而有些语法又很特别。BOO完全没有使用过,貌似也很少有人使用。1.2.3基于组件的对象系统这是一个我最喜欢的系统,我也使用irrlicht引擎山寨过,山寨的过程中,几乎看完了它的组件参考手册,使我对U3D引擎的组件系统又有了新的认识。同时,目前公司自主研发的引擎,也是这样的思想。不管我是在工作中,还是业余捣鼓都受组件系统的影响。慢慢的,喜欢上了这种对象模式。之前在做一个RTS游戏项目的时候,参考了著名开源项目0.A.D的代码。当时只是为了去寻找LOS和多单位协同寻路的方案。但在参考其代码的时候,发现了它整个系统,都是基于组件式的。又一次,对组件式有了好感。而经过仔细思索后。回到了我一直坚持的子系统划分法的游戏框架。当我不禁感叹,原来,自己也一直是在组件式。只不过,我的组件式,是MANAGER方式,MANANGER内部进行对应的实体管理、。比如,\t"/pizi0475/article/details/_blank"背包系统,则只负责玩家背包数据,背包使用,背包相关的功能。不管是数据存储,还是与前端通信,都是背包系统自己在负责,其它模块完全不需要干涉。
而U3D中的\t"/pizi0475/article/details/_blank"组件系统,则将这个粒度划得更仔细了……。
这对于早期的像OGRE的entity系统。仅仅是认为对象可以由子对象构成,可以说是一个质的变化。早期的引擎,基本上都是继承优先的\t"/pizi0475/article/details/_blank"设计方案,更多时候考虑的是编码的便利性,且引擎的走向都具有针对性。而当面对一些复杂情况的时候,继承式的编码是十分麻烦的。并且,对于JAVA,C#这样的语言,并没有提供多继承能力。因此,继承式的\t"/pizi0475/article/details/_blank"编程,在面对越来越广泛的游戏需求的时候。显得无能为力。
\t"/pizi0475/article/details/_blank"组件式则是一种聚合优先的编码方式,它的复用度和伸缩度,都远远大于继承。唯一让一些C++程序员觉得不太顺眼的,可能就是过多的变量和虚函数调用开销吧。但这些,在当下来说,都不是问题。影响大众步伐的,早已不是那种语言特性本身导致的开销。更多的,是如何使我们高效率,高质量地完成一个游戏。因此组件模式已经成为必然。从新版的UE4的变革,以及畅游的G3D,国外一个\t"/pizi0475/article/details/_blank"开源的godot引擎,就可以看出来,大家对组件模式,已经有了深深的好感和接受度。1.2.4所见即所得这可以说是许多人最喜欢的特性,这也是G3D群里,问的人最多的特性,三天两头就有人问,G3D能不能像U3D一样在\t"/pizi0475/article/details/_blank"编辑器里预览游戏效果呀。U3D除了编辑后立即运行,还能在运行过程中时实编辑,查看效果。当然,运行过程中编辑对象的数据,会在停止后失效。(注意,对文件属性的修改,不会失效)1.2.5代码驱动的开发模式
这种模式,可以使我们快速地构建一个原型。对于U3D中的MonoBehaviour来说,它扮演的,就是如何驱动它的目标对象。因此,你可以将你的对象的各种能力分配到不同的脚本组件中,然后根据对象的需求来挂接。1.2.6多平台发布U3D支持的平台,无疑是当下较为流行的平台。满足绝大部分项目需求。早期的引擎,多以PC和CONSOLE为主。支持WINDOWS,XBOX,PS2已经是很不错了。U3D便利的多平台发布特性,也使得它成为了当前性价比最高的引擎的原因之一。也有许多公司正在自主研发引擎,或者是将先前的PC引擎修改为多平台(IOS+ANDROID居多)。但这也档不了U3D的步伐。1.2.7良好的生态圈在使用公司引擎的时候,我就发现,若我遇上一个问题,只能问公司的老员工们,或者找其它引擎TEAM寻求帮助。而U3D这种生态圈,不是一天两天能形成的。GOOGLE,百度,各种论坛,都能很容易找到自己想要解决的问题。而对于一些经验上的问题,也有不少人总结。这使得后来者,可以快速上手引擎。而AssetStore的出现,不仅使U3D的生态圈更加稳固,同时也提供了许多机会。你可以制作插件放网上卖,赚取一些利益,也可以购买别人的插件,作为使用或者参考也好。有时候,购买一些插件,可以让你快速脱离当前的困境。一个是解决进度问题,一个是解决思路问题。这是之前其它引擎不具备的。二Unity游戏反编译的规划2.1总体规划本论文拟组建一个对于Unity游戏反编译的流程,可用于任何游戏研发团队及发行团队,此文介绍了安卓游戏的整体封装、解包方法、修改DLL、注入图片、生成密钥、重打包的规划。本规划拟设计一个已封装好的Unity游戏实现再封装的方法,符合安卓游戏的架构和MD5码验证,具备高可靠性和重复使用度,并在本文中述说如何实现这些目标进行设计。2.2反编译价值时间这个东西对于任何一家公司来说是一个非常宝贵的物品,小至几百大则上百万,如果所有加壳编译的事情都让资深程序员来做就非常吃亏,所以部分小事情得让资深程序员做好解包打包的加壳脚本让测试人员参与研发,这样就可以大大减少资深程序员的占用时间,为公司做到利益最大化。反编译也可以用在部分发行公司,因为部分发行公司没有产品基础,部分平台需要产品基础才可以进行联合运营,就此可以使用此方法对产品进行反编译加上平台的SDK进行发行,起步资金最优化,进而更好使得资金使用在商务推广方面。2.3Unity游戏反编译的优势在所有引擎下,Unity游戏反编译是最简单且成功率最高的,因为Unity引擎的机制是自由化代码分布且资源独立结构可以封装成Assets或者单独封包用于热更,所以Unity所有配置及代码都是可以用工具轻易进行解码后单独加上自己所需要的DLL进行注入。虽然说这破坏了原生开发者的利益,但是后续可以用引擎封装C++包体并发布,在原本基础上增加了反编译难度。2.4谨告本文所用的技术不建议使用在商业用途,有一定风险性。三安卓游戏的封装3.1安卓游戏构成目录名称用途备注AndroidManifest.xml程序全局配置文件classes.dexDalvik字节码resources.arsc资源索引表解压缩resources.ap_就能看到res\该目录存放资源文件图片,文本,xml布局assets\该目录可以存放一些配置文件src\java源码文件libs\存放应用程序所依赖的库gen\编译器根据资源文件生成的java文件bin\由编译器生成的apk文件和各种依赖的资源META-INF\该目录下存放的是签名信息3.2构建步骤这些构建中使用的工具或者脚本,在SDK的build-tools或者tools下可以找到,或者在游戏引擎中点击Publish按钮打包APK。3.2.1AAPTAAPT(AndroidAssetPackagingTool)工具,Android资源打包工具。3.2.2AIDLAIDL工具会将所有的.aidl文件编译成.java文件。3.2.3JAVACJAVAC工具将R.java、AIDL接口生成的java文件、应用代码java文件编译成.class文件。3.2.4DXdx脚本将很多.class文件转换打包成一个.dex文件。3.2.5APKBUILDERapkbuilder脚本将资源文件和.dex文件生成未签名的.apk文件。3.2.6JARSIGNERjarsigner对apk进行签名。3.3Google官方构建流程图四Untiy游戏编译、反编译原理及环境系统环境布置简要阐述4.1Unity游戏反编译工具介绍4.1.1APKIDE有ApkTool、Dex2jar、JD-GUI等Apk修改工具,同时集Apk反编译、Apk打包、Apk签名于一体,是目前反编译apk最好的工具。apk改之理另外还支持语法高亮显示、支持多文档同时编辑、支持实时翻译、支持所有Google支持的几十国语言对译。1、可视化操作,全自动的反编译、编译、签名Apk。2、以树目录管理全部反编译得到的Apk资源文件,方便操作。3、内置代码编辑器,支持语法高亮显示,根据文件格式自动匹配相应语法;支持多文档同时编辑;也支持使用系统编辑器来编辑代码文件。4、内置基于文件内容的关键字或多行代码段的搜索、替换引擎,一键搜索替换,搜索结果以标签的形式分门别类;允许在指定搜索范围(整个工程或选中的文件或文件夹内搜索),支持正则表达式搜索和替换。搜索功能是Apk修改的一个重要工具,从此你不必借助其它第三方搜索工具。5、内置Google在线翻译引擎,支持实时翻译,支持所有Google支持的几十国语言对译,汉化更轻松。6、支持使用自己的keystore文件签名。7、自动识别图像资源,并提供该类资源的快捷替换功能,方便修改这类图片资源。8、内嵌Unicode、AscII互转工具,以方便硬编码的文字(如汉字)的搜索和汉化类修改。9、内置类似于系统cmd.exe的命令窗口,高手也可以手动直接输入各种命令来手动操作。10、所有操作步骤、操作结果都以良好的阅读格式输出在日志窗口,方便查看修改的历史记录。11、内置adb功能,包括使用adb向设备(或模拟器)安装、卸载修改后的apk进行测试,并嵌入adblog、ddms等功能监测修改apk的运行状况,以便于分析和查找错误。12、支持多国语言界面,支持界面换肤。4.1.2ReflectorNETReflector是一个.NET工具。.NET开发人员用它来反编译和观察内在内容,了解应用程序接口(API)、组件、框架以及所使用的所有关键代码是如何工作的。此外,还可以通过自身的代码、第三方组件和所使用的任何编译的.NET代码跟踪漏洞。可在VisualStudio中查看第三方代码,就像浏览自己的代码一样,使用Reflector需要.NET环境需要安装MicrosoftVisualStudio,安装过程完毕后系统默认安装好所有.NET环境。功能特征:1、全面支持.NET2.0、.NET3.0、.NET3.5和.NET4.02、WindowsShell集成–运行Reflector.exe/寄存器,注册文件扩展名3、NET2.0、.NET3.0、.NET3.5、.NET4.0、CompactFramework2.0、CompactFramework3.5、XNA框架、银光(Silverlight)、Mono以及托管代码DirectX的程序集列表4、点击源代码的导航5、找出公开的或实例化的类型6、扩展方法7、Linq查询表达式支持8、Lambda表达式支持9、匿名方法和可空类型支持10、扩展方法支持11、上下文相关的文档视图12、找出虚拟方法重写13、代码URL支持——在浏览器中导航至代码://mscorlib/system.object14、挖掘程序集中的资源。如图1-1。图1-1Reflector工具操作界面4.1.3UnityStudioUnityStudio可以直接在本体工具上查看图片、shader、文本、音频、场景Hierarchy视图的树状结构,简单来说配置文件都可以被浏览且导出并使用在其他途径。如图1-2。图1-2UnityStudio工具操作界面4.1.4UnityAssetsExplorerUnityAssetsExplorer(assets解包工具)是一款Assets解包工具,它能够从Unity3D游戏中提取相关资源,对于手游的开发非常有用,玩家使用这款工具可以轻松对游戏的资源包级进行解包或者导入,轻松实现管理。但是该工具不支持直接展示文件,便捷性不如UnityStudio。但是如果遇上无法被替换的图片可以使用此工具强行替换并不是以注入方式。如图1-3.图1-3UnityAssetsExplorer工具操作界面4.1.5Apktool·APKTOO安装Apktool是一个提供一个方式,去反编译优秀的软件,学习知识,其中smali是Dalvik的执行语言,你完全可以通过反编译去查看Java代码的smali语言,去更深入的了解程序的运行原理和流程。发布的APK被二次打包,作为盗版产品使用,甚至恶意插入广告,病毒等,对软件公司带来损失,发布的APK被反编译,获取的有关服务器的信息,给服务器带来威胁.通过反编译修改smali文件,减去客户端的限制,去获取不正当的利益,一般发生在游戏软件上。Apktool没有直接展示的操作界面,它存在于命令行间。Apktool需要安装并配置好JAVA、JS、JDK环境,可以直接解包安装Eclipse,Eclipse其中包含所说的JAVA、JS、JDK工具,安装如上工具后在我的电脑-高级系统设置-环境变量中选择Path项后面地址加上安装好的路径,安装好后,在管理员身份运行CMD输入apktool测试是否安装并配置完成。如图1-4。图1-4Apktool工具操作界面·APKTOOL解包Apktool也是最原始的解包工具,也是最纯正的,大家也要对自己的游戏软件加以保护,在管理员模式下运行cmd在apk所在路径执行“apktoold-fapk包体所在盘符:\APK包体名称.apk-oapk包体所在盘符:\APK包体名称”,执行后即可得到包体内所有文件,得到文件后即可使用其他工具对齐文件进行提取或注入。如图1-5。图1-5Apktool工具操作界面·APKTOOL重打包修改文件完成后,在管理员模式下运行的CMD中输入“apktool.batb包体名称”。执行后会发现在“包体名称”目录下面生成一个dist目录,里面就是重打包之后的apk,但是这个apk没有签名,需要重新签名之后,才能安装。如图1-6。图1-6Apktool工具重打包操作界面·APKTOOL生成密钥包体签名需要一个keystore文件,执行“keytool-genkey-aliasabc.keystore-keyalgRSA-validity20000-keystoreabc.keystore,执行该命令会生成一个abc.keystore证书文件。”,执行后该目录可以申城一个abc.keystore文件。如图1-7。图1-7生成密钥操作界面·包体加入新密钥对重打包体进行签名,可以用360加固助手导入自己的密钥后放入APK包体自动进行签名,签名完后即可得到一个完整APK包体,放在安卓手机里面可直接安装,或者使用jarsigner命令进行签名,在包体和密钥同一个路径下执行“jarsigner-verbose-keystoreabc.keystore-signedjar包体签名后名称_singed.apk包体名称.apkabc.keystore”。如图1-8。图1-8最后签名完成的APK界面五Unity游戏及DLL的初次打包5.1Unity3D引擎发布APK游戏使用Unity3D引擎发布APK需要把JAVA、JDK、JS、SDK安装并配置好,配置好后选择需要发布APK的UNITY3D游戏工程,发布后可以在选择的路径中得到一个APK游戏包,这个APK游戏就可以用于反编译。如图4-1。图4-1Unity3D引擎发布APK游戏5.2mono编辑器生成DLL步骤UnityDLL文件之使用MonoDevelop生成DLL文件。生成dll文件的必要性:给第三方公司提供Unity插件,又不希望对方看到具体的实现过程,这时候就需要将核心代码封装编译成dll文件,供第三方调用。或是多个项目都要用到同一个模块或同样的功能,则可以把该模块或是功能编译成dll,方便复用和维护或者生成dll用于反编译注入。5.2.1新建打开MonoDevelop,新建一个工程,选择“.Net”“Library”,命名工程名称,具体如下图4-2、4-3、4-4.图4-2Mono编辑器新建工程图4-3Mono编辑器新建Library图4-4Mono编辑器新建工程名称5.2.2Mono编辑器选择Unity的api如果想使用unity的api,则需要引入unity的“UnityEditor.dll”和“UnityEngine.dll”,他们在Unity安装目录的“\Editor\Data\Managed”下,引入方法,具体如图4-5、4-6、4-7。图4-5类选择4-6选择组件4-7选择Unityapi5.2.3写入简单函数在脚本里面结案单编写几个测试函数,然后在添加一个脚本文件,编写代码如图4-8、4-9、4-10、4-11图4-8测试函数图4-9添加脚本图4-10选择Untiy脚本图4-11Mono生成Unity脚本5.2.4生成DLL把工程的“Bulid”-“Targetframework”设置为“Mono/.Net3.5”确定后,然后按下F5或者三角形Run工程,具体如图4-12、4-13、4-14图4-12选项图4-13选择参数图4-14RUN工程5.2.5在Unity中使用新生成的DLL编译完成后,到该工程目录下“……\MyDLL\MyDLLTest\MyDLLTest\bin\Debug”,找到编号的“MyDLLTest.dll”文件,拖入Unity工程中。如图4-15图4-15DLL拖入到UnityAssets5.2.6在Unity场景中在新DLL下添加脚本在Unity场景中的“MainCamera”添加“MyDLLTest.dll”下的“Test”脚本,具体如图4-16.图4-16给DLL添加TEST脚本5.2.7运行DLL运行场景,按下“A”键,控制台Console打印出信息,具体如下图4-17。图4-17运行结果图六反编译工具详细使用过程6.1解包6.1.1APKTOOLAPKTOOL解包重打包可以说是最原生的方式,通过SHELL控制台输入JAVA、JS类命令来对APK包体和文件进行操作,但是这种操作已经过时了,现在都把APKTOOL封装成类在工具里面直接脚本执行,很少直接拿出来直接使用。6.1.2APKIDEAPKIDE少月版,集合多种功能为一体类似Ecplise编辑器,可以用来解包重打包,全局搜索修改Smali文件。直接把APK包体拖动到红框内位置就会自动进行解包命令,更方便使用者直接修改文件,解包后获得的文件在红框内也可以直接展示。如图5-1。图5-1APKIDE解包状况6.2提取并修改图片6.2.1AssetStudio(原UnityStudio)AssetStudio是一个十分强大的APK游戏配置解压工具,APK游戏解压出来的***.***.***\assets\bin\Data路径下的文件可直接读取解压,还可以右键跳转到该源文件位置,方便后续修改文件属性,点击Export即可导出选择的文件,可以直接修改,如图5-2。图5-2APKIDE解包状况6.2.2修改图片修改图片方式有很多这里就不赘述了,重点是如何把修改后的图片还原到Assets配置文件当中,先用Assetstudio查看文件的Size和Format,例如本次查看的Size是43796和Format是ETC_RGB4。把修改好的图片导入Unity,调整图片压缩大小和格式,TextureType选择Editor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年秋苏少版(2024)初中美术七年级上册期末知识点复习卷及答案(三套)
- 气道护理中的风险评估
- 产后伤口护理与注意事项
- 埃博拉出血热患者的家庭护理和家庭照顾
- 大丰市小海中学高二生物三同步课程讲义第讲激素的调节(三)
- 2025年办公区域网络布线协议
- 瓷砖铺贴施工技术规程
- 城市更新项目评价
- 2025年共同富裕背景下农村基础设施管护
- 2025年中国运动康复行业市场研究报告 硕远咨询
- 旋挖钻机地基承载力验算2017.7
- 机械加工检验标准及方法
- 数学家祖冲之课件
- 充电桩采购安装投标方案1
- 24春国家开放大学《知识产权法》形考任务1-4参考答案
- 小米员工管理手册
- 自身免疫性肝病的诊断和治疗
- 国家开放大学化工节能课程-复习资料期末复习题
- xx乡镇卫生院重症精神病管理流程图
- 2023年印江县人民医院紧缺医学专业人才招聘考试历年高频考点试题含答案解析
- 安徽绿沃循环能源科技有限公司12000t-a锂离子电池高值资源化回收利用项目(重新报批)环境影响报告书
评论
0/150
提交评论