爬虫进阶(安卓逆向)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
三、破解安装签名校验
破解安装签名校验,在第二小节已经详细阐述,总结如下两点:
- 修改smali文件 【本文章会介绍运用】
- 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是安卓系统设备的一些函数方法,还有pathclassloader,DexClassLoader是经常所说脱壳所会用到的,这些都是开发好的,不能直接在Dexclassloader进行修改,但是可以通过hook技术去控制函数的逻辑,“不改变原本函数逻辑,加入自己的逻辑”大概就是hook
Native层Dex加载流程:
libdvm.so (重编译 system.img)
OpenDexFileNative
Native底层脱壳,so文件修改,so文件是系统函数包,脱壳难度大,要懂得c语言hook,所以一般下手
还是从dex逻辑层下手
2.APP加载流程(详解)

在上一篇博客,已经提及
一个app理论上只有一个application
androidmainfest.xml有什么用
上面这幅图就是一个app启动的流程
- 一个app有图标,当按下图标的时候 “
click event” 触发事件 oncreate系统函数激活(有些APP开发人员会重写此系统函数名),然后到了上图蓝色部分发出两个信号LAUNCH_ACTIVITY,BIND_APPLICATION,一个调BIND_APPLICATION一个APP只有一个application,此为APP启动的第一个主函数入口,跟oncreate()也有联系LAUNCH_ACTIVITY既上篇博客提到的,activity启动界面(在androidmainfest.xml中),会看到类似广告啥的跟onstart()也有联系- 而后就是调用相关的组件功能(上图,橙色,绿色,蓝色,部分略过,没什么太大关系)
五、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
安装成功,但是无法打开,打开就闪退
原因:
- app做了签名校验,它本身签名是写进了代码,每次启动会校验签名,比对发现不对,会让系统退出
- 现在目标找到签名目标在什么地方

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入口,在点击右下角转到此处代码:
分析代码
如何快速定位代码:
- 靠着猜,和关键词敏感度
- 签名单词,sign
- 那么一定会有 if 判断之类的逻辑
- 关键词 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,本节没有用到,只是为了安装夜神的时候,顺带加进去了!!!
更多推荐
所有评论(0)