ctf小白成长ing
文章平均质量分 59
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 · 1064 阅读 · 0 评论 -
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 · 2638 阅读 · 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 · 6410 阅读 · 0 评论 -
re学习笔记(100)python-bytecode | python字节码学习
之前博客的,搬过来python-bytecode官方文档:dis — Python 字节码反汇编器栈基本操作TOS栈顶(栈上最高地址的值)TOS1栈上第二高地址的值TOS2栈上第三高地址的值…………LOAD_NAME压栈LOAD_GLOBAL:全局变量LOAD_FAST:局部变量LOAD_CONST:常量LOAD_ATTR:对象中的属性POP_TOPpopROT_TWOTOS1,TOS1互换ROT_THREE栈顶原创 2022-01-22 12:47:51 · 662 阅读 · 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 · 4012 阅读 · 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 · 4411 阅读 · 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 · 1113 阅读 · 0 评论 -
re学习笔记(95) 2021ByteCTF intent重定向浅析
一直没搬过来由2021ByteCTF引出的intent重定向浅析在此先感谢ByteCTF的赛前培训,感谢summer师傅的倾情讲解Intent浅要概述Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。Intent一般可被用于启动活动、启动服务以及发送广播等场景。Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。通过Intent,你的程序可以向Andro原创 2022-01-10 22:19:49 · 3526 阅读 · 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 · 2600 阅读 · 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 · 805 阅读 · 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 · 4526 阅读 · 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 · 561 阅读 · 7 评论 -
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 · 837 阅读 · 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 · 674 阅读 · 0 评论 -
re学习笔记(88)攻防世界 - mobile进阶区 - APK逆向
Java层分析MainActivity将用户名和密码传入checkSN来做一个判断其中用户名内置的为TenshinecheckSN进行md5加密,转成hex字符串,加上flag头后与输入密码进行比较解题jeb下断点原创 2021-07-28 18:05:22 · 472 阅读 · 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 · 765 阅读 · 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 · 511 阅读 · 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 · 346 阅读 · 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 · 636 阅读 · 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 · 356 阅读 · 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 · 399 阅读 · 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 · 397 阅读 · 1 评论 -
re学习笔记(80)攻防世界 - mobile区 - easyjni
jeb载入原创 2021-07-24 15:16:30 · 439 阅读 · 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 · 266 阅读 · 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 · 497 阅读 · 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 · 763 阅读 · 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 · 531 阅读 · 1 评论 -
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 · 512 阅读 · 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 · 518 阅读 · 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 · 697 阅读 · 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 · 909 阅读 · 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 · 433 阅读 · 1 评论 -
re学习笔记(70)BUUCTF - re - [羊城杯 2020]Bytecode
BUUCTF - re - [羊城杯 2020]Bytecodepython字节码官方文档:dis — Python 字节码反汇编器python-bytecode|python字节码学习手动查反编译后en = [3,37,72,9,6,132]output = [101,96,23,68,112,42,107,62,96,53,176,179,98,53,67,29,41,120,60,106,51,101,178,189,101,48]flag = raw_input('please in原创 2021-01-23 17:38:15 · 1012 阅读 · 5 评论 -
re学习笔记(69)WMCTF2020 - easy_re
IDA打开搜索字符串搜索不到,有个perl,,搜了搜这是又考验快速学习能力了,,搜了半天的百度谷歌。(搜了半天没搜到啥有用的,,最后在看雪论坛找到了这篇帖子https://bbs.pediy.com/thread-67651.htm既然说会解压,,那我就x64dbg单步调试了,,一直F8单步走,,跑飞就F7,,,,然后一直单步到这里,瞅见代码了。$flag = "WMCTF{I_WAnt_dynam1c_F1ag}";print "please input the flag:";$原创 2020-08-03 22:16:51 · 2361 阅读 · 2 评论 -
re学习笔记(68)天翼杯2020 - mobile
JEB载入native,导出so文件然后ida载入每轮运算都用了flag的各个位,用z3约束求解,先C语言写出约束条件(谁叫我python写出来报错,,,#include <iostream>using namespace std;unsigned int x[32] = { 0x313EF, 0x32F1B, 0x31C4E, 0x3246F, 0x30158, 0x33BF0, 0x2E3C8, 0x2A9B9, 0x30344, 0x31749, 0x2原创 2020-07-31 19:19:10 · 1521 阅读 · 18 评论 -
re学习笔记(67)SCTF-re-signin
考察的是python的exe文件反编译成py文件这个知识点,所用工具在我的GitHub:https://github.com/Eliauk55/CTF-tools先用pyinstxtractor.py得到exe转pyc文件进入目录下的signin.exe_extracted文件夹,用WinHex打开struct文件和main文件发现main首字节是E3,而struct文件的E3在第17字节,所以需要将struct文件的前16字节粘贴到main文件前,补齐一下文件头选中前16字节,ctrl+c原创 2020-07-07 11:51:41 · 810 阅读 · 0 评论 -
re学习笔记(66)第五空间智能安全大赛-re-nop
打开老多花指令挨个把这样的替换掉就好了点击push的地址,ctrl+c复制。点击jmp ebp使用插件ctrl+alt+k修改,修改为jmp <复制的地址>搜了一下字符串找到输出正确与否的代码,发现没有跳到Right的代码,,Right上面的那个jmp跳过了他,,,刚开始以为是要修改main函数最底部栈顶的数值,让他等于Right的地址,然后pop ebx赋值给ebx,最后jmp ebx跳转到Right调试了半天这里什么都没有!整个main函数就是对表面上的,对输入的数Num+3原创 2020-06-25 22:23:23 · 689 阅读 · 3 评论 -
re学习笔记(65)BUUCTF - re - [GKCTF2020]Chellys identity
新手一枚,如有错误(不足)请指正,谢谢!!题目链接:[GKCTF2020]Chelly’s identity最近忙着看书,刷题断了好久了,,,IDA载入,shift+F12搜索字符串双击跟到函数去,来到关键函数我这里的IDA修改了一下基址,因为我配合OD动态调试做的,为了让函数地址与OD地址一致。与我函数名不一样的,需要改IDA基址先查看OD基址然后修改IDA的修改成OD基址0xCB0000,然后点击【OK】从OD中找到主函数的地址部分(搜索IDA显示的地址或者搜索字符串c原创 2020-06-23 22:57:31 · 1105 阅读 · 0 评论 -
re学习笔记(64)GKCTF2020-re-Check_1n|BabyDriver
Check_1n第一题运行程序,提示输入开机密码输入错误会提示密码错误,去IDA搜索字符串得到密码HelloWord然后开机后运行 打砖块 程序即可得到flag切换程序的时候用箭头上下左右,回车启动,BabyDriver搜索字符串发现有一串类似迷宫的字符串迷宫字符串长度是225,刚开始以为是1515的,分析了下代码发现是1614的,,可以写程序画出迷宫来,然后就是按键的问题了,,,因为是sys文件,所以按键应该是键盘扫描码而不是ASCII码在线键盘扫描码查询下移是0x25也就是K原创 2020-05-24 20:42:05 · 1704 阅读 · 0 评论 -
re学习笔记(63)BJDCTF3-re-ViQinere|py2
ViQinere看输出前的那个加密函数里面的jiami()函数是这样的整个加密逻辑就在那一个函数里,,写逆脚本,,,爆破也可#include <stdio.h>#include <string.h>int bh(char x){ if (x > 96 && x <= 122) return x - 97; else if (x >= 65 && x <= 90)原创 2020-05-24 12:52:49 · 592 阅读 · 0 评论