杭电CTF 练习题RE WP
密码
1. BAABAABBAAAAAAAABABBABABBBAABABAABBABBBAABBABAABAA
提示:答案是十个字母
直接培根密码解密
RE
1. Beat our dice game and get the flag
拖进IDA太乱了,但可以找到关键字符串,拖进OD查看
显然最后要达成的就是31337然后获得flag,规则是掷色子,试试看能不能爆破
一路单步执行最终调试到这里,显然是有个rand模块的
继续往下就看到cmp语句的比较然后跳转,试着nop掉,依次类推
最后全部改完就可以拿到flag了
2. 从所给文件中找flag
下载下来的文件无文件尾,去linux里用file命令查看文件尾,最后知道其文件尾为.tar.xz,改名后解压出来了六个文件
重复上一个步骤
乍一看,感觉只有文件1有用,拖到IDA用字符串定位一波
看上去就像是第一题64位文件
直接试着用gdb同样来爆破试试看,设断点,我刚开始多断了一个,不要在意这些细节,如下
这里也就展示一下要修改哪些,我自己是在IDA改的,其次里面这个程序有个防作弊系统,我们也要直接jmp掉
改完之后发现文件在linux底下运行不起来,说什么文件被截断了
然后我队友说解压出来只有一个文件,我就自闭了……然后用它的附件试一下同样的方法
我改IDA失败后运行失败了,只能用gdb一步步来了……世界在第一次判断的时候跳转到最终目标就好了,结果如下
3. 找flag
打开压缩包是个exe,还行
getflag被灰化了
用resource_hacker查看,起初我想的是直接将这个界面跳过去看下一个界面,但是用OD打开后发现在messageboxA函数,然后看到了flag,23333…………
其实直接搜索比较字符串的模块就可以定位到了,开始解密,提示是md5,但其实吧当中的符号删掉就好了,233
试着去掉灰化,但我没找到menuitem之类的函数,经过推荐,知道了一个东西叫spy++,可以获取句柄属性,然后在VS里用spy代码进行发送鼠标按下的操作即可
#include <Windows.h>int main()
{Sleep(2000);SendMessage(HWND(0x00090DD6), WM_LBUTTONDOWN, 0, 0);//按下鼠标左键SendMessage(HWND(0x00090DD6), WM_LBUTTONUP, 0, 0);//松开鼠标左键return 0;
}
运行代码之后相当于模拟了一次鼠标点击,即得flag
4. 找flag,么么哒
解压完是一个exe,大概就是如下图所示
直接搜索字符串就有了…………
按照第三题的做法试了一遍,发现不对
应该漏了什么,在文件里搜索字符串很容易可以发现密码,看看之后对密码以及flag有什么操作
拖进IDA,我们可以看到输出flag之前还有一个函数,我们跟踪进去发现是对flag函数的一个修改,所以我们看到的flag是假的……
进去之后我们发现就是个异或操作
脚本走一波(开头那个什么md5的是要留着的,别改)
s='065ca>01??ab7e0f4>>a701c>cd17340'
key='NSCTF_md5'
flag=''
for i in s:flag+=chr(ord(i)^7)print(key+flag)#NSCTF_md5712df97688fe0b7a399f076d9dc60437
5. During my time at KGB I learned how to hide all the stuff from alpha-dog. But damn it, I somehow lost some of the most important files…
反正就是有东西丢了
这题还是没有文件尾,我先用winhex打开,发先里面有一段英文故事
这感觉都不是逆向题目,有点像传说中的取证题,在一大堆故事内容中放一个文件,但是这里应该是不小心删除掉了,我们要恢复过来
我们binwalk分解一下,如下
ext文件就是那些故事内容,我们可以看见一个压缩包
没有密码,不挣扎了,反正如果题目没骗我,重要的文件已经丢了,而且解压出来的文件应该就是我们可以看见的secret,打开secret看见的也只是乱码
我们试着恢复文件
执行extundelete --restore-all secretArchive.6303dd5dbddb15ca9c4307d0291f77f4
发现一个文件夹,里面有超多文件,但好像就是小说……但有一个文件很特殊,可以移到windows里排个序看很明显,如下
查看该文件类型,发现是一个使用KGB Archiver 软件进行了3级压缩的文件,如下
下载这个软件进行压缩就好了
6. 用浏览器控制台求解很方便!!!
下载下来一个exe
这个提示我起始不是特别明白,然后逐渐单步执行再配合字符串,定位到了4010C6
继续慢慢往下调,单步到判断判断输入密码是否正确的附近,可以发现关键代码,用来判断输入的密码是否正确
其中eax存放的是我们输入的值,而ecx里存放的是正确的密码(变形前还是变形后的不清楚,call进之后的函数去看看)
进去之后第一快区域基本就是判断输入的是不是这个值
正确的密码可以在动态运行的时候直接找到的,参照IDA中运行脚本也是可以的,代码如下)
s='(*GHDfhboqiwuef892q37xcv;lkjhqasdlkfj;lkcjv;lLKHasdfklnLKjh;laskdfhnIO*&YOIUHNlkidfhv8079hlkjBOIUT6tf23p04-09ujlv;kn098YIUhrlk4rn[p9udvlkm1p9yh8UGkjhpIHRPON*&^RFCLKJNPOIUEWDIUH3o4ifgoivc3o98749&*foijzxbcv*&*&t3214asdvzxcCLIKKH98duyfi2wjnepfoicpikvpoisudf-908u34rsd;ldfknv;ldksfhv098y9uihn048yfpOIUH)(8fh423kj5thngoxfchvjknh0(*Yopiernt09u82hgkjdfncv098Ypfoin234pfuih9ewuihnrfgKLJSAOIpeuyh4unfg;fkvb09843hkjvnpI*YOIEnrp2o3ijf9ijxdcpLIHJ-98fy23knfposdiuv-39jefoik1hrf89ujfdvmkpIud1ije-f92LOIXJHC(Inempwqkfnp9234uf-0eikf1p3io4fj-9fov;lkwqnfdpviJOSDjfp2oi3rjf-09dfjv;lk13mfij-13094fuqwkl1p[3409rocfmv'
#print(len(s))
key='(3q^;^3lfjq&D7V4Hhd'
key_new=[]
s_new=[]
for i in key:key_new.append(i)
#print(key_new)
for i in s:s_new.append(i)
#print(s_new)
for i in range(19):key_new[i]=s[47*i%99]print(key)#(3q^;^3lfjq&D7V4Hhd
我们输入正确的密码(3q^;^3lfjq&D7V4Hhd后,继续执行到另一端好像还有别的操作,不然的话直接跳转到正确语句块应该就好了,如下
进去时候我们可以设置跳转大密码正确的字段,如下图所示
令人意外的是,从语句40100F开始,程序生成了一个全新的字符串,意思就是找到了密码,最后的字符串也是全新的,我们单步执行,记录下来,最后我们去地址[ebp+eax-0x14]地址处的数据窗口出观察,就可以得到答案了,如下
7. 小磊生病了,医生检查出小磊体内有两种有害病菌B和C是引发的关键,同时也找到的消灭病菌的有益菌A ,现在要你帮助A战胜B和C,治好小磊,小磊会告诉你flag是什么。
下载下来一个exe
里面就三个元素,应该是对应A、B、C
拖进IDA,观察疑似flag的生成处,如下
最后一定是以v39的地址为基址,然后以v24为地址索引,打印出一个字符串
观察一下上面的那一串代码有没有对v39和v24做改变,并没有,全是混淆代码,不用管
注意小端序,然后在IDA里面也可以看到v39只有4个连续的字节,也是比较好区分的
上脚本
v39='neFolieIhrTHe'
v24=[2,5,9,6,7,0,10,8,12,11,3,4,1]
flag=''
for i in range(len(v24)):flag+=v39[v24[i]]print(flag)#FireInTheHole
8. 下载到对方可执行程序一个,但…..
下载下来一个exe,但是打开后立刻就会闪退
拖进OD动态调试一下,靠字符串观察一波关键代码
可以发现000B10A2处的语句执行后会永远跳过flag的判断,导致我们闪退
依次爆掉所有前往正确途中的断点,拿到key就好,如下图,其实我们早就知道key了,因为已经提前泄露了……只不过验证一下,看看有没有flag之类的,最后表明没有,key本身就是flag
杭电CTF 练习题RE WP相关推荐
- 杭电CTF 密码学(1)
杭电CTF 密码学(1) 1.拿到 BAABAABBAAAAAAAABABBABABBBAABABAABBABBBAABBABAABAA 显而易见的培根密码,直接拿去翻译. 传说,丘比龙是丘比特的弟弟 ...
- 杭电CTF——逆向(2)
从所给文件中找flag 环境 逆向 注意事项 环境 kali 系统 IDA Pro Hex WorkShop 逆向 下过来的文件没有后缀名,可以用 linux 下的 file 命令查看,或者用16进制 ...
- 2020杭电计算机考研经验帖
一年多的考研时光落下帷幕,成功上岸成为杭电的一员,记得去年也是在论坛上看到学长学姐的经验帖,从中收获了很多,希望我的这篇经验帖能给今年考研的学弟学妹们带来一定的帮助. 按照惯例,先说一下我的考研情况. ...
- 2019杭电计算机考研经验贴(初试+复试)
为期一年的杭电考研之旅结束啦!一年的付出总算没有白费,顺利上岸,进入杭电脑机交互实验室.今天和导师签了双选表,现在在回学校的高铁上,想着写一份经验贴,为下一届考研的学弟学妹们留下点东西. 一.初试 杭 ...
- 2021杭电计算机考研数一英一408专业课考研经验贴
2021杭电计算机考研数一英一408专业课考研经验贴 前言 考研准备 教材 其他 打基础阶段(3月-6月) 数学 英语 专业课 暑假冲刺阶段(7月-9月) 数学 英语 专业课 考前三个月(10月-12 ...
- hdoj杭电问题分类
杭电上的题虽然多,但是一直苦于找不到问题分类,网页都是英文的,所以平时做题也没怎么看,今天仔细一看,问题分类竟然就在主页....做了那么久的题居然没发现,表示已经狗带..不要笑,不知道有没有像我一样傻 ...
- 21杭电计算机考研回忆录
21杭电计算机考研回忆录 前言 初试前 政治 英语 数学 408 每天作息 考试那两天 考试后 成绩 联系导师 写在实验室部分前 参加实验室面试 复试前 复试 总结 前言 2021.3.29中午官 ...
- 【杭电ACM】1097 A hard puzzle
[杭电ACM]1097 A hard puzzle http://acm.hdu.edu.cn/showproblem.php?pid=1097 先用int手写了算法结果竟然wrong answer ...
- 【ACM】杭电OJ 1106 函数atoi
函数atoi是把字符串转化成整数的函数,头文件为 #include "stdlib.h" e.g. 运行环境:Dev-C++ 5.11 杭电1106 调用了sort函数,运行的时间 ...
- 【ACM】杭电OJ 2037
题目链接:杭电OJ 2037 先把b[i]进行排序,然后,b[i]与a[i+1]进行比较. #include <iostream> #include <cstdio> #inc ...
最新文章
- codeforces 667A A. Pouring Rain(水题)
- 1.eclipse怎么样新建web项目,eclipse新建web项目
- RequestParam注解
- LeetCode 371 两个整数之和
- Linux系统:centos7下搭建Nginx和FastDFS文件管理中间件
- 软件工程网络15个人阅读作业1
- 解决iSlider的一些问题(滑动组件)
- 2015湖南省选集训DAY5——work(BZOJ4177)
- Nginx教程负载均衡机制
- 电视hdr测试软件,HDR是什么意思 如何打开电视机的HDR10模式
- 小世界网络和复杂网络+python代码实现
- 谁谋杀了我们的游戏?转自 斗战神制作人-Yocar
- 我的第一篇CSDN博客
- IB中文诗歌手法分析
- 解读微信多开技巧,Python tk 实现微信多开脚本exe工具
- python MySQLdb 一个连接connection多个cursor
- CAN bus的移植
- 学习自我管理和自我营销
- 云视频会议已成未来发展必然趋势
- 男人应享有动听词汇的权利
热门文章
- 蜀门锻造费用统计(武器/坐骑锻造)
- ​云队友丨两次疫情冲击,却两次成功上市,携程是怎么做到的?
- 我的世界java版如何装mod_《我的世界》怎么装mod 安装方法教程
- 男人也离不开维生素(转)
- 一文带你了解SpringMVC框架的基本使用
- WIN10 如何隐藏桌面图标
- Vulhub-DC-8靶场实战攻略
- 中兴阅读在期刊杂志数字化、移动化上的探索
- Microsoft Excel 教程:如何在 Excel 中筛选区域或表中的数据?
- java insert方法_Java StringBuilder insert()方法