工具:

Android Studio版本: 3.0.1

smalidea插件: https://github.com/JesusFreke/smali/wiki/smalidea

反编译工具:本节先用Android Killer,后面介绍apktool。

一 配置插件

  下载smalidea插件,然后打卡Android Studio,点击File->Setting->Plugins->Install plugin from disk,选择下载的smalidea.zip文件,安装成功后显示重启Android Studio生效。

二 反编译apk

  把第一节编写的激活码程序apk拖入Android Killer中

  1 记录apk的包名(com.jhm)和入口Activity(com.jhm.MainActivity)

  2 设置该apk的调试属性,改成可调试:AndroidManifest.xml中application标签中设置android:debuggable="true"  (不改是不能调试apk的)  

三 手机准备

  1 修改完调试属性后在Android Killer里,点击Android->编译,成功后生成apk,把这个可调试的apk安装到手机,手机连接电脑打开usb调试。

  2 命令行中输入adb shell am start -D -n com.jhm/com.jhm.MainActivity。 开启入口Activity。如图:

  

四 转发端口  

  1 Android Studio中点击Tools->Android->Android Device Monitor,如图,监视器监听到了我们的程序com.jhm。

  

    看到,Online值是23635,端口值是8700,记录下,关闭Android Device Monitor。(不要关闭手机里的程序,重新打开后Online值会变的,需要重新转发端口)

  2 打开命令行,输入命令转发端口

    输入adb forward tcp:端口值 jdwp:Online值,即adb forward tcp:8700 jdwp:23635,结果如图:

    

    说明8700端口被占用了,查找对应的是哪个进程关掉就可以了。

    ①命令行输入netstat -ano | findstr "8700",回车

    ,被1220占用了

    ②查找1220对应的是哪个进程,命令行输入tasklist | findstr "1220",回车

    看到是studio64.exe,在任务管理器关闭即可。

  占用8700端口的进程关掉了,重新命令行输入adb forward tcp:8700 jdwp:23635,回车即可转发成功。

五 导入smali工程

  1 AndroidKiller反编译完成后,点击工程管理器标签页->右击smali目录->打开方式->打开文件路径,在E盘新建Jhm文件夹,把smali文件夹拷贝到Jhm文件夹下,并且重命名smali文件夹为src。

  2 Android Studio中点击File->New->Import Project,找到E:\Jhm路径,选中Jhm文件,点击Next一路到Finish。

  2 在AndroidStudio打开的新工程里选择浏览模式为Project格式,右击src->Make Directory As->Sources Root设置为根目录。

六 配置远程调试选项

  在Android Studio中点击Run->Edit Configurations。点击左上角绿色加号->Remote,Name设置为DebugSmali吧,端口Port设置为8700,点击OK。

  

七 配置JDK

  Android Studio中点击File->Project Structure,选中对应java版本,点击ok。

  

八 开始调试

  1 找到MainActivity, 下几个断点。

  

  2 在Android Studio中点击Run->Debug ‘DebugSmali’,此时程序跑起来,如图:

  

  输入激活码,点击验证,程序断在我们的断点处,F8单步步过,F7单步步入,F9往下执行。OK可以动态调试了。

  

Android Studio动态调试smali代码的更多相关文章

  1. Android studio动态调试smali

    前面介绍了使用IDA动态调试smali,这种方法设置简单,不用重打包,用起来方便,但是如果变量类型设置错误则会马上退出调试,这是让人不爽的地方,而使用Android studio则不会.   0x01 ...

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

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

  3. 动态调试smali代码学习记录

    预备知识 DDMS Dalvik Debug Monitor Serivce,Dalvik调试监控服务,为Android SDK提供的一款拥有监控Dalvik虚拟机的调试软件,启动文件位于<An ...

  4. Android studio动态调试

    Reference:  http://cstsinghua.github.io/2016/06/13/Android%20studio%E5%8A%A8%E6%80%81%E8%B0%83%E8%AF ...

  5. 使用IDEA动态调试smali代码

    原创,转载请注明出处. 一般java ide(如eclipse.idea)都可用来进行smali的动态调试,这里选择IDEA. 第1步:使用apktool反编译apk java -jar apktoo ...

  6. 动态调试smali代码

    Android Killer对应用进行反编译为smali代码,看看Manifest文件中application标签里面是否有android:debuggable="true",没有 ...

  7. Android调试系列—使用android studio调试smali代码

    1.工具介绍 使用工具 android killer:用于反编译apk包,得到smali代码 android studio:调试smali代码工具,或者使用idea,android studio就是在 ...

  8. Android逆向利器和smali代码修改出错举例-入参类型

    当smali修改代码出错举例1,log如下: 虚拟机层次: 1.本身做出了预测,寄存器v2是符合要求入参,暗示你这个也许是你想要的.VFY: register1 v2 type 17, wanted ...

  9. Android Studio & eclipse 调试技巧

    如上图设置多个断点,开启调试.想跨断点移动到下一个断点,点击如下图1箭头,程序将运行一个断点到下一个断点之间需要执行的代码.如果后面代码没有断点,再次点击该按钮将会执行完程序.点击箭头2指向的按钮,可 ...

随机推荐

  1. 编程珠玑第一章的算法,Java实现,通俗易懂

    该算法也就是所谓的位图算法,用一个int表示32位,也就是实际值为1~32的数. 按照书里说的, 该算法只适合内存有限,而磁盘和时间不限,且数字在1~MAX之间不重复的排序. package demo ...

  2. 手把手教你封装 Vue 组件并使用 NPM 发布

    Vue 开发插件 我们可以先查看Vue的插件的开发规范 我们开发的之后期望的结果是支持 import.require 或者直接使用 script 标签的形式引入,就像这样: ps: 这里注意一下包的名 ...

  3. Java 9 中,我们可以在匿名类中使用 <> 操作符

    不说了,直接上代码: public class NewTest { public static void main(String[] args) { N<Integer> n1 = new ...

  4. 复刻smartbits的国产网络性能测试工具minismb-如何配置Ping报文

    复刻smartbits的国产网络性能测试工具minismb,是一款专门用于测试智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此以太网测试工具测试任何ip网络设备的端口吞吐率,带宽, ...

  5. Python代码注释应该怎么写?

    https://zhuanlan.zhihu.com/p/22663276?refer=passer http://zh-google-styleguide.readthedocs.io/en/lat ...

  6. org.hibernate.NonUniqueObjectException:a different object with the same identifier value was alread

    转自: http://blog.csdn.net/zzzz3621/article/details/9776539 看异常提示意思已经很明显了,是说主键不唯一,在事务的最后执行SQL时,session ...

  7. helm之chartmuseum

    1.概述 helm使得在k8s集群里面部署应用变得更简单,就像在linux系统里面使用yum安装软件一样,helm主要是利用的chart,首先看一下chart的结构: # tree zipkin zi ...

  8. git命令小记

    1.git之tag git标签分为轻量级(lightweight)标签和含标注(annotated)标签.轻量级标签一般用于不会改变的分支,含标注的标签包含详细的信息. 轻量级标签: git tag ...

  9. Servlet中forward和redirect的区别

    forward方式:request.getRequestDispatcher("/somePage.jsp").forwardrequest, response);      re ...

  10. [转]【mysql监控】查看mysql库大小,表大小,索引大小

    本文转自:http://blog.sina.com.cn/s/blog_4c197d420101fbl9.html 查看所有库的大小 mysql> use information_schema; ...