当前位置: 首页 > 编程日记 > 正文

Android逆向--如何调试smali代码?

最近在重整Android逆向分析环境,一切都在从零开始,做下记录,给大家分享。

本文介绍Android逆向中smali代码的调试及环境的准备。

事先准备如下工具:

Android killer:反编译APK应用为smali源码的工具

Android studio:调试smali工具

smalidea:Android Studio调试smali需要安装的插件

Android Device Monitor:用来查看待调试进程和端口

待分析应用和调试手机:废话

01

获取smali

我们拿到一个Android的APK应用后,使用Android killer很容易就将它转换成smali工程文件,这个就不用详细介绍了,注意如果需要请将里面用到的APKtool更新成新的,反编译完成的内容像下面这样子:

02

Android Studio插件安装

反编译出来的smali文件,如果Android Studio没有安装smalidea插件,是没法直接调试的,导入Android killer产生的工程,在Run菜单下,可以看到加断点的项都是灰色的:

smalidea插件是用来使Android Studio可以调试smali的插件,下载地址是:https://bitbucket.org/JesusFreke/smali/downloads/

在这个页面找smalidea,最新版本是smalidea-0.05.zip。其它的下载链接可以忽略,是做其它的事情的,这里用不上。

下面描述smalidea安装过程,从Android Studio的File-->settings菜单进入,点plugins标签进入插件安装页面:

再点击按钮 Install plugin from disk...,选择你提前下载好的smalidea压缩包再点ok进行安装:

安装完可以在Plugins页面看到安装的插件,需要重启Android Studio才能生效:

重启后,就能正常调试加断点了:

下面,就可以来调试了。

03

调试过程

Android Studio调试首先需要进行调试的配置,在菜单Run-->Edit Configurations...下,打开configuration页面,左上角有个+,选择remote:

出现具体的配置页面:

注意选中的端口框,需要根据Android Device Monitor中待调试进程的具体情况修改,或者直接8700。

在Android Device Monitor中,会看见进程和端口信息:

左侧第一栏是进程名,第二栏是进程号,第五栏是端口,选中一个进程,则会看见端口这栏有两个值,8xxx/8700这样子,如果调试配置中写的是8700,则在debug时,需要在ADM中选中具体进程,如果不想这样,则需要配置前面的8xxx这个值。

在下方的logcat里,还能看到进程的运行日志,有的时候需要用到,不过这里暂时用不到。

当然如果你使用adb shell命令从头开始启动应用调试,则直接使用8700就可以了。

另外,你还可以使用adb forward 命令进行端口转发,将调试手机的某个进程与调试机器配置的端口之间建立通道,从而进行调试,只是没有上面那样方便。

配置完了后,就可以正式调试了,点菜单Run-->Debug'xxxx',其中xxxx是你上面配置的调试项目名称,默认是unnamed:

你可以在smali的需要调试的地方打断点,当程序运行到你设置的断点时,就会断住,各类窗口很丰富,可在variables窗口看到或修改当前状态的一些变量,frames窗口看到调用层次,还可以在watches窗口中加寄存器变量进行观察和修改:

当然,需要注意,有些地方没办法加断点,那就在前后合适的地方加,还有些地方部分寄存器值无法查看,那就换个方式,具体问题具体分析,这里只是介绍常规方法。

04

总结

这是最基础的工具使用,希望能对一些朋友有帮助。


长按扫码进行关注,时刻进行交流。

相关文章:

python -socket -client

socket client 发起连接。 流程为: 创建接口 发起连接 创建接口参数同socket server相同 发起连接的函数为socket.connect(ip,port) 这个地方的ip与port为socket server端的ip和监听port。 代码示例: # -*- coding: utf-8 -*-This is a testing program …

mysql的binlog太多太大占用了空间的解决办法

现象:网站访问越来越慢,最后无法访问了,经过检查发现磁盘满了 分析过程及解决方案:通常出现这种问题都应该登录服务器检查磁盘、内存和进程使用的情况,通过top、df –h和free –m来检查,发现磁盘空间满了。…

08-dispatch_apply

1 dispatch_apply dispatch_apply 是按照指定的次数将指定的block 添加到指定的queue当中去。 可以用于快速的迭代 // 获取全局并发队列dispatch_queue_t queue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);// 迭代数组NSLog("begin");NSArra…

记一次知乎维权过程——严肃批评某非法引流商

