REVERSE-PRACTICE-BUUCTF-28

REVERSE-PRACTICE-BUUCTF-28

    • [FlareOn6]Memecat Battlestation
    • [b01lers2020]chugga_chugga
    • [INSHack2018]Tricky-Part1
    • [watevrCTF 2019]esreveR

[FlareOn6]Memecat Battlestation

.Net程序,运行后输入weapon code,用dnSpy打开
在Stage1Form直接找到第一个weapon code,“RAINBOW”
memecat-code1
Stage2Form同样的地方,第二个weapon code要进入isValidWeaponCode进行验证
memecat-stage2
isValidWeaponCode方法,第二个weapon code异或字符’A’,然后和已知比较
memecat-code2
写异或脚本即可得到第二个weapon code

#RAINBOW
data=[0x03,ord(' '),ord('&'),ord('$'),ord('-'),0x1e,0x02,ord(' '),ord('/'),ord('/'),ord('.'),ord('/')]
s=""
for i in data:s+=chr(i^ord('A'))
print(s)
#Bagel_Cannon

输入两个weapon code即可得到flag
memecat-flag

[b01lers2020]chugga_chugga

elf文件,无壳,ida分析
main_main函数,读取输入,对输入的内容进行验证

    fmt_Fscan(a1,(__int64)&go_itab__os_File_io_Writer,(__int64)&v43,(__int64)input,v15,v16,(__int64)&go_itab__os_File_io_Reader,os_Stdin);v19 = input[1];input_ = (_BYTE *)*input;if ( v19 <= 2 )break;if ( input_[2] != 116 )                     // input[2]==116goto LABEL_39;if ( v19 <= 9 )break;a2 = (unsigned __int8)input_[9];if ( (_BYTE)a2 != 99 )                      // input[9]==99goto LABEL_39;if ( v19 <= 0x10 )break;a1 = (unsigned __int8)input_[16];if ( (_BYTE)a1 != 110 )                     // input[16]==110goto LABEL_39;if ( v19 <= 0x15 )break;v17 = (unsigned __int8)input_[21];if ( (_BYTE)v17 != 122 )                    // input[21]==122goto LABEL_39;if ( v19 <= 0x16 )break;if ( input_[22] != 125 )                    // input[22]==125goto LABEL_39;v18 = (unsigned __int8)input_[5];if ( 115 != (_BYTE)v18 )                    // input[5]==115goto LABEL_39;if ( (input_[3] ^ 116) != 18 )              // input[3]^116==18goto LABEL_39;v22 = (unsigned __int8)input_[1];if ( (_BYTE)v22 != 99 )                     // input[1]==99goto LABEL_39;a2 = (unsigned __int8)input_[7];if ( (_BYTE)a2 != 100 )                     // input[7]==100goto LABEL_39;v23 = input_[13];if ( input_[12] != v23 )                    // input[12]==input[13]goto LABEL_39;if ( 122 != input_[19] )                    // input[19]==122goto LABEL_39;v17 = (unsigned __int8)input_[14];v24 = (unsigned __int8)input_[6];if ( (_BYTE)v24 + (_BYTE)v17 != 104 )       // input[6]+input[14]==104goto LABEL_39;v25 = input_[4];if ( 123 != v25 )                           // input[4]==123goto LABEL_39;v26 = input_[8];if ( input_[15] != v26 )                    // input[8]==input[15]==95goto LABEL_39;if ( v26 + 4 != (_BYTE)v22 )                // input[8]+4==v22==99,input[8]==95goto LABEL_39;v27 = (unsigned __int8)input_[17];v28 = (unsigned __int8)input_[11];if ( 125 - (_BYTE)v27 + 40 != (_BYTE)v28 )  // input[11]+input[17]==165goto LABEL_39;v29 = (unsigned __int8)input_[18];v30 = v27 + v28 - v18 - v29;v31 = v29 - v27;if ( (_BYTE)v30 != (_BYTE)v31 )             // 2*input[17]+input[11]==2*input[18]+115goto LABEL_39;v32 = input_[6];v33 = v24 - v27;if ( *input_ != (_BYTE)v31 * ((unsigned __int8)v33 >> 1) + 110// input[0]=(input[18]-input[17])*((52-input[17])>>1)+110|| (v34 = input_[10], v23 + 1 != v34)     // input[10]-input[13]==1|| (v35 = v25 - a2, a2 = v33, (_BYTE)v33 + 2 * (_BYTE)v33 + 4 * v35 != v34)// input[10]==3*(52-input[17])+4*23|| (v36 = (unsigned int)(unsigned __int8)input_[20] - v22,v37 = v31,v38 = (unsigned int)(2 * v31),(_BYTE)v36 != (_BYTE)v38)             // input[20]-99==2*(input[18]-input[17])|| (v18 = (unsigned int)a1 ^ (unsigned int)v18, (_BYTE)v18 != 29)|| (_BYTE)v33 != 4 * v37                  // 52-input[17]==4*(input[18]-input[17])|| v32 != (_BYTE)v17 )                    // input[6]==input[14]==52

