1

image.png

本公众号分享的所有技术仅用于学习交流,如作他用所承受的法律责任一概与作者无关。如有错漏,欢迎留言交流。

《java编程思想(第5版)》Bruce Eckel

《Android Studio开发实战从零基础到App上线(第三版)》 欧阳燊

《第一行代码Android第2版》郭霖

《ARM汇编与逆向工程 蓝狐卷基础知识》MariaMarkstedter

《安卓Frida逆向与抓包实战》陈佳林

《安卓Frida逆向与协议分析》陈佳林

《IDA Pro权威指南(第2版)》Chris Eagle

《Frida Android SO逆向深入实践》陈佳林
《unidbg逆向工程原理与实践》陈佳林

一、前置知识

为什么学习安卓逆向

  1. 学习研究
  2. 去广告
  3. 破解内购
  4. 自动化

    • 臧航准备网自动登陆
    • 车智赢自动登陆
    • 大姨妈自动登陆
    • 京东价格监控
    • 酒仙网自动登陆,预约茅台
    • 大商天狗自动登陆,预约茅台
    • 司小宝自动登陆
  5. 刷播放量

    • 刷B站完播率,批量注册B站账号
  6. 获取评论

    • 抓取得物的推荐区的评论
    • 抓取抖音评论
  7. 根据关键词搜索商品

    • 识货搜索型号,获取到尺码和价格
    • 唯品会搜索商品
    • 知乎搜索
  8. ......

    学习安卓逆向需要准备什么

    学安卓逆向的前置知识

  9. 逆向分为:安卓逆向,win逆向

    • 逆功能:破解内购道具,去广告等等
    • 逆协议:比如,某APP注册的时候有一个Sign的加密。这时候app逆向逆的是协议(让爬虫爬到app的数据)

    需要学习的内容:

    1. 环境搭建:

      • java开发环境
      • Android开发环境
      • c开发环境
      • python开发环境
      • JavaScript开发环境
      • 真机(解BL锁,刷Magisk,装Xpose)
      • 其他工具
    1. Android应用开发:

      • java:基础语法,面向对象、接口,反射机制等。各类常见加密算法的java层实现和破解方法
      • 四大组件( activity,service,provider,broadcast),界面控件,消息事件处理、网络通信等
    1. java层逆向:

      • 回编译(AndroidKiller)
      • smali汇编
      • 静态逆向分析(jadx)
      • 动态调试(jeb、AndroidStudio)
    1. HOOK与注入技术框架:

      • Xposed(java、Android Studio)
      • Frida(python、JavaScript、pycharm)
    1. 加密与编码
    1. APP协议分析(抓包)

      • hHTTP/S、TCP、Websocket详解
      • 各种反抓包原理及破解方法
        1. 反调试与反反调试、加固技术

          • java层反调试反反调试
          • native层反调试和反反调试
          • XPosed、Frida特征检测与绕过
          • 加壳与脱壳
          • 魔改LSPosed
          • 设备指纹对抗
    1. native层逆向:

      • C语言:数据类型,指针,常见加密算法native层实现。
      • NDK开发(linux下的so类似win下的dll`)
      • ARM汇编(寄存器,指令码,立即值,常量)。
      • 静态分析、动态调试(双IDA调试)。
      • unidbg 模拟执行
      • so层算法还原
      • 综合实战
      • [[llvm混淆]]
    1. 定制rom

      • Android源码编译
      • root检测绕过
      • ...

      硬件配置

  10. 电脑: 主流电脑配置即可,内存尽量大,主频尽可能高

    • 如果有条件的话,电脑安装虚拟机装linux系统
  11. 手机: 安卓手机

    • 如果有条件上谷歌的亲儿子(nexus或者pixel),国产的手机推荐红米9A(经济实惠,缺点就是cpu是arm32的,未来无法调试arm64的程序,入门足够了)
  12. 暂时没有真机可以先用模拟器一段时间

    • 夜神模拟器(最新支持Android 9)、雷电模拟器、逍遥模拟器
    • 但尽量还是使用真机,安卓模拟器存在兼容性的问题,有些app无法在模拟器上运行,因为模拟器是基于x86的架构,而有些app只认v7或者v8架构的cpu。

    二、 打造属于自己的anroid逆向环境

    1. 开发环境(windows)

  13. 开发系统可以是Win10linux(kali或者ubuntu)、mac

    java 开发环境(学习Java,Android开发时候用)

    JDK
  14. JRE(Java Runtime Envrionment ,Java 运行时环境)

    • 含JVM和运行必备的类库。
    • 电脑上想要运行java程序,就必须安装JRE
  15. JDK,( Java Development Kit ),Java开发工具。

    • JRE 和 开发必备的工具(编译工具javac.exe 和 运行工具java.exe)
    • 想要开发Java应用程序,就必须安装JDK
    JDK下载地址: https://www.oracle.com/java/technologies/downloads/#jdk18-win...
  16. jdk-19_windows-x64_bin.exe 必须去安装 否则无法运行依赖Java环境的软件或者工具
  17. 配置环境变量

    • JAVA_HOME:jdk安装的目录
    • CLASSPATH.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意前面是有一个点的)
    • path:添加%JAVA_HOME%\bin
  18. 验证配置环境变量是否生效:打开cmd,输入java --versionjavac
IDEA
下载地址: https://www.jetbrains.com/idea/download/#section=windows

Android开发环境(root、Android正向开发、编写Xposed插件的时候用)

Android Studio
安装Android Studio
下载地址: https://developer.android.google.cn/studio/
  • ==要安装Android studio首先要配置好jdk环境==

  • 安装Android studio的过程中会下载SDK

    创建工程测试一下
  • MininumSDK先保持默认,后续有需要可以手动修改minSdkVersion的字段


    坑/逆向/Android逆向/AndroidStudio/模拟器 HAXM的插件只支持Intel的cpu,只有安装这个插件才可以运行Android Studio 自带的模拟器。该插件不支持AMD的cpu(AMD的cpu只能使用Genymotion模拟器,首先需要安装virtualBox虚拟机,然后再安装Genymotion模拟器,有需要请自行百度)。

  • 选择对应的设备,运行
  • 电脑实时显示手机画面,用电脑的鼠标和键盘控制手机

    QtScrcpy : https://gitee.com/Barryda/QtScrcpy
    <!--SR:!2023-01-08,3,250-->

SDK
  • SDK(software development kit,软件开发工具包)。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。因此,Android SDK 指的是Android专属的软件开发工具包。

    SDK目录结构

  1. .downloadlntermediates:看名字,像是下载文件时的临时目录
  2. .temp:下载文件时的临时目录
  3. build tools
  4. 编译工具目录这里保存着一些Android开发常用的工具,例如adb、aidl等等。

    • aidl.exe:把.aidl 接口转换成java接口
    • dexdump.exe (逆向调试工具) : dump devlik中间代码
    • aapt.exe(Android Asset Packaging Tool):编译应用程序的资源文件(包括AndroidManifest.xml和你的Activities的xml文件),生成R.java文件,这样你就可以从你的java代码中引用资源。
    • dx.bat(编译脚本):将.class中间代码转化为dvlik中间代码,所有经过java编译的生成.class文件都需要此工具进行转换,最后打包进apk文件中。
  5. 当创建Android项目(构建项目)的时候会用到这个包。在创建项目的时候如果没有此包会报错。(随着SDK版本的迭代,编译工具也会有相应新版本,建议使用最新的编译工具)
  6. cmake:Android SDK 的 CMake 的默认版本是3.10.2。Cmake是用来makefile的一个工具,读入所有源文件之后,自动生成makefile。
  7. emulator:这里存放的是一些安卓模拟器
  8. extras:该文件下存放了Google提供的USB驱动,Intel提供的硬件加速附件工具包。(后期存放了Android Support兼容包,使用兼容包版本时最好与SDK版本保持一致)
  9. fonts:存放一些字体文件
  10. licenses:market_licensing作为AndroidMarket版权保护组件,一般发布付费应用到电子市场可以用它来反盗版。
  11. ndk:ndk(Native Development Kit,跟sdk差不多的),是它也是一个开发工具包。可以让开发者在 Android 应用中使用 C 和 C++ 代码。
  12. patcher:增量更新,用于更新记录。
  13. platforms
  14. 里面是根据APILevel划分的SDK版本/平台,这个文件夹是SDK里面最重要的文件(每个平台的SDK真正的文件)
  15. 以Android6.0为例,进入后有一个android-23的文件夹,android-23进入后是Android6.0 SDK的主要文件

    • data:保存着一些系统资源,
    • skins:Android模拟器的皮肤,
    • templates:是工程创建的默认模板,
    • android.jar:是该版本的主要framework文件。
  16. platform-tools
  17. 该文件夹下放了Android平台的相关开发和调试工具,比如adb.exesqlite3.exe等。
  18. 这里和platforms/tools文件夹有些重复,主要是从android2.3开始这些工具被划分为通用了。
  19. skins:Android模拟器的皮肤
  20. source:这个文件夹下面存放的是Android的源代码。
  21. system-images:存放的是创建Android虚拟机时的镜像文件(已经编译好的镜像文件,模拟器可以直接加载)。从android-14开始将模拟器镜像文件整理在这里(原来放在platforms下)
  22. tools
  23. 这个文件夹下存放了大量Android开发、调试的工具。包括测试、调试、第三方工具。模拟器、数据管理工具等。

    • ddms:用于启动Android调试工具;
    • logcat:Logcat 能够记录 Android 系统日志,以及 Android 应用的日志(如崩溃报告、错误消息等)。通过使用 Logcat,开发人员可以快速了解应用程序在设备上运行时的情况,以找到并解决问题;
    • draw9patch:用于创建可缩放的图像文件。它的名称来源于图像的左上角和右下角有九个像素的宽带,这些像素告诉 Android 如何缩放图像以适应不同的屏幕尺寸;
    • monkeyrunner:是一个不错的压力测试应用,模拟用户随机按键;
    • mksdcard:模拟器SD映像的创建工具;
    • emulator:Android SDK模拟器主程序,不过从android 1.5开始,需要输入合适的参数才能启动模拟器;
    • traceview:可以读取 trace 文件,这些文件包含关于 Android 应用运行时间的详细信息。通过使用 TraceView,开发人员可以找到代码中的性能瓶颈,以优化应用的速度和效率。
  24. .knownPackages:未知
  25. AVD Manager:是Android SDK中的一个工具,用于管理模拟器配置(Android Virtual Devices,简称AVD)。
  26. SDK Manager:Android SDK 中的 SDK Manager 是 Android 软件开发工具包(SDK)的一个组件,提供了访问开发 Android 应用所需的工具和软件包的途径。SDK Manager 允许开发者下载并安装最新的 Android SDK 组件,例如 Android 平台工具、平台和附加组件。这可以帮助开发者确保他们的开发环境使用最新的工具和 API,以构建高质量的 Android 应用。
SDK版本管理
  • 通过SDK Manager查看Android系统对应的SDK版本,根据手机Android系统的版本下载对应版本的SDK,多个版本用SDK Manager管理。
  • 方式1
  • Android SDK Manager已经内置于Android Studio中,可以使用Android Studio中的Android SDK Manager。

  1. 方式2

    坑/逆向/Android逆向/AndroidStudio/SDK SDK Manager.exe缺失::补充SDK Manager.exe,然后替换tools,重装jdk,重新配置jdk环境变量。

  2. 也可以使用SDK自带的Android SDK Manager,如果SDK缺失Android SDK Manager,可以去下面网站下载SDK Toolshttps://www.androiddevtools.cn/

    • ===只把SDK Manager.exe拷贝到自己的SDK下,会发现SDK Manager.exe打不开,黑框一闪而过===。
    • 对比两个SDK可以发现:与后面新下载的SDK相比,安装Android studio时下载的SDK多了一个emulator文件夹是从后面新下载的SDK的tools拆分出来的
    • 而且tools文件里边还缺少了很多重要文件,有的被放到别的文件夹,有的直接被删除了,比如ddms.batdraw9patch.bat等这些重要的工具。
  3. 解决办法:用后面新下载的SDK的tools文件夹替换自己的SDK的tools文件夹 (作者亲测这一步不可省略,不然后面解决了环境变量,SDK Manager.exe也还是会闪退。),再尝试打开一下SDK Manager.exe,发现还是闪退!

  4. 原因是:SDK Manager.exe 通过调用 android-sdk-windows\tools\lib\find_java.bat 来确认 java.exe 的路径。

    • 调用android-sdk-windows\tools\lib\find_java.bat就提示找不到jdk,但环境变量是没问题的。
    • 解决办法:只能重新卸载jdk,重启电脑后,重新安装jdk
  5. 现在SDK Manager.exe可以运行成功了,ddms 也没问题

  6. 建议安装的Packages

    adb

    Adb(android debug bridge):android调试桥是一个用于管理 android 终端(或者模拟器)状态的工具。

  7. adb和 SDK的关系
  8. SDK内置了adb。SDK的platform-tools目录下包含通用工具,比如adb、和aapt、aidl、dx等文件
  9. adb的配置
  10. SDK目录下的platform-tools文件夹的路径添加到系统变量Path中去

  11. 打开cmd,输入adb,验证环境变量是否设置成功

  12. adb devices连接不上安卓设备
  13. 打开设备管理器-便携设备-属性-记录VIDPID
  14. 查找文件夹.android,在该文件夹下找到文件adb_usb.ini,如果找不到可以新建一个,在adb_usb.ini文件里添加设备的VIDPID
  15. 打开cmd,输入adb kill-server|adb start-server|adb devices重启adb


  16. 若如上还不能解决问题,就需要检查一下pc端的adb的版本。

    • 若pc端的adb版本使用1.0.31或者1.0.32的版本,当连接android6.0版本之后的手机经常会出现adb命令不通情况。
    • 建议把pc端的adb版本升级到1.0.36及其以后的版本。
    • 方法是:下载新的adb包,替换android.sdk/platfrom-tools下面的adb.exeAdbWinApi.dllAdbWinUsbApi.dll三个文件,执行adb start-server

    坑/编程语言/shell/adb adb devices没有显示设备::如果还是不能解决问题,==重启电脑可以解决99%的问题 ==,发现USB用于传输文件,adb devices一下就发现设备了

  17. WiFi ADB
  18. 应用场景:

    • 平常一般都是直接通过 USB 线或者 Type C线的方式连接,来完成日常的开发和调试种开发模式。
    • 当电脑的 USB 口比较少,有多台手机的时候,线束比较杂乱,不够优雅。这时候可以使用adb WiFi 调试模式。

    a. 方式1:通过adb打开

  19. 通过以下几个步骤即可完成(开始这些配置之前先确保你的 adb 环境是配置好的):

      1. 确保 Android 手机和电脑连接的是同一局域网的 WiFi;
      1. 通过 USB 线连接 Android 手机(需要usb数据线连接手机进入adb shell);
      1. 执行以下命令
    C:\Users\cisco>adb devices
    List of devices attached
    KBVO8******S8TYT        device
    0bb39******9dcc8        device
    
    # 注意: 如果有多个手机连接在电脑上,需要用 -s "serial_number" 参数指定目标手机
    # 设置手机监听端口 5555 上的 TCP/IP 连接:
    C:\Users\cisco>adb -s 0bb39******9dcc8 tcpip 5555  
    restarting in TCP mode port: 5555    # 在命令行中看到 TCP mode port: 5555 就表示监听成功:
      
    # 进入手机设置-wifi,查看手机所连接的网络的ip地址
    # 通过 connect 命令和 IP 地址以及端口号连接到目标手机
    C:\Users\cisco>adb connect 172.20.10.13:5555
    connected to 172.20.10.13:5555       # 当看到 connected to xxx:5555 的提示语就表示连接成功
    
    # 拔掉USB线,验证一下,看到如下提示语,说明已成功打开了adb WiFi
    C:\Users\cisco>adb devices
    List of devices attached
    KBVO8******S8TYT        device
    172.20.10.13:5555       device
    
    # 输入adb命令操作设备,当有多个设备连接了电脑,导致adb无法识别操作具体哪台设备
    C:\Users\cisco>adb shell
    adb.exe: more than one device/emulator
    
    # 执行命令adb -s 172.20.10.13:5555 shell,进入指定设备操作
    C:\Users\cisco>adb shell
    hammerhead:/ $ exit
    
    # adb connect断开
    C:\Users\cisco>adb disconnect
    disconnected everything
    
    C:\Users\cisco>adb devices
    List of devices attached
    
    # 结束adb服务
    C:\Users\cisco>adb kill-server
    
  20. daemon not running; starting now at tcp:5037
  21. daemon started successfully
    List of devices attached
    KBVO854LKBWS8TYT device

    通过 connect 命令和 IP 地址以及端口号重新连接到目标手机

    C:\Users\cisco>adb connect 172.20.10.13:5555
    connected to 172.20.10.13:5555

  22. adb 无线连接每次都得经历那些步骤,有点繁琐,安装这个插件直接在 Android Studio 中直接鼠标点点的快速方式来完成

  23. c. 方式3:通过ADB WiFi(app)打开
  24. ADB WiFi(com.rair.adbwifi) - 5.1.5 - 应用 - 酷安 (coolapk.com):https://www.coolapk.com/apk/com.rair.adbwifi#:~:text=%E6%89%9...,connect%20ip%3A5555%E5%91%BD%E4%BB%A4%E3%80%82
  25. 好处:

    • ADB WIFI可以帮助您在没有数据线的情况下,电脑通过adb命令连接您的手机。(不需要usb数据线连接手机进入adb shell,ADB WIFI apk已经帮我们执行了执行shell命令adb -s serial_number tcpip 5555 )
    • 不用的时候关闭,省电一点?

    C 开发环境(so层逆向的时候用,直接输出到Android Studio 的logcat上,不需要安装新的环境了)

  26. vscode
  27. vs2019
  28. gcc

    python 开发环境(编写爬虫、Frida的时候用)

    Python
    https://www.python.org/downloads/
  29. 建议安装python3.8版

    • 如果你现在电脑上只安装了python3.9,也可以再安装一个python3.8,Python支持多版本共存。
  30. 把python添加到系统环境变量path里面
  31. 验证配置的环境变量是否生效:打开cmd,输入python

    安装PyCharm
    https://www.jetbrains.com/pycharm/download/#section=windows
    破解激活请百度
    <!--SR:!2023-01-08,3,250-->

Javascript 开发环境(学习js、Frida、js逆向的时候用)

chrome浏览器
https://www.google.cn/chrome/
nodejs
nodejs: https://nodejs.org/zh-cn/download/
  • 下载安装nodejs

  • 配置node系统环境变量
  • 验证配置的环境变量是否生效:打开cmd,输入node --version

    pycharm(专业版才支持js)+nodejs插件
  • 安装插件

    坑/编程语言/python/pycharm 插件失效::安装插件记得点应用 才会生效

  • 编辑配置
  • 运行js代码测试一下

    其他工具

    AndroidKiller
  • 虽然APK属于压缩文件,但是APK包中的AndroidManifest.xml等文件无法通过直接解压的方式获取内容,需要通过Apktool工具进行反编译。
  • Android Killer 是一款可视化的安卓应用逆向工具,集Apk反编译、Apk打包、Apk签名,编码互转,ADB通信(应用安装-卸载-运行-设备文件管理)等特色功能于一 身,支持logcat日志输出,语法高亮,基于关键字(支持单行代码或多行代码段)项目内搜索,可自定义外部工具;吸收融汇多种工具功能与特点,打造一站 式逆向工具操作体验,大大简化了用户在安卓应用/游戏修改过程中的各类繁琐工作。

    配置AndroidKiller
  • ==先确定安装好JDK==
  • 配置Androidkiller

    下载地址:https://github.com/liaojack8/AndroidKiller
    下载地址: https://www.52pojie.cn/thread-319641-1-1.html

  1. 更新Apktool

    下载地址: https://ibotpeaches.github.io/Apktool/

更新smali插桩插件
  • 在逆向分析APP时,有时需要插入smali代码,打印日志信息、记录方法调用流程,或者是添加弹窗、加载so库等,这些代码都是固定的,再将其封装成一个个插件来使用。

  • 打开AndroidKiller安装包所在位置,找到cfgs文件夹下的injectcode文件夹,将里面的插件删除,替换成新的injectcode

    apktool
    下载地址: https://ibotpeaches.github.io/Apktool/
  • dex,apk→>smali→java

    • 开源
    • 反编译apk
    • 支持修改后再打包
    • 签名
    Jadx
    下载地址: https://github.com/skylot/jadx/releases
  • dex,apk→>smali→java
  • jadx是一款功能强大的反编译工具,可以通过点击代码进行跳转,除反编译外,提供的主要功能如下
    a. 提供多种查找功能。
  • 通过Navigation即可打开搜索功能,可以选择搜索指定的类,方法,属性,代码,文件,甚至是注释查看类变量或者方法使用情况
    b.查看类,变量或者方法使用情况
  • 直接选中对应的类、变量或者方法,然后点击右键选择查找用例即可
    c. 反混淆功能
  • 在打包发布一个apk之前都会对其代码进行混淆加密比如用无意义的短变量去重命名类、变量、方法,以免代码被轻易破解泄露。为了代码的易读性,可以对代码进行反混淆。
    d. 添加注释
  • 选中代码中对应的位置之后,点击右键选择添加注释即可
    e. 反编译结果汇总
  • 通过查看Sumary文件,可以了解反编译结果的汇总信息
    f. 能针对.apk,.zip,.dex,.jar等格式的文件进行反编译。
  • Jadx dex->smali->java

    • 开源,综合了apktool+jd-gui,耗时,无法修改、回编译(重新打包)
    JEB
  • JEB dex,apk→>smali→java

    • 反编译能力极强,高容错,收费
    官网: https://www.pnfsoftware.com/
    破解版:链接: https://pan.baidu.com/s/1dy140l1oPzeJdcnDxVYs_g?pwd=z3s1 提取码: z3s1
Frida安装配置(windows)
电脑端配置
  1. 安装Python环境
  2. 建议在 python3.8版 本上进行操作(其他python版本使用Frida会存在一些问题)。

    • 如果你现在电脑上只安装了python3.9,也可以再安装一个python3.8,Python支持多版本共存。
  3. 把python添加到坏境变量path里面
  4. 安装PyCharm

    https://www.jetbrains.com/pycharm/download/#section=windows
  5. 安装frida模块
  6. 虚拟环境,模块都安装到虚拟环境中去,项目之间隔离,随便造。而且有些app需要特定的Frida才能Hook上

    • 创建一个文件夹,PyCharm创建项目的时候选这个这个文件夹作为虚拟环境,之后在这个虚拟环境上安装frida模块,这样以后需要用到Frida的项目都可以选择这个虚拟环境,这样就不需要每次创建项目的时候都重新安装frida模块
    python                   # 打开Py输入命令:
    pip install frida        #  默认安装最新版本,python3以上才能使用,有可能失败,安装提示下载,然后再执行命令重新安装
    # pip install frida -i https://pypi.douban.com/simple 如果下载速度慢,可以用国内源,这个是豆瓣源
    pip install frida-tools  # CLI tools 默认会根据Frida版本,安装与之匹配的最新版本frida-tools
    # npm install frida      # Node.js使用这个命令
    
    pip uninstall frida      # 如果最新版本有问题,可以卸载python模块
    pip uninstall frida-tools
    
    pip install frida==15.2.2 # 要安装指定版本
    pip install frida-tools==11.0.0 # frida-tools版本要和frida相对应,默认会根据Frida版本,安装与之匹配的最新版本frida-tools。如果需要安装指定具体的版本,可以访问https://github.com/frida/frida,选择好frida版本,对应的frida-tools会在同一个目录下,可以看到此时的版本号

  7. 智能api提示 @todo

    手机端配置
  8. 把frida-server放入手机,并改权限

坑/逆向/Android逆向/Magisk : adb shell 用su切换不了根用户,是因为Magisk没有给shell授权

frida --version    # 查看电脑端的frida版本信息
adb shell  getprop ro.product.cpu.abi  # 查看手机cpu架构
# armeabi-v7a(32位ARM)
# arm64-v8a  (64位ARM)
# x86        (32位x86)
# x86-64     (64位x86)

# frida-server下载地址:https://github.com/frida/frida/releases
# 下载安装frida server版本和`电脑端的frida版本`对应,cpu架构要和`设备cpu架构`对应
# 注意要解压
adb push D:\frida-server-16.0.8-android-arm\frida-server-16.0.8-android-arm  /data/local/tmp/ # 把frida拷贝到手机的/data/local/tmp/目录下,在Android中,使用adb push命令推送文件到data目录一般需要root权限,但是/data/local/tmp/这个目录并不需要root权限,所以一般把文件push到测试机的/data/local/tmp目录下
adb shell chmod 777 /data/local/tmp/frida-server-16.0.8-android-arm  # 可以直接adb shell下用命令改,也可以使用MT管理器修改
adb shell ls -l /data/local/tmp/frida-server-16.0.8-android-arm 
-rwxrwxrwx 1 shell shell 21414856 2022-12-15 19:12 /data/local/tmp/frida-server-16.0.8-android-arm
测试
  1. 启动frida-server,没有任何回显报错信息,就是启动成功了

    adb shell
    su
    ./data/local/tmp/frida-server-16.0.8-android-arm  # 启动frida
    # 如果有报错可能是手机root不彻底,防火墙没有关闭
    # 也有可能是frida-server版本不对
    
    
    sailfish:/ # ./data/local/tmp/frida-server-16.1.8-android-arm64                                                                                           
    {"type":"error","description":"Error: invalid address","stack":"Error: invalid address\n    at Object.value [as patchCode] (frida/runtime/core.js:207:1)\n    at ln (frida/node_modules/frida-java-bridge/lib/android.js:1209:1)\n    at pn.activate (frida/node_modules/frida-java-bridge/lib/android.js:1275:1)\n    at mn.replace (frida/node_modules/frida-java-bridge/lib/android.js:1323:1)\n    at Function.set [as implementation] (frida/node_modules/frida-java-bridge/lib/class-factory.js:1185:1)\n    at Function.set [as implementation] (frida/node_modules/frida-java-bridge/lib/class-factory.js:1099:1)\n    at installLaunchTimeoutRemovalInstrumentation (/internal-agent.js:424:24)\n    at init (/internal-agent.js:51:3)\n    at c.perform (frida/node_modules/frida-java-bridge/lib/vm.js:12:1)\n    at _performPendingVmOps (frida/node_modules/frida-java-bridge/index.js:250:1)","fileName":"frida/runtime/core.js","lineNumber":207,"columnNumber":1}
    
    sailfish:/ # getenforce
    Enforcing
    sailfish:/ # setenforce 0
    sailfish:/ # getenforce                                     Permissive
    sailfish:/ # ./data/local/tmp/frida-server-16.1.8-android-arm64
    

  2. 进行端口转发

    # Failed to enumerate processes: unable to connect to remote frida-server 如果hook的时候后续出现者错误,重新端口转发即可
    adb forward tcp:27042 tcp:27042 # 将PC端的27042端口收到的数据,转发给到手机中27042端口。但是光执行这个命令还不能转发数据,还需要完成两个步骤才能传数据。这两个步骤是:
    # 1.在手机端,建立一个端口为27042的server,并打开server到监听状态。(adb forward tcp:27042 tcp:27042 可以在步骤1之前执行)
    # 2.在PC端,建立一个socket client端,连接到端口为27042的server上。
    # 这两个步骤有先后顺序,步骤1要先执行。
    
    # PC端应用               手机端应用
    #       |                    |
    #  (1)                 (3)   
    #    |                    |
    # PC端server           手机端server
    #    |                    |
    #  (1)                 (3)
    #    |                    |
    # adb.exe ----(2)---- 手机端adbd进程
    # PC端的应用与手机端应用之间传输数据的过程:
    #(1)`PC端应用`将数据发送给端口为27042的`PC端server`(`adb.exe`创建的)
    #(2)`PC端adb.exe`将数据转发给`手机端adbd进程`(通过USB传输)
    #(3)`手机端adbd进程`将数据发送给端口为27042的`手机端server`(`手机端应用`创建的)
    # 传递是双向的,第(1)和第(3)步是通过socket实现的,所以通过socket的读和写就完成了PC端应用和手机端应用的数据传递。
    
    # adb forward --list  查看当前建立的转发
    # adb forward --remove tcp:27042 删除建立的转发
  3. Hook

    frida-ps -U     # 验证一下frida是否使用正常
    # frida -U -f com.che168.autotradercloud --no-pause

坑/逆向/Android逆向/Frida/环境 frida-ps -U报错::是因为电脑连接了ipad,导致了这个问题,断开ipad问题解决

(.venv) E:\Share\Source\repos\crawler\7chezhiying>frida-ps -U
# Failed to enumerate processes: this feature requires an iOS Developer Disk Image to be mounted; run Xcode briefly or use ideviceimagemounter to mount one manually
# 是因为电脑连接了ipad,导致了这个问题,断开ipad问题解决

坑/逆向/Android逆向/Frida/环境 frida-ps -U报错`usage: frida [options] target

frida: error: argument -p/--attach-pid: invalid parse_target value: 's'::怀疑跟Frida的版本有关系,Frida16.0.11才出现这个问题

坑/逆向/Android逆向/Frida/环境 frida-server掉了,再启用时报错::尝试移除端口转发,依旧无法重新启动,可能是Frida-server进程还在跑,kill掉试试

adb shell "su -c ./data/local/tmp/frida-server-16.0.8-android-arm"
# Unable to start: Error binding to address 127.0.0.1:27042: Address already in use  可能是端口被占用,尝试移除端口转发
adb forward --list
# KBVO854LKBWS8TYT tcp:27042 tcp:27042  
adb forward --remove tcp:27042

adb shell "su -c ./data/local/tmp/frida-server-16.0.8-android-arm"
# Unable to start: Error binding to address 127.0.0.1:27042: Address already in use 依旧无法重新启动,可能是Frida-server进程还在跑,kill掉试试
adb shell
su
ps -e | grep frida
# root         32367   513   41956  22948 poll_schedule_timeout 0 S frida-server-16.0.8-android-arm
kill -9 32367
ps -e | grep frida
./data/local/tmp/frida-server-16.0.8-android-arm
IDA Pro
下载地址: https://www.hex-rays.com/
https://www.52pojie.cn/forum.php?mod=viewthread&tid=1584115&h...
  • so->arm->c
  • Natvie反编译工具
  • 当然不止so库 ,DLL同样可以反编译
  • 强大,收费

    不常用
    Jd-Gui
    下载地址: https://github.com/java-decompiler/jd-gui
  • dex->jar→>java
  • JD-GUI是一款功能强大的JAVA反编译工具,支持对整个Jar文件进行反编译,可以通过点击代码进行跳转

    dex2jar
    下载地址: https://sourceforge.net/projects/dex2jar/files/
  • dex->jar→>java
  • 将dex文件还原成为jar文件;
  • 将dex文件还原成为smali文件;
  • 其他一些命令行很少用
  • Dex2jar+jd-gui

    • 反编译能力弱,抗干扰能力弱
    enjarify
    下载地址: https://github.com/google/enjarify
  • dex->jar→>java
  • 可直接将apk文件还原成为jar文件,也可以和dex2jar一样,直接操作某个dex。这是Google出品的一个逆向分析工具,从反编译成jar包的流程来说,要比dex2jar方便得多

    baksmali
    下载地址:https://bitbucket.org/JesusFreke/smali/downloads/
  • baksmali dex->smali

    dnSpy
  • 下载地址: https://github.com/dnSpy/dnSpy
  • dnSpy是一个调试器和.NET程序集编辑器。即使没有任何可用的源代码,您也可以使用它来编辑和调试程序集。主要特点:

    • 调试.NET和Unity程序集
    • 编辑.NET和Unity程序集
    • 明暗主题
    Bytecode-Viewer

    编辑器

    类UNIX模拟环境
    http://www.cygwin.com/install.html
  • Cygwin是一个在windows平台上运行的类UNIX模拟环境

2. 开发环境(mac)

2.1.安装git、iterm2

坑/mac/homebrew 需要挂代理才能下载 homebrew::使用国内镜像(中科院)即可解决

坑/mac/homebrew/环境变量 homebrew安装软件后需要重新配置环境变量吗::安装 Homebrew 后,默认情况下,你可以直接在命令行中使用通过 Homebrew 安装的软件包,而不需要手动配置 $PATH 环境变量。尽量所有的软件都用homebrew管理比较好,可以自动更新或者卸载、版本管理

brew -v      # 看一下是否已经安装了
# 使用国内镜像(中科院)即可解决
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"  

# 如果一旦失败,要先卸载homebrew在选择其他源去安装。
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/HomebrewUninstall.sh)"

