crossC2生成的被控,upx压缩了,upx -d无法解压。需要dump解出来

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/42a0d6e4-06dd-4d2c-9c75-c13703ee7eef/Untitled.png

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c5d2480b-3fd0-422b-924a-1ccea1f34fad/Untitled.png

upx一阶段源码

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6131e918-7a1c-4fac-9db9-6da0996ea014/Untitled.png

IDA下断点

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/db0f6013-6c66-40c9-a5a4-86d0df16e660/Untitled.png

jmp r13;跟进,进入第二阶段,进入此call,然后走过三个循环,一路步过

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/bf42a859-e42e-491b-af9c-1abafa56e1d4/Untitled.png

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f2a3124d-a6c4-469c-94fc-08de074f43a5/Untitled.png

走到这里jmp 这里,step in 跟进去,随后跟到入口

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/583eda7c-36b2-45ab-a80e-fc9a187091af/Untitled.png

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/679f516c-1619-4bb6-b673-d563cb8fffd3/Untitled.png

加载脚本dump下来

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/cdaf2ad2-60b2-4e06-984e-29130abdba1e/Untitled.png

dump完成

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/e22bbc4f-85ad-4537-a44f-2e4ed3e87b10/Untitled.png

/////dump_elf.idc

#include <idc.idc>
#define PT_LOAD              1
#define PT_DYNAMIC           2
static main(void)
{
        auto ImageBase,StartImg,EndImg;
        auto e_phoff;
        auto e_phnum,p_offset;
        auto i,dumpfile;
        ImageBase=0x400000;
        StartImg=0x400000;
        EndImg=0x0;
        if (Dword(ImageBase)==0x7f454c46 || Dword(ImageBase)==0x464c457f )
  {
    if(dumpfile=fopen("dumpfile","wb"))
    {
      e_phoff=ImageBase+Qword(ImageBase+0x20);
      Message("e_phoff = 0x%x\\n", e_phoff);
      e_phnum=Word(ImageBase+0x38);
      Message("e_phnum = 0x%x\\n", e_phnum);
      for(i=0;i<e_phnum;i++)
      {
         if (Dword(e_phoff)==PT_LOAD || Dword(e_phoff)==PT_DYNAMIC)
                         {
                                 p_offset=Qword(e_phoff+0x8);
                                 StartImg=Qword(e_phoff+0x10);
                                 EndImg=StartImg+Qword(e_phoff+0x28);
                                 Message("start = 0x%x, end = 0x%x, offset = 0x%x\\n", StartImg, EndImg, p_offset);
                                 dump(dumpfile,StartImg,EndImg,p_offset);
                                 Message("dump segment %d ok.\\n",i);
                         }   
         e_phoff=e_phoff+0x38;
      }
 
      fseek(dumpfile,0x3c,0);
      fputc(0x00,dumpfile);
      fputc(0x00,dumpfile);
      fputc(0x00,dumpfile);
      fputc(0x00,dumpfile);
 
      fseek(dumpfile,0x28,0);
      fputc(0x00,dumpfile);
      fputc(0x00,dumpfile);
      fputc(0x00,dumpfile);
      fputc(0x00,dumpfile);
      fputc(0x00,dumpfile);
      fputc(0x00,dumpfile);
      fputc(0x00,dumpfile);
      fputc(0x00,dumpfile);
 
      fclose(dumpfile);
        }else Message("dump err.");
 }
}
static dump(dumpfile,startimg,endimg,offset)
{
        auto i;
        auto size;
        size=endimg-startimg;
        fseek(dumpfile,offset,0);
        for ( i=0; i < size; i=i+1 )
        {
			fputc(Byte(startimg+i),dumpfile);
        }
}