AndroidStudio反编译调试实战

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 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

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

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

目录
相关文章
|
关系型数据库 Go
106【GoLand-基础2】(四)
106【GoLand-基础2】
83 0
|
1月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
85 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
5月前
|
IDE 开发工具 C++
快速开始c,配置Clion
快速开始c,配置Clion
|
Go 索引 容器
106【GoLand-基础2】(二)
106【GoLand-基础2】
40 0
|
测试技术 编译器 Go
106【GoLand-基础2】(一)
106【GoLand-基础2】
84 0
|
XML 数据管理 Linux
Qt+GDAL开发笔记(一):在windows系统mingw32编译GDAL库、搭建开发环境和基础Demo
麒麟系统上做全球北斗定位终端开发,调试工具要做一个windows版本方便校对,北斗GPS发过来的是大地坐标,应用需要的是经纬度坐标,所以需要转换,可以使用公式转换,但是之前涉及到了另一个shang市公司项目使用WG,最终选择了GDAL库进行转换。
|
Android开发
【安卓开发】AndroidStudio添加依赖
【安卓开发】AndroidStudio添加依赖
96 0
【安卓开发】AndroidStudio添加依赖
|
XML Android开发 数据格式
|
编译器 开发工具 C语言
FFmpeg开发笔记(一):ffmpeg介绍、windows开发环境搭建(mingw和msvc,无需源码编译)
FFmpeg开发笔记(一):ffmpeg介绍、windows开发环境搭建(mingw和msvc,无需源码编译)
FFmpeg开发笔记(一):ffmpeg介绍、windows开发环境搭建(mingw和msvc,无需源码编译)