自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 nssctf ret2shellcode

定义好了shellcode和bias的值,大概意思就是,将shellcode左对齐补满bias个长度如果不够,就。根据题目就可以知道,这道题考的是ret2shellcode了,注意一下这边nx保护是开启的,接着利用。各段情况,断点打在0x401220,然后按n单步调试,期间可以通过vmmap,查看内存情况,可以。将main函数的返回地址修改为buff的地址,由于main函数中会将s的内容复制给buff,所以。就会执行shellcode,攻击奏效,可以获得shell。首先checksec一下,如下图。

2025-03-03 13:37:04 178

原创 BUU ez_pz_hackover_2016

一步的payload出来了,b'crashme\x00'+b'a'*(0x16-8+4) 这边-8是因为前面刚好八个字符,+4就是。shellcode的地方,所以需要这边还要-4,0x20-0x4=0x1c,这才是存储shellcode的首地址,数一下,20,21,22,没错,偏移量就是0x22了,和ebp0x38相比,差为0x16,好,那么好,第。分析如图,逻辑不难,注释打在旁边,这边简单理一下思路,首先是输出数组s的地址,然后利用。

2024-12-26 19:56:16 878

原创 第二届CN-fnst re题wp

这个for循环一共有16次,a2为已知,a1代表数组v5,这边回头数一下数组v5,发现总共是32个十六进制数,那就好办了,两两为一组,正好和这边的16次循环搭配上,这边还有一个注意的点就是,v5数组要倒过来两位两位的取(等会儿看实现代码就知道怎么操作了),像我这种菜鸟选手思路大致就差不多了,可能会写出如下实现代码。首先查壳,发现有upx壳(主页有教程,这边就不说了),脱掉壳,64位程序,拖进ida64进行反编译,如下图。题目附件名称amazingbruteforce。

2024-12-16 20:35:04 344

原创 NSS jump_by_jump_revenge

当然了,这道题的难点在于逆写代码,我是用爆破写的,首先我们理一下思路先,这是一个从0开始的循环,这边有一个重要的点,str[i]和str[(i*i+123)%21] 这边的i是和(i*i+123)%21 对应住的,什么意思呢,比如我现在i==0,那么str[0]就一直和str[(i*i+123)%21] 一起相加,然后再和96进行取模操作,简而言之,i定则(i*i+123)%21定,懂了这个之后,那就可以逆了,我先简化一下,此时我的左侧是已知数,右边我们不懂%96的逆运算,那就爆破,代码如下。

2024-12-12 20:28:31 167

原创 buu ciscn_2019_ne_5

简单分析并写个注释,这边梳理一下大致流程,先是输入一字符串,然后比对,然后再选择相应的操作流程进行操作,AddLog可以向src数组中输入字符串,GetFlag中有strcpy函数,并存在溢出点,再是Print函数,里面存在system函数,但是shift+f12,并没有看到binsh字符串,这么一梳理,攻击思路差不多也就有了,有system函数,没有binsh,可以read函数读入binsh字符串,也可以找sh。p.sendline(str(1)) #此处输入1,向src数组中赋值。

2024-12-04 19:43:55 374

原创 BUU ciscn_2019_c_1(干货满满)

当我们执行程序,比如我现在main函数里面有一个func函数,第一次调用func函数时,首先会跳到plt表中执行jump*(func@got),但是由于func函数是第一次被调用,所以got表中并没有func函数的实际地址,所以会进行一系列的操作,最终得到func函数的地址,然后将该地址填充到func@got中,这样,got表中就有func函数的实际地址了,在第二次调用func函数的时候,jump@got就会生效,可以直接跳到got表中获取func函数的地址,然后执行该函数。整体思路如下,首先。

2024-11-20 00:04:53 852 1

原创 buu PWN5

