- 博客(14)
- 收藏
- 关注
原创 BUUCTF刮开有奖wp
文件拖入IDA查看WinMain发现DialogFunc函数,跟进,F5查看伪C代码可以看到当输入的String是8位时会对String进行修改。继续向下会发现执行sub_4010F0函数,跟进。可以发现是一个修改String的函数,直接复制到C代码中并简单修改。由于转换后也要输出字符串,所以应使用char型数组来进行计算。运行得到转换后的结果。继续向下分析伪C代码。可以看到v4和v5在进行了sub_401000函数后,v4=’ak1w‘,v5=’V1Ax‘。跟进sub_401000函
2021-04-09 00:20:50 175
原创 BUUCTF-Reverse ex07 wp
将文件拖入ida,F5查看伪代码分析代码可知,输入的数据经过处理后与global值相等就是我们要求的flag,跟进flag可以看到一个偏移地址再跟进这个aFKWOXZUPFVMDGH可以得到一串字符串因为异或两次得原值,所以我们将global的值异或一次就可以得到我们需要输入的值,也就是要求的flag。根据之前的代码写出脚本。str1 = ['f' , 0x0A , 'k' , 0x0C , 'w' , '&' , 'O' , '.' , '@' , 0x11 , 'x' , 0x0D
2021-03-29 21:38:09 277
原创 upx命令行版本脱壳全过程
这是一个需要脱壳的文件,可以看到是加了upx壳的。首先打开cmd命令行。然后进入upx.exe所在的目录。代码如下:dir查看upx文件夹可以看到upx.exe,启动它。出现这样的界面就可以开始脱壳了。将需要脱壳的文件也放在upx文件夹内,我这里的样例是ceshi.exe使用代码upx -d 文件名这时候就脱壳成功了,把它再放进exeinfope看一下可以看到已经 提示Not packed。...
2021-03-28 15:51:09 8005
原创 攻防世界逆向新手区《maze》wp
将文件拖入Exeinfo PE得到是64位未加壳的ELF文件将文件拖入IDA,我们看到有main函数,点进去查看F5查看伪代码,分析下面可以看出flag以nctf开头。继续向下分析可以看到当v4的ASCII码值为79,111,46,48时分别执行四个函数。也就是输入’O’ ‘o’ ‘.’ ‘0’ 时分别进行左 右 上 下的移动。继续向下分析可以看到每次执行LABEL_14都会紧跟一次LABEL_15,再看到LABEL_22是输出"Wrong flag!"说明LABEL_15与
2021-03-28 13:37:40 214
原创 AcWing 777.字符串乘方
for(int i=1;i<=len;i++){ flag=0; if(len%i!=0) continue; for(int j=0;j<len;j++){ if(s[j]!=s[j%i]){ flag=1; break; } } if(!flag){ cout<<len/i<<endl; break; } }根据题意可以判断通过字符串周期的方法来求解。
2021-03-10 23:24:34 196
原创 AcWing 774.最长单词
while(cin>>s[counter]) { counter++; x=getchar(); if(x=='\n') break; }cin不会读取空格,将输入的字符串依次存入字符数组中,回车结束输入。for(int i=0; i<counter; i++) { if(s[max].size()<s[i].size()) { if(i==counter-1) { if(s[max].size()<s[i].size()-1)
2021-03-10 21:38:51 101
原创 单链表求和
在学习单链表的过程中,同过使用单链表求和,可以加深我们对于单链表和结构体的理解。代码及分析:#include <stdio.h>#include <stdlib.h>struct node{ int data; struct node *next;};typedef struct node linknode;typedef linknode *linklist;linklist creatlink(){ linklist head,tail,
2021-03-08 23:26:57 1246
原创 AcWing 756.蛇形矩阵(模拟法)
代码:#include <iostream>using namespace std;const int N = 110;int a[N][N];int main() { int m,n; int left=0,top=0; cin>>n>>m; int right=m-1,bottom=n-1; int k=1; while(left<=right||top<=bottom) { for(int i=left; i<=right
2021-03-08 22:30:07 123
原创 C++ 字符串读入方式
第一种(常用):#include <iostream>#include <cstring>using namespace std;int main(){ string a; getline(cin,a); cout<<a.size()<<endl; return 0;}第二种:#include <iostream>#include <cstring>using namespace s
2021-03-08 22:14:01 2720
原创 AcWing 753.平方矩阵 C++
题目描述:样例:根据上面的描述,我们可以知道一个全为1的矩阵从外圈到内圈不断缩小范围并且+1 就可以得到我们要的结果。例如1 1 1 1 11 2 2 2 11 2 3 2 11 2 2 2 11 1 1 1 1这个矩阵可以看做一个行和列均为5,值为1的矩阵由内到外不断+1而得到的。那么接下来我们就需要考虑 ,对于不同的行和列,我们一共需要加几次。由于我们初始已经为矩阵赋初值1,分析样例,在行和列为3和5(奇数)时,我们需要加上1次和2次(3/2,5/2次) 在行和列为4和6(偶数)时
2021-03-07 16:58:05 254
原创 C++求完全数
AcWing725.求完全数完全数定义:一个数除它本身以外的所有约数之和等于它本身。要求一个数是不是完全数首先要求出所给数的所有约数。 for(int i=2; i<X; i++) { if(X%i==0) sum=sum+i; //X是要求的数,sum是约数之和这段代码可以求出一个数的所有约数,但缺陷在于我们需要从1到这个数本身依次做一遍X%i的操作,在所给数过大时会超时,比如求666666是不是一个完全数。 for(int i=2; i<sqrt(X)
2021-03-05 22:55:37 4976
原创 指针与内存和C语言中函数调用小结
指针与内存指针为C语言学习中较为困难和重要的一环。正确理解指针与内存的关系才能更好的使用指针编写自己需要的函数。指针本身所占的内存由指针的类型所决定。例如 int *p 所占的内存空间为4个字节 也就是int类型所占的内存空间。可通过sizeof()测量: sizeof(T *p) //T为指针的类型。指针所指向的是该值的地址。例如: int *p; int a=0; p=&a; cout<<p; //在不同的机器上存储a=0的地址不一定相同。运
2020-11-10 22:36:06 123
原创 指针编写函数——自定义strcmp函数
指针编写函数——自定义strcmp函数自己编写一个strcmp函数:strcmp(s1,s2),如果s1= s2,返回值为0,如果s1≠s2, 返回它们二者第一个不同字符的ASCII码差值(如"BOY"与"BAD", 第二个字母不同,"O"与"A"之差为79-65=14)。如果要s1>s2,则输出正值,如果s1<s2,则输出负值。#include <iostream>#include <string.h>using namespace std;int strcm
2020-11-10 21:27:00 1721
原创 C++ 用指针倒序输出字符串
C++ 用指针倒序输出字符串如果有什么错误请大佬帮我指正#include <iostream>#include <string.h> //引用字符库函数。using namespace std;void invstr(char*s){ char *p; int n=strlen(s); //strlen可以计算字符串的长度。 for(p=s;n>=0;n--) { cout<<*(p+n-1); //若
2020-11-10 20:52:15 3059 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人