-
-
[旧帖] [讨论]C++写壳初学笔记之外壳 -- 疑问 0.00雪花
-
发表于: 2014-9-8 12:15 1124
-
今天看《加密与解密第三版》遇到的大小问题总共问题有4个
1. P462,外壳的第一段代码有一句汇编没有看懂。那句注释“如果是DLL文件,取当前映像基址...”,mov eax,dword ptr [esp+24h],这句真心不懂。
2. P464,外壳的第二段代码在解压各区块时,因为是分区块压缩和解压的,在解压时一般区块所
3. P467,准备返回OEP,最后这几行不太明白:
add dword ptr [ebp+(ReturnOEP-ShellStart)+1],eax ;将结果放到ReturnOEP
popad
ReturnOEP:
push dword ptr[0]
ret
感觉这几行的意思就是,第一句是修改push的值,但为什么是add而不是mov,dword ptr ds[0]就一定是0吗?退一步说,又为什么这么麻烦直接jmp OEP不就得了,不懂脱壳,大胆猜测这是为了迷惑脱壳者的。
4. P464,初始化原始程序的输入表。
.if eax == 0 ;为0表示输入表没有加密,此时模拟PE加载器处理输入表
.....
.else
.....
.end if
当输入表没有加密时,PE加载器就会自动处理输入表了,有必要再模拟一次么?
----
C++写壳初学笔记,参考书籍《加密与解密》和罗云彬《win32汇编教程(第二版)》,部分代码是汇编我想改成C++代码,然后加一些ANTI。
1. P462,外壳的第一段代码有一句汇编没有看懂。那句注释“如果是DLL文件,取当前映像基址...”,mov eax,dword ptr [esp+24h],这句真心不懂。
2. P464,外壳的第二段代码在解压各区块时,因为是分区块压缩和解压的,在解压时一般区块所
- 占空间会增加相对于压缩后,这样在将前一个区块解压后写回时就可能会覆盖掉下一个准备解压的区块。
3. P467,准备返回OEP,最后这几行不太明白:
add dword ptr [ebp+(ReturnOEP-ShellStart)+1],eax ;将结果放到ReturnOEP
popad
ReturnOEP:
push dword ptr[0]
ret
感觉这几行的意思就是,第一句是修改push的值,但为什么是add而不是mov,dword ptr ds[0]就一定是0吗?退一步说,又为什么这么麻烦直接jmp OEP不就得了,不懂脱壳,大胆猜测这是为了迷惑脱壳者的。
4. P464,初始化原始程序的输入表。
.if eax == 0 ;为0表示输入表没有加密,此时模拟PE加载器处理输入表
.....
.else
.....
.end if
当输入表没有加密时,PE加载器就会自动处理输入表了,有必要再模拟一次么?
----
C++写壳初学笔记,参考书籍《加密与解密》和罗云彬《win32汇编教程(第二版)》,部分代码是汇编我想改成C++代码,然后加一些ANTI。
赞赏
看原图
赞赏
雪币:
留言: