恶意代码分析实战Lab1303

这个题的加密算法第一眼看上去很复杂,试试从字符串找特征

猜测:更换后的BASE64加密,与URL进行交互


main -> 401AC2 -> WSASocket(TCP连接) -> 连接成功调用4015B7,否则return 1(报错)

  BOOL CreatePipe(PHANDLE hReadPipe, // 指向读句柄的指针
   PHANDLE hWritePipe, // 指向写句柄的指针
   LPSECURITY_ATTRIBUTES lpPipeAttributes, // 指向安全属性的指针
   DWORD nSize // 管道大小
  );

GetCurrentProcess:获取当前进程句柄

BOOL DuplicateHandle(
  HANDLE hSourceProcessHandle,
  HANDLE hSourceHandle,
  HANDLE hTargetProcessHandle,
  LPHANDLE lpTargetHandle,
  DWORD dwDesiredAccess,
  BOOL bInheritHandle,
  DWORD dwOptions
);

第一个参数是当前的源进程句柄,第二参数是当前的资源句柄,第三个是目标进程的句柄,第四个是你要得到的目的句柄,这里应该是一个变量,使用指针,DuplicateHandle函数会将得到的句柄设置到这个参数上,第五个是访问的方式,第六个参数是得到的句柄能不能被得到的其的进程的子进程继承。如果第七个参数是DUPLICATE_SAME_ACCESS flag标志,那么这个参数将被忽略

分析401256:

GetLastError() + FormatMessage()是很常见的出错处理


HANDLE GetStdHandle(DWORD nStdHandle):返回标准的输入输出或者错误的设备句柄,也就是获得输入、输出或者错误的屏幕缓冲区的句柄

网上搜索这个值,找到了这样一段py代码:

#!/usr/bin/env python  
#encoding: utf-8
from ctypes import *

if __name__ == "__main__":
        windll.Kernel32.GetStdHandle.restype = c_ulong
        h = windll.Kernel32.GetStdHandle(c_ulong(0xfffffff5))
        for i in range(0,16):
         windll.Kernel32.SetConsoleTextAttribute(h, i)
         print "hi,insun"

解释:调用ctype,改变了cmd的text属性,基色变了

WriteConsole:从当前光标位置写入一个字符串到屏幕缓冲区

这个函数块很奇怪,以byte_4120A4的值为终止符判断,其他函数又不知道调用关系


加密算法其实很好破解:

破解方法:

这几个数组读取得太多次了,查询前几个值:0x63,0x7C,0x77,0x7B,0xF2,0x6B,0xC5,0x30~~发现是AES~~

然后5个参数,可以根据出错提示得到~~

AES详解可以看这个:

https://blog.csdn.net/qq_28205153/article/details/55798628










猜你喜欢

转载自blog.csdn.net/kevin66654/article/details/80645527