2026/2/15 9:54:06
网站建设
项目流程
国外外贸网站有哪些问题,东莞做一个企业网站要多少钱,文化传播有限公司注册条件,asp商业网站源码一、初窥门径
首先#xff0c;我们登录ctf.pediy.com#xff0c;找到“2019看雪CTF晋级赛Q1”#xff0c;然后就从第1关开始我们的夺旗之路吧。
第一关“流浪者”#xff0c;题目要求输入正确的注册码。我们将程序下载下载后双击#xff0c;会出现一个输入注册码的界面。…一、初窥门径首先我们登录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; // eax6 char Str1[28]; // [spD8h] [bp-24h]4 int v3; // [spF4h] [bp-8h]1 int v4; // [spF8h] [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主要是对输入的字符的值进行逐个处理。如果字符的值在4857之间就将其减去48如果在6590之间就将其减去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为起点的而且4857减去48对应的值是[09]6590减去29对应的值是[3661]97122减去87对应的值是[1035]那么刚才“K”字符对应的19落在了[10~35]的区间可以得知“K”对应的注册码应该是1987106通过查阅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(i48) if i 9 and i 36: password chr(i87) if i 35 and i 62: password chr(i29) print(password)运行结果如下看注册码被计算出来了。这时我们把蓝色字符输入到程序中CTF第一关就通过啦四、后记其实第一关没有什么难度但由于本文主要面向新手所以重点讲解了IDA的基本操作 、字符串及函数的交叉引用、DWORD数据结构的存储原理 、简单的算法分析等一些基本功。随着第一关的顺利通过我们稍事休息在第二关见文章来自网上侵权请联系博主互动话题如果你想学习更多网安方面的知识和工具可以看看以下题外话题外话黑客/网络安全学习路线今天只要你给我的文章点赞我私藏的网安学习资料一样免费共享给你们来看看有哪些东西。网络安全学习资源分享:下面给大家分享一份2025最新版的网络安全学习路线资料帮助新人小白更系统、更快速的学习黑客技术一、2025最新网络安全学习路线一个明确的学习路线可以帮助新人了解从哪里开始按照什么顺序学习以及需要掌握哪些知识点。对于从来没有接触过网络安全的同学我们帮你准备了详细的学习成长路线图学习规划。可以说是最科学最系统的学习路线大家跟着这个大的方向学习准没问题。读者福利 |CSDN大礼包《网络安全入门进阶学习资源包》免费分享安全链接放心点击我们把学习路线分成L1到L4四个阶段一步步带你从入门到进阶从理论到实战。L1级别:网络安全的基础入门L1阶段我们会去了解计算机网络的基础知识以及网络安全在行业的应用和分析学习理解安全基础的核心原理关键技术以及PHP编程基础通过证书考试可以获得NISP/CISP。可就业安全运维工程师、等保测评工程师。L2级别网络安全的技术进阶L2阶段我们会去学习渗透测试包括情报收集、弱口令与口令爆破以及各大类型漏洞还有漏洞挖掘和安全检查项目可参加CISP-PTE证书考试。L3级别网络安全的高阶提升L3阶段我们会去学习反序列漏洞、RCE漏洞也会学习到内网渗透实战、靶场实战和技术提取技术系统学习Python编程和实战。参加CISP-PTE考试。L4级别网络安全的项目实战L4阶段我们会更加深入进行实战训练包括代码审计、应急响应、红蓝对抗以及SRC的挖掘技术。并学习CTF夺旗赛的要点和刷题整个网络安全学习路线L1主要是对计算机网络安全的理论基础的一个学习掌握而L3 L4更多的是通过项目实战来掌握核心技术针对以上网安的学习路线我们也整理了对应的学习视频教程和配套的学习资料。二、技术文档和经典PDF书籍书籍和学习文档资料是学习网络安全过程中必不可少的我自己整理技术文档包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点电子书也有200多本书籍含电子版PDF三、网络安全视频教程对于很多自学或者没有基础的同学来说书籍这些纯文字类的学习教材会觉得比较晦涩难以理解因此我们提供了丰富的网安视频教程以动态、形象的方式展示技术概念帮助你更快、更轻松地掌握核心知识。网上虽然也有很多的学习资源但基本上都残缺不全的这是我自己录的网安视频教程上面路线图的每一个知识点我都有配套的视频讲解。四、网络安全护网行动/CTF比赛学以致用当你的理论知识积累到一定程度就需要通过项目实战在实际操作中检验和巩固你所学到的知识同时为你找工作和职业发展打下坚实的基础。五、网络安全工具包、面试题和源码“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等感兴趣的同学不容错过。面试不仅是技术的较量更需要充分的准备。在你已经掌握了技术之后就需要开始准备面试我们将提供精心整理的网安面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。如果你是要找网安方面的工作它们绝对能帮你大忙。这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的如果大家有好的题目或者好的见解欢迎分享。参考解析深信服官网、奇安信官网、Freebuf、csdn等内容特点条理清晰含图像化表示更加易懂。内容概要包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…**读者福利 |**CSDN大礼包《网络安全入门进阶学习资源包》免费分享安全链接放心点击