手算或者z3都可以,解出来即为flag

data=[0]*23
data[2]=116
data[9]=99
data[16]=110
data[21]=122
data[22]=125
data[5]=115
data[3]=116^18
data[1]=99
data[7]=100
data[6]=52
data[14]=52
data[4]=123
data[8]=95
data[15]=95
data[17]=2*165-282
data[11]=282-165
data[18]=(52+3*data[17])//4
data[10]=3*(52-data[17])+4*23
data[13]=data[10]-1
data[12]=data[13]
data[0]=(data[18]-data[17])*((52-data[17])>>1)+110
data[20]=2*(data[18]-data[17])+99
data[19]=122
print(''.join(chr(i) for i in data))
#pctf{s4d_chugg4_n01zez}

[INSHack2018]Tricky-Part1

elf文件,无壳,ida分析
main函数,获取输入,比较输入和经stack_check处理过的v8,相同说明输入正确
TP1-main
进入stack_check函数,对v8的处理为,v8=base,而base[i]^=“GDB”[i%len(“GDB”)]
TP1-stackcheck
对base交叉引用,来到__static_initialization_and_destruction_0,对base赋值,unk_401278已知
TP1-init
写脚本即可得到flag

s="GDB"
base=[0x0E, 0x0A, 0x11, 0x06, 0x3F, 0x01, 0x1F, 0x1C, 0x1D, 0x76,0x37, 0x1D, 0x2F, 0x70, 0x30, 0x23, 0x77, 0x30, 0x18, 0x22,0x72, 0x35, 0x1B, 0x31, 0x33, 0x70, 0x36, 0x76, 0x27, 0x1D,0x73, 0x2A, 0x76, 0x2B, 0x75, 0x31, 0x3E, 0x37, 0x1D, 0x30,0x2C, 0x71, 0x29, 0x1B, 0x26, 0x74, 0x26, 0x37, 0x20, 0x23,0x71, 0x35, 0x1B, 0x24, 0x73, 0x75, 0x2E, 0x34, 0x39]
for i in range(len(base)):base[i]^=ord(s[i%len(s)])
print(''.join(chr(i) for i in base))
#INSA{CXX_1s_h4rd3r_f0r_st4t1c_4n4l1sys_wh3n_d3bugg3r_f41ls}

[watevrCTF 2019]esreveR

elf文件,无壳,ida分析
main函数,获取输入,输入传入sub_55F41EAEE2D8函数进行验证
reverse-main
进入sub_55F41EAEE2D8函数,上面是一些异或运算,input作为最后一个参数传入sub_55F41EAEDBA0函数
reverse-sub_55F41EAEE2D8
reverse-sub_55F41EAEE2D8
进入sub_55F41EAEDBA0函数,直接对input的内容进行验证
reverse-sub_55F41EAEDBA0
调试,取出a1到a56的数据,转成字符串即为flag

data=[0x77,0x61,0x74,0x65,0x76,0x72,0x7b,0x65,0x73,0x72,0x65,0x76,0x65,0x72,0x5f,0x72,0x65,0x76,0x65,0x72,0x73,0x65,0x64,0x5f,0x79,0x6f,0x75,0x74,0x75,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x77,0x61,0x74,0x63,0x68,0x3f,0x76,0x3d,0x49,0x38,0x69,0x6a,0x62,0x34,0x5a,0x65,0x65,0x35,0x45,0x7d]
print(''.join(chr(i) for i in data))
#watevr{esrever_reversed_youtube.com/watch?v=I8ijb4Zee5E}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/438137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#的变迁史04 - C# 4.0 之多线程篇

