REVERSE-PRACTICE-BUUCTF-12

REVERSE-PRACTICE-BUUCTF-12

    • [WUSTCTF2020]level3
    • crackMe
    • [FlareOn6]Overlong
    • [WUSTCTF2020]Cr0ssfun

[WUSTCTF2020]level3

elf文件,无壳,ida分析
main函数中,获取输入,对输入做base64编码,提示有错误,在程序中有一个奇怪的字符串,提示和标准base64不同,估计是变表base64
level3-logic
进入base64_encode函数,正常的base64编码逻辑,对base64_table交叉引用,发现在O_OLookAtYou函数中也有对base64_table的引用
level3-base64_encode
进入O_OLookAtYou函数,果然是对base64_table的变换
level3-lookatyou
之前也遇到过变表base64的题目,见REVERSE-PRACTICE-BUUCTF-7
直接拿脚本来用了,执行脚本即可得到flag

#coding:utf-8
#base="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"  原表
base=[0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A,0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54,0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64,0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E,0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,0x79, 0x7A, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,0x38, 0x39, 0x2B, 0x2F]  #原表的ascii码表示,方便进行原表变换
#对原表进行变换
for i in range(0,10):base[i],base[19-i]=base[19-i],base[i]
#base_changed是变表,需要转成字符串的形式
base_changed=''.join(chr(i) for i in base)
print("Current Base:\n%s " %base_changed) #打印base_changed变表
def base64_decode(inputs): #inputs是base64字符串# 将字符串转化为2进制bin_str = []for i in inputs:if i != '=':x = str(bin(base_changed.index(i))).replace('0b', '')bin_str.append('{:0>6}'.format(x))# 输出的字符串outputs = ""nums = inputs.count('=')while bin_str:temp_list = bin_str[:4]temp_str = "".join(temp_list)# 补足8位字节if (len(temp_str) % 8 != 0):temp_str = temp_str[0:-1 * nums * 2]# 将四个6字节的二进制转换为三个字符for i in range(0, int(len(temp_str) / 8)):outputs += chr(int(temp_str[i * 8:(i + 1) * 8], 2))bin_str = bin_str[4:]print("Decoded String:\n%s " % outputs)
#enc是经变表base64编码的字符串
enc="d2G0ZjLwHjS7DmOzZAY0X2lzX3CoZV9zdNOydO9vZl9yZXZlcnGlfD=="
base64_decode(enc)

运行结果
level3-flag

crackMe

exe程序,运行后输入用户名welcomebeijing和密码,输入错误要重新输入,无壳,ida分析
在wmain函数中,获取输入的user和password并检验长度且均为数字或字母,在sub_401090函数中,由输入的user(welcomebeijing)生成了一个固定的table,这个table在下面的check函数中也有引用
sub_4011A0函数是个传入的两个参数赋值,第一个参数赋为"Congratulations",第二个参数赋为"please try again",由check函数的返回结果决定输出
crackme-logic
进入check函数
先看第一个while循环体,在该循环体中,v15被赋值,而且v15在下一个循环体中有引用,经调试可知,该循环体实际是将pwd的内容两两分组,每两个字符组成一个十六进制数放入v15中,例如,输入的pwd为0123456789abcdef,v15的元素为0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF
crackme-check
接着看第二个循环体,v15实际就是输入的pwd,要和table的元素异或,存入v17,而table的元素由v8和v13决定,v8和v13又由v11和v12决定,可以看到,在异或运算的上下,有两条判断当前是否处于调试状态的if语句,如果是调试状态,则会修改v13,v11,v12的值,也就是说,有两个地方存在反调试,但我们并不知道进行异或运算的table的元素到底是什么,由之前的分析可知,table的全部元素是由输入的user确定的,于是可以通过调试获知进行异或运算的table的元素,因此需要把反调试的两条语句nop掉或修改跳转逻辑,使在调试状态下,不执行if成立的语句
crackme-check1
下图为修改跳转逻辑,将.text:00CA1AE8和.text:00CA1B5E两处指令的jz改成jnz,就实现了调试状态下,不执行if成立的语句,注意修改跳转逻辑后要应用到可执行程序exe
crackme-alterlogic
下图为修改跳转逻辑后的效果,再往下走,sub_CA1710函数是对v17和user(welcomebeijing)进行异或,while循环体结束后,sub_CA1470函数是对v17的验证,v17在经过一系列运算后的结果应为"dbappsec",长度为8
crackme-alterlogiceffect
写脚本前需要先通过调试得到与v15进行异或运算的8个table的元素,为[0x2a,0xd7,0x92,0xe9,0x53,0xe2,0xc4,0xcd],写脚本,提交第二个md5值成功
crackme-script

[FlareOn6]Overlong

exe程序,运行后提示说没有破坏编码,冒号后面没有内容,无壳,ida分析
start函数,unk_402008作为参数传入了sub_401160函数参与运算,运算长度为第三个参数28,运算结果放入Text中,最后通过MessageBoxA将Text的内容输出
overlong-logic
sub_401160函数以及sub_401000函数是程序写好的运算逻辑,由提示可知运算逻辑不会变,加上overlong的提示,应该是让参与运算的元素更多,即sub_401160函数的第三个参数更大,让程序运算输出flag
当修改参与运算长度28为72时,应用到程序并运行,得到flag
overlong-flag

[WUSTCTF2020]Cr0ssfun

elf文件,无壳,ida分析
main函数逻辑清晰,获取输入,调用check检验输入,check返回1时说明输入正确
crossfun-main
进入check函数,是对输入input内容的直接判断,其余的函数同理
crossfun-check
写脚本即可得到flag
crossfun-script

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

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

相关文章

Axure RP使用基础教程

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

REVERSE-PRACTICE-BUUCTF-13

REVERSE-PRACTICE-BUUCTF-13firmware[ACTF新生赛2020]Oruga[Zer0pts2020]easy strcmp[GXYCTF2019]simple CPPfirmware .bin(二进制)文件,由题目提示知是路由器固件逆向 参考:逆向路由器固件之解包 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程序,运行后提示输入密码,输入错误退出程序,无壳,ida分析 main函数逻辑清晰&…

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_…