剑庭安
首页
黑客安全首页全部安全栏目 黑客技术黑客技术、渗透测试、漏洞利用工具与教程 安全软件安全工具、扫描器、检测与审计软件 病毒分析恶意软件分析、样本、逆向与沙箱 CTF思路CTF 题目、writeup、解题思路与工具 防护思路防御技术、加固、检测响应与蓝队 红蓝攻防红队攻击模拟、蓝队对抗、攻防演练 漏洞知识库漏洞、CVE、PoC、EXP 与安全研究
逆向|反编译
PHP源码PHP 网站源码、程序、系统 APP源码安卓/iOS APP 源码 ASP源码ASP 网站源码与程序 NET源码.NET 网站源码与系统 小程序源码微信/支付宝小程序源码 Dedecms风格模板Dedecms 织梦风格模板 Empirecms风格模板EmpireCMS 帝国风格模板 Discuz商业模板/插件Discuz 商业模板与插件 WordPress主题/插件WordPress 主题与插件 其它源码、模板其它各类源码与模板 游戏源码游戏源码与引擎项目 加密货币源码加密货币、区块链、钱包、USDT/比特币相关源码与工具 手游源码手机游戏源码、服务端、客户端与引擎项目 传奇源码热血传奇、传奇世界、复古传奇等客户端/服务端/引擎源码 页游源码网页游戏、H5 游戏、浏览器游戏源码 端游源码电脑单机游戏、PC 网游客户端/服务端源码
最新万能免驱动支持所有型号打印机下载程序 日历天气老黄历 · 每天同步真实日期与天气
站长工具站长工具 自助开通会员浏览该分类 其他资源qtziy SEO工具SEO工具 站群源码站群源码 泛程序泛程序 蜘蛛模板蜘蛛模板 蜘蛛池蜘蛛池 外链工具外链工具
搜索 自助开通会员🔓 破甲 API
登录 注册
首页 分类列表 CTF思路 SISE_TRANING_CTF_RE - SNST T…
SISE_TRANING_CTF_RE - SNST Traning RE Project.华软网络安全小组逆向工程训练营,尝试以 CTF 的形 CTF思路 点击放大
作者:admin 发布:2026-10-05

SISE_TRANING_CTF_RE - SNST Traning RE Project.华软网络安全小组逆向工程训练营,尝试以 CTF 的形

项目说明#华软网络安全小组逆向工程训练营###SNST Reverse Engineering Traning各个训练程序解析-----###1.RE-50 Writeup 把代码导入到IDA ,用Hex-ray 把Main 函数汇编转到伪C 代码,结果如下 ![]() 程序代码意思是:先给本地的数…
资源可下载 免费下载 0 条讨论
会员资源
开通会员后即可下载全部资源。
登录后开通会员
会员方案
347浏览量
0讨论
2下载链接
可下载资源状态
内容可验证
更新 2026-10-05
人工审核发布
评论区答疑

SISE_Traning_CTF_RE - SNST Traning RE Project .华软网络安全小组逆向工程训练营,尝试以CTF 的形

项目说明


#华软网络安全小组逆向工程训练营

###SNST Reverse Engineering Traning

各个训练程序解析

-----

###1.RE-50 Writeup

把代码导入到IDA ,用Hex-ray 把Main 函数汇编转到伪C 代码,结果如下

![]()

程序代码意思是:先给本地的数组的每个位置赋值,然后接收我们输入的字符串,再通过字符串对比函数来对比输入的字符串是否和本地校验的字符串一样,于是在strcmp 处下断点,位置如下

![]()

启动Ollydbg ,随意输入字符串

![]()

Ollydbg 会卡在0x40109D 这个地方(下断点的快捷键是F2 )

![]()

查看寄存器窗口,可以看到flag

![]()

---

###2.RE-100 Writeup

同样是转换到伪C 代码分析

![]()

程序原理:判断输入的字符串长度是否为19 ,符合的话把输入的字符串里面的每个字符的值加50 和byte_408030 里面的数据进行对比,于是我们把进去byte_408030 ,设置它的Array (数组)长度

![]()

然后按几下d 键把这个串转换成char

![]()

