Frida辅助分析OLLVM虚假控制流程(下)

OLLVM虚假控制流程简介

地址:https://github.com/obfuscator-llvm/obfuscator/wiki/Bogus-Control-Flow

此方法通过在当前基本块之前添加基本块来修改函数调用图。这个新的基本块包含一个不透明谓词,然后条件跳转到原始基本块。

原始基本块也被克隆并填充随机选择的垃圾指令
可用的编译器选项
-mllvm -bcf:激活伪造的控制流通道

  • -mllvm -bcf_loop=3:如果激活了通行证,则将其应用于某个功能 3 次。默认值:1
  • -mllvm -bcf_prob=40:如果激活通行证,基本块将被混淆,概率为 40%。默认值:30

有跳转

有2个全局变量 x和y

3到7分看视频

这一批函数我们hook看看

javascript 复制代码
  sub_12B44
  sub_12BF8
  sub_1391C
  sub_1391C
  sub_18AB0
  sub_12CF4
  sub_12CF4

写应该hook脚本 2个地方出现我们的输出结果,出现地址0x18cec

地址0x18cec

把这几个函数也hook一下

javascript 复制代码
 sub_15FAC((unsigned __int64 *)&v13, v8, v9);
 sub_15FAC((unsigned __int64 *)&v13, a1, a2);
 sub_16214(&v13, a3);
 sub_16900

第一次完整的出现输出是在这个0x16214,第一个参数是加密过程,第二个参数是结果

javascript 复制代码
unsigned __int64 *__fastcall sub_16214(unsigned __int64 *a1, __int64 a2)

看第2个的引用。

在sub_1531C里面找到了下面的函数

javascript 复制代码
function hex_dump(p) {
    try {
        return hexdump(p) + "\r\n";
    } catch (error) {
        return ptr(p) + "\r\n";
    }
}    

function hook_nttive_addr(addr,idb_addr){
    var base_hell_jni=Module.findBaseAddress("libhello-jni.so");
Interceptor.attach(addr,{
    onEnter:function(args){
       
        this.arg0=args[0];
        this.arg1=args[1];
        this.arg2=args[2];
        this.arg3=args[3];
        this.lr=this.context.lr;
    },onLeave:function(retval){
        console.log("ptr"+ptr(addr)+"idb_addr:"+ptr(idb_addr)+"LR:"+ptr(this.lr).sub(base_hell_jni)+"\r\n",
       "this.arg0:\r\n",hex_dump(this.arg0),
        "this.arg1:\r\n",hex_dump(this.arg1),
        "this.arg2:\r\n",hex_dump(this.arg2),
        "this.arg3:\r\n",hex_dump(this.arg3),
        "retval:\r\n",    hex_dump(retval));
    }
})
}
function  hook_Native(){

 var hook_hellojni=Module.findBaseAddress("libhello-jni.so");
 //var  addr_0xF620= hook_hellojni.add(0xF620);

hook_nttive_addr(hook_hellojni.add(0x12B44),0x12B44);
hook_nttive_addr(hook_hellojni.add(0x12BF8),0x12BF8);
hook_nttive_addr(hook_hellojni.add(0x1391C),0x1391C);
hook_nttive_addr(hook_hellojni.add(0x18AB0),0x18AB0);
hook_nttive_addr(hook_hellojni.add(0x12CF4),0x12CF4);
hook_nttive_addr(hook_hellojni.add(0x15FAC),0x15FAC);
hook_nttive_addr(hook_hellojni.add(0x16214),0x16214);
hook_nttive_addr(hook_hellojni.add(0x16900),0x16900);
}
function mian(){
    hook_Native();
} 
setImmediate(mian)
相关推荐
踢球的打工仔14 分钟前
PHP面向对象(5)
android·java·php
Rover.x16 分钟前
错误:找不到或无法加载主类 @C:\Users\AppData\Local\Temp\idea_arg_file223456232
java·ide·intellij-idea
4***172718 分钟前
使用 java -jar 命令启动 Spring Boot 应用时,指定特定的配置文件的几种实现方式
java·spring boot·jar
亿元程序员21 分钟前
做了十年游戏,我才意识到:程序员最该投资的,是一台专业的编程显示器
前端
CoderYanger34 分钟前
优选算法-字符串:63.二进制求和
java·开发语言·算法·leetcode·职场和发展·1024程序员节
3***312135 分钟前
java进阶1——JVM
java·开发语言·jvm
charlie11451419141 分钟前
深入理解C/C++的编译链接技术6——A2:动态库设计基础之ABI设计接口
c语言·开发语言·c++·学习·动态库·函数
IT_陈寒43 分钟前
Python高手都在用的5个隐藏技巧,让你的代码效率提升50%
前端·人工智能·后端
Cx330❀44 分钟前
C++ STL set 完全指南:从基础用法到实战技巧
开发语言·数据结构·c++·算法·leetcode·面试
white-persist1 小时前
【攻防世界】reverse | Reversing-x64Elf-100 详细题解 WP
c语言·开发语言·网络·python·学习·安全·php