hgame的一些小题

hgame的一些小题

reverse

helloRe

首先用ida打开去分析一下(64位)
其实我是想用OD动调一下,但它是个64位的,动态调试的话的用dbg了,所以ida看一下吧,它是个C++写的代码了:
在这里插入图片描述
然后就要看一下涉及了那些数据了,sub_140001430()和asc_140003480[v0]这两个数据,去追踪一下看看:
在这里插入图片描述
还有一个在这里插入图片描述
分析到者就到了最后一步,写脚本了:
在这里插入图片描述
这样子flag就得到了。

pypy

这个题是python的字节码,需要我们去了解这些知识,其实有些简单的语句还是很好猜到的。
下面我就列一下字节码:
LOAD_CONST : 加载const 变量,比如数值,字符串等等, 一般用于传递给函数作为参数
LOAD_FAST : 一般用于加载局部变量的值,也就是读取值,用于计算或者函数调用传传等
STORE_FAST : 一般用于保存值到局部变量
LOAD_GLOBAL : 用来加载全局变量, 包括制定函数名,类名,模块名等全局符号
STORE_GLOBAL :用来给全局变量赋值
BUILD_LIST : 用于创建一个 list 结构
BUILD_MAP : 用于创建一个空的dict
STORE_MAP : 用于初始化 dict 中的内容,赋值给变量
BUILD_SLICE : 用于创建切片, 对于 list , tuple , 字符串都可以使用slice 的方式进行访问
BINARY_SUBSCR : 读取slice 的值
STORE_SUBSCR : slice 的值赋值给变量。
SETUP_LOOP : 用于开始一个循环。
JUMP_ABSOLUTE: 结束循环
POP_JUMP_IF_FALSE : 条件结果为 FALSE 则跳出 目标的偏移指令
JUMP_FORWARD : 直接跳转到目标便宜指令
COMPARE_OP: 比较指令

  4           0 LOAD_GLOBAL              0 (input)                                               //加载的意思
              2 LOAD_CONST               1 ('give me your flag:\n')                       //会取出co_consts里的第consti个值
              4 CALL_FUNCTION            1                                                           //这个应该就是=号了,即是赋值
              6 STORE_FAST               0 (raw_flag)                                             //第一行的赋值者raw_flag

  5           8 LOAD_GLOBAL              1 (list)                                                  //这个就是个语句了list
             10 LOAD_FAST                0 (raw_flag)                                            //list(raw_flag[6:-1])
             12 LOAD_CONST               2 (6)
             14 LOAD_CONST               3 (-1)
             16 BUILD_SLICE              2
             18 BINARY_SUBSCR
             20 CALL_FUNCTION            1
             22 STORE_FAST               1 (cipher)                                                //这个就是第二行的赋值者cipher

  6          24 LOAD_GLOBAL              2 (len)                                                 //语句len
             26 LOAD_FAST                1 (cipher)                                                //len()
             28 CALL_FUNCTION            1
             30 STORE_FAST               2 (length)                                               //第三个赋值者length
         
  8          32 LOAD_GLOBAL              3 (range)                                            //range语句
             34 LOAD_FAST                2 (length)
             36 LOAD_CONST               4 (2)
             38 BINARY_FLOOR_DIVIDE                                                           //到了最后,还是这条语句卡住我(哈哈)它应该是np.floor_divide这个函数吧
             40 CALL_FUNCTION            1
             42 GET_ITER
        >>   44 FOR_ITER                54 (to 100)                                              //for循环 应该循环到100句,即下一条语句正是循环的语句
             46 STORE_FAST               3 (i)                                                        //第四个赋值者i

  9          48 LOAD_FAST                1 (cipher)                                              //cipher这个变量
             50 LOAD_CONST               4 (2)                                                     //2
             52 LOAD_FAST                3 (i)                                                        //i,发现下面具有重复的语句
             54 BINARY_MULTIPLY                                                                   //这条语句就必须想办法搞懂,它是个*号,就是乘法啦
             56 LOAD_CONST               5 (1)
             58 BINARY_ADD                                                                            //加法
             60 BINARY_SUBSCR                                                                      //加载,也就是读取数据了
             62 LOAD_FAST                1 (cipher)                                               //cipher
             64 LOAD_CONST               4 (2)                                                    //2
             66 LOAD_FAST                3 (i)                                                       //i
             68 BINARY_MULTIPLY                                                                  //乘法
             70 BINARY_SUBSCR                                                                     //加载
             72 ROT_TWO                                                                               //关键语句 交换
             74 LOAD_FAST                1 (cipher)                                             //cipher
             76 LOAD_CONST               4 (2)                                                   //2
             78 LOAD_FAST                3 (i)                                                      //i
             80 BINARY_MULTIPLY                                                                 //乘法
             82 STORE_SUBSCR                                                                      //加载
             84 LOAD_FAST                1 (cipher)                                             //cipher
             86 LOAD_CONST               4 (2)                                                   //2
             88 LOAD_FAST                3 (i)                                                      //i
             90 BINARY_MULTIPLY                                                                 //乘法
             92 LOAD_CONST               5 (1)
             94 BINARY_ADD                                                                         //加法
             96 STORE_SUBSCR
             98 JUMP_ABSOLUTE           44                                                     //这个代表着结束循环,与SETUP_LOOP搭配是while循环

 12     >>  100 BUILD_LIST               0                                                      //这个查到是[]这个东西
            102 STORE_FAST               4 (res)                                                 //这里应该是 res = [] 这个东西了

 13         104 LOAD_GLOBAL              3 (range)                                        //range语句
            106 LOAD_FAST                2 (length)                                            //for i in range(length)
            108 CALL_FUNCTION            1                                                        
            110 GET_ITER
        >>  112 FOR_ITER                26 (to 140)                                          //这里应该也是个for循环 到140114 STORE_FAST               3 (i)

 14         116 LOAD_FAST                4 (res)                                                //res新的变量,对应着flag了
            118 LOAD_METHOD              4 (append)                                      //append函数
            120 LOAD_GLOBAL              5 (ord)                                              //ord函数
            122 LOAD_FAST                1 (cipher)                                             //cipher变量
            124 LOAD_FAST                3 (i)                                                      //i
            126 BINARY_SUBSCR                                                                    //读取切片中的值
            128 CALL_FUNCTION            1
            130 LOAD_FAST                3 (i)                                                      //i
            132 BINARY_XOR                                                                          //这个应该是^异或运算啦
            134 CALL_METHOD              1
            136 POP_TOP                                                                                //这个它最后应该是res.append(ord(cipher[i])^i)
            138 JUMP_ABSOLUTE          112

 15     >>  140 LOAD_GLOBAL              6 (bytes)                                      //bytes函数
            142 LOAD_FAST                4 (res)                                                  //res
            144 CALL_FUNCTION            1
            146 LOAD_METHOD              7 (hex)                                             //hex函数,这个是个方法,其实可以理解成内置函数,需要“.”这个东西啦
            148 CALL_METHOD              0
            150 STORE_FAST               4 (res)                                                  //res

 16         152 LOAD_GLOBAL              8 (print)                                          //这里大胆猜测就是输出flag了
            154 LOAD_CONST               6 ('your flag: ')                                  //rse应该就是flag了
            156 LOAD_FAST                4 (res)                                                 //print('your flag:'+res)
            158 BINARY_ADD                                                                         //+160 CALL_FUNCTION            1
            162 POP_TOP
            164 LOAD_CONST               0 (None)
            166 RETURN_VALUE