提取这些数据出来,拿到python 里面做逆运算(因为程序是把我们输入的数据加上50 再和这些数据做比较的,所以我们把这些数据减50 就可以获取到原来的字符串了)

code=[0x9A,0xA4,0x95,0xA4,0x98,0xAD,0x84,0x77,0x63,0x62,0x62,0x91,0x75,0x93,0x9E,0x95,0xA7,0xAF]

for index in code :
print chr(index-50),

![]()

---

###3.RE-250 Writeup

在main 函数的入口处和之前所见的有点不同,我们直接关注jmp loc_401113

![]()

跳到jmp loc_401113 中分析代码,可以看到这里有SEH 异常处理,异常回调的地址是0x401053

![]()

往下分析,程序会执行到0x40115A ,这是一个无效的指令,于是会印发SEH 异常处理,程序跳转到0x401053

![]()

于是找到0x401053 ,分析

![]()

可以看到这里的对比运算:输入的字符串和byte_40B938 里面的数据做异或运算之后再对比两个字符是否相同,异或运算的key 是80 加上当前对比的偏移位置,于是可以写出解密python

code=[0x38,0x23,0x31,0x27,0x32,0x2E,0x4,0x32,0x7,0x6B,0x6F,0x6B,0x3,0x25,0x31,0x2D,0x1D]
xor_number=80

for index in code :
print chr(index^xor_number),
xor_number+=1

![]()

---

###4.RE-500 Writeup

第一步首先要绕过IDA 本身的bug ,因为IDA 默认是从第一区块开始解析数据的,但是在入口点中的跳转却是在第一区块之前的,所以IDA 无法从这个位置中获取数据,于是使用OllyDbg 跟踪

![]()

跟踪到0x401041 处,继续往下单步

![]()

可以看到这又是SEH 异常处理,直接跳到0x404100

![]()

来到0x404100 ,先给它创建函数

![]()

创建函数之后的变化

![]()

然后用Hex-ray转换

![]()

进去到0x401014

![]()

切换回汇编窗口查看代码

![]()

继续跳到0x40199E 去分析,这里创建一个线程,线程入口地址是0x401023 ,于是我们过去分析这个函数的功能

![]()

发现这里一直死循环调用两个函数

![]()

sub_40102D 的代码如下(为什么会显示sub_401400 呢?因为代码是从sub_40102D 直接jmp 到sub_401400 的):从PEB 中获取程序是否被调试

![]()

Sub_401028 的功能是直接调用IsDebuggerPresent() 获取是否被调试

![]()

转换到汇编,可以发现,每次检测到程序被调试的话就会除0 ,产生异常退出程序,于是这个线程是用来反调试的

![]()

回去主线代码继续分析,遇到代码混淆

![]()

先到0x4019C8 中用c 键把代码转换成二进制数据

![]()

再到0x4019C9 中用d 键把二进指数据转换成代码,转换之后的代码如下:

![]()

继续往下分析,这里计算函数的真实地址,具体作用还不知道

![]()

继续往下,发现程序又创建新线程

![]()

于是我们查看线程里面的代码,这里是要让我们输入flag

![]()

再往下,线程自己就关闭了

![]()

主线代码里面在创建线程成功之后就阻塞等待它关闭,如果创建失败的话就关闭程序

![]()

继续往下,发现又有新线程…

![]()

在线程执行的代码最后有一处混淆

![]()

因为Push EAX + Retn 等价于Jmp Eax ,eax 的值是ecx+40 (sub -40 等于add 40),ecx 的值是这个函数的入口地址,于是可以计算出接下来程序运行到这里的将会跳转到下面这个地址

0x401610+0x40=0x401650

跳转到此

![]()

C 键转换代码

![]()

然后又是过混淆,相信大家已经明白啦

![]()

下面遇到switch 语句,先来分析下每个cases 的意义

![]()

Case 0 是检测程序是否被调试

![]()

Case 1 往缓冲区中写ERROR

![]()

Case 2 输出刚才的缓冲区

![]()

Case 3 把OK 写入缓冲区

![]()

Case 4 是flag 对比,然后我们把精力主要集中在此

![]()

这里调用了两个未知的函数,先忽略他们,继续往下分析

![]()

发现下面有一段数据

![]()

