自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 攻防世界-Android2.0

可以发现show方法中有刚才的关键字符“wrong”,要想输入great所以参数要传入1,所以JNI.getResult返回结果要是1,跟进这个方法。发现加载动态链接库,解压.apk文件找到里面的.so文件载入IDA。也是简单异或,由这些可以求出原v5,v6,v7,然后根据init流程就可以求v4,代码如下。首先进行初始化v5,v6,v7,然后对v5,v6,v7进行变化,先看init函数。发现他是把v4数组的值每三个一组分别依次赋值给v5,v6,v7。下载apk,打开是要求输入flag,随便输入一个。

2023-06-03 17:09:19 637

原创 攻防世界-基础android

学会了zip和jpg格式的开头编码,跟进GetAndChange。正是zip压缩包的开头编码,所以把apk改为zip然后解压。这是个偏向Misc的解题思路,下载完是个apk文件,载入010 Editor看一下,FF D8是jpg文件的编码开头,所以把这个zip改为jpg。发现是对输入的内容进行变化操作然后最后等于'0',所以写一个简单脚本可以求str。发现是50 4B开头,而。所以就可以求flag。

2023-06-03 12:29:08 1177

原创 NSSCTF-[深育杯 2021]Press

遇到',',即把读取的flag内容存放到tmp[0]中,然后遇到‘[’,此时tmp[v2]存放的是flag内容的第一个字符肯定不是0不会进入循环,然后tmp[0]-1,右移到tmp[1]然后减1,然后左移到tmp[0],遇到']',回到前面的'['处如果不是0就一直循环往复直到tmp[0]==0,所以当tmp[0]==0的时候tmp[1]==160-flag[0],进入到了‘case [’的循环体里面就会跳到'>>[-]+++++

2023-05-15 16:44:10 765 1

原创 NSSCTF-[NSSRound#X Basic]ez_z3 && [MoeCTF 2022]Art &&[HDCTF2023]basketball

RGB的初见,DFS代码求多解

2023-04-27 18:36:51 1385

原创 HNCTF-re部分复现

dfs迷宫01背包问题,这几天在做HNCTF的week3,week4部分,学到了一些不知道的没接触过的东西,所以记录一下。

2023-04-23 22:16:39 871

原创 BUUCTF-[GWCTF 2019]babyvm

vm简单逆向,switch不同,赋值给的对象不同,所以可以看做是不同寄存器,所以0xE1->eax,0xE2->ebx,0xE3->ecx,0xE5->edx。这种简单vm逆向搞了快半辈子了,看别人wp也看的迷迷糊糊的,可能是受一个python虚拟机题的影响,第一次见vm,简单记录一下~发现是一堆数据,根据对vm的简单了解,这些应该是操作码,继续看函数其他的部分,应该是操作码及其对应的操作指令。是个异或操作,看异或对象可知,xor eax,ebx。乘的操作,看操作对象是 mul eax,edx。

2023-04-09 22:34:39 962 2

原创 BUUCTF-[2019红帽杯]Snake&&Dig the way

读取文件,改文件内容 ,下载完文件是一个用C#编写的untiy程序,对于这种程序果断用dnSpy查看Assembly-CSharp.dll找到如下位置发现这些函数都导入了Interface函数,那找到这个动态链接库的位置,用ida打开,f12搜索关键字发现了You win!,跟进发现这个代码很长,但是这个GameObject()函数只有一个a1参数,并且他也参与了运算。

2023-04-08 15:01:48 392

原创 [SCTF2019]creakme1

有一个_except_handler4,他是SEH的异常处理标志,在往下看发现一个函数sub_402450,发现他并没有被反编译出来,可能和_except_handler4有关,根据别人的博客说,这个函数被反跟踪所以无法直接查看他的伪代码,手动跟进 sub_402450,所以一个是密钥一个是偏移,采用CBC模式,可以猜一下那个是密钥,哪个是偏移量,最终知道 sctfsctfsctfsctf是偏移量,sycloversyclover是密钥,所以在线解密。接下来看主函数中的sub_4024A0函数。

2023-04-05 21:41:29 383

原创 PE文件格式

PE文件是Windows操作系统下使用的可执行文件。PE文件是指32位的可执行文件,也称为PE32。64位的可执行文件称为PE+或者PE32+,是PE文件的一种扩展形式。

2023-03-30 18:54:39 1649 2

原创 ctfshow吃瓜杯-签层饼、Tea_tube_pot

发现如果if条件成立,则 dword_525A30 就为0,那看if条件,因为要求num1和num2,所以他们是唯一的,所以如果想要输出yeah!这个if条件一定成立,即num2正确的话,dword_525A30一定为0,所以关注点是如何求num1,num2。程序很简单,其中生成随机数的那部分代码并没有影响用户输入的值,所以可以不考虑,那倒着分析,看那个if分支。dword_525A30为0就可以输出yeah,那我们肯定想让他为0,点进去看看。对,num1,num2按热键x交叉引用。发现恒1,x交叉引用。

2023-03-28 21:45:27 252 1

原创 NSSCTF-[NCTF 2021]狗狗的秘密

这里倒着观察,已知v10数组已知,并且是int8类型,所以从0-256爆破,然后在看他在byte_2C5118中的位置就可以求出47进制形式。进入这个红框里的函数,是一个xtea加密,并且是对v8操作,而v8和sub_403000有关,所以通过xtea进行解密。patch反调试完保存一下,在sub_403000处下个断点(smc自解密执行在这个断点之前),动态调试。这里会求到不止一个解,观看别的wp发现就是一个一个试的,根据v10这些余数可以求处flag,最终代码如下。无壳,载入IDA,看main函数。

2023-03-22 19:23:11 637

原创 攻防世界-first

那么哪个线程先抢到互斥锁呢,这里有个usleep函数,让不同线程挂起不同时间,所以这个对哪个线程抢到资源起决定性作用,抢到互斥锁之后上锁,因为有6个线程,所以用户输入分成6组,每组4个进行md5加密。pthread_mutex_lock: 是一个 POSIX 线程库中的函数,用于对互斥量进行加锁。它的功能是创建线程(实际上就是确定调用该线程函数的入口点),在线程创建以后,就开始运行相关的线程函数。,抢到锁的线程先执行,没有抢到锁的线程需要等待,等互斥锁使用完释放后,其它等待的线程再去抢这个锁。

2023-03-21 11:58:44 439

原创 Python逆向及相关知识

Python没有严格意义上的编译和汇编过程。一般可以认为编写好的python源文件,由python解释器翻译成以.pyc为结尾的字节码文件。pyc文件是二进制文件,可以由python虚拟机直接运行。注:有的朋友可能会问,为什么我运行python,有时候生成pyc文件,有时候没有呢?Python在执行import语句时,将会到已设定的path中寻找对应的模块。并且把对应的模块编译成相应的PyCodeObject(python中的一个类)中间结果,然后创建pyc文件,并将中间结果写入该文件。

2023-03-18 22:06:32 2818 1

原创 攻防世界reverse-box

gdb脚本发现有一个rand()函数(这是不是和前面同一输入但不同输出有关呢),然后在经过一系列的操作就能得到v4数组,又因为v16不同所以得到的v4数组也不同,所以就要根据前面的条件v4[84]=0x95,v4[87]=0xee,v4[67]=0xaf,v4[84]=0x95,v4[70]=0xef,v4[123]=0x94,v4[125]=0x4a爆破符合条件的v4数组。一般来说,我们写main函数,就定义main(),它的参数部分看似没有,实际上,main函数也是有参数的,只是在我们写时省略了。

2023-03-18 18:53:12 797

原创 攻防世界-catch-me

sse对v3进行操作,然后分别放到byte_6012A8,byte_6012A9,byte_6012AA,byte_6012AB,在.bss区可以知道他们和后面的dword_6012AC是占连续的空间的,可以看成一个数组。1._mm_load_si128(_m128i * p):返回一个_m128i的寄存器,将p指向的数据读到寄存器中,加载128位的值,p一般是通过类型转换得到的;2._mm_unpacklo_epi8(_m128i S0,_m128i S1):将S0和S1的低64位数以8位为单位进行交错;

2023-03-16 14:53:25 393

原创 BUUCTF-[RoarCTF2019]polyre

控制流平坦化,然后代码流程:第一个for循环没用,从第二个看外循环6次,内循环64次,把flag看为8个字节一组,然后如果是非负数就乘2(相当左移),如果是负数就乘2(相当左移)在异或一个数。简单来说,OLLVM会添加一个用于控制跳转的状态变量和分发器:当一个真实块执行完成后,会把状态变量的值进行更新,回到分发器进行检查,再根据状态变量的值跳转到下一个真实块执行;提取码u2g0,下载完后注意:deflat.py文件中的sys.path.append()后的地址是你下载的am_graph.py的地址,

2023-03-09 21:40:38 561

原创 BUUCTF-[羊城杯 2020]Bytecode

字节码手撕 刚开始看别人的wp,我以为有什么工具可以还原python源码,原来他们可能都是自己看出来的。根据上面的手工还原链接,连看再猜应该比较容易一些。因为这题有很多未知解,所以很容易想到用z3约束器。这道题是一个关于python字节码的。

2023-03-07 21:52:02 384

原创 [2019红帽杯]childRE

这道题涉及到c++函数的修饰规则,按照规则来看应该是比较容易理解的。上面博客中有总结规则,可以学习一下。载入IDA可以知道用户输入长度是31,然后好像就看不出来啥。看下部分IDA可以知道最终flag为用户输入的MD5加密形式。然后上面有一个do...while()循环,里面又有一个操作,为了不触发exit()退出程序,所以上面比较的值肯定相等,而a1234567890Qwer[]数组和0x140003478i64,0x140003438i64地址处的数据已知。

2023-03-05 15:55:49 715 2

原创 BUUCTF-[ACTF新生赛2020]Splendid_MineCraft

SMC自修改解密,通过f8执行浏览可知,把用户输入给了cl,cl又给了bl,然后ecx=遍历次数edi+0x83,然后ecx与ebx进行异或给ebx,所以ebx=flag[i]^(0x83+i),而eax是个数组,所以bl=data[ flag[i]^(0x83+i) ]。运行,输入假flag,注意这里第一部分可以输入正确的,要不然v9是错误的,就都错了。其中有个unk_4051D8,他应该存放的数据,但是他却出现在了if中,好像又是个函数,所以可以猜测是不是SMC,动态调试会自解密为函数呢,所以动态调试。

2023-02-22 10:13:10 537

原创 BUUCTF-[安洵杯 2019]crackMe1

sm4加密所以就是当messageboxA后发生异常,触发了 AddVectoredExceptionHandler()函数异常处理,调用了Handler。如果参数为零,则处理程序是要调用的最后一个处理程序。所以整体逻辑:str1即用户输入经过sm4加密,base64表的大小写互换与移位后的base加密结果与str2两两互换相等。调用此函数后,如果在未调试的进程中发生异常,并且异常会将其设置为未处理的异常筛选器,该筛选器将调用。指定显示按钮的数目及形式,使用的图标样式,缺省按钮是什么以及消息框的强制回应等。

2023-02-20 11:32:29 1112 2

原创 BUUCTF-firmware1

安装后虚拟机文件中会有一个firmware-mod-kit文件(如果无权限,则输入 sudo su和chmod 777 firmware-mod-kit获得权限 ),将上面120200.squashfs复制到firmware-mod-kit中,输入命令:./unsquashfs_all.sh 120200.squashfs就解压完成。简单易用,完全自动化脚本,并通过自定义签名,提取规则和插件模块,还重要一点的是可以轻松地扩展。常用".bin"作为后缀,但并不意味着所有的bin文件都是虚拟光驱文件。

2023-02-16 19:31:46 1171 3

原创 攻防世界-easyCpp

c++的STL模板库,既然最后是比较v27,v24,而v24是斐波那契数列,所以v27就是accumulate后的数据,我们就动态观察他,现在虚拟机上随便输入,如1,2,3,4,5,6,7,8,9,0,11,12,13,14,15,16。=&v9,通过分析知道&v10是用户输入的首地址,而&v9是用户输入的最后元素的后一个位置,所以当v10指针走到用户输入末尾时循环结束,就相当于遍历用户输入的字符串。v8,v7又是分别指向数组的第一个元素,最后一个元素,所以猜测这是经过transform后的数组啦。

2023-02-15 20:03:17 324

原创 BUUCTF-crackMe1

是一个while循环,a2就是用户输入的密码,先通过isdigit函数判断是否输入的是数字字符,如果是就减去'0'的ascii码使变为纯数字,如果不是则通过isxdigit函数判断是否为十六进制数a-f/A-F。返回1,所以v3 肯定不是0,所以肯定能执行到break,跳出循环,但要求sub_4011A0()函数的返回值不是0,才能执行到break,所以跟进函数sub_4011A0这个关键函数。发现就是if判断,根据判断结果进行相应运算,所以尝试计算一下,哪些可以等于43924。在主函数中可以看见,下图。

2023-02-13 10:59:01 312

原创 BUUCTF-[网鼎杯 2020 青龙组]singal 1(angr用法)

angr用法这道题之前看了看,主要是个switch语句,但是没有看太懂,然后我发现有用angr解这道题的,那时候还没接触,也没安装angr库,基本操作也不会,浅学了一下,还是不太精通,但是这道题是最基本的angr解法,所以用angr做一做。发现vm_operad是主要函数,而puts("good,The answer format is:flag {}");是你想要得到的,看它的反汇编记住地址,写脚本要用到。即初始参数用变量代替,模拟程序执行过程,维护执行到各个位置时的状态(用各个变量之间的代数关系表示)。

2023-02-10 23:00:45 458

原创 BUUCTF-[SCTF2019]babyre1

我们发现后面有v11,v12,v13,v14。在根据这4个数据在堆栈中的位置,可以知道这四个就是v10[26],v10[27],v10[28],v10[29],知道这些,又是异或操作那不就可以向前异或求出v10的前四个元素了嘛。用户输入为v15,从操作可以看出w向上,s向下,a向左,d向右,x向下走一个迷宫大小,y向上走一个迷宫大小。这里是真没看出来是什么,经过查阅wp,部分师傅是用爆破求出,有的则看出这是base64的解密过程,我通过把'sctf_9102'进行base64加密就是正确的input2。

2023-02-10 19:14:11 782 1

原创 攻防世界-reverse-for-the-holy-grail-350

不是2就执行else语句,通过观察可知最初v11=0,而让v11变化的就是else语句中的++v11,所以v11一直是0,1,2,0,1,2...循环。因为当do...while循环 2,5,8,11,14,17次时,v11==2,才会执行这里,而且v5在遍历flag正好遍历到2,5,8,11,14,17位。有8个元素,并且满足v3/3在这个数组范围中,所以初步判断v3==0,3,6,9,12,15,18,21。在看第二个if,v10是flag的2,5,8,11,14,17位的前两位的乘积,如下图知。

2023-02-06 21:10:22 189

原创 buuctf-[GWCTF 2019]re3

AES加密 我们发现MD5加密后的unk_603170数据正好就是AES加密的最初始的密钥,那就知道了求出MD5加密后的数据->已知AES密钥->AES解密求flag。mprotect()函数可以修改调用进程内存页的保护属性,如果调用进程尝试以违反保护属性的方式访问该内存,则内核会发出一个SIGSEGV信号给该进程。为数据,所以这是SMC,先选中0x402219区域,按D变为数据,再写个IDC的python脚本,快捷键shift+f2。发现先for循环4次,在循环40次,这不就是AES的密钥扩展嘛。

2023-01-31 21:11:46 655 1

原创 buuctf-[GXYCTF2019]simple CPP1

经过分析知道,这是在获取异或后的v8的值,是在进行字节叠加,首先从v8的第一个字节开始,赋值给v19,然后v19在左移8位,在加上v8的第二个字节,这不就是相当于把v8的值在给v19嘛,但是不同的是,当v17为8,16,24时便将v19分别进行赋值转移给v16,v15,v14,v13,在重新开始,所以就是相当于把v8数值分成4组,前三组分别8Byte,最后一组4字节(后面也算出)。求出为 We1l_D0nim+k_és[lgebra_am_i,发现并不是flag,原来原本题目中有个条件,即第二组数据为e!

2023-01-29 23:39:07 231

原创 BUUCTF-[GUET-CTF2019]number_game1

二叉树,通过顺序A->B->D->H,找到最左的H,并输出H,然后返回输出H的同层次同根的结点I并输出,最后输出子根D,继续找D的同层次同子根结点E并输出,最后再输出子根B,然后找到与B同层次同根的结点C,然后通过C->F->J的顺序找到J,并重复上述操作;通过顺序A->B->D->H,找到最左的H,并输出H,然后返回,输出H的子根D,然后找到D的右子树I并输出,然后继续输出D的子根B,找到B的右子树E并输出,然后找到B的根A并输出;最后的输出顺序:H-I-D-E-B-J-F-G-C-A;

2023-01-28 22:23:30 256 1

原创 [羊城杯 2021]BabySmc

SMC加密说一下思路:既然是换表就想到用maketrans和translate进行解决,所以我们要做的就是把加密后的字符串先去掉末尾的4(因为4是在异或后加上的,不参与异或运算)然后进行异或得到异或前的字符串,然后在通过换表进行解密就好了。SMC,即Self Modifying Code,动态代码加密技术,指通过修改代码或数据,阻止别人直接静态分析,然后在动态运行程序时对代码进行解密,达到程序正常运行的效果。也就是说SMC是修改了代码或者数据,阻碍进行静态分析,但是在动态的时候就会自解密,使程序正常运行。

2023-01-15 18:13:53 391

原创 xctf-梅津美治郎

这里的debugbreak函数:也就是相当于一个int 3指令,引发一个中断,把执行权移交给调试器,如果没有调试器,那就移交给其他异常处理回调函数,如果都没有,那么程序就自己断下来,这里就是为了触发回调函数,如果没有调试器附加,那么debugbreak产生的异常会被AddVectoredExceptionHandler添加的回调函数捕获来处理,这里添加的回调函数也就是sub_40157F函数。通过对这两个函数的了解,所以v3应该是函数名,v4则是模块的句柄。返回值:如果函数成功,则返回值是指定模块的句柄。

2023-01-12 19:16:25 170

原创 BJDCTF2020-re Easy&& BJD hamburger competition&&JustRE

ctfshow BJDCTF2020关键就是for循环,v2[j]==1就输出*,否则输出空格,我当初以为这会不会是迷宫,但是没有给地图啊,也没有明显的上下左右的移动,所以应该不是。之前我们运行过,并不是执行这个代码,我们应该改EIP,让程序执行这里。在IDA里看到ques位置是401520,在OD中载入找到这个内存地址。看到有关时间的函数我的第一反应是:是不是在很长的时间后才会显示呀,我运行一下这个程序,发现并不是,因为出现了时间函数的代码“Can you find me?结果正是flag,这道题挺水的。

2023-01-07 17:28:30 211

原创 xctf-notsequence

即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,这也是组合数的性质之一。有关杨辉三角简单逆向

2022-12-23 14:59:19 106 2

原创 xct-tt3441810

仍然一头雾水,一串十六进制也没有字符啊?是不是这些十六进制可以变为字符啊?载入IDA打开Hex窗口。发现有flag字样,就把上面那个整理一下,把不像是flag中的过滤掉。发现不是exe或者dll,是txt。对于萌新的我这道题比较新奇,虽然简单,但记录一下~对于多行的字符串,可以用三单引号 引起来。

2022-12-21 20:43:03 89

原创 xctf-EASYHOOK

所以很明显知道主函数中CreateFileA->(lpAddress里存的指令)WriteFile->sub_401240,但是在经过sub_401220()的处理以后,变成了CreateFileA->(lpAddress里存的指令)sub_401080->sub_401240。2.WriteProcessMemory():此函数能写入某一进程的内存区域 WriteProcessMemory(由OpenProcess返回的进程句柄,要写的内存首地址,指向要写的数据的指针。hook

2022-12-20 22:19:00 234

原创 XCTF-BABYRE,XCTF-simple-check-100

xctf-BABYRE,simple-check-100,这不是数组吗,为什么是函数?由于前面对judge数组进行异或后,这些数据可以定义为一个新的函数,并且是本题的关键函数。通过对其他wp参考可以通过快捷键“shift+f2”使用IDApython对judge数组进行操作让他的数据在IDA中更改。当然也可以通过远程调试,让judge先自己进行完异或操作然后直接生成函数查看。对操作后的judge数组按c变为汇编代码,在按p变为函数,就可以查看内容了。跟进judge再把他变为函数,查看代码也是可以的。

2022-12-19 10:33:45 246

原创 攻防世界-部分re题(answer_to_everything&dmd-50& easyre-153&Replace)

攻防世界逆向-answer_to_everything & dmd-50 & easyre-153 & Replace),基础sha1,md5逆向,pipe,fork双进程通信学习,正向爆破,位运算与乘除运算拖入IDA前,在题目首页看到推测是sha1加密。拖入IDA。v4为输入,发现not the flag函数,进入发现条件成立会有输出,对他进行翻译所以直接对kdudpeh进行sha1加密即为flag。

2022-12-16 12:27:09 341

原创 [SWPUCTF 2022 新生赛]贪吃蛇

[SWPUCTF 2022 新生赛]贪吃蛇,Cheat Engine简单使用:修改数值获得flag

2022-12-08 21:07:31 2476 1

原创 2022HNCTF-re部分题解

2022HNCTF-re部分

2022-12-04 19:40:21 1280

原创 [GWCTF 2019]xxor

[GWCTF 2019]xxor,简单TEA加密算法逆向

2022-12-02 16:41:41 679 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除