一、 工具:
1、IDA
2、编译器(编写脚本)
二、解题过程:
①、首先载入将文件载入IDA(32位)
(查壳发现程序没有加壳,且是32位的程序)
②、在函数窗口找主函数入口,把滚动条拉到最底下找到 _main_0 函数
③、双击 _main_0 函数得到图表视图
④、菜单栏->视图->打开子视图->生产伪代码(注释是我自己写的,不用管它)
观察代码发现第26行有个函数 sub_4110BE 双击进去
再双击 sub_411AB0 查看行数的大致实现步骤,不过太复杂,不需要去理会,进去之后双击数组查看内容
进去之后会发现一串字符,这里基本可以判断采用了base64加密(判断技巧:①:字符串里有个等号;②:格式是abcdef.....基本可以判断是base64)
⑤、回到主函数的伪代码处,双击 Str2
e3nifIH9b_C@n@dH 这个字符串是我们拿到正确flag的关键字符串
根据伪代码不难分析出:先对字符串进行了 base64 的加密,然后再通过加法运算又对字符串进行了修改,所以我们可以写一个脚本把过程逆一下就可以得到加密的flag
这里我用的C语言
这样就把经 base64 加密的flag得到了 e2lfbDB2ZV95b3V9 ,然后通过网上在线工具将这段字符串解密即可得到真正的 flag
所以最终的结果:flag{i_l0ve_you}
收获:
1.如何判断 base64 加密
也可以通过插件来判断:
- findcrypt-yara
- IDASignsrch
- findcrypt3