“ 我的文章被人盗版了。” 首先请关注本号的云技术君的马甲赶快取关,这里不欢迎你,你如果再抄我的文章去干坏事,你全家得新冠肺炎。 文章被盗版,被洗稿,且用来给菠菜党引流,我很生气。 好了&#xff0c…

《代码大全2》读后感czz

经老师推荐,买了一本《代码大全2》,花了近3个月的时间看完了,看完后觉得还有很多值得回味的地方,而且每部分之后作者还推荐了不少经典书籍。所以,作个读书心得。全书的主题是软件构建,关于软件构建问题的方…

09-dispatch_source

dispatch_source 是BSD系内核惯有的kqueue的包装,kqueue 是XNU内核中发生各种事件时,在应用程序编程中执行处理的技术。 CPU 负荷非常小,尽量不占用资源。 dispatch_queue 和dispatch_source dispatch_source 是可以取消的,取…

如何获取boss直聘搜索牛人被屏蔽的姓名

点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 玩玩boss直聘。”最近在用boss直聘,活跃度估计蛮高的。在使用牛人搜索的时候,却遇到了一个问题,就是搜出的牛人姓名是被屏蔽的,让我很是焦虑,虽然知道这种设计是直聘推广…

【Python之路】第二篇--初识Python

Python简介 Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎&…

如何实现phpcms v9_4X版本tag的伪静态?

这两个月来写的文章越来越少了,不是懒,因为太忙了--为客户赶做网站。因为客户指定要使用phpcms v9,还要求使用phpcms v9_42版本实现tag伪静态,在接手的时候phpcms v9_42是最新版本,而现在phpcms官方已经发布phpcms v9_5.X了。对于…

OC对象内存布局

OC对象的内存布局 1 每一个实例对象(Instance)内部都有一个isa指针,指向它的类对象,类对象存放着本对象的实例方法列表和成员变量列表。 2 类对象(Class)内部也有一个isa指针指向元类对象(MetaClass),元类对象存放的事…

连信的protobuf数据格式

点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 连信里用到的protobuf结构。”在看本文之前,可以先进行一下回顾,之前已经对协议的框架进行了整体的介绍:连信协议整体框架看了后结合自己的分析过程,应该有个初步的了解。后续会陆续…

fileupload控件在ajax中无法使用

google得到的方法:1。http://geekswithblogs.net/ranganh/archive/2008/04/01/file-upload-in-updatepanel-asp.net-ajax.aspxThere is a better way of doing it with Ajax Control Toolkit version 3.0.30930 which works with .NET 3.5 SP1 and Visual Studio 20…

Cron表达式的详细用法

字段 允许值 允许的特殊字符 秒 0-59 , - * / 分 0-59 , - * / 小时 0-23 , - * / 日期 1-31 , - * ? / L W C 月份 1-12 或者 JAN-DEC , - * / 星期 1-7 或者 SUN-SAT , - * ? / L C # 年(可选) 留空, 1970-2099 , - * / 例子:0/5 * * * *…

01-CoreData 概述

CoreData 主要的几个类 1 概述 CoreData 是iOS 3 之后出现的一种数据持久化方案,提供了一种ORM的存储关系,CoreData 是直接将对象存储到数据库中去,也可以将数据库中的数据转化为OC对象,过程中不用编写SQL语句。 2 几个类的讲解…

连信的会话加密密钥协商过程

点击上方↑↑↑蓝字[协议分析与还原]关注我们 “ 介绍连信会话加密密钥的协商过程。” 公号内之前已经对协议的框架和协议内的数据格式进行了介绍,有需要可以回顾下: 连信协议整体框架 连信的protobuf数据格式 本文对连信的会话加密密钥协商过程进行介绍…

6、UmbracoNewsSite:添加新闻分类

上一篇做了一个简单的首页,在导航条上添加了几个新闻板块,接下来我们就添加这几个新闻板块的页面。 开始我们还是需要创建Document Types用来展示新闻列表。我们先做好规划,新闻列表只需要把新闻标题和图片展示出来就可以了,。  …

02-CoreData 的增删改查

