FRIDA轻量化内存脱壳
安装pyenvgit clone https://github.com/pyenv/pyenv.git ~/.pyenvecho 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrcecho 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrcecho 'eval "$(pyenv init -)"' >> ~/.bashrcexec "$SHELL"
安装pyenv版本pyenv install 3.8.0pyenv local system 让python变成系统版本(安装失败)apt updateapt install -y libbz2-dev libreadline-dev libssl-dev zlib1g-dev查看版本pyenv versi ...
体验FRIDA轻量化内存dump脱壳
切换python版本pyenv local 3.8.0pyenv local 3.8.5
启动jeb若是权限不够要赋予权限chmod +x jeb_linux.sh./jeb_linux.sh
使用命令将手机中的apk放到虚拟机adb pull /sdcard/Android/data/com.coolapk.market/files/Download/鸿蒙智行-1.2.4.310-120403100-941817.apk
将jadx加入环境变量echo 'export PATH=$PATH:/root/桌面/jadx-1.2.0/bin' >> ~/.bashrcsource ~/.bashrc
用jadx打开jadx-gui 鸿蒙智行-1.2.4.310-120403100-941817.apk
frida-server缺失了就去下,注意要下Android的arm64,否则无法执行下面指令
连接到目标应用,启动交互式通话objection -g app.huawei.motor explore
列出所有activityandroid ho ...
逆向环境配置
install vmtoolsls /media/cdrom0cp /media/cdrom0/VMwareTools-*.tar.gz ~/cd ~tar -zxvf VMwareTools-*.tar.gzcd vmware-tools-distribsudo ./vmware-install.pl或者:sudo apt install open-vm-tools-desktop -y
更新时区dpkg-reconfigure tzdata
切换中文sudo dpkg-reconfigure locales重启reboot
回退到bashchsh -s /bin/bash
下载Android studiowget https://redirector.gvt1.com/edgedl/android/studio/ide-zips/2024.1.1.12/android-studio-2024.1.1.12-linux.tar.gz
启动Android studio要在bin目录下./studio.sh
启动jadx要在bin目录下./jadx-gui
添加Andr ...
Smali汇编
Smali简介:Smali是用于Dalvik(Android虚拟机)的反汇编程序实现,汇编工具(将Smali代码汇编为dex文件)为smali.jar。
Smali支持注解、调试信息、行数信息等Java的基本特性,可以说是很接近Java编译在JVM上的中间语言了,一般用来做Android程序的逆向工程
Smali基础下面的内容涉及一些Smali编程的结构和基本语法
Smali文件结构一个Smali文件对应的是一个Java的类,更准确的说是一个.class文件,如果有内部类,需要写成ClassName$InnerClassA、ClassName$InnerClassB…这样的形式
基本类型
对象Object类型,即引用类型的对象,在引用时,使用L开头,后面紧跟着的是完整的包名,比如:java.lang.String对应的Smali语法则是Ljava/lang/String
数组数组定义比较有意思,一维数组在类型的左边加一个方括号,比如:[I等同于Java的int[]],每多一维就加一个方括号,最多可以设置255维
方法声明及调用官方Wiki中给出的Smali引用的方法 ...
root
root1、adb reboot bootloader
2、fastboot boot recovery.img
3、清除
4、重启
5、adb push magisk.apk /data/locla/tmp/a.zip
6、fastboot boot recover.img
7、install
8、重启
9、修改语言,卸载magisk应用,重新安装magisk的apk
10、选择安装,直接安装,重启
dex反编译工具的安装和使用
jadx的安装和使用简介jadx可以一键把apk文件还原成Java代码,使用起来很简单,功能强大,还具有一些附加功能可以辅助代码追查,其主要具有如下几个功能:
1、除了反编译apk文件,还可以反编译jar、class、dex、arr、等文件和zip文件中的Dalvik字节码
2、解码AndroidManifest.xml文件和一些来自resources.arsc中的资源文件
3、一些apk文件在打包过程中增加了java代码的混淆机制,对比jadx提供反混淆的支持。
jadx本身是一个命令行工具,仅仅通过jadx这个命令就可以反编译一个apk文件。除此之外,它也可以有配套的图形化界面工具——jadx-gui。
安装过程就略过了
jadx命令jadx xxx.apk -d xxx,运行完成后本地会生成一个xxx文件夹
jadx-gui的使用方法jadx-gui是一个图形界面工具,它就像一个IDE,支持很多方便快捷的交互式操作
保存为Gradle项目
导出后的项目目录结构和我们在 jadx-gui 界面里看到的结构基本一致,这个项目是可以被 Android Studio 工具打开的,打开之 ...
adb
adb介绍Android调试桥(adb)是一种功能多样的命令行工具,它可以让你与设备进行通信,adb命令可以用于执行各种设备操作(例如安装和调试应用),并提供对Unix shell(可用来再设备上运行各种命令)的访问权限,它是一种C/S架构的程序,包括以下三个组件:
1、客户端:主要用于发送命令,adb client在开发机器上运行,我们可以通过adb命令从命令行终端调用客户端,它主要的工作是解析像push、shell、install等命令的参数,做必要的预处理,然后转移为指令或数据,发送给adb server。
2、守护程序(adbd):是运行在Android设备(真机/模拟器)后台的一个进程,它是由init进程启动的,并且系统一开机就以及启动,它主要作用是出来来自adb server的命令行请求,然后获取对应Android设备的信息,再将结果返回给adb server。
3、服务器:是运行再开发机器上的一个后台进程,它有两个作用:1、检测usb端口感知设备的连接和拔出,以及模拟器实例的启动或停止;2、将adb client的请求通过usb或者tcp的方式发送到对 ...
题目3
CFF_100链接:https://github.com/ThunderJie/CTF-Practice/tree/master/CTF-Andorid%20Reverse/CFF2016-%E7%88%AC%E6%A5%BC%E6%A2%AF
解题思路:查看题目是需要我们点击到对应层数显示flag
setClickable()函数作用是设置控件点击无效,但是可以点击,颜色不会变灰色,也就是右边的按钮如果可以点击,那么就能够显示flag了
输入命令java -jar apktool_2.6.1.jar d CFF_100.apk对apk文件进行解包
找到setClickable函数
推测v5和v3即为true或false的标记位,v3一直为0x1,v5一直为0x0,因此考虑修改v5为0x1
再输入命令java -jar apktool_2.6.1.jar b CFF_100进行重打包
这里进行重打包时有问题,以我目前水平还是无法解决
DD-Androideasy and smali
DD-Android Easy链接:https://github.com/ThunderJie/CTF-Practice/tree/master/CTF-Andorid%20Reverse/DD%20-%20Android%20Easy解题思路:下载完成后发现是.zip格式,将后缀改为.apk格式,安装到模拟器中,发现是输入注册码的题目
用jeb打开分析
可以看出只要得到字符串i的值便可以得到flag
解密脚本:p = [-40, -62, 107, 66, -126, 103, -56, 77, 122, -107, -24, -127, 72, -63, -98, 64, -24, -5, -49, -26, 79, -70, -26, -81, 120, 25, 111, -100, -23, -9, 122, -35, 66, -50, -116, 3, -72, 102, -45, -85, 0, 126, -34, 62, 83, -34, 48, -111, 61, -9, -51, 114, 20, 81, -126, -18, 27, -115, -76, -11 ...
Androideasy&simplecheck
androideasy链接:https://github.com/ThunderJie/CTF-Practice/tree/master/CTF-Andorid%20Reverse/androideasy解题思路:文件下载后发现是zip格式,将后缀改为.apk然后用jeb打开进行分析
对于一般比较简单的题目,我们只需要找到函数的入口,即MainActivity中onCreate方法下的onClick点击事件,因为是找注册码(flag),那就肯定有一个按钮负责判断注册码是正确,这个按钮的点击事件是否正确,这个按钮的点击事件就是用onClick实现的,所以大部分这种题目直接找onClick就对了。我们双击之后可以看到以下代码,这里是smali代码。
java代码如下
这里是要调用MainActivity的check()函数来判断flag是否正确,我们直接定位到check()函数
分析函数内容,可以看出数组v0即是我们输入的注册码,根据if语句可以确定注册码的长度和s[]数组一样有31位,下面又有一个if语句判断即为我们的关键语句:s[i]==chars[i]^23 ...