了解APP加固技术
这个不知道讲了什么。。。蛮记录下
常见混淆资源混淆https://github.com/shwenzhang/AndResGuard
代码混淆ProGuardProGuard是一个开源的Java代码混淆器,在Android中一提起ProGuard,我们通常第一想到的是用来混淆代码的,其实它的功能并不仅限于此,有以下四个功能:(1)压缩(Shrink):侦测并移除代码中无用的类、字段、方法和特性(2)优化(Optimize):对字节码进行优化,移除无用的指令(3)混淆(Obfuscate):使用a,b,c,d这样简短而无意义的名称,对类、字段和方法进行重命名(4)预检(Preverify):在Java平台上对处理后的代码进行预检
字符串加解密https://mp.weixin.qq.com/s/SRv1Oar87w1iKuDXS4oaew
ollvm混淆定义 OLLVM是一个流行的代码混淆工具,常用于国内移动安全领域。其主要混淆技术包括控制流平坦化、虚假控制流和指令替代,这些方法能有效提高代码的反逆向工程能力。开发者可以通过GitHub上的源码研究其实现细节,学习如何利用OLLVM来保护 ...
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 ...

