ollvm-流程
原始代码:
int x=0 ;
std::cin>>x; //上面这俩行是基本模块。
//条件模块
if(x%2==0){
std::cout<<"偶数"<<std:endl;
}else if(x==5){
std::cout<<"5"<<std::endl;
}else{
std::cout<<"不是5的奇数"<<std::endl;
}
return 0;
------------------------------------------------------------------------------------------------------------------
1,首先找出原 函数全部逻辑的 Block( 所有的条件分支 比如 可能出现的 跳转情况 );
2,创建 switch 排序到 里面,给每一个 Block 取一个ID ,将每个ID的 逻辑 进行连接,跳转等操作。
3,执行完毕以后 进行 ID的修改 跳转到 别的 Block
---------------------------------------------------------------------------------------------------------------------
ollvm混淆以后的代码 :
```C++
int x=0 ;
std::cin>>x; //基本模块保持不变 。
int blockid =0x1 ; //生成blockID;
while(true){
switch( blockid ){
case 0x1:
if(x%2==0){
blockid =0x2;
}else{
blockid =0x4;
}
break;
case 0x2:
std::cout<<"偶数"<<std:endl;
blockid =0x3;
break;
case 0x3:
return 0;
break;
case 0x4:
if(x==5){
blockid =0x5;
}else{
blockid =0x6;
}
break;
case 0x5:
std::cout<<"5"<<std::endl;
blockid =0x3;
break;
case 0x6:
std::cout<<"不是5的奇数"<<std::endl;
blockid =0x3;
break;
default:
break;
}
}
```
-----------------------------------------------------------------------------------------------------------
如果对 逆向,脱壳,新技术 感兴趣的 同学 可以加 我Q群 欢迎各位能人志士 一起讨论
欢迎加入故事,群聊号码:773642813 也可以加入笔者的 小密圈,各种安卓新技术,源码分享等
![image.png](https://img.haomeiwen.com/i12722767/b5cc4ae2c4480d6c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)