前几天碰到要把一段unicode装换为汇编代码的问题,一想就让哥好生纠结,网上资料各种查啊,不过研究了一下,结果发现方法还是挺简答的,有的说直接用OD,没错,不过个人觉得用OD还不是很方便,于是试下下面两种办法,思路都是先把unicode转换为shellcode的形式,这个我自己写了一个小工具,先转成格式为“\x”的shellcode,在把这段机器码复制到winhex里,转成exe文件,再利用几个反汇编的小工具生成一段汇编代码。
个人用了反汇编小工具主要是ndisasm和PW32Dasm9b。好吧,下面截图操作过程吧。
这是一段利用hash算法自动定位MessageBoxA的代码:
%u68fc%u0a6a%u1e38%u6368%ud189%u684f%u7432%u0c91%uf48b%u7e8d%u33f4%ub7db%u2b04%u66e3%u33bb%u5332%u7568%u6573%u5472%ud233%u8b64%u305a%u4b8b%u8b0c%u1c49%u098b%u698b%uad08%u6a3d%u380a%u751e%u9505%u57ff%u95f8%u8b60%u3c45%u4c8b%u7805%ucd03%u598b%u0320%u33dd%u47ff%u348b%u03bb%u99f5%ube0f%u3a06%u74c4%uc108%u07ca%ud003%ueb46%u3bf1%u2454%u751c%u8be4%u2459%udd03%u8b66%u7b3c%u598b%u031c%u03dd%ubb2c%u5f95%u57ab%u3d61%u0a6a%u1e38%ua975%udb33%u6853%u7361%u7563%u7068%u6e61%u8b64%u53c4%u5050%uff53%ufc57%uff53%uf857
我们要对它进行反汇编:
1、先把它保存在文本里(txt,doc都可以);
2、本人写了个小工具实现unicode和shellcode之间的互相转换;
3、转换后得到的shellcode:
\xfc\x68\x6a\x0a\x38\x1e\x68\x63\x89\xd1\x4f\x68\x32\x74\x91\x0c\x8b\xf4\x8d\x7e\xf4\x33\xdb\xb7\x04\x2b\xe3\x66\xbb\x33\x32\x53\x68\x75\x73\x65\x72\x54\x33\xd2\x64\x8b\x5a\x30\x8b\x4b\x0c\x8b\x49\x1c\x8b\x09\x8b\x69\x08\xad\x3d\x6a\x0a\x38\x1e\x75\x05\x95\xff\x57\xf8\x95\x60\x8b\x45\x3c\x8b\x4c\x05\x78\x03\xcd\x8b\x59\x20\x03\xdd\x33\xff\x47\x8b\x34\xbb\x03\xf5\x99\x0f\xbe\x06\x3a\xc4\x74\x08\xc1\xca\x07\x03\xd0\x46\xeb\xf1\x3b\x54\x24\x1c\x75\xe4\x8b\x59\x24\x03\xdd\x66\x8b\x3c\x7b\x8b\x59\x1c\x03\xdd\x03\x2c\xbb\x95\x5f\xab\x57\x61\x3d\x6a\x0a\x38\x1e\x75\xa9\x33\xdb\x53\x68\x61\x73\x63\x75\x68\x70\x61\x6e\x64\x8b\xc4\x53\x50\x50\x53\xff\x57\xfc\x53\xff\x57\xf8
4、去掉“\x”,复制到winhex里:
复制时选择ASCII Hex:
保存,改后缀为exe。
5、利用PW32Dasm9b进行反汇编,得到了很完整的分析结果:
也可以利用ndisasm进行反汇编,不过这个要在cmd里面打开,先把下载好的ndisasm.exe复制到C:\windows\system32中,再反汇编可得到结果,不过得到的结果是8086的汇编,寄存器都是16位的: