Tag: 混淆

通过自修改代码进行动态混淆

这是我想要做的: 假设你有两个function void f1(int *v) { *v = 55; } void f2(int *v) { *v = 44; } char *template; template = allocExecutablePages(…); char *allocExecutablePages (int pages) { template = (char *) valloc (getpagesize () * pages); if (mprotect (template, getpagesize (), PROT_READ|PROT_EXEC|PROT_WRITE) == -1) { perror (“mprotect”); } } 我想在f1和f2之间做一个比较(所以告诉什么是相同的,什么不是)(所以得到那些函数的assembly线并逐行比较)然后将这些行放在我的模板中。 在C中有办法做到这一点吗? 谢谢 更新 感谢所有你回答的人,但也许我没有正确解释我的需要。 […]

提供隐藏内部函数的C API的最佳实践

我写了一个C库,里面包含几个.h文件和.c文件。 我将其编译为.a静态库。 我想只向用户公开某些function,并将其余部分保持为“模糊”,以使逆向工程变得相当困难。 理想情况下,我的图书馆将包括: 1-一个.h文件,仅显示向用户公开的function 2- myLibrary.a:尽可能不可逆转 最佳做法是什么? 我应该在哪里看,有什么好的教程/书吗? 进一步来说: 为 – 1 我已经拥有了所有的.h和.c工作,我想避免更改它们,将函数声明从.h移动到.c并进入循环引用潜在的pbs。 那可能吗? 例如,创建一个新的.h文件是一个好主意,我只会用我的.a文件进行分发? 那个.h将包含我想要公开的函数的副本和我使用的类型的转发声明。 这是一个好主意吗? 为 – 2 a)我应该注意哪些gcc标志(或xcode)(用于剥离,没有调试符号等)b)一个很好的指针来学习如何进行代码混淆? 任何想法都会有帮助, 谢谢,巴巴

这个“你好世界!”计划如何运作?

int main(void) { return(‘yes’, *”no”, **main, *********printf) (“hello world!\n”) *0; } 输出hello world! ,但它是如何实际工作的?

如何对2001年IOCCC的获胜者ctk.c代码进行去混淆?

我见过ctk.c混淆代码,但是如何开始对其进行去混淆呢? #include #include #include #include #include #define m(b)a=b;z=*a;while(*++a){y=*a;*a=z;z=y;} #define h(u)G=u<=w[21])exit(0);if(g!=G){struct itimerval t= {0,0,0,0};g+=((g<G)<> 3)+1);setitimer(0,&t,0);f&&printf(“\e[10;%u]”,g+24);}f&&putchar(7);s+=(9-w[21] )*((g>>3)+1);o=p;m(x);m(w);(n=rand())&255||–*w||++*w;if(!(**P&&P++||n&7936)){ while(abs((X=rand()%76)-*x+2)-*w<6);++X;P=T;}(n=rand()&31)<3&&(d=n);!d&&–*x79&&(–*x,–d);signal(i,u);}void e(){signal(14, SIG_IGN);printf(“\e[0q\ecScore: %u\n”,s);system(“stty echo -cbreak”);}int main (int C,char**V){atexit(e);(C<2||*V[1]!=113)&&(f=(C=*(int*)getenv("TERM"))==( int)0x756E696C||C==(int)0x6C696E75);srand(getpid());system("stty -echo cbreak" );h(0);u(14);for(;;)switch(getchar()){case 113:return 0;case 91:case 98:c(44,k =-1);case 32:case 110:c(46,k=0);case 93:case 109:c(47,k=1);c(49,h(0));c(50,h(1 ));c(51,h(2));c(52,h(3));}} http://www.ioccc.org/2001/ctk.hint : This is a game based on an Apple ][ Print Shop Companion easter egg named […]

采访Hello World解释

这个经典的ioccc条目是用C语言编写的Hello World程序。任何人都可以解释它是如何工作的吗? 原始代码(语法突出显示故意丢失): int i; main(){for(; i [“] <i; ++ i){ – i;}”]; read(' – ' – ' – ',i +++“hell \ o,world!\ n“,'/'/'/'));} read(j,i,p){write(j / p + p,i — j,i / i);} 稍微清洁一点: int i; main() { for ( ; i[“]<i;++i){–i;}"]; read('-' – '-', i++ + "hello, world!\n", '/' / '/')); } read(j, i, […]

函数名和第一个大括号之间的变量声明

我正在阅读一篇关于C语言中代码混淆的文章,其中一个例子将main函数声明为: int main(c,v) char *v; int c;{…} 我从来没有见过这样的东西, v和c是全局变量? 完整的例子是这样的: #include #define THIS printf( #define IS “%s\n” #define OBFUSCATION ,v); int main(c, v) char *v; int c; { int a = 0; char f[32]; switch (c) { case 0: THIS IS OBFUSCATION break; case 34123: for (a = 0; a w%o#rtlwdl!S\0m”); break; } } 文章: […]

1 是什么意思?

我正在研究160字节的BrainFuck代码,试图找出事情的作用,而我似乎无法弄清楚1 [d = b]的作用。 s[99],*r=s,*d,c;main(a,b){char*v=1[d=b];for(;c=*v++%93;)for(b=c&2,b=c%7?a&&(c&17 ?c&1?(*r+=b-1):(r+=b-1):syscall(4-!b,b,r,1),0):v;b&&c|a**r;v=d)main(!c,&a);d=v;} 下面是代码,它位于第一行的中间位置 http://j.mearie.org/post/1181041789/brainfuck-interpreter-in-2-lines-of-c 我不是在问这个背景下它做了什么,但首先是1 []做了什么。 谢谢=)

主要和其他混淆技巧的三个论点

以下混淆的C代码将单词打印到“12天的圣诞节”。 我试图弄清楚它是如何工作的。 我基本上完全迷失了。 在初始调用中main的三个无类型参数的意义是什么,第一次返回后的字符序列,对main的调用的负数字参数? 伊克! 我大部分时间都在考虑这个问题,也许我会学习C语言的一些有趣的角落,所以回答这一点是最受欢迎的。 #include main(t,_,a)char *a;{return!0<t?t<3?main(-79,-13,a+main(-87,1-_, main(-86,0,a+1)+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13? main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?main(_,t, "@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l,+,/n{n+,/+#n+,/#\ ;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l \ q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# \ ){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' \ iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \ ;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# \ }'+}##(!!/") :t<-50?_==*a?putchar(31[a]):main(-65,_,a+1):main((*a=='/')+t,_,a+1) :0<t?main(2,2,"%s"):*a=='/'||main(0,main(-61,*a, "!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);}

混淆基于C的二进制文件以避免反编译

有没有办法混淆基于C的可执行文件或库来防止反编译?

如何在不使用任何比较运算符且不使用if,else等的情况下以编程方式返回两个整数的最大值?

如何在不使用任何比较运算符且不使用if , else等的情况下以编程方式返回最多两个整数?