您当前所在位置: > 爆料站 > 一周烩

面向新手的CTF实战教学(一)

时间:2019-06-02 10:07:05  来源:  作者:网络

原标题:面向新手的CTF实战教学(一)

参加CTF(Capture The Flag)是提高网络安全技术水平的一种有效途径,其解题模式中主要提供了逆向、漏洞挖掘与利用、Web渗透等题目,作为业余爱好者,这不失为一种锻炼自己思路的好方法。2019年03月10日开始的“2019看雪CTF(第一季)”已经落下帷幕,本文就从第一关开始,详细解析本季CTF的比赛题目。本文面向读者为初学者,所以部分分析过程可能会详细一些, 高手可以略过 。

一、 初窥门径

首先,我们登录ctf.pediy.com,找到“2019看雪CTF晋级赛Q1”,然后就从第1关开始我们的夺旗之路吧。

第一关“流浪者”,题目要求输入正确的注册码。我们将程序下载下载后双击,会出现一个输入注册码的界面。此时我们随意输入一串字符并点击“验证”,程序会弹出一个消息框,提示我们输入错误。如图:

如果你曾有些逆向的入门知识的话,这算是逆向工程中最常见的场景了。按照常规的软件运行逻辑(获取输入的字符串 –> 对字符串进行处理 –> 与真正的注册码做比较 –> 如果正确则进行下一步、错误则弹出消息框),我们只需进行反向操作,即先根据消息框上面的文字,找到调用该消息框的函数,再通过层层回溯,找到处理字符串的关键函数,进而窥探出注册码的庐山真面目。那么在这里,我们需要记下消息框上的关键线索:“错了!加油!”,然后用反汇编软件对目标程序进行详细剖析。

二、 庖丁解牛

在这里,我们使用著名的反汇编软件IDA ,首先打开IDA,载入目标程序。经过一番载入后,界面停在了程序的入口点:

那么,我们下一步的任务,就是从目标程序里面找到我们记下的关键线索——那条叫做“错了!”的字符串。我们在 IDA 菜单栏中点选“View”–>“Open subview”–>“Strings”:

然后IDA界面上就显示出了目标程序内的字符串。看,里面有我们寻找的线索:

此时,我们双击该字符串,就来到了该字符串对应的位置(先不要管这个红色线框):

看到上图红色线框里面的字符“sub_4017B0”了吗?这就是引用“关键线索”字符串的函数,我们双击这个函数,来到了它的地址:

从图中的汇编代码中可知,这是一个弹出消息框的函数,并不参与注册码的相关计算。再看红色线框的内容,是调用这个函数的“上家”函数sub_4017F0,我们且双击一下它,看看“上家”在搞什么鬼?

在双击过后,界面显示了sub_4017F0函数的地址:

哦……看看红色线框里面的内容,是在操作某些字符串!是不是感觉有了点眉目了?但这一堆压栈、读写寄存器等汇编指令看得人头大,我们在这个界面上按下键盘上的“F5”,IDA会将这个函数的汇编代码翻译为C语言风格的伪代码:

这下真相大白了,原来“上家”都干了这些事情!我们分析一下代码:

int __cdecl sub_4017F0(int a1)//传入一个int变量a1 { int result; // eax@6 char Str1[28]; // [sp+D8h] [bp-24h]@4 int v3; // [sp+F4h] [bp-8h]@1 int v4; // [sp+F8h] [bp-4h]@1 v4 = 0; v3 = 0; //以a1的值为基础地址,每次累加4字节,读取对应的内存数据。由此可推断出a1是一个字符串的首地址,该字符串数 //据类型为DWORD,而1个DWORD所占空间为4字节,所以要以4的倍数来移动 while ( *(_DWORD *)(a1 + 4 * v4) < 62 && *(_DWORD *)(a1 + 4 * v4) >= 0 ) { //将依次读取的a1[ ]的值作为aAbcdefghiabcde[ ]数组的下标,取得相应的值存入数组Str1[ ]中。 Str1[v4] = aAbcdefghiabcde[*(_DWORD *)(a1 + 4 * v4)]; ++v4; } Str1[v4] = 0; //将Str1[ ]与"KanXueCTF2019JustForhappy"进行对比,如果相同则调用函数sub_401770,如果不同则调用函数 //sub_4017B0(注意,这个就是之前弹报错消息框的函数) if ( !strcmp(Str1, "KanXueCTF2019JustForhappy") ) result = sub_401770; else result = sub_4017B0; return result; }

