2019-上海市大学生网络安全大赛-writeup-REVERSE-Satan

Satan

这次比赛只看了这道逆向题,下午快调出来的时候被 rjj 拉过去唱歌,晚上回来已经结束了,调了几个脚本的bug出了这道题。

题目给了一个 64 位 ELF,丢进 IDA 中打开,主要逻辑都在 main 函数内,用 C++/STL 编写了很多字符串操作。

先看前几行的操作,第 183 行初始化了一个字符串。第 184 行"operator >>" 就是C++的输入流,而"unk_6072A0"可以通过交叉引用发现是 cin,于是这一行把用户输入读到字符串中。第 185 行从用户输入的字符串新建了另一个字符串,之后把新建的字符串送入 sub_4020DF 做检验,如果检验失败则输出"error"。

从 sub_4020DF 函数我们看到输入的格式,首先由flag{}包裹,里面共有五段,由‘-‘分隔。可以构造一个样例flag以方便动态调试。

flag{abcd1234-abcd-1234-abcd-abcdefghijkl}

之后的一个大 switch 根据flag第一段第一个字符的大小,决定shuffle的方法,对5段输入做一个shuffle。例如下图中,第一段第一个字符为‘0‘的情况,打乱的顺序是01433。这个变换只进行一次,没有什么难度不需要仔细看。

之后来到了这道题最关键的地方,加密。这段代码对 shuffle 后的 32 位 flag 分为两段,分别加密。sub_401AA3是加密函数。

加密的密钥是由函数自身的text段生成的,sub_4025A2根据从start函数位置开始,到start+0x3D22为止的所有内容,生成一个整数 v96,再用这个整数构造256bit的密钥 v177。显然text段的内容是不会改变的,密钥也是固定的。(如果这样想就会被坑到,,,)

搞定了密钥,只剩下加密算法了。查了一下加密算法用到的加密盒,并没有查到什么内容。整个加密过程类似AES的SP结构。每一轮需要经过轮密钥加、非线性盒变换和位移变换。找不到已知算法,只能拿头去逆了。回想AES的解密流程,轮密钥加只需要调换顺序异或即可,S盒变换和位移变换则需要写出逆向算法。又因为密钥是固定的,可以直接从 gdb 中扣出所有轮密钥,看起来需要逆向的工作也没有太多。

  1. 轮函数

    算法把明文分为四块,每一块存在一个32位整数中。共33轮,前31轮,每一轮对明文进行轮密钥加,非线性盒变换和线性混合。最后的32轮和33轮稍微不一样,不过用到的函数都一样。

  2. 非线性盒变换

    这里我们先要弄懂如何进行这个变换的。经过一番头铁逆向,这段代码把从明文的四个块中各取一位,组合成一个4bit整数,然后在盒中做代换,代换后的值拼接起来,最后取代原来的四个明文。

    逆向的话,整个流程相同,不过要用逆盒去做代换。出题人比较善良,逆盒存储在非线性盒的后面,直接用IDA扣出来就好了。最后用python编写逆变换。

  3. 线性混合

    这里做了循环移位和异或。刚开始我想偷懒用z3,也没解出来,还是直接逆出来了。

    我们可以看到,13和14行,第1块和第3块异或生成了第0块和第2块,之后第1、3块没有做修改,第0,2块只做了循环移位。也就是逆向的时候,我们可以直接还原13和14行,异或上去的第0、2块,那么也就能通过异或还原出初始的第0、2块。同理第1、3块也能够还原。所以这份代码可以直接写出逆向算法。

这样几个问题都解决了,只需要动态调试抠出轮密钥,然后做验证就行了。到这里遇到了一个大坑。需要了解一下gdb调试的原理。

gdb 内部使用 ptrace 实现的,在下断点的时候,会替换目标指令为 trap,当执行到目标指令时,实际执行 trap 指令,把控制权交给了控制器,也就是 gdb。也就是说 gdb 下断点会修改程序text段的值,那么加密函数的密钥生成就被影响了。用gdb调这道题会发现轮密钥经常变化,和猜想不符的情况。

搞清楚了这个就简单了,写一个脚本直接计算函数 sub_4025A2 的返回值,再用gdb调试就能拿到真正的轮密钥。

最后做解密,还原一下shuflle就拿到了flag。

flag{96ae4d91-7595-48da-8a40-62dd06baf7a4}

原文地址:https://www.cnblogs.com/helica/p/11787481.html

时间: 2024-08-30 15:10:30

2019-上海市大学生网络安全大赛-writeup-REVERSE-Satan的相关文章

2019 上海市大学生网络安全大赛 RE部分WP

这次比赛就做了这一道逆向题,看到队友的WP,下面的对v10的加密方式为RC4,从我提取的v4数组就能够察觉出这是CR4了,自己傻乎乎的用OD调试,跟踪数据半天才做出来,还是见得的少了... ...下面有几篇不错的RC4的文章: C语言实现:https://zhoujianshi.github.io/articles/2016/RC4%E5%8A%A0%E5%AF%86%E7%AE%97%E6%B3%95/index.html Python实现:https://specters.top/2019/

