- 博客(41)
- 收藏
- 关注
原创 c++ string类 +底层模拟实现
两则底层逻辑相同,但是对于迭代器来讲可以在迭代器中修改变量值(因为底层类似指针可以直接修改对应地址的·1值),而对于范围for来讲,(auto ch: s2)相当于是一个拷贝,修改ch的值并不能修改实参的值,所以需要用引用(auto& ch: s2)才能修改变量的值。对于拷贝构造,对自定义类型完成神拷贝,浅拷贝(一个字节一个字节拷贝)并不能满足,原因如下。对于写时拷贝只试用满足原因1,并不能满足条件2(自己进行扩容规深拷贝)相当于一个字符一个字符读取字符串,遇到,‘\0’会终止读取。
2025-02-02 16:45:32
325
原创 C++复习
如果该自定义变量有对应的默认构造(原本类里边),那么可以不在初始化列表对它进行初始化,如果没有该变量的默认构造,则需要在初始化列表进行初始化,若存在默认构造且在初始化列表对该变量也有进行初始化,则优先使用初始化列表的初始化。
2025-01-14 23:38:03
964
原创 MYSQL 库,表 基本操作
1.对将要存储的数据进行编码2.对将要执行的操作(增删查改)数据是对数据编码的校验,本质也是一种读取数据库中数据库采用的一种编码格式。
2024-11-13 22:12:46
649
原创 SQL pta习题
select sdept as 系别,ssex as 性别, count(*) as 人数。select cno as 课程号,cname as 课程名,credit as 学分。select sno as 学号,sname as 姓名,pnum as 身份证号码。select cno as 课程号,count(*) as 选课人数。select dept as 院部 ,count(*) as 总人数。where dept='音乐学院' or dept='体育学院';where sex='女';
2024-11-08 00:16:14
644
原创 Linux常见基本指令大全
cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录, 则它会把前面指定的所有文件或目录复制到此目录中。“=”表示套接字(sockets)。head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的 开头至标准输出中,而 tail 想当然尔就是看档案的结尾。2. 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它 将所给的源文件或目录重命名为给定的目标文件名。
2024-10-26 15:10:18
999
2
原创 C++(类和对象.下)
这是因为实例化对象2进行了一个隐式类型转换。在数值2赋值给B b2对象时,会默认生成一个临时的拷贝构造(拷贝函数为类的构造函数)。然后在把拷贝构造后的类型给对象b2,进行调用。由以上运行结果可知,我们晓得实例化对象1很正常调用构造函数,但实例化对象2觉得比较奇怪。如果不想进行类似隐式类型转换,那么就在构造函数前加explicit关键字即可。
2024-08-08 18:04:08
255
原创 C++(类和对象.中)
⽆参构造函数如下图所示,我们在类中不进行,函数构造只使用自带的默认构造函数,最后结果初始化内置类型为随机变量,(我这里使用的是vs2022,该编译器并没有进行初始化,其他编译器可能会对变量进行初始化)由此也可以回归我们刚开始提出的两个问题,使用编译器初始化变量是不可靠的,需要我们自己写。总结:大多数情况下,构造函数都需要我们自己去实现。少数类似MYQueue且Stack有Stack有默认构时,MyQueue自动生成可以用。若实例化多个对象,后实例化的先析构,类似于栈后进先出·原则。
2024-07-30 18:16:06
542
原创 C++(类和对象.上)
• class为定义类的关键字,Data为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省 略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或 者成员函数。• 为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加_ 或者 m 开头,注意C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求。
2024-07-27 16:47:00
1007
原创 C++(入门1)
定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中 即为命名空间的成员。命名空间中可以定义变量/函数/类型等。namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下 ⾯的rand不在冲突了。C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/ 类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。
2024-07-25 16:39:28
1299
原创 网络验证1(所含内容仅供自己复习用)
比如:我们登录qq时需要输入账号和密码,而且账号和密码必须时匹配的,而账号密码能否匹配成功还要看qq服务器的响应。运行程序可知,如果账号密码不匹配,则不能注册成功,但没有注册成功也没有显示任何信息,看了该代码原来如何注册不成功呢程序会一直循环。步骤:运行->附加->搜索->下断点->运行程序(跳到断点)->暴力破解->取消断点->执行cpu。上边的一个跳转指令显示不会跳过之歌函数,我们只需修改指令,让其跳转过该函数就行。运行程序可以知道,即使我们社么也不输就会显示注册成功。程序来到我们下断点的地方。
2024-07-24 15:52:30
345
原创 [NewStarCTF 2023 公开赛道]AndroGenshin
解密结果:BADCFEHGJILKNMPORQTSVUXWZYbadcfehgjilknmporqtsvuxwzy1032547698/+第一个加密函数rc4把username作为keybase64_table作为加密后数据。在进行一次魔改base64解密即可。找到主函数进去,主要逻辑。
2024-07-22 14:42:29
236
原创 [2022DASCTF X SU 三月春季挑战赛]easyre
拿到附件查看一下信息32位aspack壳脱完壳后用ida打开:跟进这个函数很明显是一个base58加密,但经过验证并没用。继续跟进:最后判断条件就是让byte_492a60和v2做比较,byte_492a60就是加密后的flag往上看很容易看到加密逻辑如果知道key就能进行解密,这里我尝试了在ida中动态调试但结果会报错。我尝试使用od找key。
2024-07-19 16:37:46
449
原创 一道链表综合题(这题会了 链表对你so easy)
我们在原链表的基础上,在每个结点后边创建一个与前结点一模一样的结点,把他们插进原链表,然后根据原链表random指向的结点,让新创建节点的的randm指向原结点random的下一个结点的next:然后把新创建的结点在尾插下来就可以了。大体意思就是复制一个一摸一样链表出来,看到这有些人就会想复制链表吗谁不会,但仔细看题可知,链表中还存储一个random,这样就使我们不知道如何操作了。温馨提醒:如有些话语看不懂,欢迎来打扰小编,很高兴为你解答。
2024-07-16 16:56:18
164
1
原创 链表带环问题(如何判断链表带环)
所谓带环就是一组链表种最后一个结点的next指针不指向NULL而是指向该链表的某个结点。eg:如何判断一个链表是否带环?以目前阶段所学知识,唯一方案。意思就算是先定义一个快指针,和一个慢指针,让快指针每次走两步,慢指针每次走一步。如果当慢指针将要进入环中时,快指针已经在园内某个位置了。在当快指针与慢指针相遇时,即可判断该链表带环。如果不带环,则两则相遇是值next值都为NULL,也就是链表最后一个节点。
2024-07-16 15:01:00
842
原创 NSSCTF(idapython除去花指令)
操作了几个后发现需要一直重复该操作,所以我们写一个python脚本帮助我们实施。拿到附件打开ida找到main函数发现存在经典的花指令。我们在查看一下这些字符串在0x2D59处会出现flag。只需要讲该语句第一个字节改为0x90(null)即可。
2024-07-16 12:34:48
477
原创 壳基础(pe结构,导入表)
在程序执行的时候进行链接(生成的.dill文件,属于在单独在一个模块,如要进行某功能的修改,只需要修改.dill文件即可),对应的库文件称为动态链接库。,而动态链接库生成的可执行文件在运行时才会链接所引用的外部地址,所以不能独立运行。pe文件从磁盘加载到内存时会分配4GB虚拟地址,在磁盘上的结构与内存中的结构是一一对应的,程序运行时内存中拉伸了一点。DOS头:是古老的16位的操作体统,微软为了兼容16位程序的运行,把DOS头放在了pe文件2框架的头部。imagebase;
2024-07-13 17:33:42
416
原创 BUUCTF (MFC)
其中注入手段很关键,因为 FromHandle 函数内部的工作就是查句柄与对象指针的映射表,而这个表又是以线程为单位存放的,因此线程注入( CreateRemoteThread )是不会成功的。句柄,然后在发送数据,遇到MFC题目我们需要知道各个窗口的基本信息,利用工具xspy查看一下窗口信息。在这里我们可以看待该窗口的信息,出现一串字符串,并根据“flag就在控件中”推测这就是密文。窗口信息也就显示出来了,但这个窗口信息不是们想要的,查看右上边窗口。拿到附件查看一下信息发现是VM壳。
2024-07-11 12:25:41
318
原创 BUUCTF
拿到exe附件,发现是pythoy打包的exe,这时我们需要用pyinstxtractor-master工具对exe进行解析。发现该函数中把final中4个数值修改了,我们只需把原脚本这四个地方的值修改一下即可。发现是把输入的flag与final函数的值作比较,跟进final函数发现是已知。拿到附件发现该附件没有输入:根据题目描述分析拿到域名在进行MD5加密即可。ida打开发现main函数有一个异或加密,有一个comper比较函数。逻辑很清楚,加密后的密文就是Buf1,直接提取Buf1的数据。
2024-07-10 17:39:34
356
原创 BUUCTF
一版来说unity3D题目都是用c#写的,关键程序都在\BJD hamburger competition_Data\Managed\Assembly-CSharp.dll中。逻辑也非常简单:就是经过sha1加密变为该字符串,在经过ma5加密作为flag。拿到附件是一个unity 3D游戏题目,这样的题目需要使用工具:dnSpy。我们找到该dill,用dnaSy分析,找到关键地方。又看到mmd5加密后保留20个字符。
2024-07-09 20:20:32
344
原创 BUUCTF(WP)(2024_7_8)
发现这个函数进行了一次加密,并调用qword_562160A01090 我们知道这个函数刚才已经被赋值strcmp地址,由此可知main函数比就是该地方的比较,input相当于加密后的flag a2相当于字符·串zer0pts{********CENSORED********}发现flag(input)经过三次加密后的结果与str2作比较,得知加密后结果即是str2对应的字符串。需要注意的是这里偏移量为3,并且对数字没有解密还需要把解密后字符串中的数据减去3。(本题不会,看的大佬的wp,写出来仅供复习)
2024-07-08 17:48:50
870
原创 弹窗网页去除
首先先了解有关网页的两个api函数:1.WinExec();要想去除网页只需把ret提前放置,或者把这些指令全部都nop掉就可以。目的:去除跳转网站,让该作用失效,或则跳转到自己指定的网站。把程序用dbg打开,ctrl+G搜索函数WinExec地址。点开网页会跳转到www.baidu.com网站。后续会讲到windows api函数目前先了解。取消断点,返回到调用该函数地方。声明:本操作仅供自己学习复习。清晰的看到调用的函数与网页。下断点让cpu执行到这里。修改完进行补丁修改即可。
2024-07-05 16:54:37
170
原创 修改软件名字(通杀方法)
操作软件(od)操作exe:基础011.exe修改为:标题修改通杀方法内存窗口->查找->二进制字符串->输入改标题查找到改标题->选中右键->二进制编辑->修改标题复制到可执行文件,保存文件即可修改成功。
2024-07-03 18:54:22
2027
2
原创 Reversr刷题日记(NSSCTF)
主要程序逻辑清晰可见,经过base64编码得到下边一串字符串。但直接解密发现又不是想要得结果。看到就是将其中某10位与另外十位进行交换位置。拿到源码时,看到逻辑很简单,就是明文进行*33后在对b求模,然后在网上随便搜索一个在线反编译就能得到python源码。问题是b不知道,这是可以根据常识经验进行爆破得出b。然后使用一些python反编译工具提取pyc文件。看到多为py 可以断定为python反编译文件。用ida打开 SHIFT+12。然后在进行爆破求得flag。找一个在线网站,即可解密。
2024-04-28 19:06:18
278
1
原创 upx脱壳(最简单方法之一)
发现刚开始又四个push,把四个寄存器压入栈中,相当于pushed,为了使栈平衡,对应的应该有4个pop或一个poped(这一段入栈出栈操作就是壳的程序)根据入栈出栈为相反动作,直接搜索(ctrl+f)关键指令 pop rbp。首先运行到程序入口,执行push命令,发现esp(栈顶在变化)再次拖入ida中,发现出现main函数进一步分析即可。找到pop后真正的oep也就在紧接着的jmp指令中。可看到这就是程序真正的入口点(在此处进行脱壳即可)首先拖入到od中,找到程序的入口点。首先使用快速脱壳的方法。
2024-04-13 10:48:47
3573
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人