brew -v     # 安装成功就会看到内容

# 安装 git
brew install git
git version
# 安装 iterm2. iTerm2 在界面、功能和定制化方面都比 macOS 自带的终端工具更加强大和灵活,可以提高工作效率和体验。
brew install --cask iterm2
#  怎么区分是当前终端是zsh还是bsah,两者有什么区别
echo $0            
# -zsh
# Mac默认使用zsh作为默认shell是因为在macOS Catalina版本中,Apple已经将默认shell从bash更改为zsh。这是因为zsh具有更多的功能和更好的性能,比如实时命令补全、插件支持、更好的自定义配置等。此外,zsh也更加现代化,更容易使用和学习。
# zsh和bash是两种常见的Unix/Linux shell,它们的主要区别在于以下几点:
    # 1. 命令补全:zsh的命令补全功能更加强大,支持更多的补全选项和自定义补全脚本。
    # 2. 语法:zsh支持更多的语法特性,如数组的关联和扩展,更加灵活的参数替换等。 
    # 3. 兼容性:bash是Unix/Linux系统默认的shell,因此更加兼容各种操作系统和脚本。

坑/mac/快捷操作/文件操作 mac如何显示隐藏文件::用命令

# 在终端窗口中输入以下命令
defaults write com.apple.finder AppleShowAllFiles -bool true
# 输入以下命令来重新启动“Finder”应用程序
killall Finder
  • Mac 和 Windows 两个操作系统的环境变量都是用来存储系统级别和用户级别的配置信息,例如可执行文件路径、系统路径、临时路径等。两个操作系统的区别主要在于以下几点:

      1. 配置方式
        在 Windows 系统中,可以在“系统属性”->“高级系统设置”->“环境变量”中进行环境变量的配置;而在 macOS 中,则需要在用户主目录下的 .bash_profile.bashrc 文件中进行配置。
      1. 路径分隔符
        Windows 使用分号 ; 来分隔多个路径,而 macOS 使用冒号 : 来分隔多个路径。
      1. 配置优先级
        在 Windows 中,如果存在同名的环境变量,系统会选择用户级别的环境变量,而忽略系统级别的环境变量。而在 macOS 中,用户级别的环境变量会覆盖系统级别的环境变量。
      1. 环境变量生效方式
        在 Windows 中,当环境变量被修改后,需要重新启动应用程序或者计算机才能让环境变量生效。而在 macOS 中,只需重启终端窗口即可让修改后的环境变量生效。
  • Mac 的环境变量可以在以下几个文件中进行配置:

    • ~/.bash_profile~/.zprofile文件是用于Bash和Zsh shell的配置文件。它们在用户登录时加载,用于设置环境变量和启动一些需要在shell登录时运行的命令。重新启动终端也会重新加载这些文件,因此更改这些文件后重新启动终端可以使更改生效。但是,在某些情况下,可能需要注销并重新登录才能使更改生效,因为某些系统可能会在登录时忽略这些文件的加载,而只在注销并重新登录时加载它们。其中,Bash使用.bash_profile文件,而Zsh使用.zprofile文件。
    • ~/.bashrc~/.zshrc文件也是Bash和Zsh shell的配置文件,但它们不是用于登录时加载的,而是用于每次打开新的终端会话时加载。这些文件包含一些关于终端会话的设置,如颜色、自动补全、命令别名和其他Shell配置等
    • 如果要对所有用户和所有shell生效,应该将其配置写入全局配置文件中,如/etc/bashrc/etc/zshrc
    # 环境变量只是存在当前的 shell 会话中,当这个 shell 会话关闭时,环境变量也随之销毁。所以,如果你想让代理设置在关闭终端后依然生效,可以将这两个命令添加到 `.bash_profile` 或者 `.zshrc` 等文件中,这样每次打开一个新的终端窗口时,都会自动执行这些命令,并设置代理,从而保证代理的持久性。
    # 测试代理服务器是否可用
    curl -I www.google.com --proxy http://192.168.31.31:1091
    export http_proxy=http://192.168.31.31:1091;
    export https_proxy=http://192.168.31.31:1091;

    坑/mac/代理 这个ip只在局域网内有效。因此,这个代理服务器只能在公司内网所在的局域网内使用。如果在局域网外,将无法使用这个代理服务器。还是挂自己的代理来配置环境靠谱。::但尝试挂自己代理反而homebrew报异常,输入以下这个命令即可。将这两个目录添加到Git的安全目录列表中,以解决Homebrew的警告问题。

    git config --global --add safe.directory /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core
    git config --global --add safe.directory /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask

    2.2.安装pyenv、python、pycharm

