记录

sana
1月14日发布 /正在检测是否收录...

1. trace汇编数量

  • 分类:unidbg

    String traceFile = "yourpath";
    PrintStream traceStream = new PrintStream(new FileOutputStream(traceFile), true);
    emulator.traceCode(module.base, module.base+module.size).setRedirect(traceStream);
  • 使用Unidbg做算法还原前,先traceCode看一下对手多少行汇编是一个不错的选择;

2. 补系统相关

  • 分类:unidbg

    
    android/os/SystemProperties->get(Ljava/lang/String;)Ljava/lang/String;
    
    adb shell getprop 属性名 即可;
    比如 adb shell getprop ro.build.id

3. AES魔改点

  • 分类:密码学
  • AES 的魔改主要集中两大部分,1是密钥编排部分,主要形式有两种,一是修改密钥编排算法中i=4时的流程,二是修改轮密钥的使用顺序;2是主体运算部分,包括修改S盒、加解密流程颠倒等形式。对AES 的魔改其实并不多,主体运算部分很多开发人员不敢动,怕影响算法的安全性,密钥编排部分修改起来就随意多了,比如小红书的魔改AES就是此列,修改了Rcon。

4. Socket 抓包

  • 分类:抓包
  • 当我们在使用Charles进行抓包的时候,会发现针对某些IP的数据传输一直显示CONNECT,无法Complete,显示Sending request body,并且数据包大小持续增长,这时候说明我们遇到了Socket端口通信;

5. 获取linker首地址

  • 分类:工具

    // 干净卫生的 获得linker起始地址的代码
    char line[1024];
    int *start;
    int *end;
    int n = 1;
    FILE *fp = fopen("/proc/self/maps", "r");
    while (fgets(line, sizeof(line), fp)) {
      if (strstr(line, "linker64")) {
          __android_log_print(6, "r0ysue", "%s", line);
          if (n == 1) {
              start = reinterpret_cast<int *>(strtoul(strtok(line, "-"), NULL, 16));
              end = reinterpret_cast<int *>(strtoul(strtok(NULL, " "), NULL, 16));
    
          } else {
              strtok(line, "-");
              end = reinterpret_cast<int *>(strtoul(strtok(NULL, " "), NULL, 16));
          }
          n++;
    
      }
    
    }

6. trace分析手段

1 搜索,4字节的直接搜,单字节的搜要注意上下文,找计算生成结果的,不要找赋值的;
2 打印一些关键函数的日志,比如memcpy;
3 traceWrite;
4 SearchData插件;

7.Unidbg典型的methodid问题

解决步骤:
1.看看JNI的上下文,对应的jmethodId是对应在哪个类的哪个方法;
2.抛异常的地方打断点,查看是哪个dvmClass;
3.补全继承关系;

8.获取so基址

static uintptr_t so_base = 0;

int callback(struct dl_phdr_info *info, size_t size, void *data) {
    if (strstr(info->dlpi_name, "libnative-lib.so")) {
        so_base = info->dlpi_addr;
        return 1; // 停止迭代
    }
    return 0;
}

void hook() {
    dl_iterate_phdr(callback, NULL);
    if (!so_base) {
        __android_log_print(6, "sanaTag", "SO not found via dl_iterate_phdr");
        return;
    }

    // 拿到so基址
    __android_log_print(6, "sanaTag", "Success! Base address: 0x%x", so_base);
    *(void **) (so_base + 0x59940) = reinterpret_cast<void *>(reinterpret_cast<long>(myr1));
}
评论 共1条
OωO
取消
  1. 头像
    1
     · 
    回复

    [热词系列_张三]