第七道题Reverse 3

Reverse 3

strlen

格式:strlen (字符数组名)

功能:计算字符串s的(unsigned int型)长度,不包括’\0’在内

说明:返回s的长度,不包括结束符 \0提示

注意:调用strlen函数前需要包含string.h这个头文件

sizeof和strlen的区别

  1. sizeof属于一种操作符(关键字) 而strlen属于一种函数

  2. sizeof计算的结果是内存大小 strlen计算的结果则是字符串的长度

char ar[10]="abcdefg";
int num1=sizeof(ar)//10
int num2=strlen(ar)//7

ctrncpy

ctrncpy属于c语言标准库里的一个函数 ,定义在string.h头文件中,作用就是将一个字符串的一部分拷贝到另一个字符串里

memset

memset也是属于c语言标准库里的一个函数,定义在string.h的头文件中,作用是将一块内存中所有字节都设定为特定的值

int main() {
char arr1[20]="abcdefghigk";
char arr2[10];
memset(arr2, '\0', sizeof(arr2));
strncpy(arr2,arr1,9);
//因为这里arr2出去\0外所包含的内存空间为9 所以交换字符不可超过9位
printf("%s\n",arr2);

chr()

chr() 是 Python 中的一个内置函数,它用于将 ASCII 码值转换为对应的字符ASCII是一种字符编码标准,用于将特定的数字值映射到字符上。在 Python 中,chr() 函数接受一个介于 0 到 127 之间的整数(对应于标准 ASCII 表)作为参数,并返回对应的字符。

strncmp

strncmp是c'语言标准库里的一个函数,定义在string.h头文件中,作用是比较两个字符串a b 在前n位是否相同

如果在第n位上两个字符串所对应字符的ASCII值相同的话返回0

如果a<b则返回一个负整数

如果a>b则返回一个正整数

const char *str1 = "abcdefg";
const char *str2 ="efjajkfaj";
int num-strncmp(str1,str2,5);

base64

Base64是一种基于64个可打印字符来表示二进制的表示方法

26个大写字母 26个小写字母10个自然数还有两个符号+和/

因为是64位刚好是2的6次方 所以每六位为一组 缺少的用=表示

和ASCII码表的含义差不多

值得注意的是Base64不是加密算法 其仅仅是一种编码方式 所以不能依赖他进行加密

img

在做这道reverse3时 我们先对程序进行查壳 发现无壳 然后对程序进行反汇编处理

在伪c代码里查看主函数的逻辑(将str这个字符串进行base64编码,把Destination这个数组里的字符拷贝到v4中 ,又进行了一次简单的加密)

在写一个一次解密的脚本

这里这个加密的原理就是将本来每个字符对应的ASCII值再减去其索引值 进行简单的加密

    char arr[] = "";
    int len = strlen(arr);
    char flag[100] = {0}; 
    int num = 0; 
    for (int i = 0; i < len; i++)
    {
        char temp = arr[i] - i;
        if (temp< 0) {
            temp += 256;
        }
        flag[num++] =temp;
        }
    flag[num] = '\0'; 
    printf(" %s\n", flag);

解密后的 e2lfbDB2ZV95b3V9在放入base解密工具中进行解密得到flag{i_l0ve_you}提交就ok了

1. 编写一个 Java 程序,在控制台输出“Hello World!” ```java public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } } ``` 2. 编写一个 Java 程序,求一个整数数组中的最大值和最小值 ```java public class MaxMin { public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5}; int max = arr[0]; int min = arr[0]; for (int i = 1; i < arr.length; i++) { if (arr[i] > max) { max = arr[i]; } if (arr[i] < min) { min = arr[i]; } } System.out.println("最大值:" + max); System.out.println("最小值:" + min); } } ``` 3. 编写一个 Java 程序,计算从 1 到 100 的所有整数的和 ```java public class Sum { public static void main(String[] args) { int sum = 0; for (int i = 1; i <= 100; i++) { sum += i; } System.out.println("总和:" + sum); } } ``` 4. 编写一个 Java 程序,判断一个整数是否为质数 ```java public class PrimeNumber { public static void main(String[] args) { int num = 7; boolean isPrime = true; for (int i = 2; i < num; i++) { if (num % i == 0) { isPrime = false; break; } } if (isPrime) { System.out.println(num + "是质数"); } else { System.out.println(num + "不是质数"); } } } ``` 5. 编写一个 Java 程序,判断一个字符串是否为回文字符串 ```java public class Palindrome { public static void main(String[] args) { String str = "level"; boolean isPalindrome = true; for (int i = 0; i < str.length() / 2; i++) { if (str.charAt(i) != str.charAt(str.length() - 1 - i)) { isPalindrome = false; break; } } if (isPalindrome) { System.out.println(str + "是回文字符串"); } else { System.out.println(str + "不是回文字符串"); } } } ``` 6. 编写一个 Java 程序,将一个字符串中的所有空格替换为“%20” ```java public class ReplaceSpace { public static void main(String[] args) { String str = "Hello World"; String newStr = str.replaceAll(" ", "%20"); System.out.println(newStr); } } ``` 7. 编写一个 Java 程序,将一个字符串反转 ```java public class ReverseString { public static void main(String[] args) { String str = "abcdefg"; StringBuilder sb = new StringBuilder(str); sb.reverse(); System.out.println(sb.toString()); } } ``` 8. 编写一个 Java 程序,将一个数组中的元素顺序颠倒 ```java public class ReverseArray { public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5}; int[] newArr = new int[arr.length]; for (int i = 0; i < arr.length; i++) { newArr[arr.length - 1 - i] = arr[i]; } System.out.println(Arrays.toString(newArr)); } } ``` 9. 编写一个 Java 程序,输出九九乘法表 ```java public class MultiplicationTable { public static void main(String[] args) { for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { System.out.print(j + "×" + i + "=" + j * i + "\t"); } System.out.println(); } } } ``` 10. 编写一个 Java 程序,求斐波那契数列中的第 n 项 ```java public class Fibonacci { public static void main(String[] args) { int n = 7; int[] arr = new int[n]; arr[0] = 1; arr[1] = 1; for (int i = 2; i < arr.length; i++) { arr[i] = arr[i - 1] + arr[i - 2]; } System.out.println("第" + n + "项:" + arr[n - 1]); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值