爬虫进阶(安卓逆向)adb命令-smali基本语法-安卓加载原理-破解安装签名(2)

第一篇地址如下:

  • jadx与apktool运用
  • app 文件基本知识

爬虫进阶(安卓逆向)安卓基础与逆向工具(1)
https://blog.csdn.net/weixin_44238683/article/details/118371603

一、adb与夜神模拟器

adb命令,相当于手机与电脑交互的一种工具

windows下adb与夜神模拟器配置
https://blog.csdn.net/shenshenruoxi/article/details/107525902

使用案例(按照上面的链接配置好)

链接夜神模拟器,查看链接的设备

nox_adb.exe connect 127.0.0.1:62001 #【62001是夜神模拟器的端口号】
adb devices -l 

在这里插入图片描述

安卓设备列表

adb devices
adb devices 显示device unauthorized
adb kill-server
adb start-server

进入安卓shell

adb shell

安卓日志

adb logcat
adb logcat -s keyword

把文件推送进安卓设备

adb push 

打印AndroidManifest.xml

adb shell dumpsys activity top
adb shell dumpsys package packagename
adb install XXX.apk
adb uninstall packagename

拉取安卓文件到本地

adb pull android-path local-path

推送本地文件到安卓

adb push local-path android-path 
adb shell pm clear package_name

网易模拟器

adb connect 127.0.0.1:755

二、smail

在这里插入图片描述

1、是一种文本文件

2、在拿到一个apk文件时候通过apktool反编译后会将, Dex文件成smail文本文件

3、一个smali文件对应一个 .java代码,java文件名smail文件名称可以知其一寻找其对应文件,smail文件中语法.line.java 文件的代码行数对应

4、java代码不可以轻易修改,比如反编译后,通过jadx工具发现java代码里面里面有启动签名校验的函数,不可天真以为,
直接注释,或者删除,可以根据行数去smail文件中注释修改,因为java代码是通过编译后的,如果直接修改,会造成无法安装启动app

三、破解安装签名校验

破解安装签名校验,在第二小节已经详细阐述,总结如下两点:

  1. 修改smali文件 【本文章会介绍运用】
  2. hook技术 【后面文章会讲到】

四、APK启动加载

1.App启动加载流程:(简要阐述)

一个APP启动,Dalvik虚拟机会加载dex文件

什么是Dalvik虚拟机

Dalvik是Google公司自己设计用于Android平台的Java虚拟机。Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为 .dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。

什么是dex文件,在我上一篇博客有提到
在这里插入图片描述

Java层Dex加载流程:

 BootClassLoader ---> PathClassLoader ----> DexClassLoader

BootClassLoader是安卓系统设备的一些函数方法,还有pathclassloaderDexClassLoader是经常所说脱壳所会用到的,这些都是开发好的,不能直接在Dexclassloader进行修改,但是可以通过hook技术去控制函数的逻辑,“不改变原本函数逻辑,加入自己的逻辑”大概就是hook

Native层Dex加载流程:

 libdvm.so (重编译 system.img)
 OpenDexFileNative

Native底层脱壳,so文件修改,so文件是系统函数包,脱壳难度大,要懂得c语言hook,所以一般下手
还是从dex逻辑层下手

2.APP加载流程(详解)

在上一篇博客,已经提及

一个app理论上只有一个application
androidmainfest.xml有什么用

上面这幅图就是一个app启动的流程

  1. 一个app有图标,当按下图标的时候 “click event” 触发事件
  2. oncreate系统函数激活(有些APP开发人员会重写此系统函数名),然后到了上图蓝色部分发出两个信号LAUNCH_ACTIVITY,BIND_APPLICATION,一个调
  3. BIND_APPLICATION一个APP只有一个application,此为APP启动的第一个主函数入口,跟 oncreate()也有联系
  4. LAUNCH_ACTIVITY既上篇博客提到的,activity启动界面(在androidmainfest.xml中),会看到类似广告啥的跟 onstart()也有联系
  5. 而后就是调用相关的组件功能(上图,橙色,绿色,蓝色,部分略过,没什么太大关系)

五、APP四大组件

2、3、4没有太大关系~~~

1、Activity:

