破解安卓软件中金币数量的限制以及反编译安卓软件的思路
2013-06-13 18:43
591 查看
依然是我们信息安全大赛的题目,那道题给了一个安卓APK程序,安装完毕后打开有一个你当前的金币数,你需要修改你拥有的金币数到所需要的数量购买题目的key,修改到所需金币数后购买key,即可达到题目的要求,获得key。
既然是修改金币的数量,那在这个程序中肯定会有一个比较大小的语句。
如果是某些安卓软件的功能限制,那我猜测一般应该是某些功能被该软件默认设置为“false”,或者是把功能限制的语句设置为“true”。但是在商业软件中我认为应该不会在程序文件中做手脚,应该在程序的配置文件中做修改,就像破解ios的软件一般都是修改.plist文件一样。
现在进入正题
要修改一个编译后的应用程序,无论是电脑还是手机,第一步肯定是反编译。
还好安卓只是把一堆资源文件和程序文件封包为APK文件,比电脑上EXE文件简单方便多了。
网上有很多反编译APK的程序,比如APKTool、ApkIDE等,不过我觉得最方便快捷的还是ApkIDE。因为APKTool只是一个单独的编译、签名的工具,而且是运行在命令行界面的。ApkIDE拥有友好的用户界面,而且它集成了APKTool、jd-gui等软件,一站式处理。
上面是两款软件的界面。
我个人更偏爱APKIDE,因为使用方便功能多。。不用手工再去找一堆工具。
现在那我就以APKIDE为例来说一说。
1.首先用该软件打开需要修改的APK文件(废话)PS:使用这个需要安装JDK,如果没安装绿色版也可以。
2.打开软件并且等待软件反编译完成后,会在左边的项目那里显示以下一些文件或文件夹:res文件夹、smali文件夹、AndroidManifest.xml。res文件夹显然是资源文件夹,里面存放了程序的图片和显示的文字等各种信息,程序文件夹在smali内。
3.逐级展开smail文件夹,发现里面又有android、syclover文件夹,据我推测程序文件应该在syclover文件夹内,android文件夹应该是程序正常运行所需的基本代码。那就打开syclover文件夹。
如图:
4.在修改之前,我们必须要熟知该程序的运行效果,所以我们先看看这个程序。
需要999个金币购买,但是我们现在只有99个金币,那试试看输入999点击购买会发生什么。
说明在判断语句中将程序跳转到了显示信息,而不是购买key处。那现在我们来寻找判断处在哪里吧。
5.我们打开java源码后搜索那句提示看看那句话在哪里,于是在a.class中找到了这句话。
那没错的话就是这里了,由于jd-gui智能查看代码不能编辑,所以需要编辑a.smali文件,但是smali文件不是标准的代码也不是机器码,好像是一种中间语言,看不懂,那怎么办?
在这个smali中发现有很多0x开头的东西,这个明显是16进制,那么既然有16进制数那我们也搜索16进制数。由于我们需要把99个金币改为999或者更多的金币,那我们先找到这个值在哪里。
99的16进制数是0x63,那我们搜索这个16进制数。不出所料,找到了
既然要改成999个金币,那么将这里修改为999的16进制数即可,999的16进制为0x3E7。
修改完毕后保存再进行编译。
6.将编译完成的APK文件进行安装。在手机上或模拟器中运行,得到key。
购买成功。
可能有人会问为什么上面写得余额还是99?因为我没有修改res文件夹里的xml文件,屏幕上显示的一些信息是存放在res文件夹里的xml文件里,就比如说这个99
这些屏幕上直接显示的文字存放在这里,但是你修改这里的值是没有用的,他不包含在程序里。
至此这个修改金币的程序就破解完毕了。
破解安卓软件要比EXE文件简单很多,因为这个可以直接反编译成源代码,可读性比EXE反编译成的汇编要容易很多。
这道题目的思路就是既然有判断金币数量这个功能,那必然在程序中有比较大小,然后跳转的地方。整个反编译的过程不难,拿工具打开就行了,重点就是找到这个跳转点,然后修改这个值。由于不能直接修改反编译出的java源码,还需要想方法修改这部分源码。
这些大致就是破解金币数的思路了,我相信修改一些游戏的默认金币数什么的也是差不多的一个思路。
要是有不正确或者不妥的地方欢迎各路大牛之处,谢谢
既然是修改金币的数量,那在这个程序中肯定会有一个比较大小的语句。
如果是某些安卓软件的功能限制,那我猜测一般应该是某些功能被该软件默认设置为“false”,或者是把功能限制的语句设置为“true”。但是在商业软件中我认为应该不会在程序文件中做手脚,应该在程序的配置文件中做修改,就像破解ios的软件一般都是修改.plist文件一样。
现在进入正题
要修改一个编译后的应用程序,无论是电脑还是手机,第一步肯定是反编译。
还好安卓只是把一堆资源文件和程序文件封包为APK文件,比电脑上EXE文件简单方便多了。
网上有很多反编译APK的程序,比如APKTool、ApkIDE等,不过我觉得最方便快捷的还是ApkIDE。因为APKTool只是一个单独的编译、签名的工具,而且是运行在命令行界面的。ApkIDE拥有友好的用户界面,而且它集成了APKTool、jd-gui等软件,一站式处理。
上面是两款软件的界面。
我个人更偏爱APKIDE,因为使用方便功能多。。不用手工再去找一堆工具。
现在那我就以APKIDE为例来说一说。
1.首先用该软件打开需要修改的APK文件(废话)PS:使用这个需要安装JDK,如果没安装绿色版也可以。
2.打开软件并且等待软件反编译完成后,会在左边的项目那里显示以下一些文件或文件夹:res文件夹、smali文件夹、AndroidManifest.xml。res文件夹显然是资源文件夹,里面存放了程序的图片和显示的文字等各种信息,程序文件夹在smali内。
3.逐级展开smail文件夹,发现里面又有android、syclover文件夹,据我推测程序文件应该在syclover文件夹内,android文件夹应该是程序正常运行所需的基本代码。那就打开syclover文件夹。
如图:
4.在修改之前,我们必须要熟知该程序的运行效果,所以我们先看看这个程序。
需要999个金币购买,但是我们现在只有99个金币,那试试看输入999点击购买会发生什么。
说明在判断语句中将程序跳转到了显示信息,而不是购买key处。那现在我们来寻找判断处在哪里吧。
5.我们打开java源码后搜索那句提示看看那句话在哪里,于是在a.class中找到了这句话。
那没错的话就是这里了,由于jd-gui智能查看代码不能编辑,所以需要编辑a.smali文件,但是smali文件不是标准的代码也不是机器码,好像是一种中间语言,看不懂,那怎么办?
在这个smali中发现有很多0x开头的东西,这个明显是16进制,那么既然有16进制数那我们也搜索16进制数。由于我们需要把99个金币改为999或者更多的金币,那我们先找到这个值在哪里。
99的16进制数是0x63,那我们搜索这个16进制数。不出所料,找到了
既然要改成999个金币,那么将这里修改为999的16进制数即可,999的16进制为0x3E7。
修改完毕后保存再进行编译。
6.将编译完成的APK文件进行安装。在手机上或模拟器中运行,得到key。
购买成功。
可能有人会问为什么上面写得余额还是99?因为我没有修改res文件夹里的xml文件,屏幕上显示的一些信息是存放在res文件夹里的xml文件里,就比如说这个99
这些屏幕上直接显示的文字存放在这里,但是你修改这里的值是没有用的,他不包含在程序里。
至此这个修改金币的程序就破解完毕了。
破解安卓软件要比EXE文件简单很多,因为这个可以直接反编译成源代码,可读性比EXE反编译成的汇编要容易很多。
这道题目的思路就是既然有判断金币数量这个功能,那必然在程序中有比较大小,然后跳转的地方。整个反编译的过程不难,拿工具打开就行了,重点就是找到这个跳转点,然后修改这个值。由于不能直接修改反编译出的java源码,还需要想方法修改这部分源码。
这些大致就是破解金币数的思路了,我相信修改一些游戏的默认金币数什么的也是差不多的一个思路。
要是有不正确或者不妥的地方欢迎各路大牛之处,谢谢
相关文章推荐
- Android中的软件安全和逆向分析[一]—apk反编译破解以及java汇编代码读写
- 给大家推荐一个可以限制端口、流量、P2P软件以及聊天工具等等功能集全的完全破解软件
- 记一次破解某软件授权限制,思路简单。
- 安卓app开发之Basic4android软件安装配置以及常见错误
- extjs tabpanel限制选项卡数量实现思路及代码
- 安卓软件的反编译
- 由破解一款软件所进行的思路总结
- 吾爱破解论坛-LCG-LSG|安卓破解|病毒分析|破解软件|www.52pojie.cn
- keil,iar,CodeWarrior等软件,没有破解的话,会有什么限制?
- Android 软件安装程序(*.apk)的结构分析、反编译以及汉化 (12-24 01:22)
- Android混淆、反编译以及反破解的简单回顾
- 新手必须懂得什么叫OEP,以及查找的常用方式软件破解什么是oep?
- 教你在不懂Smali语法的前提下如何破解安卓软件
- 安卓软件第一次打开时引导界面以及打开后停留界面
- 关于MyEclipse的破解以及软件的下载
- 如何使用反编译软件破解android的布局文件
- 提供文华wh3 赢智程序化历史数据导出软件 破解200根k线的限制 包含1分钟 5分钟 15分钟等各种周期
- APK反编译软件以及方法
- 破解图片验证码限制的一般思路
- c#实现的破解程序--针对软件使用时间限制