REVERSE-PRACTICE-BUUCTF-10

REVERSE-PRACTICE-BUUCTF-10

    • [GWCTF 2019]xxor
    • [HDCTF2019]Maze
    • [WUSTCTF2020]level2
    • [BJDCTF2020]BJD hamburger competition

[GWCTF 2019]xxor

elf文件,无壳,用ida分析
main函数的逻辑清晰,首先获取输入,为6个int64的值,然后每2个值一组,调用sub_400686函数进行变换,变换后的值存储到v11,最后验证v11,验证输入
xxor-logic
sub_400686函数,读取每组的2个值,进行64次循环运算,变换后的值放回原位置
xxor-sub_400686
check函数,可以由此得到输入经变换后需要变成的6个值
xxor-check
写逆脚本,v11的6个值可以手动计算或者使用python的z3库计算
v5类型为int32,初始值为0,64次加法必定超出了int32的最大正值,不过计算过程中会自动截取,于是不必特别考虑v5,正常写脚本即可

#include<stdio.h>
__int64 v11[] = { 0xdf48ef7e,0x20caacf4,0xe0f30fd5,0x5c50d8d6,0x9e1bde2d,0x84f30420 };
__int64 a2[] = { 2,2,3,4 };
void main()
{for (int i = 0; i <= 4; i += 2){unsigned int v3 = v11[i];unsigned int v4 = v11[i + 1];int v5 = 0;for (int j = 0; j <= 63; j++)v5 += 1166789954;for (int j = 0; j <= 63; j++){v4-= (v3 + v5 + 20) ^ ((v3 << 6) + a2[2]) ^ ((v3 >> 9) + a2[3]) ^ 0x10;v3-= (v4 + v5 + 11) ^ ((v4 << 6) + a2[0]) ^ ((v4 >> 9) + a2[1]) ^ 0x20;v5 -= 1166789954;}if (v5 == 0){v11[i] = v3;v11[i + 1] = v4;}}for (int i = 0; i < 6; i++){printf("%ld,", v11[i]);}
}

运行结果
xxor-script
再用python的long_to_bytes转成字符串
xxor-flag

[HDCTF2019]Maze

exe程序,运行后提示通过迷宫获得flag,有upx壳,脱壳后ida分析
main函数没有被ida识别为函数,原因是代码中添有花指令
jnz跳转到下一条指令,不跳转也是下一条指令,这里jnz阻碍了ida的识别,需要把jnz的整条指令nop掉
.text:0040102E处,call了一段红色地址,说明该红色地址并不存在于程序中,应该是在正确指令字节基础上添加了几个字节,变得不能被ida识别,于是需要去除多余的字节,选中红色地址,按d转换为数据,依次nop掉一些字节,看nop掉字节后ida是否能够识别成代码,发现转为数据后,nop掉第一个字节,ida就可以识别了
maze-fakeorder
去除花指令的效果
maze-removefakeorder
选中从main函数开始到结束retn指令之间的红色.text代码,按p生成函数,F5反编译
分析main函数,wsad分别对应上下左右,初始位置为[7,0],结束位置为[5,-4]
maze-main
在字符串窗口找到迷宫地图,长度为70,猜测为10x7或者7x10,由初始位置和结束位置可知,地图为7x10,即7行10列,起始点在“+”,终止点在“F”,走完迷宫即可得到flag
maze-flag

[WUSTCTF2020]level2

elf文件,有upx壳,脱壳后ida分析
左侧函数窗口找到main函数,在IDA View-A窗口即可看到flag
level2-flag

[BJDCTF2020]BJD hamburger competition

unity游戏,老八秘制小汉堡,按正确的顺序加料即可得到flag
BJD hamburger competition_Data->Managed->Assembly-CSharp.dll拖入dnSpy
找到主逻辑的部分
Md5方法对传入的参数进行md5散列,大写,取前20位
Sha1方法对传入的参数进行sha1散列,大写
Spawn方法对加料的顺序进行验证,选择不同的配料对Init.secret(初始值为0)进行不同的运算,运算的结果进行sha1散列与已知值比较,相同时程序对运算的结果进行md5散列并输出为flag

