主要用于在运行时进行动态链接和加载共享库。

dlopen

用于打开一个共享库文件,并返回一个句柄以供后续操作。

  • void *dlopen(const char *filename, int flag)
    • filename:共享库的路径(可以是绝对路径或相对路径)。
    • flag:控制加载行为的标志,例如 RTLD_LAZY 或 RTLD_NOW。

dlsym

用于查找并返回共享库中的符号地址,通常用于查找函数或全局变量。

  • void *dlsym(void *handle, const char *symbol)
    • handle:由 dlopen 返回的句柄。
    • symbol:要查找的符号名称。

dlclose

用于关闭由 dlopen 打开的共享库并释放资源。

  • int dlclose(void *handle)
    • handle:由 dlopen 返回的句柄。

dlerror

用于获取最后一个动态链接操作的错误信息。

  • char *dlerror(void)
    返回值:返回一个指向错误信息字符串的指针,如果没有错误则返回 NULL。

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)