- 博客(25)
- 收藏
- 关注
原创 web知识点台账
参考文章:https://blog.csdn.net/destiny1507/article/details/82347371。write= 可以设定一个或多个过滤器名称,以管道符(|)分隔。read= 可以设定一个或多个过滤器名称,以管道符(|)分隔。利用filter协议,对文本进行特定处理(加密),达到绕过注释的特点。resource= 指定了你要筛选过滤的数据流。
2023-11-06 15:09:47
96
原创 re -25 buuctf [网鼎杯 2020 青龙组]jocker
[网鼎杯 2020 青龙组]jocker前话:ida7.6设置栏内没有general,可以通过ctrl+shift+p打开命令面板,搜索option打开设置选项,于Disassembly设置堆栈显示正文:ida打开后发现堆栈不平衡,先把堆栈调平衡将call函数那行alt+k后改为0堆栈调平衡后,发现主函数引用了wrong,omg,encrypt,finally四个函数。奇数位向减,偶数位异或检验由wrong函数处理后数据是否与unk_4030C0相等。据此可以先推测下Str是什么。#
2021-12-02 19:16:30
339
原创 re -24 buuctf [GXYCTF2019]simple CPP
[GXYCTF2019]simple CPP前话:遇到复杂的代码别慌,开着动态调试,编写注释便往下步过,总会结束hint:flag中间有一段乱码,因为构建的Z3表达式有多组解,乱码应为e!P0or_aida打开,代码很长在此之上的代码,就是输入的字符串与一组字符串异或后,每8个字节一赋值给4个变量v16,v15,v14,v13。将这一步每个式子都用变量v16,v15,v14,v13构建等式。最终会得到5个等式。s.add((v14 & ~v16) == 0x1120416101
2021-12-01 20:49:23
375
原创 re -23 buuctf [GWCTF 2019]re3
[GWCTF 2019]re3ida打开后发现函数被异或写idc脚本异或回来#include <idc.idc>static main(){ auto addr = 0x402219; auto i = 0; for ( i = 0; i <= 223; ++i ) { PatchByte(addr+i,Byte(addr+i)^0x99); }}对于sub_40207B函数分析可以得知,经过一系列运算最终返回
2021-12-01 19:01:58
295
原创 re -22 春秋杯 Snake
脱壳后,ida打开找到flag检验函数发现两个关键函数doubt,my_encode,my_encode显然是base64加密,联想到表是否被改变,对table变量查看交叉引用,找到改变表的函数利用脚本跑出真正的表#include<iostream>#include<cstdio>using namespace std;char table[100] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123
2021-12-01 18:18:08
225
原创 re -20 buuctf findKey
findKey关于花指令的文章:123拿到文件拖入ida后发现未被反编译,可能存在花指令找到花指令后,nop掉下一行的重复指令将其保存为可执行文件保存后将修改好的程序拖入ida文件已经被反编译成功发现sub_401005的参数全部已知,跟进分析a2通过指针赋值,该函数为Str字符串改值,也就是str与v12相互异或:s = '0kk`d1a`55k222k2a776jbfgd`06cjjb'b = ord('S')for i in range(len(s)):
2021-11-26 18:18:23
280
原创 re -19 buuctf [GUET-CTF2019]number_game
[GUET-CTF2019]number_game前话:看明白这题,需要点二叉树基础,最起码要明白数是如何存储的,即若根节点序号为n,左子节点为2n+1,右子节点为2n+2。前序遍历:根左右,中序遍历:左根右,后序遍历:左右根。打开ida后,定位到关键函数对第一个函数sub_4006D6跟进分析传进来的参数v5是输入的字符串,所以输入的字符串长度为10,数值为0-3跟进第二个函数sub_400758分析此处malloc(n)即为申请n个字节内存空间。对于a1也就是传进来的参数v5只有最后
2021-11-26 10:58:03
526
原创 re -18 buuctf 特殊的 BASE64
特殊的 BASE64根据题目就能猜出来是base64换表加密打开ida,string窗口直接看见表和base64字符串,解密就得到flag脚本:import base64import stringstr1 = "mTyqm7wjODkrNLcWl0eqO8K8gc1BPk1GNLgUpI=="string1 = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0987654321/+"string2 = "ABCDEFGHIJKLMN
2021-11-25 18:41:09
287
原创 re -17 buuctf firmware
firmware这题要用到firmware-mod-kit,安装:https://blog.csdn.net/ldwj2016/article/details/80712566。本人用的Ubuntu20.04,make编译因为缺少头文件不通过,于是加了一下午的头文件。。拿到文件后,先binwalk,发现分离出了个120200.squashfs文件(SquashFS 是一套基于Linux内核使用的压缩只读文件系统。该文件系统能够压缩系统内的文档,inode以及目录,文件最大支持2^64字节。)。该文件
2021-11-25 16:18:07
379
原创 re -16 buuctf [网鼎杯 2020 青龙组]singal(angr使用)
[网鼎杯 2020 青龙组]singal前话:先记录下angr的使用。参考了大佬的文章:https://blog.csdn.net/Breeze_CAT/article/details/106139253在cmd中使用,不能在pycharm中使用。>>> import angr>>> p = angr.Project(r'C:\Users\ASUS\Desktop\signal.exe') #地址前必须加r>>> state = p.facto
2021-11-23 20:22:10
545
原创 re -15 buuctf [WUSTCTF2020]level4
[WUSTCTF2020]level4前话:在没看wp之前我以为这道题简单的雅痞,看完之后补了一中午二叉树前中后序遍历该怎么画图。对考研又有把握了呢。。。ida打开后,我是真的没把stuct,left,right联想到跟左右(二叉树的前序遍历),只感觉type1,type2是关键函数,转而跟进他们的参数,发现没有值,猜测是运行后会生成。于是便像动态调试(调试64位elf文件需要虚拟机linux作为环境,具体咋搭前面有篇文章讲过)。起初想在程序最后下个断点,看看跑完了是个啥状态。然后发现只有一个字
2021-11-22 18:18:35
351
原创 re -14 buuctf crackMe
crackMe打开ida后,看见代码包含了很多个while循环,而且最后量个while循环结束之后都有printf,便想着看看回显了个啥。于是他便卡在了第一个断点处,看看应该printf啥:而最后一个printf的字符串为:所以要做的也就是不触发前一个printf的判断,直接出while循环。思路已经明确那么现在也就是要保证让两个if条件都不为0(即sub_8C1830与v4不为0)以达到break的效果进入loc_8C11A0里发现没被声明为函数,先全部选中按p声明下,然后反编译
2021-11-21 15:14:50
646
原创 re -13 buuctf [ACTF新生赛2020]Universe_final_answe
[ACTF新生赛2020]Universe_final_answe前话:该题目要用到Z3,先记录下Z3的用法,参考文章:传送门 传送门2创建一个有解的声明对象a = Solver()添加条件s.add()判断是否有解s.check() #如果有解 则反回sat 反之 返回 unsat返回最后的解result=s.modul()print(result)声明变量整形(Int):a, s, d = Ints(‘a s d’)有理数(Real):
2021-11-20 19:51:10
419
原创 re -12 buuctf [Zer0pts2020]easy strcmp
[Zer0pts2020]easy strcmp前话:这题要用到ida64位远程调试先记录一下配置方法,因为本人使用的是ida7.6版本差异可能导致问题。application与input file填linux路径下的题目文件路径dictionary填linu下题目文件所在文件夹的路径(即题目文件的父级)Paramater不填Hostname用ifconfig填自己的ip,Port端口固定Password虚拟机密码运行一下:去找个地方下个断点:这里的strcmp函数比较值的结果决定回
2021-11-19 20:59:18
999
原创 re -11 buuctf [FlareOn3]Challenge1
[FlareOn3]Challenge1题外话:其实在搜索字符串时发现这串字符时,就该想到可能是base64改表加密的由此关键函数,分析一下,str1与str2要相同,而str2已经赋值,str1是输入的值再经过sub_401260函数后的值。分析一下函数,这就是base64加密函数阿。每三个字符一取,转换为2进制为24位再对这24位分为4个6位,再分别与63进行与操作。最后还有个’=‘补位,似乎也只有base家族由这种操作了。但这题表被改了,base64改表加密,知道了这点就可以开始写脚本
2021-11-19 09:39:25
299
原创 re -10 buuctf [ACTF新生赛2020]Oruga
[ACTF新生赛2020]Oruga很显然if条件中的那个函数是关键点如图中注释写的,起始点为0要走到0x21的位置,字符串中每一个字符决定方向,对着当前方向一直在,直到遇到障碍物,于障碍物前一格停下(中国象棋的车???),如果移动的尽头没有障碍物就返回0。对着这个数据矩阵,慢慢走就能拿到flag,这算是迷宫题吧。。。...
2021-11-17 18:17:23
195
原创 re -09 buuctf [BJDCTF2020]BJD hamburger competition
BJD hamburger competition题目是一个Unity游戏,可以用dnspy反编译,主逻辑模块代码静态编辑之后存储于Assembly-CSharp.dll文件中。具体参考文章:大佬文章找到关键点,(ButtonSpawnFruit.Sha1(str) == “DD01903921EA24941C26A48F2CEC24E0BB0E8CC7”sha1解密后ButtonSpawnFruit = 1001。md5加密后b8c37e33defde51cf91e1e03e51657da
2021-11-17 17:38:42
3107
原创 re -07 buuctf [WUSTCTF2020]level3
level3拖入ida看到主函数知道这题和base64有关,将那串base64加密过的字符串解密得不到任何东西。猜测可能换表加密然后我就在base64_encode函数中找了好久哪里该表,结果哪里都没有然后,发现有一个函数名起的很跳脱跟进之后发现是改表操作写脚本,得到改后的表:#include<cstdio>#include<iostream>#include<cstring>using namespace std;typedef long
2021-11-11 15:27:29
148
原创 re -06 buuctf [FlareOn4]IgniteMe
IgniteMeida打开后:根据aG00dJ0b与aN0tT00H0tRWe7r变量内容可以判断出sub_401050是关键函数,其return 1即可得到flag稍稍分析一下:v4的初始值看不懂,所以我用下断点动态调试去取值下断点调试时发现显然call sub_401000下的汇编代码就是为v4的赋值操作在该函数下方找到循环异或,可以看出v4的值于是,就可以写脚本了:a = [0x0D,0x26,0x49,0x45,0x2A,0x17,0x78,0x44,0x2B,0x6C,
2021-11-11 15:04:06
183
原创 re -05 buuctf [GWCTF 2019]xxor
xxor1.拖入ida,找到关键函数2.稍加分析一下3.有了处理完的数组v[7]以及加密的方法,对此写脚本解密得到原输入值#include<cstdio>#include<iostream>#include<cstring>using namespace std;typedef long long ll;ll a[7] = { 3746099070, 550153460, 3774025685, 1548802262, 2652626477,
2021-11-09 18:41:07
599
原创 re -04 buuctf [HDCTF2019]Maze
Maze拿到后发现upx壳,脱壳后扔进ida然后发现这个跳转,跳转到下一行,调用了一个不存在的函数,可以判断其为花指令,jnz可以直接nop掉,call调用的数据中可能存在有效代码。按d将其转换为字节数据删掉第一个字节,将数据转换为代码但此时左侧text还是红色的,要把它封装为函数,选中所有关键代码(所有红色代码),按p于是就可以反编译了起始位置为(7,0)要到达(5,-4)根据迷宫走14步即可得到flagflag{ssaaasaassdddw}...
2021-11-08 14:26:01
177
原创 re -03 buuctf SimpleRev
SimpleRev分析关键函数:写python 脚本时发现,若输入为小写时最后一位存在乱码key = 'adsfkndcls'str2 = 'killshadow'flag = ''for i in range(len(str2)): for j in range(10): m = ord(str2[i]) - 97 + 26 * j - 97 + 39 + ord(key[i]) if (m > 64) & (m < 91):
2021-10-31 17:01:44
103
原创 re -01 buuctf xor
xor找到main函数,反编译查看global存放数据写python脚本:先将所有字符全转为字符型,拼接为字符串后再异或运算s = ['f', 0xa, 'k', 0xc, 'w&O.@', 0x11, 'x', 0xD, 'Z;U', 0x11, 'p', 0x19, 'F', 0x1F, 'v"M#D', 0xE, 'g', 0x6, 'h', 0xF, 'G2O', 0]for i in range(1,22): if isinstance(s[i], int):
2021-10-31 15:03:53
157
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人