第三届上海市大学生网络安全大赛 签到题

题目内容: https://www.ichunqiu.com/default/apppys 扫码下载APP你想要的flag就在CTF竞赛圈里~加入CTF竞赛圈,大表姐的buff在等着你~ flag:flag{7heR3_i5_a_Lif3_4b0ut_tO_sT4rt_WHen_T0morROw_coMe5} 原文地址:https://www.cnblogs.com/zaixialongaotian/p/10355512.html

2019全国大学生信息安全大赛两道web

简单小结 菜鸟第一次打国赛,这次题目质量很高,学到了许多姿势. Web Justsoso 打开题目,源代码出存在提示: 使用LFI读取index.php与hint.php http://d4dc224926cd47bca560b0ec2f84bad155efe5b747574b89.changame.ichunqiu.com/?file=php://filter/read=convert.base64-encode/resource=index.php http://d4dc224926cd47

2015年网络空间安全高端论坛暨第二届“世安杯”广东省大学生网络安全竞赛

<ignore_js_op> 远离了那个枪林弹雨的时代,却仍然嗅到字里行间的硝烟. 9月3日,抗战70周年纪念日.驻足在五星红旗下,我思考着,我们需要做的,不仅是纪念一场战争的结束,更应该注意到,另一场战争已悄然开始. 一句程序,可以打开网站,也可以注入SQL:一台电脑,可以看电影,也可以DDOS攻击:一群码农,可以写游戏,也可以使整个网络瘫痪.当我们调侃程序猿.攻城狮时,殊不知,在保卫着我们国家最脆弱的第五空间——网络空间的安全,也正是我们的攻城狮. 我们诚邀你参与这次活动.与来自各大高校.

【翻译贴】上海市第八届星光计划(2019年)技能大赛网站设计(中职组)决赛题目

两年一度的上海市星光计划比赛被誉为职业技能大赛的奥林匹克,比赛分为中职组和高职组 随着若干年的发展,比赛的题目强度逐年提高,逐步向世界职业技能大赛的比赛强度靠拢 这次翻译的题目是上海市第八届星光计划(2019年)技能大赛网站设计(中职教师组)的决赛题目.全文是英文的,学生组的题目和教师组差不多,个别地方降低了要求.故这次翻译了教师组的题目. 决赛要求 模块 A:站点设计 一.竞赛时间 150 min 二.竞赛任务及要求 1. INTRODUCTION: Frankfurt Internation

2019年华北五省(市、自治区)及港澳台大学生计算机应用大赛 - 河北赛区

2019年华北五省(市.自治区)及港澳台大学生计算机应用大赛 移动互联网应用创新 http://bjcac.buu.edu.cn/a/1.aspx 河北省 一二等奖(答辩后分出一.二等): 河北省 三等奖: 原文地址:https://www.cnblogs.com/hbuwyg/p/11723852.html

第十一届GPCT杯大学生程序设计大赛完美闭幕

刚刚过去的周六(6月7号)是今年高考的第一天,同一时候也是GPCT杯大学生程序设计大赛颁奖的日子,以下我们用图文再回想一下本次大赛颁奖的过程. 评审过程的一些花絮<感谢各位评审这些天的付出!>: 感谢葡萄城给我的这次的锻炼的机会,让我学会了非常多,也明确了非常多!最重要的是感谢评委们!你们辛苦了! 感谢MTV-我在上嵌入式课-- 永远别忘了为你付出的人,成就永远不属于一个人.就是装也得怀有一颗谦卑感恩之心.版主大人受小弟一拜! 再次感谢品审大人,我们组还非常多要改进的,到时候一定要跟各路大神好

2019西湖论剑网络安全技能大赛(大学生组)部分WriteUp

这次比赛是我参加以来成绩最好的一次,这离不开我们的小团队中任何一个人的努力,熬了一整天才答完题,差点饿死在工作室(门卫大爷出去散步,把大门锁了出不去,还好学弟提了几个盒饭用网线从窗户钓上来才吃到了午饭).写好WP回到宿舍的时候已经快十二点了,随便吃了点面包倒头就睡...... 接下来大概写写我们的解题思路,由于做题的时候没想到可以进名次,而且赛后比赛平台也关了,所以很多实现过程的截图就没法弄了,只下了除web以外的题目. CRYPTO 第一题 HardGame 这道题我们并没有做出来,可以看看大

2016风云杯大学生信安大赛 WriteUp

2016风云杯大学生信安大赛 web 01 web 02 web 03 web 04 web 05 web 06 web 08 web 09 CRYPTO 01 misc 01 misc 02 misc 03 misc 06 apk 01 apk 03 apk 04 re 01 re 03 re 04 2016风云杯大学生信安大赛 好吧第二次正式打CTF,虽然这次的题比较简单,而且大部分强队都去打whctf去了,最后10分钟直接从第四掉到第七,也没办法,实力不够,继续练吧,贴个图纪念一下.整体看