中的内容,再继续往下执行,第三行,括号内的地址是dword_804C044的地址,后面10表示,一次进行压栈,进入printf后,函数首先获取第一个参数,一次读取一个字符,如果字符不是%,,然后再发送一个4,使得那个if条件成立,从而获取了shell,最后cat flag,拿下!获取栈变量对应的字符串,利用%s,当然也可以指定位置,%n$s即可,注意对应的变量必须能。地址打包成了4个字节,最后的n,是计算已经成功输入了的字节数(就是前方的4个字节),所以。

2024-11-06 21:27:22 724

原创 buu easyRE

关键点不在这个数组,而是在这个数组后面的那些未知数据,点击这个函数名,ctrl+x进入。我们双击进入这个数组,别问为啥,这是我一直忽略的一个关键点。非常规,难搞的分析,极多的干扰项,<?f5反编译,转为c代码,如下。

2024-11-01 20:02:04 199

原创 BUU usualCrypt1

因为,第一点,数组2本身就是数组1的一部分,第二点,数组2已经被改变了,但是数组1中的数组2部分并没有被改变,所以看数组1就没有意义了,看数组2即可,数组2的P后面九位被替换成了GHIJKLMNO,剩余的照抄,你就会发现,和代码1运行的结果是一样的,这个确实难理解,我也想了好一会儿,建议反复斟酌斟酌,最后嘛,也就没什么操作了,这边已经得到了变码表,然后把要比对的那个字符串,如下图。查壳,32bit,丢进ida32中进行反编译,简单的不多说,直接进main分析。

2024-10-31 22:33:33 323

原创 BUU get_started_3dsctf_2016

的wp,发现了问题所在,这边包含flag.txt的函数中有fopen函数,必须要正常关闭文件,程序才有。代表内存的权限(rwx,可读可写可执行),在ida中ctrl+s调出段表,找到R+W段,找到bss的。想,这远没有那么简单,简单思路都是,gets这溢出,用flag.txt的地址覆盖返回地址即可,但是。的方法,让我受益匪浅,以我的理解,总的意思就是,mprotect函数修改内存权限,read函数读入。就可以获得flag了,他有三个参数,第一个代表内存的起始地址,第二个代表内存的大小,第三个。

2024-10-30 22:15:44 757

原创 BUUCTF re rsa做法(提供enc和key)

输入:openssl pkeyutl -decrypt -in flag.enc -inkey private.pem -out flag.txt。首先对文件进行解压,得到 pub.key和flag.enc两个文件,第一步进行openssl的使用,从pub.key。即为创建成功,最后将pub.key,flag.enc和private.pem放入rsatool文件夹中,当解压为两个附件时,一个为enc还有一个key,首先一段指令,得到e和n,然后再将n拆成p和q。

2024-10-22 13:41:04 923

原创 re SMC(代码自加密)

最后结果也就是这两个函数,前者逻辑很简单,写出逆脚本,后者的话,需要硬猜一下,看了大佬的wp,是需要异或得一个数,然后拿这个数取异或上述字符串,得到最终的flag,这边主要讲smc啊,所以题具体咋做,就长话短说了,还有个题目是羊城杯的babysmc,但我看着和这题差不多做法,这边就不讲那题了...........................................................................................^_^

2024-10-15 14:57:58 433

原创 re 中的 花指令

花指令的认识与初解

2024-10-14 09:58:55 329

原创 Buuctf之SimpleRev做法

此处的str2为下方的text(已知),key也为已知,采取爆破遍历算法,得到v1,即为flag,上代码。进来之后,我们进入main函数,发现里面没什么东西,那就shift+f12搜索字符串,找到关键字符串,双击进入。然后再选中该字符串,ctrl+x进入应用该字符串的函数,如下图。首先,查个壳,64bit,那就丢进ida64中进行反编译。得到结果flag{KLDQCUDFZO},提交即可。

2024-07-06 23:05:18 1045

原创 Buuctf之不一样的flag(迷宫题)