using System;
using System.Security.Cryptography;
using System.Text;
using UnityEngine;// Token: 0x02000004 RID: 4
public class ButtonSpawnFruit : MonoBehaviour
{// Token: 0x0600000A RID: 10 RVA: 0x00002110 File Offset: 0x00000310public static string Md5(string str){byte[] bytes = Encoding.UTF8.GetBytes(str);byte[] array = MD5.Create().ComputeHash(bytes);StringBuilder stringBuilder = new StringBuilder();foreach (byte b in array){stringBuilder.Append(b.ToString("X2"));}return stringBuilder.ToString().Substring(0, 20);}// Token: 0x0600000B RID: 11 RVA: 0x00002170 File Offset: 0x00000370public static string Sha1(string str){byte[] bytes = Encoding.UTF8.GetBytes(str);byte[] array = SHA1.Create().ComputeHash(bytes);StringBuilder stringBuilder = new StringBuilder();foreach (byte b in array){stringBuilder.Append(b.ToString("X2"));}return stringBuilder.ToString();}// Token: 0x0600000C RID: 12 RVA: 0x000021C8 File Offset: 0x000003C8public void Spawn(){FruitSpawner component = GameObject.FindWithTag("GameController").GetComponent<FruitSpawner>();if (component){if (this.audioSources.Length != 0){this.audioSources[Random.Range(0, this.audioSources.Length)].Play();}component.Spawn(this.toSpawn);string name = this.toSpawn.name;if (name == "汉堡底" && Init.spawnCount == 0){Init.secret += 997;}else if (name == "鸭屁股"){Init.secret -= 127;}else if (name == "胡罗贝"){Init.secret *= 3;}else if (name == "臭豆腐"){Init.secret ^= 18;}else if (name == "俘虏"){Init.secret += 29;}else if (name == "白拆"){Init.secret -= 47;}else if (name == "美汁汁"){Init.secret *= 5;}else if (name == "柠檬"){Init.secret ^= 87;}else if (name == "汉堡顶" && Init.spawnCount == 5){Init.secret ^= 127;string str = Init.secret.ToString();if (ButtonSpawnFruit.Sha1(str) == "DD01903921EA24941C26A48F2CEC24E0BB0E8CC7"){this.result = "BJDCTF{" + ButtonSpawnFruit.Md5(str) + "}";Debug.Log(this.result);}}Init.spawnCount++;Debug.Log(Init.secret);Debug.Log(Init.spawnCount);}}// Token: 0x04000005 RID: 5public GameObject toSpawn;// Token: 0x04000006 RID: 6public int spawnCount = 1;// Token: 0x04000007 RID: 7public AudioSource[] audioSources;// Token: 0x04000008 RID: 8public string result = "";
}

使用在线网站可以解出已知sha1的原始值,为1001
bjd-desha1
再对1001进行md5,转成大写,取前20位,即可得到flag
bjd-flag
如果不使用在线网站解sha1和md5散列,写爆破脚本

#coding:utf-8
#汉堡底 +=997
#汉堡顶 ^=127
#鸭屁股 -=127  0
#胡罗贝 *=3    1
#臭豆腐 ^=18   2
#俘虏   +=29   3
#白拆   -=47   4
#美汁汁  *=5   5
#柠檬   ^=87   6
import hashlib
#从其他7种材料中选4种 加上汉堡底和汉堡顶 一共6种
for i in range(7):for j in range(7):for k in range(7):for m in range(7):secret=997    #汉堡底当作第一种材料if i==0:secret-=127elif i==1:secret*=3elif i==2:secret^=18elif i==3:secret+=29elif i==4:secret-=47elif i==5:secret*=5elif i==6:secret^=87if j==0:secret-=127elif j==1:secret*=3elif j==2:secret^=18elif j==3:secret+=29elif j==4:secret-=47elif j==5:secret*=5elif j==6:secret^=87if k==0:secret-=127elif k==1:secret*=3elif k==2:secret^=18elif k==3:secret+=29elif k==4:secret-=47elif k==5:secret*=5elif k==6:secret^=87if m == 0:secret -= 127elif m == 1:secret *= 3elif m == 2:secret ^= 18elif m == 3:secret += 29elif m == 4:secret -= 47elif m == 5:secret *= 5elif m == 6:secret ^= 87secret^=127   #最后加汉堡顶的时候,材料的种数还没有加到6h = hashlib.sha1()h.update(str(secret).encode(encoding='utf-8'))#验证sha1散列if h.hexdigest() == "DD01903921EA24941C26A48F2CEC24E0BB0E8CC7".lower():print(secret)#输出md5散列h2 = hashlib.md5()h2.update(str(secret).encode(encoding='utf-8'))print(h2.hexdigest().upper()[0:20])

