自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Buuctf之SimpleRev做法

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

2024-07-06 23:05:18 599

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

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

2024-07-04 22:39:42 309

原创 攻防世界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 455 1

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

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

2024-06-04 10:44:26 426

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

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

2024-06-03 22:17:08 437

原创 攻防世界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 370 1

原创 关于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 1171

原创 攻防世界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 222

原创 攻防世界流浪者做法

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

2024-05-19 10:37:43 208

原创 攻防世界answer_to_everything做法

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

2024-05-18 15:37:19 321

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

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

2024-05-18 11:42:03 247

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

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

2024-05-18 10:54:39 385

原创 攻防世界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 615

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

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

2024-05-16 09:46:29 1032

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

纯代码分析做法

2024-05-13 11:37:00 326 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 360

原创 攻防世界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 287

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

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

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

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

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

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

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

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

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

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

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

2024-03-31 13:45:18 362 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 420 1

原创 攻防世界re1做法

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

2024-03-30 08:37:19 425

原创 攻防世界easyre-153做法(直白且简单)

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

2024-03-30 08:18:50 403

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

很简单的upx脱壳教程

2024-03-29 19:53:17 3295 1

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

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

2024-03-28 14:47:24 448

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

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

2024-03-28 10:42:48 416

原创 攻防世界hackme做法(简洁明了)

一看就很有东西,那就逐一分析喽,并在旁边写上注释,总的分析不难,有一些细节点注意一下就好了,关键在于if(v21!=(v24^v20)),这边两个已知,v21和v24,那么未知的v20就是flag了呗,往上找代码对v21和v24的处理就行了,这里的v10有着0-21的可能,因为是对22取模,v21有数组对他赋值,进入提取出来就行了,v10对v19进行了赋值,v23在用之前会被归0,然后进入while,对v24操作,得到v24,这边v18没用,是烟雾弹,大概就这样分析,最后上代码。

2024-03-28 09:40:37 1038

原创 攻防世界Reversing-x64Elf-100做法(简单易懂版)

整个圆括号内的东西,都是在代表一个指针所指的位置,拆开来看,i%3,结果有0,1,2,就代表前面重拆成的三个字符数组,再看后面,2*(i/3),代表某数组的具体字符位置,最后半句话,*(i+a1),注意这边也有*哦,所以此处也是取个数,而不是对数进行操作,这边举个例子吧,假设i=0,i%3=0,那就取数组v0(将这三个数组重新命名,分别为v0,v1,v2),然后2*(i/3)=0,就取该数组的第0位,也就是D,以此类推,最后上代码。首先,最基本的,先查壳,发现是64bit的,那就拖进ida64中。

2024-03-27 19:57:01 540 5

原创 攻防世界tt3441810做法(清晰且简单)

就这样先简单筛选一下看看出来什么东西,注意这边>32&&

2024-03-27 09:50:54 281

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

此处需要注意的是,该函数的返回值必须要是非0才行,不然原来if括号内的条件就不满足了,这个函数的返回值为result,所以保证result不为0就行了,这边逐一进行分析,上面a2的初始值为0(看写的注释),那就找case 0处,要想result!=0,那就让这个if条件不满足,*a1=105,然后再跳转到 LABEL_19,这边是一个递归,这边注重看a2值的变化就行,然后再到相应的case去,获得*a1的下一个数,比如,接着刚才下面,跳转之后,

2024-03-27 00:05:48 329

原创 攻防世界simple-check-100做法

简单的小算法,一些简单的小知识点

2024-03-26 15:06:43 1082

空空如也

空空如也

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

TA关注的人

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