进入main函数,对其进行分析,可以在一旁打上注释,这边最关键的一个点就是,需要联想到这是一个迷宫题,很小的迷宫题,迷宫就是v3字符串,总共25个,55一行,如图所示。flag{222441144222},总结一下,这道题最关键的在于需要发现这是那么一道迷宫题。走法就简单了,从*走到#,1234分别代表上下左右,然后按照走法去走,就能得到结果了,无壳,32bit,丢进ida32中进行反编译。

2024-07-04 22:39:42 488

原创 攻防世界testre做法(考点:base58)

base64编码原理:1,在使用base64加密前,通常会定义一个数组,数组内容大致为A~Z,a~z,0~9,以及字符/+= 2,将待转换的字符串每三个字节分为一个组,三个字节,即24个二进制数,此时再每6个二进制数分为一组,然后再在每组的首位添加上两个0,这样一组就变成8位了,也就是一个字节 3,最后根据base64编码对照表,获得相对应的值 这边就先不拓展两个字节和一个字节的情况了。首先,查壳,64bit,丢进ida64中,然后进入main函数,发现其中有两个函数。直接进入下面这个函数。

2024-06-07 10:40:38 533 1

原创 攻防世界babyRE做法(Linux调试)

如上分析,此处我们就需要猜测到judge一定是个函数,而且由上面的知识点可知,judge一开始又是一个数组,经过了异或处理之后,又变了样,这边我们直接进行远程Linux调试(主页有教程),断点打在第十二行,直接动态调试后,再次进入数组judge,里面是处理过后的数据,这是我们选中这些数据,按c,将数据转换为汇编代码,选force强制执行,再点击yes。在做题之前我们先了解一些知识点,首先是汇编中的知识点,汇编中,数据和代码可以说是一回事,数据和代码可以无条件相互转换,换句话说,数据就是代码,代码就是数据。

2024-06-04 10:44:26 494

原创 攻防世界maze做法(迷宫题)

此处的a3代表列的理由是,a3*8,a2代表行数,一行八个,地图是一个二维数组,行+列依次读取移动,这样之后,就能找下上下左右同字符的对应关系了,就像上文图片中的注释一样,下一步,找地图。双击进入末置位的函数asc_601060,这个就是地图,下方的十六进制查看器,就显示的很好,shift+e提取出来,然后写代码,八位一换,写代码运算出来结果如图,首先,题目已经提示了这是个迷宫题,我们抓住做迷宫题的两个要点,一找玩法,二找地图,

2024-06-03 22:17:08 525

原创 攻防世界easy_Maze做法(迷宫题)

第一个是step_0函数,对数组v6进行了赋值,然后step_1函数调用参数v6给v5进行了赋值,那么显而易见,v5为最后的地图,但是我们发现,这地图用代码逆推出来太麻烦了,里面函数好多的,所以我们采用方法,ida的远程Linux调试,因为该文件不是exe文件,所以只能Linux远程调试,具体操作方法,点进我主页,一篇文章有详解,接下来,开始动调,断点打在函数step_2左边,关键点在这边,主要是三个函数,step_0,step_1,step_2,为了方便理解,先进入函数step_2。

2024-06-03 12:07:08 490 2

原创 关于ida如何进行远程linux调试(详解)

首先我们把需要连接的文件拖进该共享文件夹中,输入su - root ,再输入密码,进入root管理用户,接着输入 ls /mnt/hgfs/vmshare vmshare是我创建的共享文件夹的名字(可替换),接着会展现出要连接的文件,如果出现以下显示,NO such file or directory。我们的权限还没给,我们再回到Linux中,确保防火墙和相应端口已经开启的情况下,先cd /home 进入当前的home目录,接着输入以下命令。(开启和关闭端口会反馈success)

2024-06-01 09:57:00 2064

原创 攻防世界Mysterious做法

