密码

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相关推荐

  1. 杭电CTF 密码学(1)

    杭电CTF 密码学(1) 1.拿到 BAABAABBAAAAAAAABABBABABBBAABABAABBABBBAABBABAABAA 显而易见的培根密码,直接拿去翻译. 传说,丘比龙是丘比特的弟弟 ...

  2. 杭电CTF——逆向(2)

    从所给文件中找flag 环境 逆向 注意事项 环境 kali 系统 IDA Pro Hex WorkShop 逆向 下过来的文件没有后缀名,可以用 linux 下的 file 命令查看,或者用16进制 ...

  3. 2020杭电计算机考研经验帖

    一年多的考研时光落下帷幕,成功上岸成为杭电的一员,记得去年也是在论坛上看到学长学姐的经验帖,从中收获了很多,希望我的这篇经验帖能给今年考研的学弟学妹们带来一定的帮助. 按照惯例,先说一下我的考研情况. ...

  4. 2019杭电计算机考研经验贴(初试+复试)

    为期一年的杭电考研之旅结束啦!一年的付出总算没有白费,顺利上岸,进入杭电脑机交互实验室.今天和导师签了双选表,现在在回学校的高铁上,想着写一份经验贴,为下一届考研的学弟学妹们留下点东西. 一.初试 杭 ...

  5. 2021杭电计算机考研数一英一408专业课考研经验贴

    2021杭电计算机考研数一英一408专业课考研经验贴 前言 考研准备 教材 其他 打基础阶段(3月-6月) 数学 英语 专业课 暑假冲刺阶段(7月-9月) 数学 英语 专业课 考前三个月(10月-12 ...

  6. hdoj杭电问题分类

    杭电上的题虽然多,但是一直苦于找不到问题分类,网页都是英文的,所以平时做题也没怎么看,今天仔细一看,问题分类竟然就在主页....做了那么久的题居然没发现,表示已经狗带..不要笑,不知道有没有像我一样傻 ...

  7. 21杭电计算机考研回忆录

    21杭电计算机考研回忆录 前言 初试前 政治 英语 数学 408 每天作息 考试那两天 考试后 成绩 联系导师 写在实验室部分前 参加实验室面试 复试前 复试 总结 前言   2021.3.29中午官 ...

  8. 【杭电ACM】1097 A hard puzzle

    [杭电ACM]1097  A hard puzzle http://acm.hdu.edu.cn/showproblem.php?pid=1097 先用int手写了算法结果竟然wrong answer ...

  9. 【ACM】杭电OJ 1106 函数atoi

    函数atoi是把字符串转化成整数的函数,头文件为 #include "stdlib.h" e.g. 运行环境:Dev-C++ 5.11 杭电1106 调用了sort函数,运行的时间 ...

  10. 【ACM】杭电OJ 2037

    题目链接:杭电OJ 2037 先把b[i]进行排序,然后,b[i]与a[i+1]进行比较. #include <iostream> #include <cstdio> #inc ...

最新文章

  1. codeforces 667A A. Pouring Rain(水题)
  2. 1.eclipse怎么样新建web项目,eclipse新建web项目
  3. RequestParam注解
  4. LeetCode 371 两个整数之和
  5. Linux系统:centos7下搭建Nginx和FastDFS文件管理中间件
  6. 软件工程网络15个人阅读作业1
  7. 解决iSlider的一些问题(滑动组件)
  8. 2015湖南省选集训DAY5——work(BZOJ4177)
  9. Nginx教程负载均衡机制
  10. 电视hdr测试软件,HDR是什么意思 如何打开电视机的HDR10模式
  11. 小世界网络和复杂网络+python代码实现
  12. 谁谋杀了我们的游戏?转自 斗战神制作人-Yocar
  13. 我的第一篇CSDN博客
  14. IB中文诗歌手法分析
  15. 解读微信多开技巧,Python tk 实现微信多开脚本exe工具
  16. python MySQLdb 一个连接connection多个cursor
  17. CAN bus的移植
  18. 学习自我管理和自我营销
  19. 云视频会议已成未来发展必然趋势
  20. 男人应享有动听词汇的权利

热门文章

  1. 蜀门锻造费用统计(武器/坐骑锻造)
  2. ​云队友丨两次疫情冲击,却两次成功上市,携程是怎么做到的?
  3. 我的世界java版如何装mod_《我的世界》怎么装mod 安装方法教程
  4. 男人也离不开维生素(转)
  5. 一文带你了解SpringMVC框架的基本使用
  6. WIN10 如何隐藏桌面图标
  7. Vulhub-DC-8靶场实战攻略
  8. 中兴阅读在期刊杂志数字化、移动化上的探索
  9. Microsoft Excel 教程:如何在 Excel 中筛选区域或表中的数据?
  10. java insert方法_Java StringBuilder insert()方法