CTF--2016XDCTF全国网络安全大赛之reverse5

0x01 题目介绍


题目名称
    
reverse5

题目描述

File: reverse5.exe
Size: 121344 bytes
File Version: 1.0.0.1
Modified: Friday, September 30, 2016, 01:24:54
MD5: 01C16460135B1BA4BCA48E3AB0173A17
SHA1: 06ACD42197A5F52A9CCFEC0B12EE52F647B1E71D
CRC32: 1D3A0115





0x02 解题要点


运行程序显示,随便输入数字字符串点击按钮,没有任何提示。




IDA载入看看,等待分析完成,选中代码部分,键盘F5实现伪代码转化。


然后找到入口函数_WinMain@16



进入之后到了主函数入口,红色标记位置是内部系统main函数的真正入口。



下面的才是真正的函数入口,也就是我们用户经常开发编写的代码入口函数winmain函数。



下图是进入主函数之后的主要代码部分



进入之后发现有线程函数创建,注意此处标记。跟踪进去,看线程函数实体。


也就是线程函数部分,是主要的执行体。



跟踪进去,看线程函数实体。发现主要是反调试和一些干扰花指令

IsDebuggerPresent函数 https://msdn.microsoft.com/en-us/library/ms680345.aspx


花指令函数和无用的代码分支



然后继续往下分析代码,左侧为命令参数,右侧为对话框入口。

说明程序接收了外部的命令行参数,实现了数据的输入。




底部有对应的窗口函数创建,就是一开始我们双击之后的用户输入编辑框和确认检查按钮。


注意DialogFunc函数,是一个窗口回调函数,实现的是消息的实体循环处理部分。不太懂的


可以看windows的消息机制。



进入窗体处理,ID为1001的情况下进入这个分支。发现有关键函数。

获取文本内容函数GetWindowTextA,

https://msdn.microsoft.com/en-us/library/windows/desktop/ms633520(v=vs.85).aspx

和计算文本长度函数GetWindowTextLengthA。

https://msdn.microsoft.com/en-us/library/windows/desktop/ms633521(v=vs.85).aspx

同样的,也发现使用了数据设置和退出函数。

SetWindowText函数 https://msdn.microsoft.com/en-us/library/windows/desktop/ms633546(v=vs.85).aspx



进入窗体处理,ID为2的情况下进入这个处理。发现有用户自定义的内部函数




进入窗体处理查看初始化,发现1001和1002为句柄赋值关键函数。

那么这之间到底有什么关联吗?多个ID可能触发多个事件。




文中没有解释的相关函数读者可以自己查阅微软官方文档。

https://msdn.microsoft.com/en-us/library/windows/desktop/ff468925(v=vs.85).aspx

然后联系前面的代码中出现的ID事件,那么分析发现1001的ID事件是个花指令干扰,

因为无论你怎么填写数据到输入框,都不能计算正确。因为没有获取此事件进行处理,

也就是根本没有读取你的输入窗口数据。因为1001标记是程序的按钮。

而1002才是输入框标记。




那么根据前面的分析,那么我们抛弃1001的思路,进入1002,发现并没有处理1002的事件代码。

于是陷入了死循环。此时,我们注意我们的程序前面分析的执行流程,发现有个窗口之前,

命令行指令数据操作,于是跳转到此处。byte_41B3B0可疑之处。



跟踪到此处变量引用的地方,发现在事件处理结束后,有代码操作。事件ID为无符号整数2。





进入此处,发现有对用户命令输入参数的代码处理过程,于是推断此处才是真正的逆向分析的考点。


经过程分析,跟踪调试。



过程和算法为des,base64算法和xor异或算法.执行顺序

sub_401020((int)&byte_41B3B0, v5, (int)&v7)//base64运算

sub_402DB0(&v7, (int)&v18)

//xor异或运算

sub_4024F0((int)&v7, v26, &v9, (int)v16)//des算法运算sub_402E20(&unk_41B370, v16)

//结果判断比较






密文数据比较追踪,&unk_41B370为静态存储的密文, v16则为用户输入之后进行运算后的密文。


相等即可。整理后为





对密文进行逆向解码,因为是对称加密算法可以还原。代码自行编写:

1 sub_4024F0((int)&v7, v26, &v9, (int)v16)    //des算法运算

2 sub_402DB0(&v7, (int)&v18)        //xor异或运算

3 sub_401020((int)&byte_41B3B0, v5, (int)&v7)    //base64运算


结果输出为:


XDFLAG{this_1s_a_small_di8h_for_y0u_today!}


0x03 学习总结


此题目挖坑不少,选手必须清楚识别出干扰的花指令和冗余代码。

中间出现比较多的错误算法分支和事件消息处理。还有必须去除

反调试代码,方可减小阻力,实现快速解题。




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CTF(Capture The Flag)网络安全大赛题库是一个用于培训和测试网络安全技能的平台,它包含了各种类型的题目,如逆向工程(Reverse)、Web安全、密码学(Crypto)、杂项(Misc)等。在这个题库中,你可以找到多种类型的题目,比如:【RE】:Reverse_Checkin、SimplePE、EzGame;【Web】:f12、ezrunner;【Crypto】:MD5、password、看我回旋踢、摩丝;【Misc】:爆爆爆爆、凯撒大帝的三个秘密、你才是职业选手等。其中,每个题目都有不同的难度和挑战,可以帮助参赛者提升网络安全技能和解决问题的能力。如果你想进一步了解这些题目,可以访问网络信息安全攻防学习平台hackinglab.cn,其中包含了更多的题目和学习资源。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [长春理工大学第六届CTF网络攻防大赛题解(文末有题目下载链接)](https://blog.csdn.net/m0_64659074/article/details/123853255)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [网络信息安全攻防学习平台CTF练习-基础篇](https://blog.csdn.net/weixin_49349476/article/details/130601581)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值