坑/mac/homebrew/pyenv pyenv 的安装目录安装错了,要安装到其他目录下应该怎么操作?::删除HOME/目录,然后切换到目标的目录下重新下载安装pyenv,再修改$PATH

which pyenv
# HOME/.pyenv/bin/pyenv.    # 安装目录如果不在$HOME目录下,而是在特定的目录下。会导致很多不方便。比如在拉取另一个项目的代码,在这个新项目的目录下就无法使用pyenv
rm -rf HOME
cd ~
# curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
# 第一个命令是 `curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer`,它会从远程 URL 下载 pyenv-installer 脚本,并将其输出到终端。
# 第二个命令是 `bash`,它是一个 shell 程序,可以接收上一个命令的输出,并解释执行其中的命令。因此,这个命令的意思是将 pyenv-installer 脚本传递给 bash,然后由 bash 来执行这个脚本。这样就可以自动下载和安装 pyenv 工具了。
# 在使用 `zsh` 的情况下,如果你执行了 `bash` 的命令,那么系统会切换到 `bash` 环境下去执行,执行完成后又会返回 `zsh` 环境。这样来回切换环境,可能会对系统性能产生一定影响。但是,这种影响通常不会很明显,对于一般的用户来说是可以接受的。我的mac默认的是zsh,所以这里还是使用zsh比较好
curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | zsh
#  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
#
#                                 Dload  Upload   Total   Spent    Left  Speed
#
#  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
# curl: (7) Failed to connect to raw.githubusercontent.com port 443 after 7 ms: Connection refused
# 如果下载不下来,那就手动创建一个,把脚本粘贴进去
touch pyenv.sh
vim pyenv.sh
zsh pyenv.sh
# 正克隆到 'HOME/.pyenv/plugins/pyenv-update'... 致命错误:无法访问 'https://github.com/pyenv/pyenv-update.git/':HTTP/2 stream 1 was not closed cleanly before end of the underlying stream Failed to git clone https://github.com/pyenv/pyenv-update.git
# 这个错误表示Git克隆命令未能完成,因为底层的HTTP/2流没有干净地关闭。可能的原因是网络连接中断或连接超时,或者GitHub服务器出现了问题。您可以尝试再次运行相同的命令,也可以尝试使用另一种协议(如SSH)进行克隆。把pyenv.sh脚本里面的http改成ssh或者不修改隔一段时间再试试,隔一段时间试试就可以了
# 将~/.zprofile改为`export PYENV_ROOT="$HOME/HOME/.pyenv"`
vim ~/.zprofile
# 设置环境变量
PYENV_ROOT="$HOME/HOME/.pyenv"

