【版权所有,转载请注明出处。出处:http://www.cnblogs.com/joey-hua/p/5138585.html】
项目关键java代码为,将tv设置为从jni读取的字符串,这里的破解内容是直接从apk动态调试修改最终显示在tv里的字符内容
1.工具介绍
Apktool,反编译源码用
Android studio+smalidea插件,动态调试用
2.准备工作
A.配置插件
下载插件smalidea,地址https://bitbucket.org/JesusFreke/smali/downloads
这个
下载完成后,打开android studio的Settings | Plugins,点击选中下载好的zip压缩包。并apply。
此步骤的目的是让android studio能识别smali代码,并能正常下断点。
B.反编译apk
下载apktool并反编译apk
3.动态调试
首先在android studio新建一个项目,然后把刚才反编译的smali源码
全部拷到项目的app | src | main | java下,把这个目录下之前的全部删除。
在MainActivity$1文件的这里下个断点,如下图
接下来先以debug模式启动程序,注意,是在手机上启动。
如果你手机上有这些选项,设置 | 开发者选项 | 选择调试应用(选择crackme)| 等待调试器(勾选),
然后就可以直接点击程序图标,会出现Waiting For Debugger对话框。
如果手机上没有这些选项,可以用adb命令的方式启动,先从反编译的androidmanifest.xml中找到对应的包名com.example.crackme和主activity名MainActivity。然后cmd窗口输入
adb shell am start -D -n com.example.crackme/.MainActivity
手机上出现Waiting For Debugger对话框。
这时打开as的,大概等待两三秒就会出现
然后再点击Run | Edit Configurations,新建一个Remote并起码假设crack,填写端口为上图的com.example.crackme对应的端口8700,选择source using module’s classpath为我们之前创建的项目,点击OK
现在终于可以开始调试了,点击Run | Debug ‘crack’,注意一定要关闭其他IDE以防止端口占用,否则会出现类似下面的错误
程序已经调试起来了,因为我们设断点的地方需要先点击一下按钮“检测是否被crack”,停在了断点处
这就和java断点调试差不多了,可以watch寄存器v0,v1,v2等,这里v1接收的是从jni层返回的字符串
这里我们只需要把最后程序界面的文字显示成huaxiaozhou就可以了,找到textView设置的从jni层返回的字符串
对mTransformed右键Set Value,在双引号内输入huaxiaozhou并敲回车键,会出现等待框
然后此变量的值就变了,这时候点击Resume或stop
手机界面上就显示huaxiaozhou了。
【项目地址】
- 2楼jan4984
- +1,另外新出的那个虚拟机(art?)是不是也是用smali指令的呢?
- Re: 华小洲
- @jan4984,特意去试下了art的调试,一样的方法一样的结果。art模式是在安装应用程序时会先将代码转换为机器语言存储在本地,它跟普通的模式结局内容还是一样的,只不过提早做了些事情
- 1楼悠哉呀悠哉
- 写的很好,不知道到博主对5.0加固有多少了解,网上很多4.x的加固文章,没找到多少5.0加固相关的文章,不知道5.0和4.x有多少区别?博主如果知道有空介绍下吗
- Re: 华小洲
- @悠哉呀悠哉,对了,虽然我还没开始写加固方案,但我的加固方案都是针对jni层也就是so文件的,所以不分5.0。我没弄过java层的加固,感觉用处不大。