التشويش
التشويش أو التعقيد في تطوير البرمجيات، هو إجراء متعمد لإنتاج كود(نص برمجي) مشوش من كود عادي، بحيث يصعب على الإنسان المبرمج قراءته.
المبرمجون قد يتعمدون تشويش النصوص البرمجية، لإخفاء الغرض منها، مبدأها، أو لمنع العبث أو الهندسة العكسية أو لتحدي شخص ما ،أن يقرأها. توجد برامج عديدة تحول الأكواد البرمجية القابلة للقراءة إلى أكواد مشوشة غير قابلة للقراءة تسمى مشوشات.
التشويش في لغات البرمجة
هيكلة وسمات بعض اللغات البرمجية كالسي، والسي بلس بلس، والبيرل؛ تجعلها سهلة التشويش أكثر من غيرها.
مثال
المثال 1 في الأسفل يعرض كود أهلا بالعالم بـلغة السي وهو من أبسط الأكواد البرمجية، وفي المثال 2 كود أهلاً بالعالم [1] مشوشاً.
مثال 1
#include <stdio.h> int main(void) { printf("Hello, world!\n"); return 0; }
مثال 2
#include "stdio.h" #define e 3 #define g (e/e) #define h ((g+e)/2) #define f (e-g-h) #define j (e*e-g) #define k (j-h) #define l(x) tab2[x]/h #define m(n,a) ((n&(a))==(a)) long tab1[]={ 989L,5L,26L,0L,88319L,123L,0L,9367L }; int tab2[]={ 4,6,10,14,22,26,34,38,46,58,62,74,82,86 }; main(m1,s) char *s; { int a,b,c,d,o[k],n=(int)s; if(m1==1){ char b[2*j+f-g]; main(l(h+e)+h+e,b); printf(b); } else switch(m1-=h){ case f: a=(b=(c=(d=g)<<g)<<g)<<g; return(m(n,a|c)|m(n,b)|m(n,a|d)|m(n,c|d)); case h: for(a=f;a<j;++a)if(tab1[a]&&!(tab1[a]%((long)l(n))))return(a); case g: if(n<h)return(g); if(n<j){n-=g;c='D';o[f]=h;o[g]=f;} else{c='\r'-'\b';n-=j-g;o[f]=o[g]=g;} if((b=n)>=e)for(b=g<<g;b<n;++b)o[b]=o[b-h]+o[b-g]+c; return(o[b-g]%n+k-h); default: if(m1-=e) main(m1-g+e+h,s+g); else *(s+g)=f; for(*s=a=f;a<e;) *s=(*s<<e)|main(h+a++,(char *)m1); } }
مراجع
- Obfuscated C Code - تصفح: نسخة محفوظة 28 نوفمبر 2016 على موقع واي باك مشين.