shellcode怎么解密

来源:百度知道 编辑:UC知道 时间:2024/06/14 04:10:14
一:经常在国外的网站看到溢出程序,里面有shellcode,这个shellcode是不可以解密出来。
二:如果解密出来,再换上我的shellcode是不是可行,还用不用改变其它的代码,比如:ret和nopsled
首先谢谢你的回答,你的回答相当专业我会采纳为最佳答案的,但是我还有一个小问题就是,我想替换的真正目的是想看看这个shellcode解密出来是什么代码,如果可以的话,我再直接换上我的代码。

替换是完全可行的!但是这类程序一般都会进行“加密”,这个加密并不是指对编译后的代码进行加密处理(比如UPX),而是原作者在进行编程的时候用另一种思维或者采用编译器的语法分析器的漏洞进行变相的“加密”,这样的程序中寻址非常混乱,同一块内存空间,进行相同的操作,会出现不同的多种寻址方式,这样一来,shellcode等替换操作的难度将会大大提高!
要替换,首先你要考虑替换后的程序中所有的寻址完全正确,不会出现错误的地址!其次你要看看原程序是否对原来的shellcode段有校验操作,如果有,破解之!最后对于具体的情况对头进行重建!
总之shellcode等替换操作是比较复杂的,中间要考虑很多很多因素!

LZ为什么要去替换呢?既然自己已经弄到了shellcode,写一个小程序不是易如反掌嘛,何必大费功夫的去替换呢!
如果你实在想替换,给你个很好的建议,没事儿的时候写个EXP程序,定个全局指针变量,在程序中对这个指针进行下赋值操作,随便赋个值,要是赋地址那种的,然后下面用嵌入式汇编写几个比较有特点的代码(比如连着10个"emms"),编译程序,等你有新的shellcode的时候,首先把shellcode附加到程序文件尾,然后反汇编,找到有特点的那些汇编指令(比如连着10个"emms"),找到上面的mov指令(对应源代码里指针赋值),把操作数改成shellcode的内存线性地址,将下面的有特点的代码nop掉,保存!即可完成替换!

对于shellcode的解密,完全可以通过反汇编EXP程序来逐步分析,不过这个过程要求你有很高的汇编水平,分析出原shellcode所在的段!再有一种办法就是,把EXP程序加载到一个调试工具中,然后跟踪一下,shellcode有些地方类似病毒,一般可以跟踪出解密后的shellcode代码!由于原shellcode是加了密的,进行替换,很麻烦,很复杂,如果搞懂了加密方式还行,否则很困难!