【版权所有,转载请注明出处。】
项目关键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 了。
【 项目地址 】
【 smalidea地址 】