循环右移

//$num为要循环的次数
function ROR_de ($str,$num){
$str = base_convert($str,16,2);//把16进转成2进制
$bin = substr("00000000",0,8 - strlen($str)) . $str;//不足8位前面补0
for($i = 0 ; $i < $num; $i++){
$bin =substr($bin,-1,1).substr($bin,0,7);//循环右移1位
}
return dechex(bindec($bin));//转回去
}
echo ROR_de('5D',3);
//显示ab
?>

昨天看到一个新的shellcode,很小.但用异或加密根本解不了.OD载入以后,才发现又出现了猥琐的技巧,
看代码

00401025 . 90 nop
00401026 ? EB 1A jmp short 00401042
00401028 ? 5F pop edi
00401029 ? 57 push edi
0040102A ? 5E pop esi
0040102B . 33DB xor ebx, ebx
0040102D ? 33C9 xor ecx, ecx
0040102F ? B9 6C020000 mov ecx, 26C
00401034 ? 43 inc ebx
00401035 ? 3BD9 cmp ebx, ecx
00401037 ? 74 0E je short 00401047
00401039 ? AC lods byte ptr [esi]
0040103A C0C8 03 ror al, 3
0040103D 34 20 xor al, 20
0040103F . AA stos byte ptr es:[edi]
00401040 .^ EB F2 jmp short 00401034
00401042 ? E8 E1FFFFFF call 00401028
00401047 . 55 push ebp
00401048 . 8BEC mov ebp, esp
0040104A 81 db 81
0040104B C4 db C4
0040104C B4 db B4
0040104D FE db FE
0040104E FF db FF
0040104F FF db FF

0040103A C0C8 03 ror al, 3
0040103D 34 20 xor al, 20

首先循环右移3次,再来进行异或20

异或部分的代码已经有了,主要是循环右移的问题,跑到看雪问问,和别人吵起来了,郁闷,是我态度不好!
http://bbs.pediy.com/showthread.php?p=551612#post551612
不过最终问题还是解决了,感谢看雪论坛

Tags: shellcode

修改shellcode异或加密的0day

早在迅雷出来的时候,就第一次出现了这种技术,原来的代码就解不了,这次的0day又一次出现了,异或的值是21,现在终于决定自已写一版PHP的,推倒呀推倒...

有朋友问怎么才能找到异或的值是多少,网上有个教程的,可是太麻烦了,其实有一个简单的方法,就是把shellcode转成exe,http://www.cha88.cn/safe/shellcode_2_exe.php 转成exe以后,就用OD载入,就可以看到了,比如这次的

0040103C      8030 21       xor     byte ptr [eax], 21

程序还有一点小BUG,本着完全不责任的精神,我就不改了,细心一点不影响使用的

如果想修改网页木马里面的地址,把异或值保持一致,在本程序中加密一次,就可以代入新的0DAY里面使用了

程序地址为

http://www.cha88.cn/safe/new_shellcode.php

如果shellcode没有处理过,异或值填0就可以像上一版一样加解密了

Tags: shellcode, decode, encode