IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++代码混淆 -> 正文阅读

[C++知识库]C++代码混淆

混淆模板1(在solve中进行代码)

经过尝试,#pragma GCC optimize(3) 并不能把红黑树代码优化,可以在汇编内生成大量无用代码。

#include<bits/stdc++.h>
using namespace std;
#define bro(x)(((x)->ftr->lc==(x))?((x)->ftr->rc):((x)->ftr->lc))
#define islc(x)((x)!=NULL&&(x)->ftr->lc==(x))
#define isrc(x)((x)!=NULL&&(x)->ftr->rc==(x))
template<typename T>class redblacktree{protected:struct Node;Node*_root;Node*_hot;void init(T);void connect34(Node*,Node*,Node*,Node*,Node*,Node*,Node*);void SolveDoubleRed(Node*);void SolveDoubleBlack(Node*);Node*find(T,const int);Node*rfind(T,const int);Node*findkth(int,Node*);int find_rank(T,Node*);public:struct iterator;redblacktree():_root(NULL),_hot(NULL){}int get_rank(T);iterator insert(T);bool remove(T);int size();bool empty();iterator kth(int);iterator lower_bound(T);iterator upper_bound(T);};template<typename T>struct redblacktree<T>::Node{T val;bool RBc;Node*ftr;Node*lc;Node*rc;int s;Node(T v=T(),bool RB=true,Node*f=NULL,Node*l=NULL,Node*r=NULL,int ss=1):val(v),RBc(RB),ftr(f),lc(l),rc(r),s(ss){}Node*succ(){Node*ptn=rc;while(ptn->lc!=NULL){--(ptn->s);ptn=ptn->lc;}return ptn;}Node*left_node(){Node*ptn=this;if(!lc){while(ptn->ftr&&ptn->ftr->lc==ptn)ptn=ptn->ftr;ptn=ptn->ftr;}else{ptn=ptn->lc;while(ptn->rc){ptn=ptn->rc;}}return ptn;}Node*right_node(){Node*ptn=this;if(!rc){while(ptn->ftr&&ptn->ftr->rc==ptn)ptn=ptn->ftr;ptn=ptn->ftr;}else{ptn=ptn->rc;while(ptn->lc){ptn=ptn->lc;}}return ptn;}void maintain(){s=1;if(lc)s+=lc->s;if(rc)s+=rc->s;}};template<typename T>struct redblacktree<T>::iterator{private:Node*_real__node;public:iterator&operator++(){_real__node=_real__node->right_node();return*this;}iterator&operator--(){_real__node=_real__node->left_node();return*this;}T operator*(){return _real__node->val;}iterator(Node*node_nn=NULL):_real__node(node_nn){}iterator(T const&val_vv):_real__node(rfind(val_vv,0)){}iterator(iterator const&iter):_real__node(iter._real__node){}};template<typename T>typename redblacktree<T>::iterator redblacktree<T>::insert(T v){Node*ptn=find(v,1);if(_hot==NULL){init(v);return iterator(_root);}ptn=new Node(v,true,_hot,NULL,NULL,1);if(_hot->val<=v)_hot->rc=ptn;else _hot->lc=ptn;SolveDoubleRed(ptn);return iterator(ptn);}template<typename T>void redblacktree<T>::init(T v){_root=new Node(v,false,NULL,NULL,NULL,1);}template<typename T>typename redblacktree<T>::Node*redblacktree<T>::find(T v,const int op){Node*ptn=_root;_hot=NULL;while(ptn!=NULL){_hot=ptn;ptn->s+=op;if(ptn->val>v)ptn=ptn->lc;else ptn=ptn->rc;}return ptn;}template<typename T>typename redblacktree<T>::Node*redblacktree<T>::rfind(T v,const int op){Node*ptn=_root;_hot=NULL;while(ptn!=NULL&&ptn->val!=v){_hot=ptn;ptn->s+=op;if(ptn->val>v)ptn=ptn->lc;else ptn=ptn->rc;}return ptn;}template<typename T>void redblacktree<T>::SolveDoubleRed(Node*nn){while((!(nn->ftr))||nn->ftr->RBc){if(nn==_root){_root->RBc=false;return;}Node*pftr=nn->ftr;if(!(pftr->RBc))return;Node*uncle=bro(nn->ftr);Node*grdftr=nn->ftr->ftr;if(uncle!=NULL&&uncle->RBc){grdftr->RBc=true;uncle->RBc=false;pftr->RBc=false;nn=grdftr;}else{if(islc(pftr)){if(islc(nn)){pftr->ftr=grdftr->ftr;if(grdftr==_root)_root=pftr;else if(grdftr->ftr->lc==grdftr)grdftr->ftr->lc=pftr;else grdftr->ftr->rc=pftr;connect34(pftr,nn,grdftr,nn->lc,nn->rc,pftr->rc,uncle);pftr->RBc=false;grdftr->RBc=true;}else{nn->ftr=grdftr->ftr;if(grdftr==_root)_root=nn;else if(grdftr->ftr->lc==grdftr)grdftr->ftr->lc=nn;else grdftr->ftr->rc=nn;connect34(nn,pftr,grdftr,pftr->lc,nn->lc,nn->rc,uncle);nn->RBc=false;grdftr->RBc=true;}}else{if(islc(nn)){nn->ftr=grdftr->ftr;if(grdftr==_root)_root=nn;else if(grdftr->ftr->lc==grdftr)grdftr->ftr->lc=nn;else grdftr->ftr->rc=nn;connect34(nn,grdftr,pftr,uncle,nn->lc,nn->rc,pftr->rc);nn->RBc=false;grdftr->RBc=true;}else{pftr->ftr=grdftr->ftr;if(grdftr==_root)_root=pftr;else if(grdftr->ftr->lc==grdftr)grdftr->ftr->lc=pftr;else grdftr->ftr->rc=pftr;connect34(pftr,grdftr,nn,uncle,pftr->lc,nn->lc,nn->rc);pftr->RBc=false;grdftr->RBc=true;}}return;}}}template<typename T>void redblacktree<T>::connect34(Node*nroot,Node*nlc,Node*nrc,Node*ntree1,Node*ntree2,Node*ntree3,Node*ntree4){nlc->lc=ntree1;if(ntree1!=NULL)ntree1->ftr=nlc;nlc->rc=ntree2;if(ntree2!=NULL)ntree2->ftr=nlc;nrc->lc=ntree3;if(ntree3!=NULL)ntree3->ftr=nrc;nrc->rc=ntree4;if(ntree4!=NULL)ntree4->ftr=nrc;nroot->lc=nlc;nlc->ftr=nroot;nroot->rc=nrc;nrc->ftr=nroot;nlc->maintain();nrc->maintain();nroot->maintain();}template<typename T>typename redblacktree<T>::iterator redblacktree<T>::lower_bound(T v){Node*ptn=_root;while(ptn){_hot=ptn;if(ptn->val<v){ptn=ptn->rc;}else{ptn=ptn->lc;}}if(_hot->val<v){ptn=_hot;}else{ptn=_hot->left_node();}return iterator(ptn);}template<typename T>typename redblacktree<T>::iterator redblacktree<T>::upper_bound(T v){Node*ptn=_root;while(ptn){_hot=ptn;if(ptn->val>v){ptn=ptn->lc;}else{ptn=ptn->rc;}}if(_hot->val>v){ptn=_hot;}else{ptn=_hot->right_node();}return iterator(ptn);}template<typename T>typename redblacktree<T>::iterator redblacktree<T>::kth(int rank){return iterator(findkth(rank,_root));}template<typename T>typename redblacktree<T>::Node*redblacktree<T>::findkth(int rank,Node*ptn){if(!(ptn->lc)){if(rank==1){return ptn;}else{return findkth(rank-1,ptn->rc);}}else{if(ptn->lc->s==rank-1)return ptn;else if(ptn->lc->s>=rank)return findkth(rank,ptn->lc);else return findkth(rank-(ptn->lc->s)-1,ptn->rc);}}template<typename T>int redblacktree<T>::get_rank(T v){return find_rank(v,_root);}template<typename T>int redblacktree<T>::find_rank(T v,Node*ptn){if(!ptn)return 1;else if(ptn->val>=v)return find_rank(v,ptn->lc);else return(1+((ptn->lc)?(ptn->lc->s):0)+find_rank(v,ptn->rc));}template<typename T>int redblacktree<T>::size(){return _root->s;}template<typename T>bool redblacktree<T>::empty(){return!_root;}template<typename T>bool redblacktree<T>::remove(T v){Node*ptn=rfind(v,-1);if(!ptn)return false;Node*node_suc;while(ptn->lc||ptn->rc){if(!(ptn->lc)){node_suc=ptn->rc;}else if(!(ptn->rc)){node_suc=ptn->lc;}else{node_suc=ptn->succ();}--(ptn->s);ptn->val=node_suc->val;ptn=node_suc;}if(!(ptn->RBc)){--(ptn->s);SolveDoubleBlack(ptn);}if(ptn==_root){_root=NULL;delete ptn;return true;}if(ptn->ftr->lc==ptn)ptn->ftr->lc=NULL;else ptn->ftr->rc=NULL;delete ptn;return true;}template<typename T>void redblacktree<T>::SolveDoubleBlack(Node*nn){while(nn!=_root){Node*pftr=nn->ftr;Node*bthr=bro(nn);if(bthr->RBc){bthr->RBc=false;pftr->RBc=true;if(_root==pftr)_root=bthr;if(pftr->ftr){if(pftr->ftr->lc==pftr)pftr->ftr->lc=bthr;else pftr->ftr->rc=bthr;}bthr->ftr=pftr->ftr;if(islc(nn)){connect34(bthr,pftr,bthr->rc,nn,bthr->lc,bthr->rc->lc,bthr->rc->rc);}else{connect34(bthr,bthr->lc,pftr,bthr->lc->lc,bthr->lc->rc,bthr->rc,nn);}bthr=bro(nn);pftr=nn->ftr;}if(bthr->lc&&bthr->lc->RBc){bool oldRBc=pftr->RBc;pftr->RBc=false;if(pftr->lc==nn){if(pftr->ftr){if(pftr->ftr->lc==pftr)pftr->ftr->lc=bthr->lc;else pftr->ftr->rc=bthr->lc;}bthr->lc->ftr=pftr->ftr;if(_root==pftr)_root=bthr->lc;connect34(bthr->lc,pftr,bthr,pftr->lc,bthr->lc->lc,bthr->lc->rc,bthr->rc);}else{bthr->lc->RBc=false;if(pftr->ftr){if(pftr->ftr->lc==pftr)pftr->ftr->lc=bthr;else pftr->ftr->rc=bthr;}bthr->ftr=pftr->ftr;if(_root==pftr)_root=bthr;connect34(bthr,bthr->lc,pftr,bthr->lc->lc,bthr->lc->rc,bthr->rc,pftr->rc);}pftr->ftr->RBc=oldRBc;return;}else if(bthr->rc&&bthr->rc->RBc){bool oldRBc=pftr->RBc;pftr->RBc=false;if(pftr->lc==nn){bthr->rc->RBc=false;if(pftr->ftr){if(pftr->ftr->lc==pftr)pftr->ftr->lc=bthr;else pftr->ftr->rc=bthr;}bthr->ftr=pftr->ftr;if(_root==pftr)_root=bthr;connect34(bthr,pftr,bthr->rc,pftr->lc,bthr->lc,bthr->rc->lc,bthr->rc->rc);}else{if(pftr->ftr){if(pftr->ftr->lc==pftr)pftr->ftr->lc=bthr->rc;else pftr->ftr->rc=bthr->rc;}bthr->rc->ftr=pftr->ftr;if(_root==pftr)_root=bthr->rc;connect34(bthr->rc,bthr,pftr,bthr->lc,bthr->rc->lc,bthr->rc->rc,pftr->rc);}pftr->ftr->RBc=oldRBc;return;}if(pftr->RBc){pftr->RBc=false;bthr->RBc=true;return;}else{bthr->RBc=true;nn=pftr;}}}
int getCorrect() {
	redblacktree<int> correct_tree;
	int s=0;
	for(int i=0;i<=100;++i) 
		correct_tree.insert(i);
	correct_tree.remove(0);
	s^=correct_tree.get_rank(50);
	s^=*correct_tree.kth(50);
	s^=*correct_tree.lower_bound(50);
	s^=*correct_tree.upper_bound(50);
	return ((s+1919810)*250-19260817)^(114514*((1+1)*451*4+((1+1)*4*51+4+(11*-4+51-4)))+(114*5*1*4+(1/1+4*5*1*4)));
}
class Correct{public:Correct();};Correct::Correct(){int t=getCorrect()%10;for(int i=0;i<=t;++i)cout<<endl;}

void solve() {
	int t;
	cin >> t;
	while(t--) {
	}
}
int main() {
	solve();
	{Correct Correct;}
	return 0;
}

混淆模板2

#define correct(x) ({int b=(x);int c=(b<<13)^(b>>7)^(b<<19);2*b+c-(b^c)-(b*2&c*2);})

这个函数能输入一个整数并返回原样的整形,功能类似这样:

int f(int x){return x;}

但是重要的一点是 O3 无法识别这个函数,并在汇编中老老实实进行计算,因为是 define 所以每个用的地方都会生成一小段,可以导致汇编代码大相径庭。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-14 13:08:38  更:2021-09-14 13:09:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 22:55:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码