source ~/.zprofile
# ~/.zprofile:7: command not found: pyenv  # 手动关闭终端重新进,让其生效,重新启动终端也会重新加载这些文件,因此更改这些文件后重新启动终端可以使更改生效。但是,在某些情况下,可能需要注销并重新登录才能使更改生效,因为某些系统可能会在登录时忽略这些文件的加载,而只在注销并重新登录时加载它们。

坑/mac/pyenv 3.7.0、3.8.0在线/离线安装都安装不上,python3.9.0却可以::现在看来应该是Xcode和特定的Python版本之间兼容性问题

pyenv update     # 切换到清华源
pyenv install --list # 查看可安装版本 
# 安装指定版本
pyenv install 3.7.0
#Downloading Python-3.7.0.tar.xz...
#-> https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz  # 下载慢是卡在了这里,可以把它手动下载下来,放到~/.pyenv/cache下
ls ~/HOME/.pyenv/cache
# ls: /Users/tiandongchen/HOME/.pyenv/cache: No such file or directory
mkdir ~/HOME/.pyenv/cache  # 没有就创建一个
mv ~/Downloads/Python-3.7.0.tar.xz ~/HOME/.pyenv/cache
# 安装还是失败了
pyenv install 3.7.0
# python-build: use openssl@1.1 from homebrew
# python-build: use readline from homebrew
# Installing Python-3.7.0...
# python-build: use readline from homebrew
# python-build: use zlib from xcode sdk