这个我只写了一半,运行结果为321,还有一半代码的意思是将求得的值倒序,也就是把321变成123,我看懂了,就没写了,这段代码要好好静下心分析的,注意指针的引用,得到source为123,最后再将那些字符串拼接起来,得到flag{123_Buff3r_0v3rf|0w}。打上注释,逐一分析,总的逻辑大概就是多个字符串连接起来组成flag,其中source为未知,搞出source,flag就出来了,进入关键函数_itoa搞出source。根据这个,写出c语言的脚本,从而求出source,一定要对应好参数!

2024-05-19 16:02:23 268

原创 攻防世界流浪者做法

左侧为已知, aAbcdefghiabcde为一个数组,双击进入,可得其值,复制出来,这句话大概意思就是,从数组aAbcdefghiabcde中随机取值赋值给str1,最后构成一个字符串,这字符串现在又是已知,这个随机取值又和a1有关,a1是传进来的v5,所以得a1就是得v5,那么接下来,可以写代码了。最后运行得到的结果为j0rXI4bTeustBiIGHeCF70DDM,加上flag{}提交即可成功,这道题难度还好,更多的看的是c语言的底子,要分析出代码含义,会逆向推,就不难做出了^_^

2024-05-19 10:37:43 250

原创 攻防世界answer_to_everything做法

这边看不懂英文没关系,我们去网上给他翻译一下,这边的意思就是,#kdudpeh为密码,呈交不需要任何修饰,直接提交flag{#kdudpeh}不对,把#去掉也不对,然后我就真不会了,网上搜了别人的wp,才知道题目中提到了个sha1,这边需要联想到sha1加解密。去加个密,然后加上flag{}即可作答成功,最后总结一下,只能说自己的知识面太窄了,sha1加密我都第一次听说,这道题就相当于是积累了一个知识点吧,同时也需要具备一定的联想能力。首先不管其他,查个壳。

2024-05-18 15:37:19 376

原创 攻防世界EasyRE做法(纯代码分析)

这边需要注意一个点啊,这个数组要从后往前取,然后对该数进行操作,从前往后取,flag会倒过来,从后往前取的原因大概率是main函数中对该数组进行了倒位操作,应该是那个do while循环干的,所以也还是要注意一下非关键部分,运行得结果flag{xNqU4otPq3ys9wkDsN}进入main函数,简要分析,再比较函数的上方,对byte_40336c这一数组进行了处理,然后就和另一个数据进行比对操作,猜测该数组就是flag,我们双击aXircjR2twsv3pt进入提取数据。

2024-05-18 11:42:03 320

原创 攻防世界666做法(纯代码分析)

运行即可得到flag,这边有个点啊,输入一整个字符数组,建议用函数puts(),这个题目难度一般,只要c语言底子可以,能分析的出代码意思,那就不难做出来了,最后得到的结果为unctf{b66_6b6_66b}进入main函数,进行代码分析,打上注释,大概也就图中分析的这么个简单逻辑,双击enflag。然后给他复制提取出来,再按tap返回,我们进入encode函数分析。浅看一下没有壳,64bit,直接拖进ida64中进行反编译。同样,打上注释进行分析,最后上代码。

2024-05-18 10:54:39 806 7

原创 攻防世界happyctf做法(xdbg分析)

其中指令cmp代表比较的意思,jmp代表跳转的意思,call代表引用函数的意思,lea的意思是将右边值的复制给左边,可以近似看作是mov的用法吧,push就是出栈,add eax,1等同于eax=eax+1,je代表相等跳转,差不多就这些吧,那了解了这些,这边就不难看懂了,这里面大概就一些比较,赋值等等,这里面有一个关键点,push eax后(压栈),获得了单个数据,然后call(引用)一个函数,发现每次循环都是这样,那我们进入这个函数看看,同样也是在ida中复制地址,在xdbg中跳转,

2024-05-18 09:49:23 931

原创 攻防世界crypt做法(附Rc4原理和解密脚本)

