【WriteUp】labyrenth CTF windows track挑战(上)

https://i-blog.csdnimg.cn/blog_migrate/eac7c568a9e4e80a330d576185312dde.jpeg

前言


我花了一周时间完成了Palo Alto CTF、Windows 和Docs两条轨道的测试,现在我将在文章中分享我的解决方案,希望读者朋友可以从中学到一些解决恶意软件技术的有用技巧。


文件: AntiD.exe


SHA256:49f3638065722b96809cb72c226d86566783d510c968d516436aa7c248d608ee

加壳︰自定义 UPX

使用工具: ExeInfo, IDA Pro, Ollydbg, Scylla & CFF Explorer

代码与二进制文件:

https://github.com/jmprsp/labyrenth/tree/master/Window-Challenge-1

说明:

这一挑战使用了UPX用来加壳,但是加成了阻止upx-d运行的模式。它还使用了一些反调试技术来遏制调试工具的使用。具体的标记还不是很清楚,所以需要分析背后的数学函数并解码标记。

http://p6.qhimg.com/t01455a78510ab614b0.png

 

  看起来该二进制文件使用的加壳工具是UPX。让我们试着用官方工具进行解码,虽然看起来并不能解码成功。

http://p7.qhimg.com/t01de49598939214c66.png

 

  在IDA Pro中加载该二进制文件,我们可以观察该二进制文件确实经过加壳。从下面的截图中我们只能看到一个函数和一个已加壳二进制文件的指令。接下来,我们可以清楚地看到有一个尾部跳转。要手动解压缩此二进制文件,我们只需要打破尾部跳转和转储进程。

https://i-blog.csdnimg.cn/blog_migrate/1c5d3a3acc193282be10c12bc602091b.png

 

  但在那之前,我想要禁用 ASLR 来简化过程,并且同时进行调试。使用补偿资源管理器工具,只需取消选中"可以移动DLL "复选框并应用更改。

http://p0.qhimg.com/t01ba22998a067c1a13.png

 

  在 ollydbg 中运行AntiD.exe补丁;设置一个断点 @ 0x4091AC。运行程序直到中断并进入下一条指令。

http://p1.qhimg.com/t016b61887b15864118.png

 

  下面是转储进程的示例,但是运行释放的过程中会弹出一个错误提示。

http://p1.qhimg.com/t01138fa5b969a8e251.png

 

  释放过程的 IAT 需要加以修正。为此,我使用了Scylla 工具来删除无效的导入和点击修复转储按钮。现在我们已经有了二进制文件的工作副本。

http://p8.qhimg.com/t01e220e2334a960634.png

 

  将解压缩的二进制文件加载到 IDA Pro,我们可以看到现在似乎已经解码成功。我们可以看到更多的函数、 进口和普通字符串。

http://p3.qhimg.com/t016a03d69411c41f91.png

 

  使用X-字符串引用,我们将得到下面的函数。看起来0x004011B0 函数是解决这个难题的关键。

http://p4.qhimg.com/t016cd35665fd282a81.png

 

  在 0x004011B0 函数中,我们可以看到一些编码变量以及其中40个变量和由XOR 、加法和减法组成的数学变换。

http://p6.qhimg.com/t0105c251af5d1a5dcb.png

 

  我简单地将这些代码转换成 PHP,然后尝试强制性标记。

https://i-blog.csdnimg.cn/blog_migrate/54a941f859ef56ae806fc69fb4940c15.png

 

标记: PAN{C0nf1agul4ti0ns_0n_4_J08_W3LL_D0N3!}



文件: BabbySay.exe


SHA256:7CA8D9F1BE070DEB6535326AB4DFAE4824055F777DD929D2DEE9D0ADBEBDE785

加壳:

使用工具: exeinfo, Reflector

代码与二进制文件:https://github.com/jmprsp/labyrenth/tree/master/Window-Challenge-2

说明:这次的挑战是以 C#语言编写的。使用反射器之类的工具进行反编译将会非常繁琐。你可能会在 github中发现反编译源代码的副本。

http://p1.qhimg.com/t01a6a4d0a747bd8116.png

 

  在执行这个挑战的时候,你将会看到下面这种画面,或许我们需要知道一定顺序的密钥才能得到标记。

http://p6.qhimg.com/t011e9773685f9fbea8.png

 

  使用反射器进行反编译很容易。Key_click 函数和所有有趣字符看起来都是可疑的。

http://p1.qhimg.com/t01e41cda165b928597.png

 

  我只是单纯地将另一个 c# 项目的大部分代码副本粘贴在这里 (做适当删除)并且将变量写入文件。编译并运行 XDDDD。

http://p4.qhimg.com/t019e9df8942f929aeb.png

 

  这样我们就得到了这样的标记。

http://p6.qhimg.com/t01bdff19afcae2fe19.png

 

标记: PAN{B4BBY_Y3LL5_50_L0UD!}

本文转载自 jmprsp,安全客
原文链接:https://jmprsp.wordpress.com/2016/08/31/labyrenth-windows-track-challenge-1/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值