CoreData 的增删改查 基本的增删改查的操作 1 数据库的创建 - (void)createDB {// 1.1 创建路径NSURL *modelURL [[NSBundle mainBundle] URLForResource:"AT_CoreDataDemo1" withExtension:"momd"];// 1.2 根据模型文件路径创建模型对象NSManagedObje…

Lemon开源OA

http://www.mossle.com/index.html 转载于:https://www.cnblogs.com/gzmg/p/3770882.html

UC浏览器代理流量解密

点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 解密uc浏览器的安全代理流量,看看是不是真安全。”作为一个从上古网络时代过来的人,一定对UC浏览器有深刻印象,它的流量透明代理功能,就是现在的云加速功能,使用UC的服务…

JAVA07 接口与继承

一 动手实验:继承条件下的构造方法调用 1)源代码 1 public class TestInherits {2 3 public static void main(String[] args) {4 // TODO Auto-generated method stub5 6 Child c new Child();7 }8 9 } 10 11 class GrandPa…

学习-现代交换原理与通信技术

帮助学习细化。。。 首先,这书真是难读,像个词典嘛似乎《现代交换原理与通信技术》卞佳丽 北邮 呵呵 呵了个呵 不过词典也有词典的好处 第三章,数字程控电话交换与通信网络 1. 控制子系统 与 话路子系统 前者在于控制,后者在于数…

03-NSPredicate谓词

NSPredicate 谓词 在查询数据的过程中&#xff0c;给NSFetchRequest设置一个过滤条件&#xff0c;不需要讲所有的托管对象加载到内存中去。这样的话就会节省内存和加快查找速度。 一 运算符 1 比较运算符 、< 、 、> 、< 、! 比如说age>80 NSPredicate *pre […

小兵别嚣张,签名算法分析

点击上方↑↑↑蓝字[协议分析与还原]关注我们“分析unity3d游戏小兵别嚣张的签名算法。”不久前&#xff0c;写了个unity3d的引子&#xff0c;介绍了使用工具从unity3d游戏中提取出各种资源和算法&#xff1a;unity3d游戏IL2CPP相关算法简单分析不过内容很少&#xff0c;今天介…

NOIP模拟题——B

【题目描述】我们要从n种食物选m个出来&#xff0c;安排一个顺序吃掉它&#xff08;们&#xff09;&#xff0c;每种食物有个美味值ai&#xff0c;然后我们有k个规则&#xff0c;每个规则有 xi, yi 和 ci三个数&#xff0c;如果吃完第xi种食物接下来马上吃第yi种食物&#xff0…

Maven使用常用命令

> mvn clean删除target文件夹> mvn clean test编译测试代码&#xff0c;默认被放到target/test-classes文件夹下面> mvn clean compile编译主代码&#xff0c;并放到target/classes文件夹下> mvn clean package打包代码&#xff0c;我们可以看到target文件下生成了…

04- CoreData轻量级版本的迁移

CoreData版本的迁移 一 轻量级的数据迁移 例如添加新的实体&#xff0c;新的实体属性。 轻量级版本迁移方案非常简单&#xff0c;大多数迁移工作都是由系统完成的&#xff0c;只需要告诉系统迁移方式即可。在持久化存储协调器(PSC)初始化对应的持久化存储(NSPersistentStore…

通da信TCP长连接数据算法分析

点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 分析通da信TCP长连接内部分数据的算法。”作为一款老牌的炒股软件&#xff0c;通da信里面的数据是相当的丰富&#xff0c;免费的也很丰富&#xff0c;准确性也很好&#xff0c;例如&#xff0c;这种股票之间关联的信息。通da信一…

产品经理怎么样用图表传达数据信息(多图)

上文有点仓促了&#xff0c;结尾没有写好。补上&#xff1a; 对劣质成本分析的时候应该注意&#xff1a; 1、在进行劣质成本分析的时候&#xff0c;要注意区分成本和必要的浪费。要注意一个关系&#xff0c;对必要浪费的控制会导致其他成本的上升。例如前文说到四小时送一次货&…

'This NSPersistentStoreCoordinator has no persistent stores 报错

可能是你改变coredata的属性项之后再运行的话在模拟器中会出现这个问题。找上面说的&#xff0c;找到mac下的模拟器中的程序路径&#xff0c;然后删掉其sqlite文件再运行就好了&#xff01;&#xff01;&#xff01;

tcp断开连接,4次握手,为什么wireshark 只能抓到3个包?

用wireshark 抓包&#xff0c;看看tcp 断开连接的过程. 以前书上说tcp断开连接&#xff0c;4次握手&#xff0c;可我为什么wireshark 只能抓到3个包&#xff1f; 百度一下&#xff0c;别人也有类似的疑问。 【求助】书上和网上的资料说&#xff0c;TCP拆除连接需要四次握手。但…