# BUILD FAILED (OS X 12.6.3 using python-build 20180424)

# Inspect or clean up the working tree at /var/folders/3n/5swgm_0s3b519yhmf_pt6p6c0000gp/T/python-build.20230421192411.69494
# Results logged to /var/folders/3n/5swgm_0s3b519yhmf_pt6p6c0000gp/T/python-build.20230421192411.69494.log

# Last 10 log lines:
# checking for --with-cxx-main=<compiler>... no
# checking for clang++... no
# configure:

#   By default, distutils will build C++ extension modules with "clang++".
#   If this is not intended, then set CXX on the configure command line.

# checking for the platform triplet based on compiler characteristics... darwin
# configure: error: internal configure error for the platform triplet, please file a bug report
# make: *** No targets specified and no makefile found.  Stop.

# 有可能是版本问题,试试3.8.0,还是失败了,看来不是下载的python源码问题
tiandongchen@WKS70241 ~ % wget https://npm.taobao.org/mirrors/python/3.8.0/Python-3.8.0.tar.xz -P ~/HOME/.pyenv/cache/
pyenv install 3.8.0   # 依旧安装不上```

“平台三元组的内部配置错误”,尽管使用带有修复程序的Pyenv版本(2.3.1) ·问题 #2393 ·pyenv/pyenv ·GitHub
找到这个答案,下载xcode本体就可以解决
Recently I had the same problem, I couldn't install any python version with Pyenv on my M1 Pro. I tried lots of hacks mentioned in issues: patches, flags, reinstalling zlib, bzip and so on, resetting xcode-command-line-tools. Nothing worked. But then my friend told me I should install the Xcode itself from App Store. And lol, that worked!
Just install Xcode and run
(works with all latest revisions supported by pyenv such as 3.7.13, 3.8.13, 3.9.11, 3.10.3, etc.)pyenv install 3.7.13
Can't install 3.10.0 on M1 Mac - error: internal configure error for the platform triplet, please file a bug report · Issue #2317 · pyenv/pyenv · GitHub

