首页
社区
课程
招聘
[原创]GSLab2018-第一题标准版分析
发表于: 2018-8-25 22:13 5039

[原创]GSLab2018-第一题标准版分析

2018-8-25 22:13
5039

经过整体分析,可以得到注册机的编写思路:(注册机大佬们都已经写过并且都分享了出来,所以在这里就不放辣~)

输入username判断合法后,用8个4byte进行一系列计算算出5个int64值。

这五个值根据最后的方程,可以求出Decode之后的password的前24byte,再在末尾加上20180000构成32位的password

将Decode过的password用题目中的字符集的进行Base64Encode,Encode过程相比原版编码方式,得出索引值之后只需要添加 tmp = index ^ (index >> 3)

就能得到正确的密码了~~~

大家好我是萌新Theme,这篇帖子是我对GSLab2018-第一题标准版的write up
这道题可以说贯穿了我的学习,自己从一无所知四处瞎学,到听说有GSLab2018组织的这场比赛,到第一次尝试没有思路,到终于做出来这道题。
这个过程里我学到了很多很多东西,无论是心理上还是技术上都比最初的自己强了不少
有不少人写过了却还写,是因为有时候大佬们的write up角度和思路非常跳跃,也就相对比较难懂,并且在对于username的结构为什么是xxxx#xxxx#...#xxxx处都没有说明。而我希望我以一个萌新的角度来写的这篇write up,能让看过的其他朋友也可以做到独立完成这道题,并且能够将所有细节弄明白~
ida打开,可以看到这是一个由MFC写的程序,而MFC程序的逆向当然要从消息处理函数入手,
于是我参考这篇文章对于消息机制的分析自己跟踪了一遍:https://blog.csdn.net/jiangqin115/article/details/48809637

在_AfxDispatchCmdMsg()函数中,OD调试就可以得到函数的位置。


根据OD里的地址,再去ida跳转到对应地址,就可以在不使用工具的情况下定位到消息处理函数


定位到之后,又会出现两个新的知识需要补充:vector和string在ida中的识别,可以看到,再它们没有被识别出来的情况下,ida中的代码非常难懂,而我在第一次尝试的时候也就自然而然的一头扎进了库函数里...结果.......嗯...


库函数的识别过程我也走了弯路:自己去跟踪调试了库函数之后,分析得出功能再进行标注(希望大家能避免这样...)
正确而高效的做法,是对照库函数的C/C++代码,然后用调试器进行调试对比,大多数库函数都有足够鲜明的标识。
而LittleNA大佬的帖子:https://bbs.pediy.com/thread-230312.htm 将这个过程讲述的非常清楚
我在学习的过程中也参考了大佬所提供的demo进行vector和string的测试,才完全成功的通过了这关,来到题干部分:
在校验之前,代码还进行了一些简单的准备操作:获得username/password/标识标准版还是进阶版的flag,这些在识别出string结构和string.assign函数之后都变得非常清晰。
所以直接来看校验部分:

username+4是string数据结构中的 Mysize成员,即字符串长度。如果不为39则错误

再使用toupper函数将username中的字母转换为大写

然后使用vector切割字符串,也就需要能够识别vector的库函数

这个函数中的代码逻辑如下:在string中查找#,并生成子字符串。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2018-8-30 09:34 被theme_编辑 ,原因:
上传的附件:
收藏
免费 2
支持
分享
最新回复 (6)
雪    币: 9
活跃值: (180)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
谢谢分享
2018-8-26 10:07
0
雪    币: 649
活跃值: (314)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
5
yber 谢谢分享
2018-8-26 18:14
0
雪    币: 284
活跃值: (3604)
能力值: ( LV5,RANK:75 )
在线值:
发帖
回帖
粉丝
6
赞一下~
2018-8-27 13:05
0
雪    币: 649
活跃值: (314)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
7
囧囧 赞一下~
谢谢!
2018-8-27 17:37
0
游客
登录 | 注册 方可回帖
返回
//