REVERSE-PRACTICE-BUUCTF-14

REVERSE-PRACTICE-BUUCTF-14

    • [FlareOn3]Challenge1
    • [GUET-CTF2019]number_game
    • [GWCTF 2019]re3
    • [网鼎杯 2020 青龙组]singal

[FlareOn3]Challenge1

exe程序,运行后提示输入密码,输入错误退出程序,无壳,ida分析
main函数逻辑清晰,读取输入,对输入进行变表base64编码,验证编码结果
challenge1-logic
之前遇到过变表base64的题目,见REVERSE-PRACTICE-BUUCTF-7或REVERSE-PRACTICE-BUUCTF-10或base64原理及其编解码的python实现
这道题用一个工具,加密解密小玩具,来解,非常方便
challenge1-flag

[GUET-CTF2019]number_game

elf文件,无壳,ida分析
main函数,获取输入,检验输入长度是否为10且均为0~4的数字,先后经过先序遍历和中序遍历改变输入中各个字符的位置,再顺序地放入数独“#”位置,最后检验数独
numbergame-logic
sub_400758函数和sub_400807函数先后经过先序遍历和中序遍历改变输入中各个字符的位置,本人一直想不通,于是动调,当输入为0123456789时,sub_400807函数调用结束后的v7为7381940526,于是可以知道输入中字符位置变换的规律
变换前的下标:0 1 2 3 4 5 6 7 8 9
变换后的下标:7 3 8 1 9 4 0 5 2 6
再解数独,在sub_400917函数中可知为5x5的数独
numbergame-sudoku
写代码换成正确的位置即可得到flag
numbergame-script
由于输入长度只有10位,且均为0~4的数字,也可以写脚本爆破得到flag

[GWCTF 2019]re3

elf文件,无壳,ida分析
main函数,读取输入,检验输入长度是否为32,有一段SMC,自修改代码
re3-logic
ida静态分析,先写idapython脚本完成smc
smc执行前,地址0x402219处是一大段数据
re3-smc
smc的idapython脚本

from idaapi import *
from idautils import *
start_addr = 0x402219
key = 0x99
for i in range(start_addr,start_addr+224):PatchByte(i,Byte(i)^key)

smc执行完成后,按c转换成代码
res3-smc
在地址0x402219处右键->Edit function,将函数结束地址修改为retn指令所在地址,完成后F5反汇编
用插件Findcrypt发现sub_402219是对输入的AES加密,密钥为unk_603170,密文为res
re3-sub_402219
远程调试elf,得到密钥unk_603170
re3-unk_603170
写AES解密脚本即可得到flag
re3-script

[网鼎杯 2020 青龙组]singal

exe程序,运行后提示输入string,无壳,ida分析
main函数,分析可知是vm的题目,dword_403040中的数据作为opcode传入vm_operad函数中
signal-logic
进入vm_operad函数,分析可知
opcode为10时,读取输入,长度为15
opcode为1时,v4被赋值
opcode为7时,v4和下一个opcode比较,于是7后面的opcode为密文
其余的opcode为input的相关运算

int __cdecl vm_operad(int *opcode, int a2)
{int result; // eaxchar input[100]; // [esp+13h] [ebp-E5h]char v4[100]; // [esp+77h] [ebp-81h]char v5; // [esp+DBh] [ebp-1Dh]int v6; // [esp+DCh] [ebp-1Ch]int v7; // [esp+E0h] [ebp-18h]int v8; // [esp+E4h] [ebp-14h]int v9; // [esp+E8h] [ebp-10h]int opcode_index; // [esp+ECh] [ebp-Ch]opcode_index = 0;v9 = 0;v8 = 0;v7 = 0;v6 = 0;while ( 1 ){result = opcode_index;if ( opcode_index >= a2 )return result;switch ( opcode[opcode_index] ){case 1:                                   // 每当opcode为1时,v4被赋值v4[v7] = v5;++opcode_index;++v7;++v9;break;case 2:                                   // 每当opcode为2时,v5被赋值为下一个opcode与input的和v5 = opcode[opcode_index + 1] + input[v9];// 由于运算使用了下一个opcode,所以opcode_index加2opcode_index += 2;break;case 3:v5 = input[v9] - LOBYTE(opcode[opcode_index + 1]);// 每当opcode为3时,v5被赋值为input与下一个opcode的差opcode_index += 2;                      // 由于运算使用了下一个opcode,所以opcode_index加2break;case 4:v5 = opcode[opcode_index + 1] ^ input[v9];// 每当opcode为4时,v5被赋值为input与下一个opcode异或的值opcode_index += 2;                      // 由于运算使用了下一个opcode,所以opcode_index加2break;case 5:v5 = opcode[opcode_index + 1] * input[v9];// 每当opcode为5时,v5被赋值为input与下一个opcode乘积的值opcode_index += 2;                      // 由于运算使用了下一个opcode,所以opcode_index加2break;case 6:                                   // 每当opcode为6时,跳到下一个opcode++opcode_index;break;case 7:                                   // 每当opcode为7时,验证v4和下一个opcode是否相等,意味着opcode等于7的下一个opcode为密文if ( v4[v8] != opcode[opcode_index + 1] ){printf("what a shame...");exit(0);}++v8;opcode_index += 2;                      // 由于验证使用了下一个opcode,所以opcode_index加2break;case 8:                                   // 每当opcode为8时,input的值修改input[v6] = v5;++opcode_index;++v6;break;case 10:                                  // opcode的第一个值为10,所以先读取输入,长度为15read(input);++opcode_index;break;case 11:                                  // 每当opcode为11时,v5被赋值为input与数字1的差v5 = input[v9] - 1;++opcode_index;break;case 12:                                  // 每当opcode为12时,v5被赋值为input与数字1的和v5 = input[v9] + 1;++opcode_index;break;default:continue;}}
}

