Android逆向基础入门

这篇具有很好参考价值的文章主要介绍了Android逆向基础入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、基础App数据抓取

1、App常用抓包工具
  • 常用的拦截抓包工具有fiddler、mitmproxy、charles手机端需和电脑端在同一个网络下,且手机端要配置相应的证书,手机端还要设置手动代理):大部分app使用的数据通信协议基于http/https,可通过抓包查看来模拟url请求。
  • 对于安卓手机抓包建议使用charles,因SSL Pinning(证书锁定)无法对https协议的请求抓包,此时可尝试以下几种方式①使用android 7 以下的系统解除限制,②xposed + JustTrustMe,③ VirtualXposed + JustTrustMe ④ Frida + DroidSSLUnpinning ;只有抓到包我们才知道需要哪个参数
  • 常用的自动化工具有uiautomatorviewer、Appium、Airtest手机与电脑端通过usb数据线连接,同时手机需要打开usb调试功能进入开发者模式):就相当于web端的selenium
2、fiddler抓包工具
  • fiddler安装与使用,不用手动设置代理,打开软件就自动开启了代理
3、mitmdump抓包工具
  • mitmproxy安装与抓包分析, 需要手动设置浏览器局部代理不太方便但还行;强大功能在于mitmdump可以实时抓包,然后给python等处理
  • mitmdump实时抓包使用介绍:分析抓包逻辑编写好python处理脚本 > mitmdump -s py文件 -p 端口号 > 滑动app(设置代理)或者web(设置局部代理)
4、charles抓包工具
  • charles安装与抓包分析,Charles免费使用30分钟,然后需要重启再次使用,貌似设置了SSL Proxying证书,可以抓SSL Pining的包(低于7版本的安卓系统)
5、uiautomatorviewer / appium自动化工具
  • appium相关操作使用,与手机通过usb连接,需要确定要操作的相应的app包名起服务,没有airtest方便;可通过录制功能自动生成python代码
  • appium实战案例1
  • appium实战案例2
6、Airtest自动化工具
  • Airtest相关操作使用,与手机通过usb数据线连接,可以操作多个手机实现群控,可通过录制功能自动生成python代码,功能十分强大

二、js逆向与app逆向的区别

  • app逆向比js逆向繁琐很多,掌握的知识点也要更多,难度根本不在一个层次
  • js逆向:全部在web页,抓包只需chrome浏览器,js逆向分析也只需chrome浏览器,也就是整个分析过程在chrome上就可以完成,一些偶尔使用的辅助工具油猴,fiddler,ast,几乎就没了
  • app逆向:最好有一个手机,https的抓包可能会抓不到,有壳的还要脱壳,需要反编译或者反汇编才能看到java或者C的代码,有时候甚至要看汇编的,需要掌握的知识点根本不是一个量级
  • js逆向与app逆向的区别会进一步完善修改,以下可能会有些许错误
    Android逆向基础入门

三、Android_apk逆向

