//$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
不过最终问题还是解决了,感谢看雪论坛