Runtime information

Frida

  • Frida.version
    包含当前 Frida 版本的属性,类型为字符串。
  • Frida.heapSize
    动态属性,包含 Frida 私有堆的当前大小,由所有脚本和 Frida 自身的运行时共享。
阅读全文 »

objection

Objection是一个基于Frida的命令行hook工具。
通过命令pip install objection进行安装

jnitrace

JNItrace是一个基于Frida框架的Hook jni方法的库。
通过命令pip install jnitrace进行安装

使用

  • 基本使用
    jnitrace -l libnative-lib.so com.example.myapplication

选项

  • -m <spawn|attach>
    指定附加机制。

Java介绍

Java语言是一种面向对象的高级语言。Java程序是在Java虚拟机上运行的,具有更好的安全性。
Java语言的源程序是以后缀.java结尾的文本文件,经过Java编译器(Javac)编译为.class的字节码文件,字节码是Java虚拟机(JVM)的机器语言。Java装载器将java字节码文件装载到Java虚拟机种运行。

阅读全文 »

Hello,C++

1
2
3
4
5
6
7
8
#include <iostream>  // 预处理指令,包含iostream库。
using namespace std; // 使用 std 命名空间中的所有实体。

int main() {

cout << "Hello, C++" << endl; //输出字符串。
return 0;
}
阅读全文 »

库变量和库宏

size_t

这是无符号整数类型,它是sizeof关键字的结果。
size_t 类型表示C中任何对象所能达到的最大长度,它是无符号整数。
它的定义可以理解为typedef unsigned int size_t;typedef unsigned long size_t;

NULL

这个宏是一个空指针常量的值。

strcat

char *strcat(char *dest, const char *src)
把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
返回一个指向最终的目标字符串 dest 的指针。

strncat

char *strncat(char *dest, const char *src, size_t n)
把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。

strcmp

int strcmp(const char *str1, const char *str2)
把 str1 所指向的字符串和 str2 所指向的字符串进行比较,如果相同,返回0,否则不为0。

strncmp

int strncmp(const char *str1, const char *str2, size_t n)
把 str1 和 str2 进行比较,最多比较前 n 个字符,如果相同,返回0,否则不为0。

strcpy

char *strcpy(char *dest, const char *src)
把 src 所指向的字符串复制到 dest。
需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。

strncpy

char *strncpy(char *dest, const char *src, size_t n)
把 src 所指向的字符串复制到 dest,最多复制 n 个字符。
当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。

memset

void *memset(void *str, int c, size_t n)
将指定的值 c 复制到 str 所指向的内存区域的前 n 个字节中。

memcpy

void *memcpy(void *dest, const void *src, size_t n)
从 src 复制 n 个字节的值到 dest。

memcmp

int memcmp(const void *str1, const void *str2, size_t n)
把存储区 str1 和存储区 str2 的前 n 个字节进行比较,如果相同,返回0,否则不为0。

malloc

动态内存分配
void *malloc(size_t size)

  • size
    内存块的大小,以字节为单位。

调用格式(指针类型*)malloc(n)

1
2
3
int *pr =NULL;
pr = (int*)malloc(sizeof(int)*5);
free(pr);

calloc

void *calloc(size_t nitems, size_t size)
分配所需的内存空间,并返回一个指向它的指针。malloc 和 calloc 之间的不同点是,malloc 不会设置内存为零,而 calloc 会设置分配的内存为零。

  • nitems
    要被分配的元素个数。
  • size
    元素的大小。

free

释放内存,避免内存泄漏
free(p)

标准库

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