然后把这段数据和另一个缓冲区做对比

![]()

往上寻找EBP-0x28 ,发现刚才忽略的函数有利用到这两个缓冲区

![]()

在分析sub_401019 中发现,这个应该是加密函数

![]()

函数的参数有两个,于是回去看看到底程序传哪两个参数进去

![]()

可以看到,一个是0x10 ,一个是缓冲区地址,所以我们可以大胆的确定,a1 是要加密的数据地址,a2 是数据长度

![]()

给加密函数中的变量写好命名,整体的加密流程也就一看明了

![]()

于是获取到这段加密过后的字符串

![]()

放到python 里面解码

def decode(string) :
for index in range(0,16,2) :
string[index]=string[index]^16
string[index+1]=string[index+1]^16
bit_1_high=string[index]&0xF
bit_2_low=(string[index]&0xF0)>>4
bit_2_high=string[index+1]&0xF
bit_1_low=(string[index+1]&0xF0)>>4
source_bit_1=bit_1_high*16+bit_1_low
source_bit_2=bit_2_high*16+bit_2_low
print chr(source_bit_1),chr(source_bit_2),

code=[0xE7,0x86,0xE7,0x45,0x06,0x26,0xE6,0xF5,0x06,0xC6,0x46,0xA6,0x05,0xE6,0xD6,0xD6]
decode(code)

![]()

合起来就是hrctf:{you_can_make_all}

项目信息

开发语言:C++

Star 数:116

技术要点

该项目属于CTF思路方向的开源资源,代码结构清晰,适合安全研究人员学习参考。项目围绕SNST Traning RE Project .华软网络安全小组逆向工程训练营,尝试以CTF 的形式来使大家可以动手训练快速提升自己的逆向工程水平.CTF 的训练程序又浅到深,没有使用太复杂的算法,在逆向的过程中遇到的难关都是在分析病毒和破解中遇到的实际情况,注重于实用.训练营还包含有源代码文件,训练程序和思路.希望可以帮助小伙伴们入门逆向工程这个神奇的世界..展开,提供了可运行的实现,对理解相关安全机制、工具原理与攻防技术具有较高的研究价值。

从技术实现角度看,此类项目的核心在于对底层原理的深入理解与工程化落地。开发者在研究过程中可以结合官方文档与社区讨论,梳理项目的初始化流程、核心模块职责与数据流转,逐步掌握其中的技术细节与设计思路。

使用与学习建议

1. 下载源码压缩包,解压到本地环境。

2. 根据项目类型准备对应的运行环境与依赖。

3. 按照 README 中的步骤完成配置与部署。

4. 在隔离的测试环境中运行验证,避免影响生产系统。

免责声明

本资源来源于开源社区,仅供安全研究、技术学习与合法授权范围内的攻防演练使用,请勿用于任何非法或侵害他人权益的用途。使用本项目产生的一切后果由使用者自行承担。

资源标题SISE_TRANING_CTF_RE - SNST Traning RE Project.华软网络安全小组逆向工程训练营,尝试以 CTF 的形
所属分类CTF思路
发布作者admin
发布时间2026-10-05 23:53:30
下载权限 免费下载
附件数量2 个下载链接
浏览次数347
讨论数量0
主题状态正常讨论中

本资源免费,登录后即可在本页「下载链接」区域获取全部附件。

请在评论区留言说明具体链接,或联系作者补档。楼主更新后本页会同步最新的下载地址。

请先阅读正文中的授权说明;未注明的默认仅限站内学习交流,禁止直接搬运到其他站点二次售卖。
还没有讨论,快来抢沙发~
登录 后才能参与讨论
下载链接
会员才能下载
登录后开通会员
同分类推荐
暂无同类资源
免费登录即可下载
查看会员
放大预览

© 2026 剑庭安 - 网站开发定制 SEO 优化蜘蛛池代做 在线看手相算命. 保留所有权利。

Powered by 酷像SEOv3.0

网站地图 Sitemap.xml
首页 全部分类 黑客安全 逆向|反编译 精品源码 站长工具自助开通会员其他资源SEO工具站群源码泛程序蜘蛛模板蜘蛛池外链工具创意乐园 搜索 会员服务 登录 注册