这个也是对数组的每一位进行了操作,可能是打乱数组S,或者是生成密钥流什么的,也不清楚,但到这里,我们就可以大胆的猜测这个是Rc4算法了,然后去找关键变量,脚本解密即可,这边我们已知关键变量密钥(主函数str数组存的字符串),密文(主函数if条件中,右侧数组byte_14013B000[i]^0x22之后的结果),有这两个关键变量已经ok了,接下来是Rc4的解密脚本,1,密钥K,长度1-256字节,密钥的长度与明文长度密钥流长度没必然关系,通常16字节。好,那么好,Rc4算法简单介绍完了,那么开始做题。

2024-05-16 09:46:29 1595

原创 攻防世界Replace做法(easy分析)

纯代码分析做法

2024-05-13 11:37:00 381 1

原创 攻防世界csaw2013reversing2做法(简单版)

(a2+4*v4++)括号内表示的是一个地址,从a2的地址开始,4*v4++表示是从该地址所往后的位数,反编译中的代码,a2是从0,4,8这样跳跃的取着a2中的数,我们写代码,是挨个取a2中的数,并且与拆成4组的v2进行轮转异或,这边有一个小点,拆解后的v2应该逆序,因为栈是先进后出的,要记住,然后运行一下,就得到flag喽~~~提取完之后,再进入主函数,最关键的是主函数末尾的函数sub_401000,点进去看看。首先就是查个壳,发现没壳,是32bit,那就丢进ida32中进行反编译。

2024-05-07 17:56:56 463

原创 攻防世界getit做法(一个隐含的小指针)

这边最关键的一句话,在于*(&t + i + 10)=s[i] + v3 ,其中s数组为已知,点进去复制出来,这边有一个注意的点,*(&t)这边有*运算符,联想到是应用指针了,那后面的+i+10,就可以理解为是从地址t开始往后的第+i+10位,也就是说*(),该括号内表示的是t的地址,然后我们点进s看看,这边有一个小坑,就是需要选中53h,然后按a将其转换为字符形式,然后就会变成SharifCTF,这点一定要记得!首先下载附件,然后进行查壳操作,发现是64bit的,那就拖进ida64中。

2024-05-07 16:48:18 381

原创 攻防世界no-strings-attached做法(简易版)

进入最后一个函数,发现了些东西,两个函数输出success和denied,if括号内的条件就得为非0,也就是说ws数组和s2数组相等才行,上面对s2数组进行了处理,那就直接看他咋处理的,然后逆推就行了,先提取数据,选中之后shift+e,这边有一个坑,那就是dword_8048A90的数据提取,这个数组最后的四个0不要提取,为什么是最后四个呢?最后总结一下,c代码中未说明清楚的东西可以暂且忽略一下,数组和数组进行异或时,需要考虑两个数组的长度,不能超出数组本身的长度(^_^),拿下。

2024-04-02 14:47:51 834 1

原创 攻防世界logmein做法(简单版)

做一些简单的分析,在旁边写注释,这边补充一个小知识点,在反编译出来的c代码中,十六进制数转换出来的字符串要倒序,当作一个知识点记住就好了,所以这边的 v7需要反序,最后上代码。运行一下,flag就出来了,最后总结一下,记住一个知识点,在c代码中,由十六进制数转换而来的字符串需要倒序!第一步,先查壳,发现没壳,64bit,丢进ida64中。然后我们直接进入main函数分析​​​​​​。

2024-04-01 15:12:28 428 1

原创 攻防世界open-source做法(简单分析)

就几个简单的if判断语句,flag就是hash,直接找对hash的处理就行了,first上面已知,这边的。second%17有0-16种取值,依次遍历就行了,最后写一下代码,运行代码,将flag一个个带进去试。下载附件后,是一个c的代码,用devc++打开。答案第几个不告诉你嘿嘿,自己去动手尝试吧。

2024-04-01 14:43:57 423 1

原创 攻防世界Hello, CTF做法(easy的不能再easy了)

