AndroidStudio反编译调试实战

简介: AndroidStudio反编译调试实战

title: AndroidStudio反编译调试实战
date: 2020-10-28 21:03:45.0
updated: 2020-10-28 21:03:46.0
url: https://www.ufec.cn/archives/androidstudiodebug.html
thumbnail: https://ghproxy.com/https://raw.githubusercontent.com/ufec/picGoImg/main/blog/55d8c8954ec2cbec65d4e25a5da63395.webp
categories:

  • 调试

tags:

  • AndroidStudio
  • AndroidStudio调试
  • 反编译
  • 逆向

Android Studio 调试反编译文件

序言

​ 写这篇文章主要记录一次实战反编译调试记录,调试过程中遇到的问题等等

基础

​ 这次是一个很简单的小 app,没有任何壳什么的,所以前期过程中都很顺利,主要是使用 Android Studio 动态调试的过程中遇到的问题,所以需要了解一点反编译知识,还是老三件套apktool+dex2jar+jd-guijadx其实更方便,但仍然需要apktool来支持,获取smali源码,并动态调试,安装这些软件都很简单,不做赘述

开始

apktool 的基本两个命令

#解包
java -jar apktool.jar d xx.apk
#打包
java -jar apktool.jar b src -o new.apk

另外几个后续会用到的命令

#生成签名
keytool -genkey -alias mykeystore -keyalg RSA -validity 2100 -keystore mykey.keystore
#查看签名
keytool -list -keystore mykey.keystore
#签名文件
jarsigner -verbose -keystore mykey.keystore -signedjar 重新签名后的.apk 待签名的.apk mykeystore

要使用动态调试smali还需要下载AS插件Smalidea插件,下载地址:https://bitbucket.org/JesusFreke/smali/downloads下载最新版即可

注:如果你使用AndroidStudio 4.1的话可能会出问题(此处踩坑),会出现说不兼容的情况,我们需要修改一下插件的配置,打开目录

C:\Users\user\AppData\Roaming\Google\AndroidStudio4.1\plugins\smalidea\META-INF\plugin.xml,此次文件中根元素id的上面添加一个根元素,内容为

<depends>com.intellij.modules.java</depends>

insert_code

AndroidStudio 4.1就能正确加载插件

安装插件后还没完,由于AndroidStudio 4.1内置smali插件(只能查看,无法断点),我们需要使AS使用Smalidea插件来打开,

按住 Ctrl+Alt+S 选择->编辑器->文件类型,找到黑色图标那个Smali,点击注册格式的加号,输入*.smali,并删除掉橙色图标的Smali支持

smalidea_activte

samli_unactive

这样就完成了准备工作

通过apktool解包后的目录用AndroidStudio打开,右键smali目录,选择标记目录为->源目录(Source Root),查看AndroidManifest.xml文件中application根元素是否有android:debuggable="true"这个属性,一般是没有的,添加上此行代码,并在程序主Activity中(搜索LAUNCHER,有此属性值的activity便是主Activity)添加invoke-static{}, Landroid/os/Debug;->waitForDebugger()V此行代码

watefor_debug

然后对修改后的文件目录进行打包、签名(小技巧,建议修改包名可以使调试版的正式版共存)

#以调试模式打开
adb shell am start -D -S -W 包名/主Activity
#上一步运行后,会等待调试进程,保持屏幕常亮
#查找指定包名的进程
adb shell ps | findstr "包名"
#为进程绑定一个端口,这步很重要
adb forward tcp:端口号 jdwp:进程号

AndroidStudio 4.1->运行->编辑配置->+->远程 随便起个名字,Port填写上一步绑定的端口,然后保存->运行->调试即可

接下来选择所要断点的地方即可开始正常调试

实战

本次是以安卓版沃派的逆向演示,找出主要几个参数的加密流程,首先需要抓包了解它的认证过程,至于如何抓包不做赘述,安卓 hc 软件即可,虽然他这个没做抓包检测,但还是有一点的技巧的

认证流程(大致)

  • 首先会请求www.qq.com,做网络检测
  • 然后会获取所有api列表
  • 接着访问服务器首页即使用介绍页面,(目前不清楚这一步要做什么)
  • 然后根据设备的特征(ipmac)获取相应的参数用于生成signature
  • 根据用户的账户、密码发送认证请求,主要是请求头X-Xinli-AuthPOST的参数都是明文参数(这一步参数加密都能生成,但却被拒绝认证,估计是有些小细节我还没断点到),成功后会在服务器留下session作为登录校验,并返回认证相关参数
  • 结尾会在服务器查找session来判断是否存在