一个Activity通常就是一个界面,可以参考上篇文章,androidmainfest.xml中activity中welecome什么的,类似欢迎界面

 <activity android:name="">
	 <intent-filter>
		 <action android:name="android.intent.action.MAIN"/>
		 <category android:name="android.intent.category.LAUNCHER"/>
	 </intent-filter>
 </activity>

2、Service:

后台服务,播放音乐,数据处理等

3、Broadcase receiver

异步接收广播

4、Content provider:

内容共享

六、 绕过签名验证实例

书旗app绕过签名
在这里插入图片描述
链接:https://pan.baidu.com/s/19Au0tWhm7ok9iROHANW9kg
提取码:djbm

后面会用到命令

1、拖动app到夜神模拟器

可以发现安装成功,且成功进入
在这里插入图片描述

2、apktool反编译书旗app

apktool d shuqi.apk

在这里插入图片描述

3、重新打包

打包太久,截取部分

apktool b shuqi

在这里插入图片描述

4、重新签名,安装签名,拖动动夜神安装

进入dist目录
在这里插入图片描述

4.1 重新签名

keytool -genkey -keystore my-release-key.keystore -alias my_alias -keyalg RSA -keysize 4096 -validity 10000

执行完毕,会生成一个签名文件

在这里插入图片描述

4.2 安装签名

jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore -signedjar shuqi_sign.apk shuqi.apk my_alias

执行完,生成一个app

在这里插入图片描述

4.3 安装app

安装成功,但是无法打开,打开就闪退

原因:

  1. app做了签名校验,它本身签名是写进了代码,每次启动会校验签名,比对发现不对,会让系统退出
  2. 现在目标找到签名目标在什么地方

在这里插入图片描述

5、寻找校验签名代码在何处

5.1 分析androidmainfest.xml文件

在这里插入图片描述
一个APP理论上只有一个application,结合上面4.1节,以及上一篇文章知识

android:name="android.taobao.atlas.startup.AtlasBridgeApplication"

在这里插入图片描述

5.2 运用jadx工具定位签名代码

那么启动函数会是这个吗AtlasBridgeApplication,前面包含了taobao,但是感觉不太对,是淘宝的东西,于是去百度
在这里插入图片描述
原来是偷偷替换了入口,那么打开jadx工具,反编译源码

秉着 “一个APP理论只有一个application”的原理,尝试去搜 application关键字,找到原生的app入口

在这里插入图片描述
原来这就是app入口,在点击右下角转到此处代码:

分析代码

如何快速定位代码:

  1. 靠着猜,和关键词敏感度
  2. 签名单词,sign
  3. 那么一定会有 if 判断之类的逻辑
  4. 关键词 check、verify、password、什么的

带着以上的思路搜索也好,看也好,就能快速定位

结合4.2节 APP加载流程提到的 oncreate() 可以快速定位
在这里插入图片描述
也可以通过关键 sign 查找

在这里插入图片描述
以上知道了,checkSigAsync()函数是启动校验的方法,并且知道了 在java中行号为138行

5.3 通过smail绕过签名验证

  • 在上面已经定位到了java 的 签名验证 校验代码的行数为138行,那么如何绕过呢?

  • 删除、注释,checkSigAsync()

  • 当然是不可以改变java现有逻辑,因为涉及编译,会导致编译失败,ap无法使用等

那么在前面提到,appktool会将dex文件反编译成smail文件,那么修改smail文件即可

在前面jadx操作的时候知道,java文件为路径即名称
在这里插入图片描述
那么对应到smail文件
在这里插入图片描述
定位到.line 138,删除关联smail代码
在这里插入图片描述

5.4 重新打包安装

前面因为举例,随意修改签名打包安装不上app,所以删除dist和build两个文件夹,再重新打包
在这里插入图片描述
打包app

apktool b shuqi

生成签名文件

keytool -genkey -keystore my-release-key.keystore -alias my_alias -keyalg RSA -keysize 4096 -validity 10000
进入dist文件目录下再执行下面命令

为app安装签名

jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore -signedjar shuqi_sign.apk shuqi.apk my_alias

重新拖动到夜神
在这里插入图片描述

结束!!!!!!

给个赞吧,收藏下吧,转发下吧!

下一篇将运用adb,本节没有用到,只是为了安装夜神的时候,顺带加进去了!!!

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值