运行一下成功弹出了calc
下面我们一起来看看这个都脚本做了什么
首先我们先总结一下我们exe的现状,关键逻辑的部分没有绝对地址的引用,都是地址无关的代码,我们的func函数被放到了线性地址的开头,在所有其他的函数之前,_main函数在我们定义的所有的函数的末尾
如图所示
_main函数在最后一个,那么他的起始地址就是我们shellcode的长度了,即前面我们从func开始所有的函数的集合的长度
第一步就是获取这个长度
获取.text节中这个长度的shellcode,然后给shellcode添加loader,接着修复重定位,查找shellcode里不包含的byte,范围0x00到0xff,找到shellcode里不存在的byte就可以进行异或加密,从而剔除\x00截断字符了,最后再添加解密代码进去,如果没有不存在的字符的话,如果shellcode涉及的字符范围很全面,我们就没有可以挑选来进行异或的操作数了,这样可以把shellcode适当分成两部分或者多部分,分别用不同的操作数进行异或操作
其他的不用说,我们主要看看两个loader处用到的技巧
q # call here # here: # ... # shellcode_start: # <shellcode> # relocs: # off1|off2|... # str1|str2|... code= [ 0xE8,0x00, 0x00, 0x00, 0x00, # CALL here #here: 0x5E, # POP ESI 0x8B,0xFE, # MOV EDI, ESI 0x81,0xC6, x[0], x[1], x[2], x[3], # ADD ESI, shellcode_start len(shellcode) - here 0xB9,y[0], y[1], y[2], y[3], # MOV ECX, len(relocs) 0xFC, # CLD #again: 0xAD, # LODSD 0x01,0x3C, 0x07, # ADD [EDI EAX], EDI 0xE2,0xFA # LOOP again #shellcode_start: ]
这里第一句的call,因为我们不能直接操作指令指针寄存器,我们可以通过call下一条指令来压入下一条指令的地址,然后通过popesi放到esi寄存器里,然后参照后面的relocs修正相对偏移
然后异或加密剔除\x00的部分
code= [ 0xE8,0xFF, 0xFF, 0xFF, 0xFF, # CALL $ 4 #here: 0xC0, # (FF)C0 = INC EAX 0x5F, # POP EDI 0xB9,xor1[0], xor1[1], xor1[2], xor1[3], # MOV ECX, <xorvalue 1 for shellcode len> 0x81,0xF1, xor2[0], xor2[1], xor2[2], xor2[3], # XOR ECX, <xorvalue 2 for shellcode len> 0x83,0xC7, 29, # ADD EDI,shellcode_begin - here 0x33,0xF6, # XOR ESI, ESI 0xFC, # CLD #loop1: 0x8A,0x07, # MOV AL, BYTE PTR[EDI] 0x3C,missing_byte, # CMP AL, <missingbyte> 0x0F,0x44, 0xC6, # CMOVE EAX, ESI 0xAA, # STOSB 0xE2,0xF6 # LOOP loop1 #shellcode_begin: ]
获取当前eip的地址方式与上面一样,只不过是这次的loader本身也不能包含空字节,指令的解码方式是,E8是call指令,后面的地址要加上当前指令的长度才是真正的偏移,E8FF FF FF FF FF 是跳转到-1 5的位置即最后一个FF处,这样就又组成了一句FFC0汇编指令,巧妙地避开了0x00空字节
然后处理了shellcode长度中可能出现的空字节,与之前的找missingbyte用的同样的方法,然后对shellcode进行异或解密,最后运行shellcode
相关实验
1. shellcode编写:
http://www.hetianlab.com/expc.do?ec=ECID172.19.104.182014050817262500001(了解shellcode编写规则)
2. shellcode编写练习:http://www.hetianlab.com/expc.do?ec=ECID172.19.104.182014071816144300001(掌握shellcode的编写)
最后偷偷给自己博客和和合天实验室打个广告
博客http://sayhi2urmom.top/
合天实验室http://www.hetianlab.com/里面好多优质学习资源的呦
本文为合天原创,未经允许,严禁转载。