至此即为捕获到的认证流程,如下图所示(其中IP可能不同的地域服务器不同,连上沃派后会弹出引导界面,引导界面的地址即为服务器地址)

auth_process

根据调试过程来看,请求头X-Xinli-Authresponse字段是由前一个接口返回数据中的challenge加密而来,signature是由返回数据及部分特征值组合而来(请求方式请求地址请求头部分字段)拼接,再进行加密而来,加密方法为HmacSHA1,密钥为s3cr3t,附上JavaPHP实现代码

java_netkeeper_code

php_netkeeper_code

加密算法也很简单,没有自己实现,用的现有的加密库,但他有个判断,我试了几次都是断进同一个点,就直接扒出来了,不知道另一个点是否对结果有影响

没找到更好的断点来捕获整个流程,验证也一直被拒绝(猜想可能是网卡),需要进一步细心断点了!!!!

目录
相关文章
|
4月前
|
存储 缓存 安全
C盘空间不足怎么扩大?2026年从清理到迁移的终极指南
C盘空间告急?本文教你四步摆脱困扰:紧急清理垃圾、精准定位大文件、迁移应用与系统文件、建立长效预防机制。结合系统工具与专业软件,如磁盘清理大师等,安全高效释放空间,养成良好习惯,彻底告别存储焦虑。
|
移动开发 C语言
C语言:&&和&、||和|有什么区别
在C语言中,&&和||是逻辑运算符,分别表示逻辑与(AND)和逻辑或(OR),它们用于连接两个布尔表达式,只有当两边都为真时&&返回真,||在至少一边为真时返回真;&和|是位运算符,对应地进行位级的与、或操作,它们对操作数的二进制位进行逐位处理。&&和||具有短路特性,而&和|没有。
16324 1
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
1384 1
|
Java API Android开发
你有没有想过自己写一个Xposed模块?教程来了~(一)
在互联网上,关于Xposed模块编写的教程可谓是一抓一大把。但由于时间的推移,很多工具和方法都发生了变化(如Eclipse退出安卓编程舞台,AndroidStudio 不断升级导致其一些设置也随之变化等)也正因此,网上的教程往往有一些时限性,比如现如今 provide 这个关键字已经被舍弃了却仍有人在用,还有些说要把jar包放到lib文件夹而非libs文件夹……种种错误或者落伍的教程对新手产生了很大的误导。
802 0
|
前端开发 搜索推荐 安全
你用过最好的CMS网站管理系统?
本文主要介绍了内容管理系统(CMS)的概念、功能和使用场景。CMS是一种位于WEB前端和后端管理前端内容的软件系统,用于发布、修改、审批、发布内容。文章提到,内容管理系统在满足个性化需求和提高工作效率方面有显著优势。
1401 1
|
存储 Java Linux
SpringBoot集成海康网络设备SDK
概述 设备网络SDK是基于设备私有网络通信协议开发的,为嵌入式网络硬盘录像机、NVR、网络摄像机、网络球机、视频服务器、解码器、报警主机、网络存储等产品服务的配套模块,用于远程访问和控制设备软件的二次开发。 功能 图像预览, 文件回放和下载, 云台控制, 布防/撤防, 语音对讲, 日志管理, 解码卡, 远程升级, 远程重启/关闭, 格式化硬盘, 参数配置(系统配置, 通道配置, 串口配置, 报警配置, 用户配置), 多路解码器, 智能设备功能和获取设备能力集等。
2719 115
|
SQL 安全 网络协议
Web 常见攻击方式
【10月更文挑战第25天】这些只是一些常见的 Web 攻击方式,实际上还有许多其他的攻击手段。为了防范这些攻击,需要采取一系列的安全措施,如输入验证、输出编码、安全配置、身份验证等。同时,也需要不断提高用户的安全意识,以减少被攻击的风险。
456 1
|
Windows
win10家庭版安装iis 微软web服务器 windows安装IIS web服务器
win10家庭版安装iis 微软web服务器 windows安装IIS web服务器
463 0
|
Android开发
Android 对鼠标事件的监听实现
Android 对鼠标事件的监听实现
622 1
|
数据采集 供应链 监控
一文看懂:MES定义和功能是什么,以及在数字化工厂的应用
MES是制造企业信息化的关键,适应个性化和敏捷制造需求,助力生产精益管理。作为数字化与智能化的核心,MES系统在数字化工厂中发挥重要作用,实现实时监控、资源优化和生产流程自动化。系统功能包括一站式生产业务流程、生产进度追踪、灵活功能修改、数据可视化和移动端报工。发展历程从数据采集到智能制造,现正向MOM发展,整合更多环节,强调数据实时性、智能化、灵活性和整体优化,以提升制造业效率和竞争力。