在.NET 4.0中&#xff0c;并行计算与多线程得到了一定程度的加强&#xff0c;这主要体现在并行对象Parallel&#xff0c;多线程Task&#xff0c;与PLinq。这里对这些相关的特性一起总结一下。 使用Thread方式的线程无疑是比较麻烦的&#xff0c;于是在这个版本中有了改善的版本…

REVERSE-PRACTICE-BUUCTF-29

REVERSE-PRACTICE-BUUCTF-29[FlareOn1]Shellolololol[CFI-CTF 2018]powerPacked[INSHack2018]Tricky-Part2[CFI-CTF 2018]Automated Reversing[FlareOn1]Shellolololol exe程序&#xff0c;直接不能运行&#xff0c;无壳&#xff0c;ida分析 简单F8单步调试发现&#xff0c;在…

C#的变迁史05 - C# 4.0篇

C# 4.0 (.NET 4.0, VS2010) 第四代C#借鉴了动态语言的特性&#xff0c;搞出了动态语言运行时&#xff0c;真的是全面向“高大上”靠齐啊。 1. DLR动态语言运行时 C#作为静态语言&#xff0c;它需要编译以后运行&#xff0c;在编译的过程中&#xff0c;编译器要检查语法的正确性…

REVERSE-PRACTICE-BUUCTF-30

REVERSE-PRACTICE-BUUCTF-30[RCTF2019]DontEatMe[b01lers2020]little_engine[NPUCTF2020]你好sao啊[MRCTF2020]Shit[RCTF2019]DontEatMe exe程序&#xff0c;运行后输入&#xff0c;无壳&#xff0c;用ida分析 交叉引用字符串来到sub_401260函数&#xff0c;读取输入&#xff…

C#的变迁史06 - C# 4.0 之并行处理篇

前面看完了Task对象&#xff0c;这里再看一下另一个息息相关的对象Parallel。 Parallel对象 Parallel对象封装了能够利用多核并行执行的多线程操作&#xff0c;其内部使用Task来分装多线程的任务并试图将它们分配到不同的内核中并行执行。请注意“试图”这个词&#xff0c;Par…

REVERSE-PRACTICE-BUUCTF-31

REVERSE-PRACTICE-BUUCTF-31[羊城杯 2020]login[羊城杯 2020]Bytecode[羊城杯 2020]babyre[ACTF新生赛2020]fungame[羊城杯 2020]login exe程序&#xff0c;运行后输入&#xff0c;无壳&#xff0c;ida分析 没找到主要逻辑&#xff0c;在字符串窗口看到一些“py”的字样&#…

C#的变迁史07 - C# 4.0 之线程安全集合篇

作为多线程和并行计算不得不考虑的问题就是临界资源的访问问题&#xff0c;解决临界资源的访问通常是加锁或者是使用信号量&#xff0c;这个大家应该很熟悉了。 而集合作为一种重要的临界资源&#xff0c;通用性更广&#xff0c;为了让大家更安全的使用它们&#xff0c;微软为我…

PWN-PRACTICE-BUUCTF-1

PWN-PRACTICE-BUUCTF-1test_your_ncripwarmup_csaw_2016ciscn_2019_n_1test_your_nc 附件的main函数直接system("/bin/sh")&#xff0c;nc直接连即可cat flag rip main函数中&#xff0c;gets函数读取一行会造成栈溢出 构造payload覆盖rip&#xff0c;使得return…

C#的变迁史08 - C# 5.0 之并行编程总结篇

C# 5.0 搭载于.NET 4.5和VS2012之上。 同步操作既简单又方便&#xff0c;我们平时都用它。但是对于某些情况&#xff0c;使用同步代码会严重影响程序的可响应性&#xff0c;通常来说就是影响程序性能。这些情况下&#xff0c;我们通常是采用异步编程来完成功能&#xff0c;这在…

REVERSE-PRACTICE-CTFSHOW-1

REVERSE-PRACTICE-CTFSHOW-1逆向签到题re2逆向4逆向5逆向签到题 ida打开即可得到明文flag re2 附件是一个加密过的flag文本和勒索病毒exe 运行程序&#xff0c;输入1&#xff0c;回车&#xff0c;直接退出&#xff0c;ida分析 选项1的逻辑为&#xff0c;打开flag.txt和enfl…

