BUUCTF逆向题reverse3

一、 工具:

        1、IDA

        2、编译器(编写脚本)

二、解题过程:

①、首先载入将文件载入IDA(32位)

        (查壳发现程序没有加壳,且是32位的程序)

BUUCTF逆向题reverse3_第1张图片

②、在函数窗口找主函数入口,把滚动条拉到最底下找到 _main_0 函数

BUUCTF逆向题reverse3_第2张图片

③、双击 _main_0 函数得到图表视图

BUUCTF逆向题reverse3_第3张图片

 ④、菜单栏->视图->打开子视图->生产伪代码(注释是我自己写的,不用管它)

BUUCTF逆向题reverse3_第4张图片

 观察代码发现第26行有个函数 sub_4110BE 双击进去

BUUCTF逆向题reverse3_第5张图片

 再双击 sub_411AB0 查看行数的大致实现步骤,不过太复杂,不需要去理会,进去之后双击数组查看内容

 BUUCTF逆向题reverse3_第6张图片

 进去之后会发现一串字符,这里基本可以判断采用了base64加密(判断技巧:①:字符串里有个等号;②:格式是abcdef.....基本可以判断是base64)

BUUCTF逆向题reverse3_第7张图片

 ⑤、回到主函数的伪代码处,双击 Str2

BUUCTF逆向题reverse3_第8张图片

BUUCTF逆向题reverse3_第9张图片

 e3nifIH9b_C@n@dH  这个字符串是我们拿到正确flag的关键字符串

根据伪代码不难分析出:先对字符串进行了 base64 的加密,然后再通过加法运算又对字符串进行了修改,所以我们可以写一个脚本把过程逆一下就可以得到加密的flag

这里我用的C语言

BUUCTF逆向题reverse3_第10张图片

 这样就把经 base64 加密的flag得到了  e2lfbDB2ZV95b3V9  ,然后通过网上在线工具将这段字符串解密即可得到真正的 flag

BUUCTF逆向题reverse3_第11张图片

 所以最终的结果:flag{i_l0ve_you}

收获:

1.如何判断 base64 加密

也可以通过插件来判断:

  • findcrypt-yara
  • IDASignsrch
  • findcrypt3

你可能感兴趣的:(CTF,reverse,算法)