标准库

printf

printf("格式化字符串",参变量)
格式化输出

sprintf

sprintf 是一个标准库函数,用于将格式化的数据写入字符串中。它的功能类似于 printf,但不是将输出打印到控制台,而是将格式化后的结果存储到一个字符串中。
sprintf(char *str,"format",...)

  • str是目标字符串的指针,存储格式化后的结果
  • "format"是格式控制字符串,指定存储格式
  • ...是可选参数列表,根据format来传递相应参数

将十进制数据转换为为十六进制数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
char *msg = "12345678";
int len = strlen(msg);
printf("%d\n",len);
int i,j;
char *result = (char*)malloc(32);
memset(result,0x00,sizeof(char)*32);
for(j=0;j<16;j++){
printf("%d",result[j]);
}
printf("\n");
for(i=0;i<len;i++){
sprintf(result+i*2,"%2x",msg[i]);
}
for(j=0;j<32;j++){
printf("%c",result[j]);
}
return 0;
>>>
8
0000000000000000
3132333435363738

snprintf

格式化输出字符串,并将结果写入到指定的缓冲区,与 sprintf() 不同的是,snprintf() 会限制输出的字符数,避免缓冲区溢出。
int snprintf(char * str,size_t size,const char * format,...);

  • str:目标字符串,用于存储格式化后的字符串的字符数组的指针。
  • size:字符数组的大小。
  • format:格式化字符串。
  • ...:可变参数

fprintf

int fprintf(FILE *stream, const char *format, ...)
发送格式化输出到流stream中

  • stream,这是指向 FILE 对象的指针,该 FILE 对象标识了流。
  • format,格式化标签
  • **…**,参变量
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <stdlib.h>

int main()
{
FILE * fp;
fp = fopen ("file.txt", "w+");
fprintf(fp, "%s %s %s %d", "We", "are", "in", 2014);
fclose(fp);
return(0);
}

putc

int putc(int char, FILE *stream)

  • char,被写入的字符。该字符以其对应的 int 值进行传递。
  • stream,指向 FILE 对象的指针,该 FILE 对象标识了要被写入字符的流。

getc

int getc(FILE *stream)

  • stream,指向 FILE 对象的指针。
  • 返回值,该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。

fputc

int putc(int char, FILE *stream)

  • char,要被写入的字符。该字符以其对应的 int 值进行传递。
  • stream,指向 FILE 对象的指针,该 FILE 对象标识了要被写入字符的流。
  • 返回值,以无符号 char 强制转换为 int 的形式返回写入的字符,如果发生错误则返回 EOF。

fgetc

int fgetc(FILE *stream)
指定的流 stream 获取下一个字符(一个无符号字符),并把位置标识符往前移动。

  • stream,指向 FILE 对象的指针。
  • 返回值,该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。

fputs

int fputs(const char *str, FILE *stream)
把字符串写入到指定的流 stream 中,但不包括空字符。

  • str,一个字符数组,包含了要写入的以空字符终止的字符序列。
  • stream,指向 FILE 对象的指针,该 FILE 对象标识了要被写入字符串的流。

fgets

char *fgets(char *str, int n, FILE *stream)
从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。

  • str,指向一个字符数组的指针,该数组存储了要读取的字符串。
  • n,读取的最大字符数,通常是字符串数组长度
  • stream,指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流。
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>

int main(){
FILE *fp = fopen("democ.txt","r+");
char str[20];
fgets(str,15,fp);
printf("%s",str);
fputs("Hello World!123456", fp);
return 0;
}
Hello World!12

WiFi ADB

官网链接https://www.apkmirror.com/apk/metactrl/wifi-adb-debug-over-air/(需要科学上网)
下载安装到手机端,就可以通过WiFi进行adb调试(需要连接同一个WiFi)

Qtscrapy

安卓实时投屏控制软件,可以通过 USB / 网络连接Android设备。

pyenv

python多环境管理器,切换各种python版本
在home目录下git clone https://github.com/pyenv/pyenv.git ~/.pyenv

1
2
3
4
5
6
7
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc

sudo apt update; sudo apt install build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev curl git \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

重置SHELLexec "$SHELL"
pyenv --version查看安装的pyenv的版本

查看可安装的python版本

pyenv install --list
只有版本号,没有名字的就是可安装的python版本

安装python

pyenv install 版本号

使用

  • pyenv global x.x.x
    设置全局默认python版本

  • pyenv versions
    显示已安装的python,带*的是当前使用的python版本

  • pyenv uninstall x.x.x
    卸载pytnon

  • pyenv local 3.8.0
    设置当前目录的本地python版本为3.8.0

Snipaste

截图软件
F1:截图,鼠标右键可取消
F3:定在屏幕上

CyberChef

编码解码加密解密
点击打开https://cyberchef.io/

SoFixer

so修复工具
https://github.com/F8LEFT/SoFixer

ll2CppDumper

还原dll文件

Everything

强大的文件搜索工具,快速定位计算机上的文件和文件夹。

官网

官网链接https://github.com/frida/frida/releases

安装

frida-tools

  • 安装frida-tools
    使用pip install frida-tools会自动安装最新版frida全系列产品
    frida迭代更新的速度很快,可以选择安装指定版本的frida
    1
    pip install frida-tools==9.2.4
  • 查看frida版本 frida --version
阅读全文 »

基础命令

命令基础格式
command [-options] [parameter]

  • command : 命令本身
  • [] : 可选,非必填
  • options : 命令的一些选项
  • parameter : 命令的参数
阅读全文 »

介绍

DES算法属于对称加密算法中的分组加密算法。

分组密码

分组密码是将明文信息编码表示后的数字序列,划分成长度相等的组,每组分别在秘钥的控制下变换成等长的数组数字序列。

流密码

流密码是明文和密钥长度一致,一一进行异或运算,可以得出密文。

阅读全文 »

定义

  • MAC(Message Authentication Codes),是一种消息摘要算法,也叫消息认证码算法。
  • 消息认证码是一种确认完整性并进行认证的技术。
  • 这种算法的核心是基于秘钥的散列函数。
  • HMAC中使用的单向散列函数不局限于一种,可以是MD5,SHA1等。
阅读全文 »

原创链接
题解

题目

前景需要:

小李在值守的过程中,发现有CPU占用飙升,出于胆子小,就立刻将服务器关机,并找来正在吃苕皮的hxd帮他分析,这是他的服务器系统,请你找出以下内容,并作为通关条件:

1.攻击者的shell密码

2.攻击者的IP地址

3.攻击者的隐藏账户名称

4.攻击者挖矿程序的矿池域名(仅域名)

5.有实力的可以尝试着修复漏洞

阅读全文 »