运行结果
bjd-flag

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

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

相关文章

Axure教程 axure新手入门基础(1)

axure新手入门基础(1) 名词解释&#xff1a; 线框图&#xff1a;一般就是指产品原型&#xff0c;比如&#xff1a;把线框图尽快画出来和把原型尽快做出来是一个意思。 axure元件&#xff1a;也叫axure组件或axure部件&#xff0c;系统自带了一部分最基础常用的&#xff0c;网上…

REVERSE-PRACTICE-BUUCTF-11

REVERSE-PRACTICE-BUUCTF-11[FlareOn4]IgniteMe[MRCTF2020]Xor[GKCTF2020]BabyDriver[MRCTF2020]hello_world_go[FlareOn4]IgniteMe exe程序&#xff0c;运行后提示输入flag&#xff0c;无壳&#xff0c;ida分析 主逻辑在start函数中&#xff0c;读取输入后check&#xff0c;验…

Axure教程 axure新手入门基础(2) 简单易上手

https://www.duote.com/tech/35/102713.html (二)Axure rp的线框图元件 l 图片 图片元件拖入编辑区后&#xff0c;可以通过双击选择本地磁盘中的图片&#xff0c;将图片载入到编辑区&#xff0c;axure会自动提示将大图片进行优化&#xff0c;以避免原型文件过大;选择图片时可以…

REVERSE-PRACTICE-BUUCTF-12

REVERSE-PRACTICE-BUUCTF-12[WUSTCTF2020]level3crackMe[FlareOn6]Overlong[WUSTCTF2020]Cr0ssfun[WUSTCTF2020]level3 elf文件&#xff0c;无壳&#xff0c;ida分析 main函数中&#xff0c;获取输入&#xff0c;对输入做base64编码&#xff0c;提示有错误&#xff0c;在程序中…

Axure RP使用基础教程

一、Axure界面介绍 1、页面导航面板&#xff08;Pages&#xff09; Axure的页面管理采用类似操作系统的文件夹和页面文件的管理方式&#xff0c;不同点是&#xff0c;页面文件可以存在子页面&#xff0c;这一点是考虑了页面与页面跳转或者嵌套页面等网页特点。 页面文件管理导…

REVERSE-PRACTICE-BUUCTF-13

REVERSE-PRACTICE-BUUCTF-13firmware[ACTF新生赛2020]Oruga[Zer0pts2020]easy strcmp[GXYCTF2019]simple CPPfirmware .bin&#xff08;二进制&#xff09;文件&#xff0c;由题目提示知是路由器固件逆向 参考&#xff1a;逆向路由器固件之解包 Part1 linux安装好binwalk和fir…

REVERSE-PRACTICE-BUUCTF-14

REVERSE-PRACTICE-BUUCTF-14[FlareOn3]Challenge1[GUET-CTF2019]number_game[GWCTF 2019]re3[网鼎杯 2020 青龙组]singal[FlareOn3]Challenge1 exe程序&#xff0c;运行后提示输入密码&#xff0c;输入错误退出程序&#xff0c;无壳&#xff0c;ida分析 main函数逻辑清晰&…

REVERSE-PRACTICE-BUUCTF-15

REVERSE-PRACTICE-BUUCTF-15[2019红帽杯]xx[ACTF新生赛2020]Universe_final_answer[WUSTCTF2020]level4findKey[2019红帽杯]xx exe程序&#xff0c;运行后直接输入&#xff0c;无壳&#xff0c;ida分析 交叉引用字符串“You win&#xff01;”来到sub_1400011A0函数 主要的逻辑…

【三层架构】——COM/DCOM初识

背景&#xff1a; 在学习三层架构的时候&#xff0c;知道三层分为UI层&#xff08;表现层&#xff09;、BLL层&#xff08;业务逻辑层&#xff09;、DAL层&#xff08;数据访问层&#xff09;&#xff0c;相对于传统的二层架构&#xff08;客户端和数据库&#xff09;来说&…

REVERSE-PRACTICE-BUUCTF-16

