【版权所有,转载请注明出处。出处: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的,大概等待两三秒就会出现

然后再点击as的Run | Edit Configurations(注意不是DDMS的run),新建一个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了。

crackme项目地址

smalidea地址

android加固系列—4.加固前先学会破解,无源码调试apk的更多相关文章

  1. android加固系列—2.加固前先要学会破解,调试内存值修改程序走向

    [版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5138585.html] 因公司项目需要对app加固,经过本人数月的研究,实现了一套完整的仿第三 ...

  2. 1. Smalidea无源码调试android应用

    一.安装smalidea https://github.com/JesusFreke/smali/wiki/smalidea   1. 进入IntelliJ IDEA/Android Studio开始 ...

  3. android加固系列—5.加固前先学会破解,hook(钩子)jni层系统api

    [版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5138585.html] crackme项目jni的关键代码(项目地址见文章底部),获取当前程序 ...

  4. android加固系列—3.加固前先学会破解,静态修改so

    [版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5138585.html] 项目jni的关键代码(项目地址见文章底部),获取当前程序的包名com. ...

  5. 【Android】AndroidStudio(Eclipse)如何使用天天模拟器进行调试apk应用。

    作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 大家都知道,我们这些Android开 ...

  6. Android Studio 动态调试 apk 反编译出的 smali 代码

    在信安大赛的准备过程中,主要通过 Android Studio 动态调试 apk 反编译出来的 smali 代码的方式来对我们分析的执行流程进行验证.该技巧的主要流程在此记录.以下过程使用 Andro ...

  7. android黑科技系列——获取加固后应用App的所有方法信息

    一.前言 在逆向应用的时候,我们有时候希望能够快速定位到应用的关键方法,在之前我已经详细介绍了一个自己研发的代码动态注入工具icodetools,来进行动态注入日志信息到应用中,不了解的同学可以查看这 ...

  8. Android拓展系列(11)--打造Windows下便携的Android源码阅读环境

    因为EXT和NTFS格式的差异,我一直对于windows下阅读Android源码感到不满. 前几天,想把最新的android5.0的源码下下来研究一下,而平时日常使用的又是windows环境,于是专门 ...

  9. Android Studio系列教程四--Gradle基础

    Android Studio系列教程四--Gradle基础 2014 年 12 月 18 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://stormzhang ...

随机推荐

  1. 反应堆模式最牛的那篇论文--由solidmango执笔翻译

    The Reactor:An Object-Oriented Wrapper for Event-Driven Port Monitoring and Service Demultiplexing 反 ...

  2. Mybatis在idea中错误:Invalid bound statement (not found)

    学习mybatis的过程中,测试mapper自动代理的时候一直出错,在eclipse中可以正常运行,而同样的代码在idea中却无法成功.虽然可以继续调试,但心里总是纠结原因.百度了好久,终于找到一个合 ...

  3. 简单的Linq笔记

    最近带一个新人,被问到Linq的一点东西,回答他后,自己记录下,防止自己懵逼. Linq中查询一个表中指定的几个字段: var ts = t.FindAllItems().Where(P => ...

  4. SQL Server代理(8/12):使用SQL Server代理外部程序

    SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这个系列的上篇文章里,你学习如何使用SQ ...

  5. 基于HTML5技术的电力3D监控应用(一)

    最近参与了国网计量中心的四线一库自动化检定系统的项目开发,团队封闭开发了大半年终于快到尾声了,整个项目过程实在非常累,我的mentor杨杨老师是这样描述的:累的不想说话了.我估计是我太渴望新知识,整天 ...

  6. DirectShowLib directshownet 视频

    using DirectShowLib; using System; using System.Collections; using System.Windows.Forms; namespace C ...

  7. ASP.NET MVC案例——————拦截器

    摘要      本文将对“MVC公告发布系统”的发布公告功能添加日志功能和异常处理功能,借此来讨论ASP.NET MVC中拦截器的使用方法. 一个小难题      我们继续完善“MVC公告发布系统”, ...

  8. 代码实现SQL Server动态行转列,不用存储过程

    分两步查询,第一步查询出动态列,第二步使用PIVOT函数. 代码: List<DataTable> dataTableList = new List<DataTable>(); ...

  9. WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭

    在我们开发WCF项目的时候,常常会碰到一些莫名其妙的错误,有时候如果根据它的错误提示信息,一般很难定位到具体的问题所在,而由于WCF服务的特殊性,调试起来也不是那么方便,因此往往会花费不少时间来进行跟 ...

  10. PHP类和对象等代码说明

    1.定义和创建类和对象: 定义类要使用class关键字.例如:class 类名{//属性和方法} 创建对象使用new关键字.例如: $p1 = new 类名;,可以基于一个类创建多个对象. 2. 类属 ...