1、app逆向名词
  • .apk:每个android app都有对应的安装包,以.apk为后缀 ,.apk文件类似压缩包,将后缀名改成.zip可以进行解压,里面的.dex文件可以用反编译工具进行反编译获得源码;所以一般app都会加壳,将真正的源码隐藏起来
  • Java层:Java代码
  • Native层:C/C++代码,也称为so层,保存在.so文件下
  • 反编译工具:jadx、JEB、Apktool:因SSL Pinning导致无法正常抓包时,或则是抓包后要分析某个参数的生成逻辑时,需要反编译apk文件,还原成可读性高的java代码进一步分析
  • Hook工具:Xposed、Frida:可以通过hook拦截和改写逻辑,获取关键加密数据,hook或模拟Java层Native层(即so层由C/C++等实现)的代码;其中Xposed只能Hook Java层逻辑,且Xposed整个模块逻辑需要使用Java语言实现;因此Frida更强大、方便、灵活
  • 反汇编工具:IDA Pro工具:逆向分析、调试、模拟Native层(so层由C/C++`等实现)的代码实现逻辑
  • Java调C的接口:JNI(Java Native Interface):即Java的本地接口,是Java调用Native即C/C++编写的代码,C/C++编写的代码会被编译到.so后缀的文件里,还原so需要反汇编,增加了逆向难度
  • 混淆工具:OLLVM(Obfuscator-LLVM):在Native层实现混淆,即针对LLVM(编译器和工具链的集合,把C/C++转化成目标机器执行的代码)的代码混淆工具;
  • 当有如上OLLVM混淆时,要分析其内部调用逻辑,十分困难,一个方法是硬刚逆向so文件和通过动态调试进行分析;另一个方法就是利用RPC、unidbg等模拟执行so文件的逻辑
  • 模拟执行so层逻辑:Frida-RPC、AndServer-RPC、unidbg:模拟执行so文件的逻辑,不关心so文件的内部逻辑,直接调用so文件,传入对应的参数,得到执行结果;如果被风控检测到执行环境不正常,会拒绝返回数据或者是返回假数据
2、jadx反编译工具
  • jdk1.8_java环境安装(目录3)
    Android逆向基础入门

  • adb安装(目录2)

  • jadx工具:jadx-gui反编译图形界面工具,jadx下载 , 解压后运行exe文件,然后打开加载apk文件即可

  • 常用功能:文本搜索(导航),右击代码查找方法声明,右击代码查找用例,反混淆(工具),日志查看器(帮助),设置选项里面也有很多功能
    Android逆向基础入门
    Android逆向基础入门
    Android逆向基础入门

3、JEB反编译工具
(1)JEB常用功能介绍
  • JEB反编译器使用详细介绍

  • JEB下载安装,windows运行.bat文件,然后加载apk文件,即可看到右侧Smali代码,通过编译也可以转到java代码看
    Android逆向基础入门
    Android逆向基础入门
    Android逆向基础入门

  • 常用功能1:ctr+f图一进行文本字符串搜索定位,并勾选环绕搜索,或者图二ctr+f搜索
    Android逆向基础入门

Android逆向基础入门

  • 常用功能2:右击代码编译可以转到java代码声明处,或者再次右击相应代码字符串会回到Smali代码用例
    Android逆向基础入门
    Android逆向基础入门
(2)JEB动态调试功能
  • 常用功能3:使用JEB动态调试功能验证,在猜测的代码位置添加断点,然后app滑动加载数据,然后看断点位置是否停止运行

  • ① 首先手机与电脑通过usb数据线连接 > 然后手机端要打开USB调试功能,进入开发者模式 > 然后将电脑端的.apk文件放到手机存储中>然后手机点击apk文件即可安装

  • ② 然后cmd运行如下命令(该命令让手机端的app以调试的模式启动) ,之后手机会显示wating for debugger, -D指定App以调试模式启动-n指定启动入口
    Android逆向基础入门

    adb shell am start -D -n com.goldze.mvvmhabit/.ui.MainActivity
    
  • ③ 然后JEB界面 `在目标代码行ctr+b下断点 > 点击Debug按钮 > 然后调试,滑动app,然后就会断在断点处,多出的右侧界面也可以看字段值变化
    Android逆向基础入门
    Android逆向基础入门
    Android逆向基础入门
    Android逆向基础入门

  • ④ 发现加密点,进入encrypt函数内部继续调试,亦可右击代码编译直接看java代码,然后逻辑找到要么python还原,要么写个java爬虫都可以
    Android逆向基础入门
    Android逆向基础入门
    Android逆向基础入门

4、Frida之Hook工具
  • Hook工具Frida详细介绍,是一个基于Python和JavaScript的Hook与调试框架,可以Hook Java层或者Native层,通过python注入js脚本操作手机上的java代码
  • Frida安装:按如下命令进行安装
    pip install frida -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
    pip install frida-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/
    
    Android逆向基础入门
(1)真机下载frida-server文件
  • 准备一部已经root的手机

  • 手机下载frida-server文件,通过数据线usb与电脑连接,在cmd窗口输入以下命令查看cpu类型,如这里需要下载的包对应arm64 ,然后下载frida服务端frida-server(注意这里的版本和Frida的版本是一致的15.1.14)

    adb shell 
    getprop ro.product.cpu.abi
    

    Android逆向基础入门
    Android逆向基础入门

  • 将解压后的文件夹通过adb push将frida-server发送到android设备/data/local/tmp目录中,进入了adb shell操作窗口,并修改可执行权限

    ######## 1、将解压后的文件夹通过adb push将frida-server发送到android设备/data/local/tmp目录中
    adb push "D:\Package\frida-server-15.1.14-android-arm64" /data/local/tmp
    
    ######## 2、进入了adb shell操作窗口,修改可执行权限
    adb shell
    cd /data/local/tmp
    ls
    chmod 777 frida-server-15.1.14-android-arm64
    

    Android逆向基础入门

  • 手机运行frida服务 ./frida-server-15.1.14-android-arm64 &,起好服务后未报错,则保持当前cmd窗口不要关闭

    ######## 3、手机端后台运行frida服务
    su
    ./frida-server-15.1.14-android-arm64
    
  • 如上frida服务起好后,新开一个cmd窗口,执行如下命令

    ######## 4、在cmd新的窗口下执行如下命令
    adb forward tcp:27042 tcp:27042 
    adb forward tcp:27043 tcp:27043
    frida-ps -U
    

    Android逆向基础入门

(2)夜神模拟器下载frida-server文件
  • 准备下载夜神模拟器

  • 下载,自定义安装路径,直接下一步即可安装,可以将安装路径D:\Program Files\Nox\bin添加到环境变量;默认打开是平板模式,打开设置>性能设置>分辨率改为手机模版;
    Android逆向基础入门

  • 连接夜神模拟器设备:打开cmd命令行,进入夜神安装的bin目录,执行如下命令,出现黄色区域内容即连接成功:

    nox_adb.exe connect 127.0.0.1:62001
    adb devices
    

    Android逆向基础入门
    Android逆向基础入门

  • 模拟器下载frida-server文件,cmd输入以下命令查看cpu类型,如这里需要下载的包对应是x86 ,然后下载frida服务端frida-server(注意这里的版本和Frida的版本是一致的15.1.14)

    adb shell 
    getprop ro.product.cpu.abi
    

    Android逆向基础入门
    Android逆向基础入门

  • 将解压后的文件夹通过adb push将frida-server发送到android设备/data/local/tmp目录中,进入了adb shell操作窗口,并修改可执行权限

    ######## 1、将解压后的文件夹通过adb push将frida-server发送到android设备/data/local/tmp目录中
    adb push "D:\Package\frida-server-15.1.14-android-x86" /data/local/tmp
    
    ######## 2、进入了adb shell操作窗口,修改可执行权限
    adb shell
    cd /data/local/tmp
    ls
    chmod 777 frida-server-15.1.14-android-x86
    
  • 模拟器运行frida服务, ./frida-server-15.1.14-android-x86,起好服务后未报错,则保持当前cmd窗口不要关闭

    ######## 3、模拟器运行frida服务,并保持当前adb shell窗口一直开着,不能关,否则服务也关了
    ./frida-server-15.1.14-android-x86
    
  • 如上frida服务起好后,新开一个cmd窗口,执行如下命令,控制台输出如下图片内容,则证明已连接成功

    ######## 4、新开一个cmd窗口,执行如下命令
    adb forward tcp:27042 tcp:27042 
    adb forward tcp:27043 tcp:27043
    frida-ps -U
    

    Android逆向基础入门

(3)Hook Java层的逻辑
  • ① 以夜神模拟器为例子,打开已下载的app
    Android逆向基础入门

  • ② cmd窗口起frida服务,如图,然后编写hook逻辑的js文件以及相应的python文件

    adb shell
    su
    cd /data/local/tmp
    ./frida-server-15.1.14-android-x86
    

    Android逆向基础入门

  • ③ 了解编写hook java 的js代码逻辑, 以及python固定脚本,固定代码结构如下,需要填充的就三处:待连接的app进程名,待hook的文件类名,待hook的函数方法js逻辑代码
    Android逆向基础入门
    Android逆向基础入门
    Android逆向基础入门

    js_text = """
        Java.perform(function() {
            var MainActivity = Java.use('文件类名,可以直接右键复制文件类名');  
            // 待编写该类下面的函数的hook逻辑
        })
    """
    
    
    # python固定代码,其中js_text是待编写的hook逻辑
    def on_message(message, data):
        print(message)
    
    
    # 2、获取当前设备连接并调用设备的attach方法挂载对应的进程, 并往进程中注入Hook脚本
    process = frida.get_usb_device().attach('app进程名称,需通过frida-ps -U查看获得')
    script = process.create_script(js_text)
    # 3、监听message事件, 回调方法是on_message, js代码中任何通过send方法发送的数据,on_message方法都会接收到对应的内容
    script.on('message', on_message)
    script.load()
    sys.stdin.read()
    
  • ④ 按如上要写的代码结构编写python与js脚本,然后运行python脚本,然后再操作app相关步骤触发,进而hook到;
    Android逆向基础入门

  • 打印调用堆栈

    Java.perform(function(){
        // 打印调用堆栈
        function printStackTrace(){
    		console.log(Java.use("android.util.Log") .getStackTraceString(Java.use("java.lang.Exception") .$new()));
    	}
    })
    
(4)Hook Native层的逻辑
  • ① 下载相关.apk文件安装到模拟器或者手机,本案例以模拟器为例
  • ② cmd窗口起frida服务,如下,然后编写hook逻辑的js文件以及相应的python文件,并打开相应的app
    adb shell
    su
    cd /data/local/tmp
    ./frida-server-15.1.14-android-x86
    
  • ③ 编写hook native 的js代码逻辑, 以及python脚本,然后运行python脚本,然后再操作app相关步骤,进而hook到;与hook java层不同的地点在于js代码的编写,python部分完全一样且固定
    Android逆向基础入门
5、app的壳与脱壳
(1)app的壳特征
  • 如果一个.apk,可以直接通过jadx等直接反编译获得源码是比较危险的,所以为了保护源码,基本上apk都会加壳,目前有三代壳
  • 一代壳:对原有的dex文件整体加密生成一个新的壳dex文件;反编译后只能看到继承Application类的壳代码,android的四大组件被隐藏;壳的种类:诸如免费加固服务:360加固、腾讯加固、阿里加固、爱加密;查壳工具有:PKID;脱壳工具有:frida_dump、FRIDA-DEXDump等
  • 二代壳:将dex文件中的某些方法置空,只有在被调用时才会解密加载;反编译后Java代码的方法实现是空的, Smali代码有很多nop指令;脱壳工具有FART
  • 三代壳:有VMP壳和dex2C壳,将java层的方法Native化;反编译后方法被Native化了;没有成熟的脱壳工具
(2)一代壳frida_dump脱壳
  • 利用frida_dump脱壳: 下载frida_dump,并解压有如下文件,其原理是通过文件头的内容搜索dex文件并dump下来
    Android逆向基础入门

  • 起好frida服务,手机上安装好app,然后执行frida -U -f com.goldze.mvvmhabit -l dump_dex.js --no-pause

    # cmd窗口执行
    adb shell
    su
    cd /data/local/tmp
    ./frida-server-15.1.14-android-arm64
    # 然后另开一个cmd窗口
    frida -U -f com.goldze.mvvmhabit -l dump_dex.js --no-pause
    

    Android逆向基础入门

  • 脱壳完毕后结果在/data/data/com.goldze.mvvmhabit/files/dump_dex_com.goldze.mvvmhabit文件夹下,有8个dex文件,把它拉取到电脑上
    Android逆向基础入门

  • adb pull 可能会出现Permission denied错误,此时将该目录下的dex文件cp -r 路径 目标路径复制到/scard下:然后在adb pull 路径 目标路径拉取到电脑上 ,然后选择较大的dex文件用jadx反编译打开即可看到源码了
    Android逆向基础入门

    adb shell
    su
    cp -r /data/data/com.goldze.mvvmhabit/files/dump_dex_com.goldze.mvvmhabit /sdcard 
    # 新开一个cmd窗口直接执行
    adb pull /sdcard/dump_dex_com.goldze.mvvmhabit E:\AppPrj\app_apk\app7_tuoke
    

    Android逆向基础入门

(3)一代壳frida_dexdump脱壳
  • 利用frida_dexdump脱壳:frida-DEXDump,通过pip3 install frida-dexdump安装,其原理是根据一些暴力内存搜索的原理实现脱壳,对于完整的dex文件,搜索dex035找壳,或者匹配特征如DexHeader的长度信息、索引指向找壳
    Android逆向基础入门

  • 起好frida服务,手机上安装好app,然后执行frida-dexdump -U -f 包名

    # cmd窗口执行
    adb shell
    su
    cd /data/local/tmp
    ./frida-server-15.1.14-android-arm64
    # 然后另开一个cmd窗口
    frida-dexdump -U -f com.iCitySuzhou.suzhou001
    
  • 如图,加了壳的反编译目录
    Android逆向基础入门

  • 脱壳完毕后会在当前目录下生成文件夹存储dex文件,然后选择较大的dex文件,用jadx反编译即可看到相应的源码了尝试搜索搜索
    Android逆向基础入门
    Android逆向基础入门

  • 然后我们搜索,在classes02.dex文件里面找到了目标字符串,同时对代码进行了反混淆
    Android逆向基础入门
    Android逆向基础入门

(4)二代壳FART脱壳
  • 利用FART脱壳:FART
6、IDAPro反汇编工具
(1)静态分析
  • IDAPro下载安装查看
  • 查看手机是哪种处理器:adb shell getprop ro.product.cpu.abi,则选择对应文件夹下的.so文件
    Android逆向基础入门
    Android逆向基础入门
  • 右击选择对应的.so文件打开
    Android逆向基础入门
    Android逆向基础入门
  • 然后到了如下界面,左侧是so文件中的一些方法声明,右侧是对应的反汇编结果
    Android逆向基础入门
  • 然后将汇编代码还原成C/C++,如图操作即可
    Android逆向基础入门
    Android逆向基础入门
(2)动态调试
  • ida动态调试,需要起个服务android_server64,如图
    Android逆向基础入门

    adb push android_server64 /data/local/tmp
    adb shell
    su
    cd /data/local/tmp
    chmod 777 android_server64
    ./android_server64
    # 新开一个cmd窗口
    adb forward tcp:23946 tcp:23946
    

    Android逆向基础入门
    Android逆向基础入门

  • 然后打开ida,选择Go
    Android逆向基础入门

  • 然后在Debugger选项卡上选择如下选项
    Android逆向基础入门
    Android逆向基础入门

  • 然后选择对应app的包名,之后稍等片刻,ida pro会自动停下来
    Android逆向基础入门

  • 然后在右侧的Modules面板选择对应的.so文件,并双击进入
    Android逆向基础入门

  • 然后选择目标定义的方法,左侧会出现对应的汇编代码
    Android逆向基础入门

  • 然后下断点,运行,然后滑动手机,然后单步调试
    Android逆向基础入门文章来源地址https://www.toymoban.com/news/detail-401234.html

未完待学习完善修正中

到了这里,关于Android逆向基础入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [免费专栏] Android安全之APK逆向入门介绍

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 转移发布平台通知:将不再在CSDN博客发布新文章,敬请移步知识星球 感谢大家一直以来对我CSDN博客的关注和支持,但

    2023年04月08日
    浏览(38)
  • 小程序逆向工具 | 3秒抓取微信小程序源码

    目录 一、工具准备 二、解密小程序 1、找到小程序包 2、解密小程序包 三、反编译小程序 1、安装依赖 2、执行反编译 四、完成 想成为一名微信小程序的开发者,前端思路的学习和安全意识是非常有必要的,故务必掌握小程序反编译技能。 这里用到了2个工具《包解密》与《

    2024年02月03日
    浏览(38)
  • Python爬虫:利用JS逆向抓取携程网景点评论区图片的下载链接

    1. 前言 文章内容可能存在版权问题,为此,小编不提供相关实现代码,只是从js逆向说一说到底怎样实现这个的过程,希望能够帮助到那些正在做js逆向相关操作的读者,需要代码的读者单独私信我吧!不过,需要注意的是: 代码仅供学习,不能用于商业活动,望读者切记。

    2024年02月15日
    浏览(55)
  • 【Web实战】零基础微信小程序逆向(非常详细)从零基础入门到精通,看完这一篇就够了

    本文以微信小程序为例,从实战入手,讲解有关于小程序这种新型攻击面的渗透,对于了解小程序的安全性和防范措施有一定的帮助。 作为中国特有的一种程序形态,小程序在我们的日常生活中已经无处不在。腾讯、百度、阿里巴巴、字节跳动、京东等各家互联网大厂都有各

    2024年02月04日
    浏览(47)
  • Fiddler如何抓取手机http/https请求数据包(IOS,Android保姆级教程)

    1.开启Fiddler远程连接 2.设置完远程连接,重启Fiddler,更新配置 3.保持手机和电脑在同一个局域网 4.给手机装证书 5.点击下载证书 6.给证书命名 7.点击确定,确认安装成功 Fiddler主菜单Tools -- Options -- Connections -- 勾选 Allow remote computers to connect 弹出的框是确认启用远程连接,配置

    2024年02月04日
    浏览(30)
  • Mac系统下使用Charles对android手机的app或者浏览器进行数据包抓取

             手机完成解锁、打开开发者模式,打开root权限          参考地址: xiaomi5c手机解锁、刷机、打开开发者模式,打开root权限_小悟哦的博客-CSDN博客 1)手机的Wi-Fi设置上,添加一个代理,代理的地址上面的“192.168.1.5”,端口:8888 2)手机浏览器上,输入 http://chl

    2024年02月09日
    浏览(36)
  • python爬虫之JS逆向基础小案例:网抑云数据获取

    嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 所用软件 解释器: python 3.8 编辑器: pycharm 2022.3 使用的模块 第三方模块: requests 数据请求 execjs pip install pyexecjs 内置模块(无需安装): nodejs 模块安装: win + R 输入cmd 输入安

    2024年01月20日
    浏览(38)
  • 网页爬虫逆向与AST入门系列教程(六、AST的应用之数据提取与分析)

    在前面的文章中,我们介绍了AST的基本概念、生成方法以及在代码混淆解析和反爬虫技术解析中的应用。在本篇中,我们将探讨AST在网页爬虫逆向中另一个重要的应用领域:数据提取与分析。 1. 数据提取与分析简介 数据提取与分析是指从网页中提取出所需的数据,并对其进

    2024年02月12日
    浏览(51)
  • Android基础学习常用UI布局

    XML 常用属性 布局特点:放主要提供控件水平或者垂直排列的模型,每个子组件都是以垂直或水平的方式来线性排布.(默认是垂直) 基本属性 布局特点:为某一个组件为参照物,来定位下一个组件的位置的布局方式。 常用属性: 如何确定列数与行数 直接往TableLayout中添加组件

    2024年02月16日
    浏览(31)
  • WPF 入门笔记 - 01 - 入门基础以及常用布局

    🥑本篇为学习博客园大佬圣殿骑士的《WPF基础到企业应用系列》以及部分DotNet菜园的《WPF入门教程系列》所作笔记,对应圣殿骑士《WPF基础到企业应用系列》第 1 - 6 章之间内容,包括 WPF 项目结构、程序的启动和关闭、程序的生命周期、继承关系以及常见的布局控件及其应用

    2024年02月05日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包