看到这里,我们就知道了,原来函数sub_4017F0是对某个叫a1[ ]的字符串当成了索引,用它来查阅aAbcdefghiabcde[ ]的内容,然后把查阅出来的内容与”KanXueCTF2019JustForhappy”进行对比。

那么,aAbcdefghiabcde[ ]数组里面的内容是啥呢?我们再次回顾到函数sub_4017F0的反汇编代码处:

哦,原来是“KanXueCTF2019JustForhappy”下面的那一串字符啊!注册码比对的原理搞明白了,胜利就在前方!

但是先别着急,还有最后一个问题:这个用来作对比的a1[ ]数组是从哪儿来的呢?是我们一开始输入到程序里的那串字符吗?还是有别的情况?带着这个疑惑,我们回到sub_4017F0函数的界面,发现该函数还有个“上家”sub_401890在调用它:

我们还用老办法,双击红色线框内的sub_401890,跳到这个函数。然后鼠标滚轮往上滚几下,来到函数的首地址00401890:

看,从反汇编代码中可以看出,这个函数要从程序的输入框中读取字符了!看来这就是计算注册码的第一个关口了。为了方便分析,我们继续用“F5”来读(伪)源代码:

坚持住,这是最后一步了!我们对代码进行分析:

//把输入的字符放到字符串数组Str[ ]中 Str = CString::GetBuffer((CWnd *)((char *)v8 + 100), v3); //遍历整个数组,对数组的值进行处理 if ( strlen(Str) ) { for ( i = 0; Str[i]; ++i ) { if ( Str[i] > 57 || Str[i] < 48 ) { if ( Str[i] > 122 || Str[i] < 97 ) { if ( Str[i] > 90 || Str[i] < 65 ) sub_4017B0; else v5[i] = Str[i] - 29;//如果Str[i]的元素的值在65~90之间,就把它减去29,将结果放到v5[i]中去; } else { v5[i] = Str[i] - 87;//如果Str[i]的元素的值在97~122之间,就把它减去29,将结果放到v5[i]中去; } } else { v5[i] = Str[i] - 48;//如果Str[i]的元素的值在57~48之间,就把它减去29,将结果放到v5[i]中去; } } result = sub_4017F0((int)v5);//将数组v5[]传递给函数sub_4017F0 ; } else { result = CWnd::MessageBoxA(v8, "请输入pass!", 0, 0); } return result;

从上面可以看出,函数sub_401890主要是对输入的字符的值进行逐个处理。如果字符的值在48~57之间,就将其减去48;如果在65~90之间,就将其减去29;如果在97~122之间,就将其减去87。然后将处理过的数组存放到v5[ ]里面。注意,这里面的值是ASCII码!通过查阅ASCII码表可以发现:48-57对应的是数字字符“0”~“9”,65-90对应的是大写字母“A”~“Z ”,97-122对应的是小写字母“a”~“z”。

综上所述,该程序的运行流程为:[双击启动程序 ]–> [输入注册码] –> [函数sub_401890获取注册码并进行处理]–> [将处理后的字符串传递给函数sub_4017F0函数,该函数以处理后的字符串数组为索引,从aAbcdefghiabcde[ ]里面查表] –> [如果查出的结果等于 “KanXueCTF2019JustForhappy”则通过,若不相等则报错]

三、 见招拆招

知道了原理,那破译出注册码的算法也就简单了,我们只需要将其反向操作一下即可。

以“KanXueCTF2019JustForhappy”的第一个字符“K”为例,“K”字符在aAbcdefghiabcde[ ]字符串的第19个位置,(aAbcdefghiabcde[ ] =“abcdefghiABCDEFGHIJKLMNjklmn0123456789opqrstuvwxyzOPQRSTUVWXYZ”,且数组第一个下标是以0为起点的),而且48~57减去48对应的值是[0~9];65~90减去29对应的值是[36~61];97~122减去87对应的值是[10~35];那么刚才“K”字符对应的19,落在了[10~35]的区间,可以得知“K”对应的注册码应该是19+87=106,通过查阅ASCII码可知,对应的是小写字母“j”。

那么,我们用编程来实现一下。上Python代码:

