去除花指令的代码

#define WIN32_LEAN_AND_MEAN  
#include "windows.h"

BYTE flowCode1[] = {......}; // ......表示你的花指令组合,这个需要你自己替换了。

BYTE flowCode2[] = { ........};

BYTE flowCode3[] = { .........};
char szFileName[] = "combojiang.exe";

//找出花指令的位置并去掉花指令
void FindFlowerCodeAndRemove(LPVOID src, LPVOID flw, int nSrcLen,int nflwLen)
{
  __asm
  {
    xor eax,eax
    push esi 
    push edi 
    push ecx

    cld 
    mov esi,flw
    mov edi,src
    mov ecx,nSrcLen
    lod**
    
Start:
    repnz sca**
    or ecx,ecx
    jz NotFindFlower
    push eax
    push ecx
    push esi 
    push edi 

    lea edi,[edi - 1]
    mov ecx,nflwLen
    mov esi,flw
        repz cmp**

    or ecx,ecx
    jnz MYLOOP
      
    mov ecx,nflwLen
    sub edi,nflwLen
    mov al,0x90
    rep sto**

MYLOOP:
               pop edi 
    pop esi 
    pop ecx 
    pop eax
    jmp Start

NotFindFlower:
    pop ecx
    pop edi 
    pop esi
  }
}



int main(int argc, char* argv[])
{
    DWORD dwHigh;
  HANDLE hFile = CreateFile(szFileName,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);  
  HANDLE hMap = CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,0,0);
  LPVOID lpMem = MapViewOfFile(hMap,FILE_MAP_ALL_ACCESS,0,0,0);
  int nFileLen  = GetFileSize(hFile,&dwHigh);


   FindFlowerCodeAndRemove(lpMem, flowCode1, nFileLen,23);  
   FindFlowerCodeAndRemove(lpMem, flowCode2, nFileLen,12);
  FindFlowerCodeAndRemove(lpMem, flowCode3, nFileLen,8);
  
  UnmapViewOfFile(lpMem);
  CloseHandle(hMap);
  CloseHandle(hFile);
  return 0;
}

注: 由于论坛屏蔽了s和b的连写,代码中看到的**表示这两个字母。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值