这边大家做题时可以养成一些习惯,就比如其中只有一个字符串,那我们就可以直接将他拿去16进制转字符串,如果有多个字符串,可能是连接起来,又或是在其中加了一些算法,等等,题目中其实也带有一些提示,不是明文比较,那就说明不是这个字符串本身喽,应该是经过了转化,那就可以联想到16进制转字符串,这题大家可以当积累个经验吧,多想到16进制转字符串的方法吧。直接进入main函数,发现是这样的,里面有一个字符复制函数,那就复制这个字符串,然后将他拿去16进制转字符串,就得到flag了。

2024-03-31 13:45:18 472 1

原创 攻防世界game做法(简单做法)

就是这些东西了,一个非常简单的异或语句,这边v5数组已知,v2数组其实也是已知,这边先补充一个知识点,当连续给不同或者同一变量定义或者赋值时,这些被连续定义的变量可以看作是一个数组,因为连续被定义,数据存储的地址是连续的,而数组存储不同的数,也就是依靠连续的地址,所以可以看作数组,举个例子吧,连续定义a=1,b=2,c=3,相当于是定义一个数组num[0]=1,num[1]=2,num[2]=3,就是这样,此处的v2数组就是将在他之后的数组按顺序串起来就行,最后上代码。

2024-03-31 12:56:03 512 1

原创 攻防世界re1做法

是这么个一串东西,那我们就选中按a,转换为字符串形式,结果就是flag,我真的是醉了,没想到flag在这吧哈哈哈哈,然后提交就好了,flag为DUTCTF{We1c0met0DUTCTF},简单总结下,有的时候思维也可以放简单点,这边点点,那边点点,flag没准儿就出来了(觉得写的不错的话,可以给个赞鼓励一下我哦^_^)往上看,我将v6转换为字符形式(选中按r即可),再往上看,有个v5,参数有个取地址,点进去看看,首先查个壳发现没壳,是32bit,那就拖进ida32中进行反编译。

2024-03-30 08:37:19 513

原创 攻防世界easyre-153做法()

绿色的部分代表是该函数的汇编语言,一看竟然这么多,显然不可能就是那么一句话,那我们一句话一句话慢慢分析,然后就发现问题了,在最后,mov [ebp+var_c],0代表给[ebp+var_c]赋值为0的意思,然后下面一句话,又拿他和1进行比较,那这不是必然性跳跃吗?进去之后发现只有一句话,显然不对劲,应该是有部分汇编语言没有反编译过来,我们这边右击,如图所示,使用ida的同步功能,然后在这个函数界面,按tap,再按空格,就转换为汇编语言了。然后我们再进入这个函数,f5转换为c语言,壳后,拖进ida32中。

2024-03-30 08:18:50 454

原创 upx脱壳教程(简单易学,附安装包)

很简单的upx脱壳教程

2024-03-29 19:53:17 7328 3

原创 攻防世界dmd-50做法(简易版)

这一串东西,下面再往上面继续分析,找前面是否处理过*v41,结果一找,你别说,还真有,*v41由v40赋值而来,而v40经过一个处理,md5,这边是一个难点,需要联想到md5解密,然后我们进入md5加解密网站https://www.cmd5.com/,进行解密一下看看,进入主函数后,进行简单的分析并且打上注释,注意这边不要被他这种看起来很复杂的代码吓到了,我们直接扣关键点就行,先往下看,分析完整。解密出来就一个grape,显然不对,再解密一次,发现解密不了,第二个难点来了,试试加密呢?

2024-03-28 14:47:24 544

原创 攻防世界re-for-50-plz-50做法(简易版)

进入主函数后查看是这样的,很简单的逻辑,只要if括号内的条件不满足即可,点进meow数组,把这个字符串复制出来,然后和0x37异或就可以得到正确答案,上代码。无壳,32bit,直接丢进ida32中。最后运行一下,flag就出来了。

2024-03-28 10:42:48 519

空空如也

空空如也

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

TA关注的人

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