str_A = 'KanXueCTF2019JustForhappy' str_B = 'abcdefghiABCDEFGHIJKLMNjklmn0123456789opqrstuvwxyzOPQRSTUVWXYZ' str_C = [] for i in str_A: str_C.append(str_B.index(i)) password = '' for i in str_C: if i >= 0 and i <10: password += chr(i+48) if i >= 9 and i < 36: password += chr(i+87) if i >= 35 and i < 62: password += chr(i+29) print(password)

运行结果如下:

看,注册码被计算出来了。这时我们把蓝色字符输入到程序中,CTF第一关就通过啦:

四、后记

其实第一关没有什么难度,但由于本文主要面向新手,所以重点讲解了IDA的基本操作 、字符串及函数的交叉引用、DWORD数据结构的存储原理 、简单的算法分析等一些基本功。随着第一关的顺利通过,我们稍事休息,在第二关见!

附本题目下载地址: 2019看雪CTF > 晋级赛Q1 > 第一题 流浪者

责任编辑:

相关下载

玩家评论

《使命召唤手游》BY15怎么样 BY15实战分析

导 读 使命召唤手游中BY15是一个比较出色的枪械,那么到底要怎么使用最好呢?希望下面这篇使命召唤手游BY15实战详评能帮到大家。 BY15实战详评 很多人在玩霰弹枪的时候觉得喷详情>>

阅读: 1
日期: 2020-03-23
DNF剑魂最“强”BUG:一个技能成幻神,实战有效,洞察之眼轻松打

“地下城与勇士之小狐狸君爱谈游戏电竞”第一千四百七十五期《DNF剑魂最“强”BUG:一个技能成幻神,实战有效,洞察之眼轻松打》,100版本到来后,玩家都忙详情>>

阅读: 6
日期: 2020-03-23
《风云岛行动》猫女实战怎么玩 猫女实战玩法攻略介绍

导 读 风云岛行动游戏中猫女是一个非常好用的英雄,所以下面小编就为大家详细的介绍一下猫女的实战连招吧,看完之后相信大家就会使用猫女了。 合理利用猫女两个被动。 第一详情>>

阅读: 2
日期: 2020-03-17
《剑与远征》新贝琳达怎么样 贝琳达优缺属性及实战介绍

导 读 剑与远征新贝琳达其实有很强力的爆发,而且输出高、羁绊加成高等作用,不过缺点也是有的,现在就跟随九游大大来看看详细内容吧,希望大家能够喜欢~ 剑与远征贝琳达现版本优详情>>

阅读: 4
日期: 2020-02-19
使命召唤手游UL736最强配件推荐ul736实战详评

  使命召唤手游中ul736是一个比较特殊的武器,很多喜欢的玩家特喜欢,不喜欢的玩家视为垃圾,那么这个武器到底怎么样呢?希望下面这篇使命召唤手游UL736最强配件推荐能帮到大家详情>>

阅读: 8
日期: 2020-02-06
使命召唤手游M2126怎么样M2126实战详评

  使命召唤手游中M2126是一把非常不错的武器,那么到底要怎么使用能发挥其最大威力呢?希望下面这篇使命召唤手游M2126实战详评能帮到大家。 M2126实战详评   1、这个武器非详情>>

阅读: 0
日期: 2020-01-21
《剑与远征》送葬者弗克斯怎么玩 送葬者弗克斯实战技巧教学

导 读 在这款手游中,棺材是这款手游中的英雄之一,那么剑与远征棺材是谁?今天小编就来为大家解答一下,感兴趣的玩家可以看看。 剑与远征棺材是谁? 送葬者弗克斯 在这款手游中,棺详情>>

阅读: 6
日期: 2020-01-19
seo实战密码:谈谈读“SEO实战密码”的一些感悟

原标题:seo实战密码:谈谈读“SEO实战密码”的一些感悟 SEO是叱咤网络营销、线上营销十多年的工具之一,当前不管是搜索引擎平台、电子商务平台、任何详情>>

阅读: 11
日期: 2019-12-28
云顶之弈地狱火阿木木技能介绍阿木木实战效果展示

  云顶之弈中一直没有阿木木这个英雄,不过前不久官方终于曝光了他的资料和信息,那么到底这个英雄强不强呢?下面就一起看下去吧。云顶之弈地狱火阿木木技能介绍  新棋子阿木详情>>

阅读: 5
日期: 2019-11-26
LOL新英雄赛娜设计稿、技能实战曝光:大招可穿透且范围超广_效果

原标题:LOL新英雄赛娜设计稿、技能实战曝光:大招可穿透且范围超广 赛娜这个英雄自打被曝光以来,各种关于这个英雄的信息就开始像挤牙膏一样被拳头慢详情>>

