[Reverse]2022年春秋杯godeep

2022年春秋杯godeep

题目下载:godeep

分析

file

看到主函数没有发现什么特别的东西,于是决定动态调试分析
file

随便输入一个123123
进入第一个goddeeptree的时候可以发现
file

他需要判断一个v4才能进入下一个文件,看看v4里面是什么
file

发现是一堆二进制的数据
file

欸,发现正好是123123,那么逻辑就是很明显了,就是把我们输入的东西变成二进制,然后通过二进制里面的01来判断进入if里面的上面的函数还是下面的函数
最终可以走到输出right的函数。
那么我们直接从right函数一步步回推交叉引用就可以得到最终的二进制密文了

题解

file

主函数里发现了一个hint,告诉我们如果我们成功了就会输出一个right
我们直接搜索right
file

发现这个就是输出right的函数
我们交叉引用这个函数
file

这就是最后一个判断函数了
看到函数窗口发现有几千个函数,一个个来会死掉去。那么我们需要用到idapython这个插件来利用脚本直接进行交叉引用
我们可以发现引用回来的函数,在上面就是1在下面就是0,那么我们可以发现函数头地址减去引用点的地址如果小于111那么函数就是在上面的,然后我们就通过idapython来进行判断然后输出
我的方案如下:

import idautils
import idautils
import idaapi

def get_function_address(function_name):
    # 遍历所有函数
    for function in idautils.Functions():
        # 获取函数名称
#        print(idaapi.get_name(function))
        name = idaapi.get_name(function)
        if name == function_name:
            # 如果名称匹配,则返回函数地址
            return function
    # 如果没有找到函数,则返回 BADADDR
    return idc.BADADDR

def fun(xef):
    #print(hex(xef))
    func_name = get_func_name(xef)
    #print(func_name)
    #print(hex(xef))
    func_addr = get_function_address(func_name)
    #print(hex(func_addr))
    #print(0x65aa50 - 0x65A9C0)
    #print(xef-func_addr)
    if(xef-func_addr<=111):
        print('1',end='')
    else:
        print('0',end='')
    refs = CodeRefsTo(func_addr,0)
    for ref in refs:
        xef= ref
        break
    if(xef!=0x6D3006): 
        return fun(xef)
    else:
        print()
        return 0

xef = get_func_name(0x65AAB8)#0x65AAB8是第一个引用的地址
function_addr = get_function_address(xef)

file

发现输出了我们想要的二进制数据,不过可能是我的脚本太烂了
导致后面输出的都是0
就不知道最后需要取几个了,我们可以全都复制下来然后看看有多少个数字,到最后一个1我这里发现是287个,我们可以发现一个字符是两个字节也就是8个二进制位,那么287%8余7那么我们只需要补一个0 就可以完美输出了
由于我们是从后往前判断的,所以字符需要进行倒置,脚本如下:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<map>
#include<vector>
#include<queue>
#include<stack>
#include<set>
#include<string>
#include<cstring>
#include<list>
#include<stdlib.h>
using namespace std;
typedef int status;
typedef int selemtype;
/*
                   _ooOoo_
                  o8888888o
                  88" . "88
                  (| -_- |)
                  O\  =  /O
               ____/`---'\____
            .'  \\|     |//  `.
            /  \\|||  :  |||//  \
           /  _||||| -:- |||||-  \
           |   | \\\  -  /// |   |
           | \_|  ''\---/''  |   |
           \  .-\__  `-`  ___/-. /
         ___`. .'  /--.--\  `. . __
      ."" '<  `.___\_<|>_/___.'  >'"".
     | | :  `- \`.;`\ _ /`;.`/ - ` : | |
     \  \ `-.   \_ __\ /__ _/   .-` /  /
======`-.____`-.___\_____/___.-`____.-'======
                   `=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    佛祖保佑       永不宕机     永无BUG
*/

char a[]="100001100000110001000110110011000010011010101100001011001110110011000110010001100001110011101100101101001110110000011100100111000001110010110100011001101001110010001100001011001011010001000110111011000110011001100110101101001110110010011100001001100100011011001100000011001100011001100110";
int main ()
{
    strrev(a);
    cout<<a;
}

二进制转为字符网站:https://coding.tools/cn/binary-to-text

file

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