g2uc

TeamBlog

[REVERSE]0x06 EasyRE-2

题目文件:
链接:


此题为EasyRE-1的升级版,当我们再次尝试用ida来载入程序试图使用F5伪代码转换来一览程序的全貌时发现F5伪代码功能仿佛像个残疾人一样:

很明显,程序关键部位被加入了花指令,阻止了ida的常规分析行为.因此我们直接动用Win32动态调试利器OllyDbg来尝试修复花指令.

在定位到主函数后,发现从上图所示位置开始代码出现了猫腻,先是pushad保存寄存器现场,然后利用mov eax,地址;jmp eax的形式伪装成动态跳转试图骗过ida的代码分析.

跟进跳转,发现跳转完毕后立刻popad还原寄存器现场,说明这之后的代码可能是主函数中本来的正常代码,因此无需保护寄存器.这里最后执行结束后,利用je和jnz双条件跳转来模拟jmp无条件跳转,骗过ida的线性代码分析.
以上内容容易看出,作者在正常代码函数中提取了部分代码片段,使用伪动态跳转的方法将部分代码移动新的内存区域中执行,以打乱ida的正常分析功能,让ida无法正常将函数线性的解析.修复方法就是将被提取出的代码写回原来的内存区域即可.该主函数内之后还有一个精心构造的欺骗跳转,这里不多阐述,代码修复效果如下(红色代码部分):

这时我们再拖回ida来用F5伪代码看看内容:

发现此时流程已经很清晰,最后的strcmp判断中又出现了熟悉的Base64字符串,尝试直接解码,发现失败了.
这时看上面的代码很像是Base64的解码代码,说明很可能是变种Base64,解码的码表被改动过了,那么我们需要找到新的码表,图中很明显,0x402108指针被频繁使用.
点进去查看,得到字符串:PFXLj4G6fRAte05vW2Q37owCKBmUisa+cZOkT1hHbnIxp8luVzED9gSJdqY/rNyM
根据新码表解码即可得到正确的flag.

FLAG值:
GCTF{We1c0me_T0_GCTF_RE}

发表评论:

搜索
标签列表
网站分类
文章归档
站点信息
  • 文章总数:20
  • 页面总数:0
  • 分类总数:4
  • 标签总数:7
  • 评论总数:1
  • 浏览总数:566
控制面板
您好,欢迎到访网站!
  查看权限

Powered By Z-BlogPHP 1.5.2 Zero

Copyright g2uc Rights Reserved.

公告

请把不属于分类中比赛的题目wp发布在essay分类!另外,题解文章请记得在标签里标注题目类型!