阅读: 11
日期: 2019-10-28
阴阳师SP酒吞实战视频鬼王酒吞童子实战视频演示

鬼王酒吞童子是阴阳师于10月23日更新后在特邀测试服先行上线的SP式神,其有着强力的输出能力和一定的辅助能力。接下来就让我们一起来看一看关于它的实战视频吧。阴阳师SP酒吞详情>>

阅读: 23
日期: 2019-10-24
和平精英P90介绍P90配件与实战说明

和平精英中的P90大家喜欢吗?本次就为大家带来了和平精英P90介绍,也是P90配件与实战说明,非常全面的内容,想了解的朋友可以参考,希望能帮到大家。作为冲锋枪的它,拥有着稳定的弹道详情>>

阅读: 7
日期: 2019-10-22
ps6实战教程完全实例:[1]汽车换色

下面我利用ps6里面的“替换颜色”功能为一辆小汽车换色。黄色是原图,红色是替换之后的颜色。攻略对象ps6汽车图片实例步骤1首先当然是打开配送软件并且导入一张需要修改颜色详情>>

阅读: 7
日期: 2019-06-20
DNF鬼泣弑魂实战攻略

地下城与勇士游戏中,鬼泣弑魂是一个爆发型职业,没有很好的控场技能,但是能够在一定的范围内打出很高的爆发伤害,从而很适合进行刷图时的BOSS秒杀,因此鬼泣弑魂比较适合组队刷图,配详情>>

阅读: 23
日期: 2019-06-19
最强NBA易建联属性及实战技巧详细分析

最强NBA易建联属性及实战技巧详细分析,说起易建联,相信玩家们都非常熟悉了,最为姚明的接班人,这次在最强NBA中的会有怎么样的属性,实战中又该怎么操作呢。步骤分解1从数据上我们详情>>

阅读: 13
日期: 2019-06-16
《战锤40K战争黎明3》3V3多人对战实战解说视频

《战锤40K战争黎明3》的3V3多人对战是本作的一大亮点,下面为大家带来了《战锤40K战争黎明3》3V3实战解说视频,一起来看看这场战事吧! 详情>>

阅读: 13
日期: 2019-06-10
刀塔自走棋阵容灵活变换实战分析

《刀塔自走棋》游戏中每个玩家都要在一次次的棋子选择中最终确定自己的阵容,很多时候你想要的棋子并不会一直来,这时候就需要考虑变换阵容了,如何灵活变换阵详情>>

阅读: 7
日期: 2019-06-10
刺客信条起源全武器属性介绍及实战分析

刺客信条起源中有很多武器属性,具体是什么效果呢?下面就为大家带来刺客信条起源全武器属性介绍及实战分析,一起来看看。 一般属性 1、吸收伤害数值 巴耶详情>>

阅读: 28
日期: 2019-06-10
LOL新英雄实战:偷掉亚索大招会怎样?

原标题:LOL新英雄实战:偷掉亚索大招会怎样? ★游戏马蹄铁原创 德玛西亚神偷 LOL新英雄首日PBE表现目前 详情>>

阅读: 10
日期: 2019-05-08
《孤岛行动》新手实战怎么打 新手实战技巧心得

孤岛行动在实战中我们应该注意什么呢,怎么打才能吃鸡呢,这也是大家都想知道的,下面就跟随小编一同去看看孤岛行动实战技巧吧,希望对大家 详情>>

阅读: 14
日期: 2019-05-07
王者荣耀实战模拟怎么玩-实战模拟玩法介绍

  王者荣耀实战模拟怎么玩?王者荣耀在最近推出详情>>

阅读: 1
日期: 2019-04-19
《风暴英雄》瓦莉拉怎么玩 实战技巧分析

导 读 风暴英雄作为一款多人竞技游戏,一直深受广大玩家喜爱,本次我就给大家带来...被瓦娘完克的代表,4级前千万不要和狼王对拼,4级后在双方满血 瓦娘不溢出格挡... 详情>>

阅读: 3
日期: 2019-04-10
刀塔自走棋六刺版本顶级猎人打法攻略 各阶段实战分析

 《刀塔自走棋》当前版本是六刺的版本,不过有玩家利用猎人在这个版本中照样如鱼得水,吃了很多鸡,怎么玩好猎人呢?相信很多玩家都想知道,下面就为大家带来六刺版本详情>>