提取出114个opcode,手动进行分类,并按照操作码得到input[0~14]的变换过程
signal-inputfunc
写逆运算脚本即可得到flag
signal-script
此题目也可以用angr一把梭

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

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

相关文章

REVERSE-PRACTICE-BUUCTF-15

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

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

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

REVERSE-PRACTICE-BUUCTF-16

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

IPC之命名管道

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

REVERSE-PRACTICE-BUUCTF-17

REVERSE-PRACTICE-BUUCTF-17[网鼎杯 2020 青龙组]jocker[2019红帽杯]childRE[MRCTF2020]PixelShooter[ACTF新生赛2020]SoulLike[网鼎杯 2020 青龙组]jocker exe程序,运行后提示输入flag,无壳,用ida分析 main函数平衡栈后,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程序,运行后提示输入flag,输入错误打印“Try again”,无壳,ida分析 交叉引…

VS2008中Web Reference和Service Reference的区别

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

REVERSE-PRACTICE-BUUCTF-19

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

REVERSE-PRACTICE-BUUCTF-20

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

Web Reference和Service Reference的区别

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

REVERSE-PRACTICE-BUUCTF-21

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

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

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

MockPlus原型设计介绍

在第八周的课堂上,王文娟老师在校园系统上发布了对于自行选择的原型设计软件进行资料查找以及自学的任务。因为之前的课程学习需要,我们已经大概掌握了原型设计软件Axure的使用,因此在这里,我选择了另一原型设计进行介绍&#xff…

REVERSE-PRACTICE-BUUCTF-22

REVERSE-PRACTICE-BUUCTF-22[SCTF2019]Who is he[FlareOn2]very_success[NPUCTF2020]Baby Obfuscation[HDCTF2019]MFC[SCTF2019]Who is he unity游戏,运行后输入,点击按钮检验输入 dnSpy打开Who is he\Who is he_Data\Managed\Assembly-CSharp.dll 在Te…

浅谈常见的NoSQL技术方案和选型

前言 在互联网和大数据的背景下,越来越多的网站、应用系统需要支撑 海量数据存储、高并发请求、高可用、高可扩展性 等特性要求。传统的 关系型数据库 已经难以应对类似的需求,各种各样的 NoSQL(Not Only SQL)数据库因此而产生。…

REVERSE-PRACTICE-BUUCTF-23

REVERSE-PRACTICE-BUUCTF-23[2019红帽杯]Snake[BSidesSF2019]blink[De1CTF2019]Re_Sign[ACTF新生赛2020]Splendid_MineCraft[2019红帽杯]Snake unity游戏,dnSpy打开Snake\Snake_Data\Managed\Assembly-CSharp.dll 发现要载入Interface这个dll ida打开Snake\Snake_…

REVERSE-PRACTICE-BUUCTF-24

REVERSE-PRACTICE-BUUCTF-24[watevrCTF 2019]Timeout[SUCTF2019]hardcpp[CISCN2018]2ex[UTCTF2020]babymips[watevrCTF 2019]Timeout elf文件,无壳,ida分析 main函数中signal,alarm,delay三个函数配合使用是为了反调试 交叉引用…

REVERSE-PRACTICE-BUUCTF-25

REVERSE-PRACTICE-BUUCTF-25特殊的 BASE64[FlareOn1]Javascrap[WMCTF2020]easy_re[NPUCTF2020]BasicASM特殊的 BASE64 exe程序,运行后输入,无壳,ida分析 main函数,读取输入,进行变表base64编码,与rightFla…

REVERSE-PRACTICE-BUUCTF-26

REVERSE-PRACTICE-BUUCTF-26[FlareOn6]FlareBear[SUCTF2018]babyre[GKCTF2020]WannaReverse[FlareOn4]greek_to_me[FlareOn6]FlareBear apk文件,模拟器上运行,创建一个小熊,有三种方式交互,分别为“吃饭”,“篮球”以…