![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android逆向
文章平均质量分 65
Forgo7ten
CTF啥也没打出来的退役选手,目前专攻Android逆向,虽然依旧很菜……
展开
-
re学习笔记(101)i春秋 全国大学生信息安全竞赛 计时挑战
本文首发于 i春秋公众号 巧用Frida与Unidbg快速在CTF中解题Frida是一个方便快捷的hook框架,在安卓逆向中是必不可少的hook工具。而对代码量不大的CTF安卓逆向题目来讲,使用Frida更是如鱼得水,调试程序、打印输出等都极为方便,就算有相应的检测,由于CTF中代码量并不是很大的情况,也可以快捷的定位、并对其进行hook绕过。而Unidbg可以对so层中的函数进行模拟执行,对于CTF题目来讲,往往无需太多的“补环境”,Unidbg就能将指定的函数模拟执行起来并获得结果。在本文中笔者将以全国原创 2022-06-18 10:18:23 · 979 阅读 · 0 评论 -
Unidbg打Jar包方式
以先前WebServer为例子,多模块的例子配置所有模块,配置启动的Main Class;META-INF选择 Server模块的src目录文件路径使用相对路径编译工件将apk放在jar包同目录,运行可得结果将Unidbg项目打Jar包后引入点击ok在自己的模块中添加jar包依赖(本地依赖该jar包)使用插件使用命令进行打包普通项目打Jar包IDEA方式同Unidbg方式一,选择指定模块;META-INF选择 Server模块的src目录参考 Maven打包可执行jar包方法大原创 2022-06-13 18:02:06 · 2271 阅读 · 0 评论 -
Android(9) Unidbg添加SpringBoot Web服务
文章目录1. 添加Server模块方法① unidbg作为模块引入方法② Web作为模块引入2. 配置Server模块3. 编写Unidbg代码3. 修改SpringBoot配置、服务1. 添加Server模块方法① unidbg作为模块引入IDEA新建SpringBoot项目从已存在的模块中导入Unidbg方法② Web作为模块引入IDEA打开Unidbg项目,新建SpringBoot模块2. 配置Server模块修改pom.xml文件,添加依赖 <dependenc原创 2022-05-31 00:40:47 · 990 阅读 · 1 评论 -
re学习笔记(99)攻防世界 mobile进阶区 LoopCrypto
apk反编译MainActivity非常简单,解密字符串注册一个点击事件点击监听a类,获取用户输入,和程序签名一同传入Decode类的check()方法中Decode类a方法的流程差不多是r21-r23:每个字节的八位,前四位与后四位互换r24-r31:数组每位的值等于与前一位循环异或得到的值r32-r39:数组的每位循环减去前一位,同时减去58check()是native方法http://blog.sina.com.cn/s/blog_81e7361e0102uyge.htmlh原创 2022-05-30 13:27:06 · 1609 阅读 · 2 评论 -
Python grpc协议通信 与 protobuf序列化
GitHub仓库地址:https://github.com/protocolbuffers/protobufGoogle文档:https://developers.google.com/protocol-buffers/https://docs.qq.com/doc/DV2t5TWhvZ21Eend6protobuf安装GitHub release页面下载:将win64解压,bin目录添加进入环境变量,可以使用protoc.exe来生成相关类解压protobuf-python-3.20.1.z原创 2022-05-15 19:19:18 · 654 阅读 · 0 评论 -
攻防世界MOBILE区WriteUp
攻防世界官网:攻防世界-答题mobile区mobile新手练习区easyjniPh0en1x-100RememberOtherapp1app2app3easy-apkeasyjavaeasy-dexeasy-so黑客精神你是谁高手进阶区基础androidAPK逆向人民的名义-抓捕赵德汉1-200boomshakalaka-3Android2.0Illusion...原创 2022-05-10 17:37:44 · 1455 阅读 · 5 评论 -
Frida ALL IN ONE
文章目录Frida all in oneFrida环境与基础使用多python frida版本切换pyenv安装pyenv使用Frida环境安装手机环境配置监听Objection环境安装Frida开发环境搭建Objection使用Objection基本使用objection插件WallbreakerFRIDA-DEXDumpobjection高级使用Frida Java层应用hook方法hook静态方法与实例方法hook构造方法对方法重载的hookhook指定方法的所有重载hook内部类与匿名类中的方法内存原创 2022-05-04 20:49:15 · 897 阅读 · 0 评论 -
Android(-1) 逆向笔记杂记
乱七八糟的一些东西,本地删了,备份环境搭建JDK安装及配置链接:https://pan.baidu.com/s/146I4vDJdz8YeR0OEqLS8xw 提取码:7h00SDK环境配置链接:https://pan.baidu.com/s/1A8rwqyw8Nn7p93Axqpll3A 提取码:cwv4NDK环境配置链接:https://pan.baidu.com/s/1GBFK8r5R_GPSnIpTwpljKw 提取码:aj1aeclipse集成开发环境搭建链接:h原创 2022-02-03 22:15:22 · 2798 阅读 · 0 评论 -
Android(8) Android APK无源码动态调试合集
Android动态调试合集文章目录Android动态调试合集JEB动态调试smali使用AndroidStudio配合Smalidea插件来动态调试smaliIDA动态调试so调试app一启动就执行的native函数调试可以手动触发的函数错误踩坑解决Smalidea调试【附加】时无设备或进程此外debuggable属性app在清单中添加debuggable属性修改设备的`ro.debuggable=1`安装magisk后magisk安装`MagiskHide Props Config`模块JEB动态调试原创 2022-01-21 15:57:15 · 790 阅读 · 0 评论 -
re学习笔记(98)攻防世界 mobile进阶区 ill-intentions
题目描述:Do you have have ill intentions?打开查看MainActivity,仅仅注册了一个广播接收者而这个广播接收者也没什么代码,仅仅是接受到不同的信息跳转到不同的Acitivity三个Activity各有一个native函数三个类逻辑差不多相同,只是调用的native方法不同,关系如下DefinitelyNotThisOne:definitelyNotThissThisTheRealOne:perhapsThisThisIsTheRealOne:o.原创 2022-01-15 12:30:18 · 3949 阅读 · 0 评论 -
re学习笔记(97)攻防世界 mobile进阶区 APK逆向-2 AndroidManifest.xml修复
题目描述:提交那一串XXXXXXXXXXXXXX即可。下载下来安装后报错Performing Streamed Installadb: failed to install ap.apk: Failure [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION: Failed to parse /data/app/vmdl1255401458.tmp/base.apk: Corrupt XML binary file]同时使用apktool反编译也报错java -.原创 2022-01-13 18:36:53 · 4340 阅读 · 0 评论 -
re学习笔记(96)攻防世界 - mobile区 - app3
.ab格式,下载工具nelenkov/android-backup-extractor: Android backup extractor (github.com)进行解包java -jar abe.jar unpack app.ab app.tar解压后里面有base.apk原创 2022-01-11 22:39:18 · 1045 阅读 · 0 评论 -
re学习笔记(95) 2021ByteCTF intent重定向浅析
一直没搬过来由2021ByteCTF引出的intent重定向浅析在此先感谢ByteCTF的赛前培训,感谢summer师傅的倾情讲解Intent浅要概述Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。Intent一般可被用于启动活动、启动服务以及发送广播等场景。Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。通过Intent,你的程序可以向Andro原创 2022-01-10 22:19:49 · 3448 阅读 · 0 评论 -
Android(7) Android NDK开发:第一个Jni实践
NDK开发:第一个Jni实践项目源码及原文档在Github:【Forgo7ten / AndroidReversePractice】1. 使用AS新建一个ndk项目new一个project选择模板Native C++Next,修改项目名、包名、及所在目录,Next,Finish目录结构:Android开发者文档:向您的项目添加 C 和 C++ 代码 | Android 开发者 | Android Developers (google.cn)2. 新建so源文件并在java中调用原创 2022-01-06 00:30:00 · 802 阅读 · 0 评论 -
【转载】Android逆向开发之smali语言的学习
Android逆向开发之smali语言的学习该文转载自乱码三千 – 分享实用IT技术smali和java基本数据类型对比smalijavaBbyteSshortIintJlongFfloatDdoubleCcharZbooleanVvoid[数组L+全类名路径用/分割object注释在smali语言中注释使用#表示# 我是注释类声明.class +权限修饰符 +类名;比如以下jav转载 2022-01-05 01:27:20 · 781 阅读 · 0 评论 -
re学习笔记(93)攻防世界 - mobile进阶区 - Illusion
jeb载入查看MainActivity可以发现是将用户输入,与encflag传入了native方法中去,native方法的返回值就是显示结果而encflag是从assets文件夹下的flag文件中获取的之后IDA查看so文件JNI_OnLoad动态注册了函数查看逻辑将input与字符串相加,再减去64,和93一并传入sub_10C0函数之后将返回值加上32得到字符串结果。将得到的字符串与参数二也就是encflag进行比较,返回比较结果而sub_10C0函数,则是判断a2是否等于0原创 2021-11-08 15:34:52 · 732 阅读 · 0 评论 -
Android(6) 编辑Android镜像boot.img修改全局可调试
文章目录boot.img解包打包工具:一、解压谷歌原版镜像二、打开zip压缩包,复制出`boot.img`文件三、对`boot.img`进行解包五、编辑`prop.default`文件六、对boot.img重打包七、刷入新imgboot.img解包打包工具:一、解压谷歌原版镜像二、打开zip压缩包,复制出boot.img文件三、对boot.img进行解包首先要编译BootImgToolcd BootImgTool/./build.sh./bin/unpack-bootimg.sh .原创 2021-08-08 20:39:40 · 4319 阅读 · 0 评论 -
re学习笔记(90)攻防世界 - mobile进阶区 - boomshakalaka-3
Java层MainActivitynew了a类的对象,传入了参数base64解YmF6aW5nYWFhYQ==得bazingaaaa,不正确a构造方法调用了arg1的getSharedPreferences方法第一个参数getSharedPreferences(第一个参数,第二个参数);第一个参数是存储时的名称,第二个参数则是文件的打开方式~用arg2来示例化存储的数据文件的名称,会在/data/data/packgaename目录下生成shared_prefs文件夹a.d方法原创 2021-07-28 21:11:26 · 753 阅读 · 0 评论 -
re学习笔记(89)攻防世界 - mobile进阶区 - 人民的名义-抓捕赵德汉1-200
下载下来是个jar文件,先运行一下解压后用IDEA打开获取输入后传入了checkPassword方法来进行验证其中有一个ClassEnc文件,被AES加密过,这是解密后然后加载一个新类myclass(该类实现了(CheckInterface)接口还有一个newClassName.class里面恰好有checkPassword方法。是md5加密后与"fa3733c647dca53a66cf8df953c2d539"做比较cmd5解得得到flag,flag为flag{monkey99原创 2021-07-28 18:35:44 · 627 阅读 · 0 评论 -
re学习笔记(88)攻防世界 - mobile进阶区 - APK逆向
Java层分析MainActivity将用户名和密码传入checkSN来做一个判断其中用户名内置的为TenshinecheckSN进行md5加密,转成hex字符串,加上flag头后与输入密码进行比较解题jeb下断点原创 2021-07-28 18:05:22 · 434 阅读 · 0 评论 -
re学习笔记(87)攻防世界 - mobile进阶区 - 基础android
Java层分析入口为com.example.test.ctf02.MainActivityMainActivity点击按钮,获取输入,然后调用new Check().checkPassword(str)进行比较相等的话前往MainActivity2Check长度要等于12,要满足等式0x30 == 0xff - i - 100 - pass[i]pwd = ""for i in range(12): pwd += chr(0xff - i - 100 - 0x30)pr原创 2021-07-28 17:33:24 · 685 阅读 · 0 评论 -
re学习笔记(86)攻防世界 - mobile区 - 你是谁
JAVA层入口为SplashActivitySplashActivity启动了MainActivityMainActivity百度搜索com.iflytek.cloud.RecognizerListener是科大讯飞的一个语音识别模块识别到"你好"后进行Toast弹窗"haha"backgroundonTouch根据字符串提示找到这里查看this.check()方法this.check()public boolean check() { return th原创 2021-07-28 16:09:07 · 466 阅读 · 0 评论 -
re学习笔记(85)攻防世界 - mobile区 - 黑客精神
Java层分析MainActivity其中是根据MyApp.m值来判断是否是注册的MyAppMyApp.m的值是靠initSN方法来初始化的RegActivity注册界面,输入注册码后调用saveSN(sn)方法,将输入传入后保存注册码到本地So层分析JNI_OnLoad动态注册函数saveSN先打开/sdcard/reg.dat文件,然后将origin数组拷贝到data数组之后是一个加密,根据num的值作为下标来对原文进行异或initSN读取/sdcard/reg.原创 2021-07-28 14:49:56 · 309 阅读 · 0 评论 -
re学习笔记(84)攻防世界 - mobile区 - easy-dex
AndroidManifest看一下入口,为android.app.NativeActivity,去so层分析So层分析ANativeActivity_onCreate创建了一个新线程,前往新线程FUNC查看自定义函数j_android_mainandroid_main首先对filename和name进行一个异或解密#include <stdio.h>#include <string.h>#include <stdlib.h>int main原创 2021-07-27 18:43:02 · 592 阅读 · 4 评论 -
re学习笔记(83)攻防世界 - mobile区 - app2
Java层分析MainActivity将输入传递给SecondActivity.class并启动SecondActivity将v1与v2拼接,也就是用户名与密码拼接后,传入Ecrypto.doRawData()方法,与"VEIzd/V2UPYNdn/bxH3Xig=="进行比较,如果相等则启动so层分析后是aes加密CyberChef_v9.21.0.html#recipe=From_Base64('A-Za-z0-9%2B/%3D',true)AES_Decrypt(%7B'option'原创 2021-07-26 18:45:02 · 316 阅读 · 0 评论 -
re学习笔记(82)攻防世界 - mobile区 - RememberOther
Java层分析将用户名和密码传入了checkSN方法内,比较成功则toastcheckSN方法是将参数1进行md5加密,然后每两位取前一位进行比较# 12345ens = "827ccb0eea8a706c4c34a16891f84e7b"pwd = ""for i in range(0, len(ens), 2): pwd += ens[i]print(pwd)# 87c0e87643a69f47成功后toast提示successed "md5:b3241668ecbeb1原创 2021-07-26 17:30:25 · 364 阅读 · 0 评论 -
Android(5) Xposed API中文手册(部分)
Xposed英文原版离线api文档android.appAndroidAppHelper包含一些关于当前app信息的一些方法Public Methods返回值类型Public方法原型及作用static ApplicationcurrentApplication ():返回当前进程的主要Application类static ApplicationInfocurrentApplicationInfo ():返回当前进程中主应用程序的的信息static String原创 2021-07-26 16:36:11 · 3624 阅读 · 0 评论 -
Android(4) Android7.0 配置系统证书
系统证书安装Android7.0系统证书目录:/system/etc/security/cacerts/计算证书hash值需计算相应证书的hash值.cer证书openssl x509 -subject_hash_old -in FiddlerRoot.cer -inform der对于.pem证书openssl x509 -subject_hash_old -in charles-proxy-ssl-proxying-certificate.pem其中cer与.pem互转.pem证原创 2021-07-24 22:20:17 · 1225 阅读 · 1 评论 -
re学习笔记(81)攻防世界 - mobile区 - Ph0en1x-100
Java层分析将getSecret(getFlag())与getSecret(encrypt(input))进行比较其中encrypt()在so内,是将每个字符的ascii码减1getSecret中为MessageDigest.getInstance("MD5")hookdigest方法 /** * hook MessageDigest.digest方法 */ private void hookDigest(XC_LoadPackage.LoadPackage原创 2021-07-24 22:17:48 · 356 阅读 · 1 评论 -
re学习笔记(80)攻防世界 - mobile区 - easyjni
jeb载入原创 2021-07-24 15:16:30 · 396 阅读 · 1 评论 -
re学习笔记(79)攻防世界 - mobile区 - easyjava
jeb载入将输入传入了MainActivity.a方法a方法直接传给了b方法其中new b(),可以看到是将传入的参数为界,参数下标前面的移动到最后去// 原始数据{8, 25, 17, 23, 7, 22, 1, 16, 6, 9, 21, 0, 15, 5, 10, 18, 2, 24, 4, 11, 3, 14, 19, 12, 20, 13};// 得到的数组b.a{17, 23, 7, 22, 1, 16, 6, 9, 21, 0, 15, 5, 10, 18, 2, 24,原创 2021-07-23 20:15:32 · 234 阅读 · 1 评论 -
re学习笔记(78)攻防世界 - mobile区 - easy-apk
Jeb打开将编辑框内的内容经过Base64New().Base64Encode方法后与"5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs="进行比较查看Base64New().Base64Encode提取到自定义字符表vwxrstuopq34567ABCDEFGHIJyz012PQRSTKLMNOZabcdUVWXYefghijklmn89+/=通过CyberChef_v9.21.0.html#recipe=From_Base64('vwxrstuopq34原创 2021-07-23 17:49:33 · 459 阅读 · 0 评论 -
re学习笔记(77)攻防世界 - mobile区 - app1
Jeb载入读取versionName和versionCode然后相异或得到flag直接查看BuildConfig类或者Jeb动调,ctrl+b下断点adb shell am start -D -n [package name]/[Activity name]然后jeb 调试,开始,附加相应apk写脚本得到flag为ens ="X<cP[?PHNB<P?aj"xn = 15flag = ""for i in ens: flag += chr(xn^ord(i))原创 2021-07-23 15:07:05 · 726 阅读 · 1 评论 -
re学习笔记(76)攻防世界 - mobile区 - easy-so
Jeb打开,将编辑框内容传入CheckString,返回值为1则成功查看CheckString方法,在名为"cyberpeace"的so文件中打开apk目录的lib文件夹,提取出so文件,ida载入分析找到相应的导出方法导入jni.h文件,需要注释掉26,27,1112,1113行方可导入成功修改参数类型为如下分析该函数写python脚本为ens = "f72c5a36569418a20907b55be5bf95ad"enlist = list(ens)for i in ran原创 2021-07-23 14:25:51 · 489 阅读 · 1 评论 -
Android(3) CryptoJS库常用方法总结
CryptoJS库使用下载地址:GitHub地址:https://github.com/brix/crypto-jsnpm下载:npm install crypto-js使用其中的crypto-js.js文件解析数据// 转为字节数组var wordArray = CryptoJS.enc.Utf8.parse(utf8String);var wordArray = CryptoJS.enc.Hex.parse(hexString);var wordArray = CryptoJS.e原创 2021-07-17 20:10:07 · 831 阅读 · 0 评论 -
Android(2) Jni编程 静态注册so过程详记
环境准备已下载好ndk,并配置好path变量创建项目配置External Tools 工具只用配置一次File -> Settings -> Tools -> External Tools 添加新工具配置javahProgram: javahParameters: -v -jni -d $ContentRoot$\src\main\jni $FileClass$Working directory: $SourcepathEntry$配置ndk-buildProgr原创 2021-07-17 19:56:24 · 281 阅读 · 0 评论 -
Android(1) JAVA加解密环境 BouncyCastle配置
JAVA加解密环境配置1. 解除java jdk政策限制相应配置文件下载地址jdk6→http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.htmljdk7→http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.htmljdk8→http://www.oracle.com/technetwork/原创 2021-07-12 20:24:39 · 2134 阅读 · 0 评论 -
Android(0) Xposed 模块开发一 环境搭建
参考官方文档Development tutorial · rovo89/XposedBridge Wiki (github.com)环境准备雷电模拟器 已经装好Xposed框架编写模块新建一个空白Android项目配置AndroidManifest.xml<application>标签下配置 <meta-data android:name="xposedmodule" android:value="true"/>原创 2021-07-12 14:39:36 · 477 阅读 · 0 评论