阅读: 12
日期: 2019-04-08
第五人格-疯眼实战中怎么玩 疯眼实战攻略 详解怎么玩

  第五人格疯眼实战中怎么玩?很多玩家不知道疯眼实战中怎么玩厉害,一起来看看疯眼实战攻略吧!  1.开局不需要直接去追击求生者,先利用【耳鸣】大致判断求生者详情>>

阅读: 8
日期: 2019-03-23
dota2邪影芳灵技能实战评测 邪影芳灵怎么样厉害吗

dota2邪影芳灵技能实战评测 邪影芳灵怎么样厉害吗,DOTA2今天更新的两位英雄玩家都实战演练了吗,有玩家已经做了技能测试,游戏部落小编已经整理出了相关攻略,感兴趣... 详情>>

阅读: 1
日期: 2019-03-21
《潮人篮球手游》实战视频首曝!

《潮人篮球手游》实战视频首曝!Game234游戏门户网网发详情>>

阅读: 4
日期: 2019-03-21
《风云岛行动手游》首测实战视频,不要太好玩哦!

《风云岛行动手游》首测实战视频,不要太好玩哦!Game23详情>>

阅读: 5
日期: 2019-03-21
《全民飞机大战》新宠物小天使 实战分析 详解怎么玩

全民飞机大战有各种可爱给力的小宠物,下面小编带给玩家新宠物小天使实战分析,全民飞机大战小天使实力如何,值得玩家们拥有么,看看全民飞机大战新宠物小天使实战分析。小天使满级属性:攻击力:1详情>>

阅读: 3
日期: 2019-03-18
话术小助手免费-话术聊天实战下载

Game234游戏门户话术小助手免费专题为大家带来了多款的免费话术小助手,话术聊天实战下载。如果你不知道怎么撩妹、撩汉,通过这些话术小助手可以提升大家的话术聊天实战。2019年有哪些比较好用的话术小助详情>>

阅读: 9
日期: 2019-03-18
《Apex英雄》实战小技巧操作视频分享 实战有哪些技巧?

1>Apex英雄实战有哪些技巧?游戏中在各种战斗中都会有技巧的,这里给大家带来了Apex英雄实战小技巧操作视频分享,感兴趣的同学一起来看下视频吧。详情>>

阅读: 17
日期: 2019-03-17
逆战玩家教学解说 高跳技巧及实战应用

逆战小黑打造教学解说,介绍逆战中的高跳技巧及实战应用!... 了高跳技巧,却不知道如何将这些技巧运用到实战当中...关键词: 逆战逆战游戏视频逆战教学逆战高跳游戏视频... 详情>>

阅读: 1
日期: 2019-02-28
实战检验《Apex英雄》枪械!从弱到强枪械评分!哪把枪最好使呢?

详情>>

阅读: 1
日期: 2019-02-25
王者荣耀:盘古新皮肤实战蓝色特效一览,KPL春季揭幕战下月开赛

王者荣耀全新英雄盘古在今天正式上架,虽说是免费获得,但有部分不想做任务或金币英雄碎片充足的玩家已直接入手永久盘古,同时288皮肤创世神祝也加入了碎片商店,那么这款皮肤详情>>

阅读: 0
日期: 2019-02-23
CF手游军事基地西部实战攻略

CF手游军事基地西部实战攻略。军事基地第大型的资源点,这里探索的意义比较大,可观的物资也比较吸引大部分玩家来装备,那么军事基地西部有什么作战技巧呢?一起来了解一下吧详情>>

阅读: 7
日期: 2019-02-21
《王者荣耀》孙悟空大圣娶亲皮肤实战视频

王者荣耀孙悟空大圣娶亲皮肤实战视频:王者荣耀孙悟空大圣娶亲皮肤已经与我们见面啦,作为2019年的情人节限定皮肤孙悟空大圣娶亲一上线就受到了广大小伙伴们的喜爱,那么孙悟空详情>>

阅读: 25
日期: 2019-02-14
《王者荣耀》露娜一生所爱皮肤实战视频

王者荣耀露娜一生所爱皮肤实战视频:王者荣耀露娜一生所爱皮肤已经与我们见面啦,作为2019年的情人节限定皮肤露娜一生所爱皮肤上线就受到了广大小伙伴们的喜爱,那么露娜一生所详情>>

阅读: 12
日期: 2019-02-14
相关手机游戏
精彩推荐