REVERSE-PRACTICE-BUUCTF-16[UTCTF2020]basic-reequation[安洵杯 2019]crackMe[FlareOn5]Minesweeper Championship Registration[UTCTF2020]basic-re elf文件&#xff0c;无壳&#xff0c;用ida分析 main函数就是简单的加减乘除运算 shiftF12&#xff0c;在字符串窗口看到fla…

IPC之命名管道

1.管道是通过IO接口存取得字节流&#xff0c; windows中利用得是ReadFile()和WriteFile(),windows利用单一句柄支持双向IO,命名管道也称做FIFO(first in first out) 命名管道得机制&#xff1a;一个进程把数据放到管道里&#xff0c;另一个知道管道名字得进程把数据把取走&…

REVERSE-PRACTICE-BUUCTF-17

REVERSE-PRACTICE-BUUCTF-17[网鼎杯 2020 青龙组]jocker[2019红帽杯]childRE[MRCTF2020]PixelShooter[ACTF新生赛2020]SoulLike[网鼎杯 2020 青龙组]jocker exe程序&#xff0c;运行后提示输入flag&#xff0c;无壳&#xff0c;用ida分析 main函数平衡栈后&#xff0c;F5反汇编…

Excluding Files From Team Foundation Version Control Using .tfignore Files

At one point I was coding on a hobby project, using Visual Studio Online for project management and source control. Because of the technologies involved, a large number of temporary files were being generated that I didn’t want checked in. Visual Studio’…

REVERSE-PRACTICE-BUUCTF-18

REVERSE-PRACTICE-BUUCTF-18[SWPU2019]ReverseMe[FlareOn1]Bob Doge[FlareOn5]Ultimate Minesweeper[GKCTF2020]Chellys identity[SWPU2019]ReverseMe exe程序&#xff0c;运行后提示输入flag&#xff0c;输入错误打印“Try again”&#xff0c;无壳&#xff0c;ida分析 交叉引…

VS2008中Web Reference和Service Reference的区别

很早就发现在vs2008中应用web service有两种方式&#xff0c;即Add Web Reference和Add Service Reference&#xff0c;但是一直不是很清楚这两者有什么区别。趁着今天有空实验一下这两者的区别并记录下来供大家参考。 首先在网上查找&#xff0c;发现有如下两个主要区别&#…

REVERSE-PRACTICE-BUUCTF-19

REVERSE-PRACTICE-BUUCTF-19[RoarCTF2019]polyre[安洵杯 2019]game[SCTF2019]Strange apk[CFI-CTF 2018]IntroToPE[RoarCTF2019]polyre elf文件&#xff0c;无壳&#xff0c;用ida分析 main函数的结构&#xff0c;多重循环&#xff0c;是控制流平坦化&#xff0c;参考&#xf…

REVERSE-PRACTICE-BUUCTF-20

REVERSE-PRACTICE-BUUCTF-20[SCTF2019]creakme[网鼎杯 2020 青龙组]bang[WUSTCTF2020]funnyreDig the way[SCTF2019]creakme exe程序&#xff0c;运行后提示输入ticket&#xff0c;无壳&#xff0c;用ida分析 交叉引用字符串“please input your ticket:”来到sub_402540函数 …

Web Reference和Service Reference的区别

今天因为项目需要使用服务引用&#xff0c;就按之前的经验添加上了&#xff0c;步骤如下&#xff1a; 项目根目录——引用——右键——添加服务引用——高级——添加Web引用——输入接口的URL地址——回车&#xff08;下方出现的就是接口的定义的方法&#xff09;——修改Web引…

REVERSE-PRACTICE-BUUCTF-21

REVERSE-PRACTICE-BUUCTF-21[SCTF2019]babyre[MRCTF2020]EasyCpp[GUET-CTF2019]encrypt[QCTF2018]Xman-babymips[SCTF2019]babyre elf文件&#xff0c;无壳&#xff0c;用ida分析 在start函数中看到main函数的字样&#xff0c;但是左侧函数窗没有找到main函数 原因是main函数中…

原型设计工具——“墨刀”的介绍与基本教程

一、产品介绍 &#xff08;1&#xff09;产品简介&#xff1a; 墨刀是一款在线原型设计与协同工具&#xff0c;借助墨刀&#xff0c;产品经理、设计师、开发、销售、运营及创业者等用户群体&#xff0c;能够搭建为产品原型&#xff0c;演示项目效果。 &#xff08;2&#xf…