![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
reverse
文章平均质量分 62
ctf reverse题
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 · 996 阅读 · 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 · 1014 阅读 · 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 · 1633 阅读 · 2 评论 -
CTF-RE 笔记汇总
做了笔记从来不看系列……丢云端清本地了文章目录滴水2015-01-12(进制01)2015-01-13(进制01)2015-01-14(数据宽度_逻辑运算)2015-01-15(通用寄存器_内存读写)2015-01-16(内存地址_堆栈)2015-01-19(标志寄存器)2015-01-20(JCC补录)2015-01-23(C语言完整版)2015-01-26 (c语言02_数据类型)2015-02-05 (结构体 字节对齐)2015-02-06 (switch语句反汇编)指针位运算汇编笔记第二章 寄存器原创 2022-04-02 14:38:04 · 2275 阅读 · 2 评论 -
angr学习-笔记汇总
整理存货…乱七八糟的angr实战00_angr_findimport angrp = angr.Project('/home/cx330/Desktop/Debugging/learn/00_angr_find',auto_load_libs=False)# 加载文件# auto_load_libs=False 不加载共享库文件state = p.factory.entry_state()# 创建一个状态state# entry_state() 构造一个已经准备好从函数入口点执行的原创 2022-04-02 14:27:34 · 6318 阅读 · 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 · 3968 阅读 · 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 · 4361 阅读 · 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 · 1062 阅读 · 0 评论 -
re学习笔记(95) 2021ByteCTF intent重定向浅析
一直没搬过来由2021ByteCTF引出的intent重定向浅析在此先感谢ByteCTF的赛前培训,感谢summer师傅的倾情讲解Intent浅要概述Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。Intent一般可被用于启动活动、启动服务以及发送广播等场景。Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。通过Intent,你的程序可以向Andro原创 2022-01-10 22:19:49 · 3460 阅读 · 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 · 822 阅读 · 0 评论 -
re学习笔记(94)第四届2021美团网络安全高校挑战赛 - Random
动调时候报错,除以0异常在main函数这里手动制造了一个错误查看导入表发现有SEH注册的函数且这里多了个分支根据交叉引用找到seh注册的异常可以断定出现div 0异常后会执行loc_CA115D的逻辑main函数是一个递归,根据dword_CA336C==43来结束递归,且不等于0时不输入字符主功能就是将输入的字符和随机数进行异或,重点是找准srand的时机三处下断点,发现main函数的流程就是执行两次srand(rand())后,再和rand()进行异或exp为#inclu原创 2021-12-12 00:00:00 · 2582 阅读 · 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 · 762 阅读 · 0 评论 -
re学习笔记(92)攻防世界 - mobile进阶区 - Android2.0
jeb打开查看MainActivity方法,发现通过JNI.getResult方法来判断成功与否而getResult是native方法IDA载入so文件找到相应函数Init函数类似每组字数为3的栅栏加密,只不过是没连在一起。将得到的3组,第一组前4个字符 每个字符乘以2再异或0x80再进行比较剩下的则是,每组的前四位;第二组异或第一组,第三组异或第二组。再进行比较写Python脚本得到r1 = [ord(i) for i in list("LN^dl")]r2 = [0x20,原创 2021-11-02 23:38:48 · 4471 阅读 · 0 评论 -
re学习笔记(91)2021东华杯 RE-hello
public class MainActivity extends AppCompatActivity { EditText input; static { System.loadLibrary("native-lib"); } @Override // androidx.appcompat.app.AppCompatActivity protected void onCreate(Bundle arg2) { super.onC原创 2021-11-01 00:00:00 · 518 阅读 · 7 评论 -
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 · 4420 阅读 · 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 · 780 阅读 · 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 · 646 阅读 · 0 评论 -
re学习笔记(88)攻防世界 - mobile进阶区 - APK逆向
Java层分析MainActivity将用户名和密码传入checkSN来做一个判断其中用户名内置的为TenshinecheckSN进行md5加密,转成hex字符串,加上flag头后与输入密码进行比较解题jeb下断点原创 2021-07-28 18:05:22 · 446 阅读 · 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 · 699 阅读 · 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 · 478 阅读 · 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 · 320 阅读 · 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 · 604 阅读 · 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 · 329 阅读 · 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 · 374 阅读 · 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 · 3664 阅读 · 0 评论 -
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 · 369 阅读 · 1 评论 -
re学习笔记(80)攻防世界 - mobile区 - easyjni
jeb载入原创 2021-07-24 15:16:30 · 411 阅读 · 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 · 246 阅读 · 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 · 472 阅读 · 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 · 739 阅读 · 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 · 501 阅读 · 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 · 850 阅读 · 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 · 287 阅读 · 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 · 2180 阅读 · 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 · 490 阅读 · 0 评论 -
re学习笔记(75)BUUCTF - re - [ACTF新生赛2020]Splendid_MineCraft
[ACTF新生赛2020]Splendid_MineCraftmain函数strtok是用分隔符划分字符串,根据+5 +9差4个,再加上+9强转为WORD,得到每组字符是4+2=6个flag格式为ACTF{xxxxxx_xxxxxx_xxxxxx}36行跳转到数据段先是对数据段进行异或0x72h解密解密后,F5得到两个数异或+35与第一段输入进行比较第二段也是一个smc自解密第二段主要代码。ebx为用户输入与(0x83+i)异或得到的下标根据eax进行索引查表。得到的bl与第二原创 2021-06-06 12:09:17 · 487 阅读 · 0 评论 -
re学习笔记(74)BUUCTF - re - [安洵杯 2019]game
[安洵杯 2019]gameollvm混淆直接贴上分析后的代码了unsigned int sudoku[81] = { 1, 4, 5, 3, 2, 7, 6, 9, 8, 8, 3, 9, 6, 5, 4, 1, 2, 7, 6, 7, 2, 8, 1, 9, 5, 4, 3, 4, 9, 6, 1, 8, 5, 3, 7, 2, 2, 1, 8, 4, 7, 3, 9, 5, 6, 7, 5, 3, 2, 9, 6, 4, 8,原创 2021-06-05 18:08:13 · 482 阅读 · 1 评论 -
re学习笔记(73)2021美团CTF-Re-100mazes
刚开始想对伪代码进行处理,但是需要修改的太多;比较菜不太会处理。之后发现每个函数的栈空间都是一样的。就拜托pwn手来写gdb脚本来提取一下数据。为了方便一下子取出来。使用idapython将程序退出的地方进行了patch,这样就算输入错误程序还是会向下运行,方便提取数据。首先是idapython脚本patch退出的点(idapython临时学了一下,写的可能有些笨)import idc,idautils,idaapifuncs = idautils.Functions()for i in fun原创 2021-05-28 09:18:54 · 671 阅读 · 3 评论 -
re学习笔记(72)HGAME2021 Level - Week1 - RE WP
helloRel = [0x97, 0x99, 0x9C, 0x91, 0x9E, 0x81, 0x91, 0x9D, 0x9B, 0x9A, 0x9A, 0xAB, 0x81, 0x97, 0xAE, 0x80, 0x83, 0x8F, 0x94, 0x89, 0x99, 0x97]flag = ""n = 255for i in range(22): flag += chr(l[i]^n) n -= 1print(flag)# hgame{hello_re_player}原创 2021-02-06 21:29:56 · 890 阅读 · 0 评论 -
re学习笔记(71)大吉杯DJBCTF - re - 部分WP
大吉杯DJBCTF - re - 部分WPA-Maze-In迷宫题,WDLR控制上下左右,数组是328的映射的迷宫是88的,我理解为每四位显示着该位置的上下左右能不能走,为1能走为0不能走写深度优先搜索脚本import syssys.setrecursionlimit(100000) # 递归限制mkey = [ 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x0原创 2021-01-25 14:38:55 · 402 阅读 · 1 评论