C#的变迁史09 - C# 5.0 之调用信息增强篇

Caller Information CallerInformation是一个简单的新特性&#xff0c;包括三个新引入的Attribute&#xff0c;使用它们可以用来获取方法调用者的信息&#xff0c; 这三个Attribute在System.Runtime.CompilerServices命名空间下&#xff0c;分别叫做CallerMemberNameAttribute&…

REVERSE-PRACTICE-CTFSHOW-2

REVERSE-PRACTICE-CTFSHOW-2re3红包题 武穆遗书数学不及格flag白给re3 main函数&#xff0c;分析可知&#xff0c;将输入的字符串按十六进制转成数字&#xff0c;写到v5&#xff0c;赋给v17[6] 当i等于6时&#xff0c;v16会加上输入的值&#xff0c;然后进入循环&#xff0c;最…

C#的变迁史10 - C# 5.0 之其他增强篇

1. 内置zip压缩与解压   Zip是最为常用的文件压缩格式之一&#xff0c;也被几乎所有操作系统支持。在之前&#xff0c;使用程序去进行zip压缩和解压要靠第三方组件去支持&#xff0c;这一点在.NET4.5中已有所改观&#xff0c;Zip压缩和解压功能已经内置于框架本身。这个功能使…

REVERSE-PRACTICE-CTFSHOW-3

REVERSE-PRACTICE-CTFSHOW-3签退神光签到baby_gay签退 .pyc文件&#xff0c;uncompyle6反编译&#xff0c;得到python源码&#xff0c;分析写在源码注释中 先变表base64&#xff0c;再凯撒加密&#xff0c;向后移动2位 import string c_charset string.ascii_uppercase str…

REVERSE-PRACTICE-CTFSHOW-4

REVERSE-PRACTICE-CTFSHOW-4encodeEasyBJD hamburger competitionJustREencode elf文件&#xff0c;upx脱壳&#xff0c;ida分析 交叉引用字符串"Please input your flag:"&#xff0c;来到sub_804887C函数 输入经过三次变换&#xff0c;先是变表base64&#xff0c;…

CSS 基础框盒模型介绍

当对一个文档进行布局&#xff08;lay out&#xff09;的时候&#xff0c;浏览器的渲染引擎会根据标准之一的 CSS 基础框盒模型&#xff08;CSS basic box model&#xff09;&#xff0c;将所有元素表示为一个个矩形的盒子&#xff08;box&#xff09;。CSS 决定这些盒子的大小…

REVERSE-PRACTICE-CTFSHOW-5

REVERSE-PRACTICE-CTFSHOW-5re2_归心Mud[吃鸡杯]ezmore[吃鸡杯]有手就行re2_归心 exe程序&#xff0c;运行后要求输入flag&#xff0c;ida分析 函数窗没找到主逻辑函数&#xff0c;shiftF12看字符串窗口 发现有java/lang/String&#xff0c;com/exe4j/runtime/WinLauncher等字…

PWN-PRACTICE-BUUCTF-2

PWN-PRACTICE-BUUCTF-2pwn1_sctf_2016jarvisoj_level0ciscn_2019_c_1[第五空间2019 决赛]PWN5pwn1_sctf_2016 main函数中执行vuln函数 fgets限制了输入的长度&#xff0c;不足以构成栈溢出 通过将输入中的字符"I"替换成"you"&#xff0c;增加长度&#xf…

PWN-PRACTICE-BUUCTF-3

PWN-PRACTICE-BUUCTF-3[OGeek2019]babyropciscn_2019_n_8get_started_3dsctf_2016jarvisoj_level2[OGeek2019]babyrop 简单的ret2libc&#xff0c;构造rop main函数中读取一个随机数到buf中&#xff0c;传入sub_804871F 用"\x00"来绕过strlen和strncmp&#xff0c;b…

c#中常用集合类和集合接口之接口系列【转】

常用集合接口系列&#xff1a;http://www.cnblogs.com/fengxiaojiu/p/7997704.html 常用集合类系列&#xff1a;http://www.cnblogs.com/fengxiaojiu/p/7997541.html 大多数集合都在System.Collections&#xff0c;System.Collections.Generic两个命名空间。其中System.Colle…