- 论坛徽章:
- 2
|
把你的输出贴出来看看
encrypt.debug.sh- #!/bin/bash
- #key="$(ifconfig|grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'|head -1)"
- key="00:10:18:B1:FA:EF"
- # ^ ^ ^ ^ ^ ^
- # | | | | | |
- # 6 5 4 3 2 1
- ord="3:2:1:4"
- src_file="test"
- length=4
- hexdump -ve "$length/1 \"%d \" \"\n\"" "$src_file"|awk -v ord="$ord" -v key="$key" -v l=$length -v ka="0x41C64E6D" -v kb="0x3039" -v kc="0x80000000" -f encrypt.debug.awk
复制代码 encrypt.debug.awk- function mod(p)
- {
- return (p%256)
- }
- function div(p)
- {
- return int(p/256)
- }
- function str_val(str, ret, chars, n, i, k, c)
- {
- if (str ~ /^0[0-7]*$/)
- {
- # octal
- n = length(str)
- ret = 0
- for (i = 1; i <= n; i++) {
- c = substr(str, i, 1)
- if ((k = index("01234567", c)) > 0)
- k-- # adjust for 1-basing in awk
- ret = ret * 8 + k
- }
- }
- else if (str ~ /^0[xX][[:xdigit:]]+/)
- {
- # hexadecimal
- str = substr(str, 3) # lop off leading 0x
- n = length(str)
- ret = 0
- for (i = 1; i <= n; i++) {
- c = substr(str, i, 1)
- c = tolower(c)
- if ((k = index("0123456789", c)) > 0)
- k-- # adjust for 1-basing in awk
- else if ((k = index("abcdef", c)) > 0)
- k += 9
- ret = ret * 16 + k
- }
- }
- else if (str ~ /^[-+]?([0-9]+([.][0-9]*([Ee][0-9]+)?)?|([.][0-9]+([Ee][-+]?[0-9]+)?))$/)
- {
- # decimal number, possibly floating point
- ret = str + 0
- }
- else ret = "NOT-A-NUMBER"
- return ret
- }
- function hex_ary(p, ary)
- {
- p=str_val(p);
- ary="";
- while(p>0)
- {
- ary=sprintf("%s:%d",ary,mod(p));
- p=div(p)
- }
- ary=substr(ary,2);
- return ary
- }
- BEGIN{
- split(key,ks,":");
- split(ord,o,":");
- for(i=1;i<=l;i++) k[i]=str_val(sprintf("%s%s","0x",ks[length(ks)+1-o[i]]));
- printf"\n[DEBUG:k[o[n]]=0x";for(i=length(k);i>0;i--) printf "%02x",k[o[i]];printf"]\n";
- split(hex_ary(ka),a,":");
- printf"\n[DEBUG:a[n]=0x";for(i=length(a);i>0;i--) printf "%02x",a[i];printf"]\n";
- split(hex_ary(kb),b,":");
- printf"\n[DEBUG:b[n]=0x";for(i=length(b);i>0;i--) printf "%02x",b[i];printf"]\n";
- split(hex_ary(kc),c,":");
- printf"\n[DEBUG:c[n]=0x";for(i=length(c);i>0;i--) printf "%02x",c[i];printf"]\n";
- h=l;
- h=(h<length(a))?length(a):h;
- h=(h<length(b))?length(b):h;
- h=(h<length(c))?length(c):h
- }
- {
- for(i=1;i<=NF;i++) printf "%02X ",xor(k[i],$i);
- if (NF<l) exit;
-
- #caculate k*a+b
- for(i=1;i<=2*h;i++)t[i]=(i>length(b))?0:b[i];
- for(i=1;i<=l;i++) for(j=1;j<=length(a);j++)
- {
- p=t[i+j-1]+k[o[i]]*a[j];
- t[i+j-1]=mod(p);
- t[i+j]+=div(p)
- }
- printf"\n[DEBUG:k*a+b=0x";for(i=length(t);i>0;i--) printf "%02x",t[i];printf"]\n";
- #caculate "%c"
- for(p=length(t);t[p]<1;p--);
- for(i=1;i<=length(c);i++) q[i]=t[p-length(c)+i];
- q[length(c)+1]=0;
- for(i=p;i-length(c)>=0;i--)
- {
- while(q[length(q)]>=0)
- {
- for (j=1;j<=length(c);j++)
- {
- q[j]-=c[j];
- q[j+1]=(q[j]<0)?q[j+1]-1:q[j+1];
- q[j]=mod(q[j]+256);
- }
- }
- for (j=1;j<=length(c);j++)
- {
- q[j]+=c[j];
- q[j+1]=q[j+1]+div(q[j]);
- q[j]=mod(q[j]);
- }
-
- if (i>length(c))
- {
- for(j=length(q);j>1;j--) q[j]=q[j-1];
- q[1]=t[i-length(c)]
- }
- }
- printf"\n[DEBUG:(k*a+b)%%c=0x";for(i=length(q);i>0;i--) printf "%02x",q[i];printf"]\n";
- #get new key
- for(i=1;i<=l;i++) k[o[i]]=q[i];
- }
复制代码 Output- $ sh encrypt.debug.sh
- [DEBUG:k[o[n]]=0x18b1faef]
- [DEBUG:a[n]=0x41c64e6d]
- [DEBUG:b[n]=0x3039]
- [DEBUG:c[n]=0x80000000]
- F9 9F 83 74
- [DEBUG:k*a+b=0x065851ef8216d9fc]
- [DEBUG:(k*a+b)%c=0x000216d9fc]
- 79 F9 AB 6D
- [DEBUG:k*a+b=0x00896ba96f0dc885]
- [DEBUG:(k*a+b)%c=0x006f0dc885]
- 7F A4 E1 4E
- [DEBUG:k*a+b=0x1c88869857d516da]
- [DEBUG:(k*a+b)%c=0x0057d516da]
- DF
- $
复制代码 |
|