PE文件代码膨胀

匿名 (未验证) 提交于 2019-12-03 00:38:01

https://bbs.pediy.com/thread-223629.htm

asmjit参考https://www.cnblogs.com/lanrenxinxin/p/5021641.html

1.代码对push/mov/add/sub/cmp指令进行膨胀

2.对push/mov的立即数进行加密

3.跳转call指令转为如下指令进行变形

  /*                                                      <---esp3     |__| -16             |__| -16              |_reg2_esp0_| -16       |__| -16        |__| -12             |__| -12              |_reg1_| -12            |__| -12         |__| -8   <---esp1   |__| -8   <---esp2    |_reg2_| -8             |__| -8       <---esp4     |_reg2_| -4<--esp0   |_Jmp_addr_| -4       |_Jmp_addr_| -4         |_Jmp_addr_| -4      |_reg1_|  0          |_reg1_|  0           |_reg1_|  0             |_ret_addr_|  0      push reg1     push reg2                      ;---->esp1     mov  reg2, jmp_offset     add  reg2, addr_table_base     ;根据地址表索引找到正确偏移值     mov  reg1, dword ptr ds:[reg2]     add  reg1, base                ;加上基地址, 得到目标地址          pop  reg2     sub  esp, 0x4     mov  reg1, dword ptr ds:[reg1]     mov  dword ptr ss:[esp], reg1  ;写入jmp地址, 类似于push指令                                    ;---->esp2      push reg2                      ;保存原始的reg2值     mov  reg2, esp     add  reg2, 0x8     mov  reg1, dword ptr ds:[reg2] ;     push reg1                      ;保存原始的reg1值     push reg2                      ;保存0处的esp值                                    ;---->esp3     mov  reg2, no_jmp_offset     mov  reg2, addr_table_base     mov  reg1, dword ptr ds:[reg2]      pop  reg2                      ;获取0出的esp值     mov  dword ptr ds:[reg2], reg1 ;写入返回地址      pop  reg1                      ;恢复reg1, reg2原始值     pop  reg2                      ;---->esp4      retn                           ;retn 跳转到jmp_addr地址     */

原文:https://www.cnblogs.com/aliflycoris/p/9240035.html

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!