坑/mac/Xcode App Store无法下载Xcode::手动下载Xcode下载地址: https://developer.apple.com/download/all/

sudo rm -rf  /Library/Developer/CommandLineTools
Password:
ls  /Library/Developer/CommandLineTools
# ls: /Library/Developer/CommandLineTools: No such file or directory
pyenv doctor
# Cloning ~/.pyenv/plugins/pyenv-doctor/bin/.....
# Installing python-pyenv-doctor...
# python-build: use readline from homebrew

# BUILD FAILED (OS X 12.6.3 using python-build 20180424)

# Inspect or clean up the working tree at /var/folders/3n/5swgm_0s3b519yhmf_pt6p6c0000gp/T/python-build.20230423145633.44135
# Results logged to /var/folders/3n/5swgm_0s3b519yhmf_pt6p6c0000gp/T/python-build.20230423145633.44135.log

# Last 10 log lines:
# 正克隆到 'python-pyenv-doctor'...
# 警告:--depth 在本地克隆时被忽略,请改用 file:// 协议。
# /var/folders/3n/5swgm_0s3b519yhmf_pt6p6c0000gp/T/python-build.20230423145633.44135/python-pyenv-doctor /var/folders/3n/5swgm_0s3b519yhmf_pt6p6c0000gp/T/python-build.20230423145633.44135 ~
# configure: WARNING: unrecognized options: --enable-shared
# checking for gcc... clang
# checking whether the C compiler works... no
# configure: error: in `/var/folders/3n/5swgm_0s3b519yhmf_pt6p6c0000gp/T/python-build.20230423145633.44135/python-pyenv-doctor':
# configure: error: C compiler cannot create executables
# See `config.log' for more details
# xcode-select: note: no developer tools were found at '/Applications/Xcode.app', requesting install. Choose an option in the dialog to download the command line developer tools.
# Problem(s) detected while checking system.

# See https://github.com/pyenv/pyenv/wiki/Common-build-problems for known solutions.

# 自动跳出重新安装xcode
# 然后安装python 3.9.0是正常安装的
pyenv install 3.9.0
# python-build: use openssl@1.1 from homebrew
# python-build: use readline from homebrew
# Installing Python-3.9.0...
# patching file Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst
# patching file configure
# patching file configure.ac
# python-build: use readline from homebrew
# python-build: use zlib from xcode sdk
# Installed Python-3.9.0 to /Users/tiandongchen/.pyenv/versions/3.9.0
which python
# ~/.pyenv/shims/python
# 但安装3.7.0还是安装不上

# 也可以使用homebrew pycharm安装社区版,免费
brew install --cask pycharm-ce
  • [ ] #坑/mac/Xcode Xcode14.3无法在mac os12.6.3 安装,只支持13及其以上的mac系统版本::下载Xcode 13,可以安装上,测试pyenv insatll 3.7.0 、pyenv install 3.8.0是否正常

    2.3 安装jdk、Android Studio、sdk

    brew install --cask adoptopenjdk    # 下载速度很慢
    java -version
    
    # 使用加速器或代理服务器:在终端中执行以下命令,使用清华大学开源软件镜像站加速 Homebrew 的下载速度。
    export HOMEBREW_BREW_GIT_REMOTE=https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git
    export HOMEBREW_CORE_GIT_REMOTE=https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/core.git
    
    # 使用 Homebrew 的下载加速器:Homebrew 提供了一个下载加速器服务,可以将软件包下载速度提高数倍。在终端中执行以下命令启用下载加速器:
    brew install --fast --verbose <formula> # 这里的 `<formula>` 是需要安装的软件包,例如 JDK。注意,下载加速器服务仅适用于 Homebrew 的公式库(formula),并不适用于外部软件包或 Homebrew Cask 应用程序
    # 手动下载安装包:如果以上方法仍然不能满足需求,可以尝试手动下载 JDK 的安装包,并使用 Homebrew 进行安装。可以从官方网站或其他可靠的源站下载 JDK 安装包,然后使用以下命令在本地安装:
    brew install --cask /path/to/jdk.pkg

    坑/mac/jdk OpenJDK和JDK不是同一个东西,所以不能用homebrew安装::去官网下载( https://www.oracle.com/java/technologies/downloads/macos-big-... ),安装之后,在更新环境变量。

  • OpenJDK 是一种开源的 JDK 实现,它是由一些社区贡献者开发和维护的。JDK 是由 Oracle 公司开发和维护的一个 JDK 实现。从技术上讲,OpenJDK 和 JDK 是两个不同的 JDK 实现,它们有许多相似之处,但也有一些差异。
  • 在 Oracle JDK 9 发布之后,Oracle 开始将 JDK 的源代码和二进制代码更多地转向 OpenJDK,并将其作为 JDK 的主要发行版。这就意味着 OpenJDK 和 Oracle JDK 之间的差异将逐渐缩小。目前,大多数主要的 JDK 发行版都是基于 OpenJDK 开发的,例如 Oracle JDK、Amazon Corretto、Azul Zulu、Red Hat JDK 等。

    brew install --pkg ~/workspace/scripts/dmg/java/JDK 17.0.7.pkg   # 双击之后发现里面有一个pkg,这里直接用homebre安装,会自动更新环境变量,也方便管理,但这里brew不支持--pkg参数,所以这里只能双击dmg,然后双击pkg安装jdk了,手动修改环境变量,后续更新也需要手动维护
    which java
    # /usr/bin/java
    java -version
    echo $(/usr/libexec/java_home)
    # /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
    echo 'export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home"' >> ~/.zprofile
    source ~/.zprofile
    
    # brew 无法指定版本,默认是下载最新的版本
    (py390) tiandongchen@WKS70241 proxy % brew install --cask android-studio
    ==> Downloading https://redirector.gvt1.com/edgedl/android/studio/install/2022.
    ==> Downloading from https://r4---sn-j5o7dn7e.gvt1.com/edgedl/android/studio/in
    ######################################################################## 100.0%
    ==> Installing Cask android-studio
    ==> Moving App 'Android Studio.app' to '/Applications/Android Studio.app'
    🍺  android-studio was successfully installed!
    
    # 新建一个项目跑一下,会自动下载gradle,这时候需要挂代理
    # 编译报错::注意Android Studio版本-->Gradle插件-->Gradle-->jdk版本的兼容性
    # 在android studio里面下载sdk
    # 配置环境变量
    vim ~/.zprofile
    export ANDROID_HOME=/Users/username/Library/Android/sdk
    export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
    source ~/.zprofile
    source ~/.zprofile

    2.4 安装Jadx、Apktool、jeb、IDA Pro

    #坑/mac/IDA ida 64闪退::https://github.com/fjh658/IDA7.0_SP

    # 安装Jadx
    brew install jadx
    jadx-gui
    
    # 安装Apktool
    brew install apktool
    apktool --version
    
    # 安装jeb
    # Brew未能找到名为"jeb"的软件包。只能手动安装
    # 下载地址:  https://www.pnfsoftware.com/
    
    # 安装IDA Pro
    # https://www.qlgoo.com/3669/
    # https://www.chinapyg.com/forum.php?mod=viewthread&tid=149517&highlight=8.3

    2.5 vscode、IDEA、GoLand、DBeaver、postman、Charles、mitmproxy

  • 安装VScode

    https://code.visualstudio.com/docs/?dv=osx
  • 安装IDEA

    下载 IntelliJ IDEA – 领先的 Java 和 Kotlin IDE (jetbrains.com)
  • 安装DBeaver

    https://dbeaver.io/
  • 安装GoLand

    # https://www.jetbrains.com/go/
    brew install --cask GoLand
  • postman

    Postman API Platform | Sign Up for Free
  • 安装 Charles

    https://www.charlesproxy.com/
  • 安装fiddler

    https://www.telerik.com/fiddler
  • 安装mitmproxy

    # https://mitmproxy.org/
    brew install mitmproxy     
    mitmproxy # 在终端或命令行窗口运行`mitmproxy`
    mitmweb   # 启动 mitmproxy 的 Web 界面

    3. 开发环境(Linux)

    坑/虚拟机 主机与VMware虚拟机共享文件夹::解决虚拟机找不到共享文件夹问题

    sudo mkdir /mnt/hgfs
    # `-t fuse.vmhgfs-fuse`:指定要挂载的文件系统类型为 `fuse.vmhgfs-fuse`,这是 VMware 虚拟机中用于共享文件夹的 FUSE 文件系统类型。
    # `.host:/`:这是 VMware 中用来表示主机的特殊路径。通常情况下,虚拟机中的主机共享文件夹会映射到 `.host:/`。
    # `/mnt/hgfs`:指定挂载点,即将共享文件夹挂载到 Linux 系统的 `/mnt/hgfs` 目录下。
    #  `-o allow_other`:这个选项允许所有用户(包括非 root 用户)访问挂载的文件系统,这在共享文件夹的场景中很有用,以便其他用户也能够访问共享文件夹中的内容。
    cd /mnt && sudo mount -t fuse.vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other
    ls /mnt/hgfs
1. 配置kali
# 下载kali:https://www.kali.org/get-kali/#kali-virtual-machines 
# SHA256sum 343112d851e8df440204e79133610d061299897b42a616ec697d7c424dc0d786  
shasum -a 256 filepath
# 下载VM文件,在vmware中打开(mac用VMware Function,淘宝几块钱买个注册码)
# 虚拟机安装使用Kali系统,在2KW4K高分辨率电脑下Kali系统界面显示太小,包括各种软件及命令终端字体均无法很直观的看出,影响我们的正常测试及使用。
直接搜索栏输入kali hidpi mode,弹出HiDPI mode窗口点击“Yes”完成设置即可
# 关闭自动熄屏 seeting-Power Manger-Dispaly-取消勾选Display power management
# 默认用户是kali kali,修改root密码,以后用root用户登陆
cat /etc/passwd    
sudo passwd root    
dpkg-reconfigure tzdata # 修改时区
# 回退退到bash 编译android系统,很多命令是执行在bash下的
chsh -s /bin/bash  
# 配置bash,将history长度调大1000倍
nano .bashrc
# HISTSIZE=100000
# HISTFILESIZE=2000000
source .bashrc 
reboot 

# 配置git
ssh-keygen -t ed25519 -C "your_username"
cat ~/.ssh/id_ed25519.pub
# 把从ish粘贴出来的公钥粘贴到github上
# 在 Git 仓库所在的目录下设置特定的用户名和邮箱地址,用户名和邮箱地址保存到当前仓库的`.git/config`文件中,避免和全局的冲突
# 这些提交都是我一个人提交的,只是在不同设备上提交,不同设备用不同的设备名去分开,但这个邮箱不能是gihub绑定的邮箱,不然提交记录会指向同一个,区分了设备,邮箱只能设置成不一样的了
git config user.name "your_username"
git config user.email "your_email@your_username"
git config user.name
git config user.email
# git config --global user.name "your_username"
# git config --global user.email "your_email@example.com"

2. 安装一些好用的小软件
apt update
apt install htop jnettop tree 
# htop 查看资源占用情况
# jnettop 查看正在下载的文件
# tree 查看文件的目录结构

3. 安装 android studio
# android studio下载地址 :  https://developer.android.google.cn/studio
wget https://redirector.gvt1.com/edgedl/android/studio/ide-zips/2022.2.1.20/android-studio-2022.2.1.20-linux.tar.gz 
SHA-256 checksum 
5fe66e1f870729f42d7ef385d242e4f908d0e40477a531296ab7331c4524fae6
tar zxvf android-studio-2022.2.1.20-linux.tar.gz 
./android-studio/bin/studio.sh  # 安装的时候不需要科学上网
# 打个快照 一个快照占空间实测大概2G
设置sdk、ndk、jdk
#  新建一个项目跑一下,会自动下载gradle,这时候需要挂代理(科学上网)

# 设置代理方式1:轻量,只对指定的命令有效
proxychains curl ip.sb
# [proxychains] config file found: /etc/proxychains4.conf
# [proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
# [proxychains] DLL init: proxychains-ng 4.16
# [proxychains] Strict chain  ...  127.0.0.1:9050  ...  timeout
# curl: (7) Failed to connect to ip.sb port 80 after 1 ms: Couldn't connect to server

# 主机的代理工具设置允许局域网连接,把开放端口记录下来11310
nano /etc/proxychains4.conf # 或者是/etc/proxychains.conf( dpkg -l | grep proxychains 查看proxychains版本如果是3的话)
# 滑到最后一行,添加 socks5 [主机的IP地址] [代理服务器开放的端口]
# 比如 socks5 192.168.120.1 11310
# NAT模式 填windows主机中的VMnet8ip地址(在 VMware 中,通常会创建两个默认的虚拟网络适配器,分别是 VMnet1(主机和虚拟机之间的文件共享或者其他特定需求)和 VMnet8(它允许虚拟机通过主机访问外部网络,并提供了 DHCP 服务来为虚拟机分配 IP 地址))
# 桥接模式 填写主机的真实ip
proxychains firefox # 可以正常访问youtube
注释掉proxy_dns

# 设置代理方式2: redsocks将socks代理转换成全局代理
nano /etc/redsocks.conf
redsocks # 跑起来
ps aux | grep redsocks
ss -lntp|more # 查看端口是否转发成功
sh iptable.sh 

# 配置android studio、adb
# alias as="nohup /root/Documents/android-studio/bin/studio.sh >/dev/null 2>&1 &"  添加到 .bashrc
# 运行看看效果
as
# 设置代理方式3:在 Android Studio 内部设置代理
# 1.打开 Android Studio,启动 Android Studio。
# 2.打开设置:选择 `File` -> `Settings` (Windows/Linux) 或 `Android Studio` -> `Preferences` (macOS)。
    
# 3.搜索“Proxy”:在设置界面的搜索栏中输入 “Proxy”,然后选择 `Appearance & Behavior` -> `System Settings` -> `HTTP Proxy`。
    
# 4.配置代理:
- 选择 `Manual proxy configuration`。
- 填写 `HTTP` 或 `SOCKS` 代理服务器的 `Host name` 和 `Port`。
- 如果需要身份验证,勾选 `Proxy authentication` 并填写 `Username` 和 `Password`。
# 5.测试连接:点击 `Check connection` 确保代理设置正确,然后点击 `Apply` 和 `OK` 保存设置。

whereis adb 
# adb: /usr/bin/adb /root/Android/Sdk/platform-tools/adb /usr/share/man/man1/adb.1.gz
# 把PATH=$PATH:/root/Android/Sdk/platform-tools;export PATH;添加到 .bashrc

# 手机打开开发者模式-adb 调试
adb connect 192.168.137.95:5555  
# 投屏到电脑上操作
scrcpy

# 没有真机就安装Genymotion模拟器(比as自带的模拟器好),第一步先打开虚拟机的v-T虚拟化,第二步下载Genymotion新建一个模拟器,第三步android studio安装Genymotion插件

4. 安装反编译工具
# 下载解压后放到某一个目录下 https://github.com/skylot/jadx  
# PATH=$PATH:/root/Documents/jadx/bin;export PATH; 添加到 .bashrc
# 运行看看效果
jadx-gui
# alias jeb='/root/Documents/jeb-demo-4.16.0.202205110304/jeb_linux.sh' 添加到 .bashrc
# 运行看看效果

jeb
# 下载jeb demo解压后放到某一个目录下 https://www.pnfsoftware.com/   

010editor
# 下载linux64位版本 https://www.sweetscape.com/010editor/
tar -xzf 010EditorLinux64Installer14.0.1.tar.gz -C /opt # 将软件安装到 `/opt` 目录下有助于保持系统的整洁性、避免冲突,并提供更好的权限管理和软件管理
/opt/010editor -install # 安装,会自动把010editor的路径添加环境变量中去

# 下载vscode .tar.gz 64位置的版本 https://code.visualstudio.com/Download#
tar -xzf code-stable-x64-1709910909.tar.gz -C /usr/share
# 解压后的文件夹中找到 `code` 可执行文件并运行它
alias code="code --user-data-dir ='~/.vscode-root' --no-sandbox"  # 使用当前用户的家目录下的 `.vscode-root` 目录作为用户数据目录,禁用了沙盒模式,可能会提高 VSCode 在某些环境下的稳定性
# `code` 命令是一个在系统路径中可执行的命令,所以即使在别名中没有明确指定它的路径,系统也能够找到并执行它。
which code
# /usr/bin/code
ls -l /usr/bin/code
# lrwxrwxrwx 1 root root 24 Sep  7  2022 /usr/bin/code -> /usr/share/code/bin/code  # 这里的code是/usr/share/code/bin/code的链接  应该是之前有人做了这个操作ln -s /usr/share/code/bin/code /usr/bin/code
echo $PATH
# /root/.pyenv/shims:/root/.pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/opt/010editor:/root/Documents/jadx/bin:/root/Android/Sdk/platform-tools

# 要运行java代代码 需要按安装code runner 、Extension Pack for Java插件
# 创建桌面快捷方式
cd Desktop
touch xxx.desktop

[Desktop Entry]
Version=1.0
Type=Application
Name=MyApp  # 应用程序的显示名称
Exec=/path/to/your/executable  # 应用程序的可执行文件路径
Icon=/path/to/your/icon.png  # 应用程序的图标文件路径
Terminal=false  # 指定是否在终端中运行应用程序,通常设置为 false


5. 安装python、firda、objection
# https://github.com/pyenv/pyenv  
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
# 把下面4行添加到 .bashrc
# export PYENV_ROOT="$HOME/.pyenv"  # 设置了一个环境变量 `PYENV_ROOT`,指向 pyenv 的根目录,即当前用户的主目录下的 `.pyenv` 文件夹中
# export PATH="$PYENV_ROOT/bin:$PATH" # 将 `$PYENV_ROOT/bin` 添加到 `PATH` 变量的开头,这意味着在查找命令时,会优先使用 `$PYENV_ROOT/bin` 中的命令,而不是之前存在于 `PATH` 中的同名命令。同时使用`export`关键字的变量会成为环境变量,对于后续启动的命令和子进程是可见的。
# eval "$(pyenv init --path)" # `pyenv init --path` 返回了一个设置了 Python 版本相关的 PATH 的脚本(主要目的是确保在 `PATH` 环境变量中,`/root/.pyenv/shims` 这个路径位于最前面,并在添加到 `PATH` 后运行 `pyenv rehash` 命令以确保 `pyenv` 环境正确配置。),它被 `eval` 命令执行
# eval "$(pyenv init -)" # `pyenv init -` 返回了一个包含了一些 shell 函数的脚本,它们用于在 shell 中管理和切换 Python 版本
pyenv install --list # 列出pyenv支持的python版本
proxychains pyenv install 3.9.10 # 安装指定版本python
pyenv vsersions # 查看当前可用的python环境
pyenv local 3.9.10 # 切换到指定版本python
pyenv vsersion # 查看当前在用的python环境

# 安装frida
pip install frida==15.2.2
pip install frida-tool==10.6.2
pip install objection==1.11.0

# 下载对应芯片架构、对应frida版本的frida-server,push到手机上
adb push frida-server-15.2.2  /data/local/tmp/
# 手机上运行frida-server
adb shell
su
/data/local/tmp/frida-server-15.2.2
# 测试Frida运行是否正常
frida-ps -U

# 电脑端
# 安装frida api智能提示
sudo apt install npm
npm install --save @types/frida-gum

本文由mdnice多平台发布


菜狗逆向
4 声望0 粉丝

天赋不够,笔记来凑;