# your flag: 30466633346f59213b4139794520572b45514d61583151576638643a

然后我就卡在了LOAD_METHOD这个语句当中了,便想一次又一次去尝试它,毕竟到了最后的一步了。然后在我的一直坚持下,并且查阅资料,终于完美的对应上了字码节,上代码:
在这里插入图片描述
此时我们用flag去输入这个代码,发现了输出的并不是我们想要的flag
在这里插入图片描述
我们又要写脚本了,哎,好不容易破解出,没想到是加密的脚本了,唉唉!写吧,没办法。

web

watermelon

这个打开就是个游戏,发现有点小,所以猜测是手机端(移动端),就改用了谷歌里面的手机端来查看去解它。
在这里插入图片描述
hgame{do_you_know_cocos_game?}
这便是flag了,这个是(剽窃)借鉴(抄袭)的。

pwn

whitegive

这道是pwn的签到题,还是简单的,附件里直接有代码,代码是个比较,而此时我们就要想办法去比较成功:
在这里插入图片描述
然后我们用ida找到paSsw0rd这个的地址:
在这里插入图片描述
此时我们就可以直接找到flag了:
在这里插入图片描述

Crypto

まひと

首先是摩斯密码,我们就用在线网站接下秘,然后是ascll码,写了个小脚本来转换成字符:
在这里插入图片描述
后面有==号,就怀疑是base64解密,接下它:
在这里插入图片描述
然后出现个名词是Vigenere,可能是维吉尼亚解密了,但此时需要密钥。Liki就是密钥,如下解密:
}KccnYt!1NlPpu!zeE1{C+9pfrhLB_Fz~uGy4n
接下来就是神奇的地方了,在做这道题时,我和同学讨论时,他们的观点是有一个隐藏的hint,我当时想的是,肯定应该有 栅栏 解密,因为刚开始是hgame{}这样子的,而上面的{}这个没有在那个位置上,所以猜想需要一个转换{}字符的解密过程。
然后接下来在网上找到了接下来的正确的解密过程,是个栅栏6解密,
}!!Ch~K1z+LucNe9BGclEp_ynP1fF4Yp{rzntu
然后rot13解密:
}!!Pu~X1m+YhpAr9OTpyRc_laC1sS4Lc{emagh
翻过来就是flag了。

misc

Base全家福

这个其实就是用base64,32,16依次解密即可,毕竟提示是有关base的,很明显了。

不起眼压缩包的养成的方法(未做完)

这个一弄就可以看到:
在这里插入图片描述
它说有密码,那说明有用到密码的地方。然后通过linus-kali的方法找到了那个压缩包(binwalk或foremost):
在这里插入图片描述
此时就需要密码了。
是个zip压缩包,暴力破解一下,就能解开,主要是接下来,又来了个zip,这时就要用明文攻击了:在这里插入图片描述

Word RE:MASTER

这道题听了大师傅的话,主要是以前没见过,所以费了点力气,首先刚开始是有两个文档的,第一个文档没有加密,第二个文档加了密。我首先思路就是暴力破解加密的文档,但大师傅并不是这样子的。
后来思路想到了第一个文档里的那串特殊的字符和一张图片,图片里面什么也没有,可能有吧(我没发现)在这里插入图片描述
然后:
在这里插入图片描述
发现是个brainfuck加密,解密后如下:
DOYOUKNOWHIDDEN?
输入第二个word,对了,那么再看看是个图片,此时应该就用到了图片隐写吧,但很遗憾,不是:
在这里插入图片描述
刚开始我进去只有图片,其它的东西是隐藏的,不能够找到,需找到word选项里将它给去除。就能够显示了。此时,它是个snow隐写.
此时输入

snow.exe -C (txt的文件,即要进行解密的txt文档)

如下flag:
hgame{Cha11en9e_Whit3_P4ND0R4_P4R4D0XXX}


前言

小白一个(刚接触ctf不久),看看了逆向,发现一道不会(有点思路,但最后还是做不出来),大师傅们别嘲笑。后来我就开始做misc了(做的也不多)

One_piece

这个我做的,其它的我队友做的,(没想到逆向不会)
因为刚开始提示四位数字,那我们就可以使用暴力破解:
在这里插入图片描述
然后解压,就可以看到有两个内容:一个C编写的程序,和一个txt文档;
在这里插入图片描述
而文档里我们可以知道一些信息,再结合c语言的程序,可知我们少个key。
看到密文,我们就知道这是个社会主义核心价值观解密:
在这里插入图片描述
然后又是个解密,可以看到一些比较熟悉的东西,可知这是个brainfuck解密,因为它只有><±.,[]的组合来完成:
在这里插入图片描述
解密就看到了glbe{pnf_njedc_js_ufjs_kmvrocz!}这个;
到这我们就差最后一步了,那我们可能就要用到密钥了,c程序中有四个判断条件,那我们就加上这四个条件,让它们运行起来,拿到密钥。
在这里插入图片描述

运行一下:在这里插入图片描述
它告诉了一个密钥,那我们来想想需要密钥的解密有哪些,自然想到了维吉尼亚解密:
在这里插入图片描述
这样flag就得到了!

小火龙冲啊

下载解压得到张图片:
在这里插入图片描述
刚开始肯定看属性(是为了看它的大小),就会感觉到它其实是可能有隐藏的东西。所以用Linus打开(使用binwalk这个命令)
在这里插入图片描述
发现压缩包,打开又是个加密的:
在这里插入图片描述
到这个时候,是有几个思路的,爆破(但这个是有风险的),这里可是能花好多时间的,又反过来看图片的十六进制:
在这里插入图片描述
用winhex打开,发现最后有一串可疑数字,那我们就输入进去看看,就能得到flag了。
这个是队友做的,整理了一下。


下面是一些比较简单的签到题,逆向两道,还比较简单,所以补充到下面啦。
Re1:
这道题刚上来就用EP看下它的信息。
在这里插入图片描述

发现是upx壳,用命令 upx -d re1
可以解出来了。
Ida打开,搜索字符串,有几个特殊字符串,第一题应该没那么难,并且我没有看到有什么加密的代码,所以就直接去试试这些字符串,发现就是flag。

Re2
这道题其实也没那么难,没有什么加密大的,是用C++写的,但是依然比较简单啦
在这里插入图片描述
这样子就是可以了,hint是key就是flag,这里dword_42537C就是flag,把它算出来就行了。
hello CPY
这道题也不难,主要是考察脚本的能力,分析脚本,无非就是一个随机数,它还是1到10,很简单了,试试都能试出来,然后我们就可以写出脚本啦
在这里插入图片描述

运行一下flag就出来了,这力我主要运用的爆破的思想,把flag{}里面的内容爆破出来。

posted @ 2021-03-03 16:55  望权栈  阅读(21)  评论(0编辑  收藏  举报  来源