超级巡警病毒分析辅助工具1.4修改笔记

1.文件无扩展名时,unpack无法生成脱壳文件,提示Save file failed.
解决:搜索_unpack字符串调用,在此调用前面不远处,可以看到搜索字符.(2E)的函数调用。
将.(2E)换为\(5C)
将push eax(\FileName)
push offset(_unpack)
顺序对调
最终生成的unpack文件名的格式为:rawfilename_unpack
2.没有只运行一个实例的功能,右键查壳时,还要把先前的实例关掉,比较麻烦
利用原程序本身的api实现该功能,用汇编另写代码如下:
_CompareFileName proc _pszFileNameEnd,_dwFileNameLength,_pszProcFile
 mov ebx,_dwFileNameLength
 mov edi,_pszFileNameEnd
 
 mov esi,_pszProcFile
 xor ecx,ecx
 @@:
 lodsb 
 inc ecx
 or al,al
 jne @B
 dec esi
 cmp ebx,ecx
 jae @F
 mov eax,0
 ret
@@:
 std
 repz cmpsb [edi],[esi]
 cld
 or ecx,ecx
 jz @F
 mov eax,0
 ret
@@: 
 mov eax,1
 ret
_CompareFileName endp
_GetProcessList proc
  local @stProcess:PROCESSENTRY32
  local @hSnapShot
  LOCAL @szFileName[MAX_PATH]:byte
  LOCAL @dwCurrentProcessID,@dwFileNameLength,@pszFileNameEnd
  
  invoke GetModuleFileName,NULL,addr @szFileName,MAX_PATH
  nop
  invoke GetCurrentProcessId
  nop
  mov @dwCurrentProcessID,eax
  
  lea esi,@szFileName
  xor ecx,ecx
  @@:
  lodsb 
  inc ecx
  or al,al
  jne @B
  dec ecx
  mov @dwFileNameLength,ecx  ;ebx存放_pszFileName的长度
  dec esi 
  mov @pszFileNameEnd,esi
  
  mov @stProcess.dwSize,sizeof @stProcess
  invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0
  nop
  mov @hSnapShot,eax
  invoke Process32First,@hSnapShot,addr @stProcess
  nop
  .while eax 
   invoke _CompareFileName,@pszFileNameEnd,@dwFileNameLength,addr @stProcess.szExeFile
   or eax,eax
   jz @F
   mov eax,@dwCurrentProcessID
   cmp eax,@stProcess.th32ProcessID
   jz @F
   invoke OpenProcess,PROCESS_TERMINATE,FALSE,@stProcess.th32ProcessID
   nop
   .if eax
    invoke TerminateProcess,eax,-1
    nop
    jmp OUTCOMPARE
   .endif
   @@:
   invoke Process32Next,@hSnapShot,addr @stProcess
   nop
  .endw
 OUTCOMPARE:
  invoke CloseHandle,@hSnapShot
  nop
  
  ret
_GetProcessList endp
备注:masm代码调用api时,需在调用后加nop,以备有空间修改代码,因为masm对api的调用跟vc部分地方不太一样,masm用call sub (E8)实现,而vc使用call [offset](FF 15)实现
将此代码拷贝到待修改程序指定位置后,修改nop前的调用api的指令
将winmain跳转到此代码段后跳回即可

你可能感兴趣的:(职场,修改,休闲,超级巡警)