首页
社区
课程
招聘
Second段内存断点――比泰软件防盗版战士2005J V1.00脱壳
发表于: 2005-2-3 21:25 17968

Second段内存断点――比泰软件防盗版战士2005J V1.00脱壳

fly 活跃值
85
2005-2-3 21:25
17968
收藏
免费 7
支持
分享
最新回复 (50)
雪    币: 161
活跃值: (231)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
26
妈的,鸡蛋壳分析的不错。当真是CRACKER的前锋战士。 要说啥时可破解,待到春暖花开时!我对这种开发加密保护软件的厂商是最讨厌的了,好好的软件还要加一个保护,真他妈的不知所谓,更让人受不了的是居然还有人会买这种对软件质量没有一点提升的加密软件。考!
2005-2-14 14:41
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
最初由 采臣・宁 发布
妈的,鸡蛋壳分析的不错。当真是我等CRACKER的前锋战士。 要说啥时可破解,待到春暖花开时!


很明显,这种档次的当然找会写驱动的,把它隐藏的东西全部显出来,然后再SMC就可以了,程序再怎么多态,逻辑结果最终必须一样,怎么下手不用我说吧。

又弄出了一个文件.
附件:Chk.rar
2005-2-14 14:46
0
雪    币: 161
活跃值: (231)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
28
不错,蛋蛋当真是我等菜鸟之偶像,厉害呀,厉害!
2005-2-14 14:47
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
最初由 采臣・宁 发布
不错,蛋蛋当真是我等菜鸟之偶像,厉害呀,厉害!


有时候我倒觉得,过于开放的系统反而不是件好事,双利刃。
2005-2-14 14:56
0
雪    币: 161
活跃值: (231)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
30
蛋蛋能否根据目前的了解,做出一个阶段性的破解总结?注:不是教程,可泛泛而写
2005-2-14 14:59
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
31
最初由 采臣・宁 发布
蛋蛋能否根据目前的了解,做出一个阶段性的破解总结?注:不是教程,可泛泛而写


我所领悟到的破解的最高境界
一句话:
能够做到让破解与加密融合一体的人,他应该是世界最强的人。虽然这个人依然还是个Cracker. 这句话你可能听起来有些矛盾,但要靠自己领悟了。现成的技巧与技术其实也是昙花一现,我们还不是跟着人家走,不管这个系统是国产的还是国外的。
2005-2-14 15:01
0
雪    币: 161
活跃值: (231)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
32
阁下的意思是,最好的加密者也就是最好的CRACKER?
2005-2-14 15:05
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
33
最初由 采臣・宁 发布
阁下的意思是,最好的加密者也就是最好的CRACKER?


不是,我这话是针对如何做成世界最强的Cracker,当你已经达到这个程度时,难道你不就是最好的加密者? 知道这个词怎么来的,道高一尺魔高一丈,先有加密再有破解,破解是因为加密而存在。因此加密是要是高于破解,那么这句经典古言也就不存在了。
2005-2-14 15:09
0
雪    币: 161
活跃值: (231)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
34
对培训班的时候,我师傅曾对我说过,破解的进步就是解密工具的进步!
2005-2-14 15:18
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
35
最初由 采臣・宁 发布
对培训班的时候,我师傅曾对我说过,破解的进步就是解密工具的进步!


我一直在关注有哪位牛人能写出一种原理叫寄生机的家伙,呵呵,这可是好东西啊,可以对付所有的代码抽取变型的壳,当然包括XPR。当大家都来玩RING0大战的时候,64BIT系统可能已经成为主流了,目前能够写这个东西的,根据我知道的,还是有几个人的。
2005-2-14 15:23
0
雪    币: 161
活跃值: (231)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
36
我师傅曾对代码抽取变形有过教学,不过我不太明白寄生机,望名见义很难啊、
2005-2-14 15:37
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
37
00401B27   |> \6A 00             push 0                            ; /Password = NULL
00401B29   |.  6A 00             push 0                            ; |ServiceStartName = NULL
00401B2B   |.  6A 00             push 0                            ; |pDependencies = NULL
00401B2D   |.  6A 00             push 0                            ; |pTagId = NULL
00401B2F   |.  6A 00             push 0                            ; |LoadOrderGroup = NULL
00401B31   |.  55                push ebp                          ; |BinaryPathName
00401B32   |.  6A 01             push 1                            ; |ErrorControl = SERVICE_ERROR_NORMAL
00401B34   |.  6A 03             push 3                            ; |StartType = SERVICE_DEMAND_START
00401B36   |.  6A 01             push 1                            ; |ServiceType = SERVICE_KERNEL_DRIVER
00401B38   |.  68 FF010F00       push 0F01FF                       ; |DesiredAccess = SERVICE_ALL_ACCESS
00401B3D   |.  68 F8BD4000       push 复件_Chk.0040BDF8              ; |DisplayName = "InterruptHook"
00401B42   |.  68 F8BD4000       push 复件_Chk.0040BDF8              ; |ServiceName = "InterruptHook"
00401B47   |.  56                push esi                          ; |hManager

看到这个参数没有,如果我没猜错的话,这个东西的驱动是抄HACK界一牛人木马hackd对外公开的驱动的源代码。

别以为你有我就没有,有这个代码的人太多了。
PDEVICE_OBJECT DriverDeviceObject = NULL;
ULONG out_size;

int handle_fobject(PFILE_OBJECT fobject, PUCHAR obuffer)
{
  ULONG length;
  ANSI_STRING astring;
  PUCHAR fname, cur_pointer;
  PFILE_OBJECT related_fobject;
  UCHAR status;

  fname=obuffer+12;
  status=0;
       
  if(fobject->DeviceObject!=NULL)
  {
    if(NT_SUCCESS(ObQueryNameString(fobject->DeviceObject,
                  (POBJECT_NAME_INFORMATION)fname,out_size-20,&length)))
    {
      if(NT_SUCCESS(RtlUnicodeStringToAnsiString(&astring,
                                                 (PUNICODE_STRING)fname,TRUE)))
      {
        *fname='\0';
        strncpy(fname, astring.Buffer, astring.Length+1);
        status=1;

        fname+=astring.Length;
        *fname='\0';

        RtlFreeAnsiString(&astring);
      }
    }
  }

  if((length=fobject->FileName.Length>>1)||(fobject->RelatedFileObject!=NULL))
  {
    related_fobject=fobject->RelatedFileObject;
    if(length&&(fobject->FileName.Buffer[0]!='\\'))
      while(related_fobject!=NULL)
      {
        length+=related_fobject->FileName.Length>>1;
        related_fobject=related_fobject->RelatedFileObject;
      }

    if(length)
    {
      RtlUnicodeStringToAnsiString(&astring,&(fobject->FileName),TRUE);
      strncpy(cur_pointer=fname+(length-(fobject->FileName.Length>>1)),
              astring.Buffer,astring.Length+1);
      status=1;
      RtlFreeAnsiString(&astring);

      related_fobject=fobject->RelatedFileObject;

      if(fobject->FileName.Buffer[0]!='\\')
        while(related_fobject!=NULL)
        {
          *(cur_pointer-1)='\\';
          cur_pointer-=(related_fobject->FileName.Length>>1);//+1;

          RtlUnicodeStringToAnsiString(&astring,&(related_fobject->FileName),
                                       TRUE);
          strncpy(cur_pointer, astring.Buffer, astring.Length+1);
          status=1;      
          RtlFreeAnsiString(&astring);

          related_fobject=related_fobject->RelatedFileObject;
        }
    }
  }       
  return(status?(fname-obuffer)+length:0);
}

NTSTATUS DriverIO(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp)
{
  Irp->IoStatus.Status = STATUS_SUCCESS;
  IoCompleteRequest(Irp,IO_NO_INCREMENT);
  return Irp->IoStatus.Status;
}

NTSTATUS DriverIOControl(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp)
{
  PIO_STACK_LOCATION stack;
  UCHAR *in_buffer, *out_buffer;
  ULONG code,ret,pid,handle_object,return_length,target_pid,sys_pid;
  UCHAR buffer[1024];
  PEPROCESS eprocess;
  HANDLE handle,hTarget,hSys,hSysToken;
  OBJECT_ATTRIBUTES object_attr;
  CLIENT_ID client_id;
  PROCESS_ACCESS_TOKEN dup_token;

  stack = IoGetCurrentIrpStackLocation(Irp);
  out_size = stack->Parameters.DeviceIoControl.OutputBufferLength;
  code = stack->Parameters.DeviceIoControl.IoControlCode;

  in_buffer = out_buffer = Irp->AssociatedIrp.SystemBuffer;

  ret = STATUS_SUCCESS;

  switch(code)
  {
    case IOCTL_GET_NAME_STRING:
    {
      pid = ((DIB_NAME_STRING *)in_buffer)->pid;
      handle = ((DIB_NAME_STRING *)in_buffer)->hwnd;

      ((DOB_NAME_STRING *)out_buffer)->status = 0;
      Irp->IoStatus.Information = sizeof(ULONG);

      if(NT_SUCCESS(PsLookupProcessByProcessId((PVOID)pid,&eprocess)))
      {
        KeAttachProcess(eprocess);
        if(NT_SUCCESS(ObReferenceObjectByHandle(handle,0x80000000,0,0,
                                                (void *)&handle_object,0)))
        {
          if(*(USHORT *)handle_object==5 && *((USHORT *)handle_object+1)==0x70)
          {
            if(return_length=handle_fobject((PFILE_OBJECT)handle_object,
               out_buffer))
            {
                ((DOB_NAME_STRING *)out_buffer)->status=1;
                Irp->IoStatus.Information+=return_length;
                *((USHORT *)out_buffer+2)=(USHORT)(return_length-12);
            }
          }
           else
          {
            if(NT_SUCCESS(ObQueryNameString((void *)handle_object,
                                          (POBJECT_NAME_INFORMATION)buffer,
                                          sizeof(buffer),&return_length)))
              if(((UNICODE_STRING *)buffer)->Buffer!=NULL)
              {
                ((DOB_NAME_STRING *)out_buffer)->name.MaximumLength \
                  = (USHORT)out_size-20;
                ((DOB_NAME_STRING *)out_buffer)->name.Buffer \
                  = (char *)((ULONG *)out_buffer+3);
                if(NT_SUCCESS(RtlUnicodeStringToAnsiString(
                                &((DOB_NAME_STRING *)out_buffer)->name,
                                (UNICODE_STRING *)buffer,FALSE)))
                {
                  ((DOB_NAME_STRING *)out_buffer)->status = 1;
                  Irp->IoStatus.Information += 8+
                  ((DOB_NAME_STRING *)out_buffer)->name.Length;
                }
              }  
              ObDereferenceObject((void *)handle_object);
          }
        }
        KeDetachProcess();
        ObDereferenceObject((void *)eprocess);
      }
      break;
    }
    case IOCTL_IMPERSONATE_PROCESS:
    {
      target_pid = ((DIB_IMPERSONATE_PROCESS *)in_buffer)->TargetProcess;
      sys_pid = ((DIB_IMPERSONATE_PROCESS *)in_buffer)->SystemProcess;

      ((DOB_IMPERSONATE_PROCESS *)out_buffer)->status = 0;
      Irp->IoStatus.Information = sizeof(ULONG);

      object_attr.Length = sizeof(object_attr);
      object_attr.RootDirectory = 0;
      object_attr.ObjectName = NULL;
      object_attr.Attributes = 0;
      object_attr.SecurityDescriptor = NULL;
      object_attr.SecurityQualityOfService = NULL;

      client_id.UniqueProcess = (HANDLE)target_pid;
      client_id.UniqueThread = 0;

      if (NT_SUCCESS(ZwOpenProcess(&hTarget,PROCESS_ALL_ACCESS,&object_attr,
                                   &client_id)))
      {
        client_id.UniqueProcess = (HANDLE)sys_pid;
        client_id.UniqueThread = 0;
        if (NT_SUCCESS(ZwOpenProcess(&hSys,PROCESS_ALL_ACCESS,&object_attr,
                                     &client_id)))
        {
          if (NT_SUCCESS(ZwOpenProcessToken(hSys,TOKEN_ALL_ACCESS,&hSysToken)))
          {
            if (NT_SUCCESS(ZwDuplicateToken(hSysToken,TOKEN_ALL_ACCESS,
                                            &object_attr,FALSE,TokenPrimary,
                                            &dup_token.Token)))
            {
              dup_token.Thread = 0;
              if (NT_SUCCESS(ZwSetInformationProcess(hTarget,
                                                     ProcessAccessToken,
                                                     &dup_token,
                                                     sizeof(dup_token))))
                ((DOB_IMPERSONATE_PROCESS *)out_buffer)->status = 1;

              ZwClose(dup_token.Token);
            }
            ZwClose(hSysToken);
          }
          ZwClose(hSys);
        }
        ZwClose(hTarget);
      }
      break;
    }
    default:
     ((DOB_UNKNOWN *)out_buffer)->status = 0;
     Irp->IoStatus.Information = sizeof(DOB_UNKNOWN);
     ret = STATUS_INVALID_DEVICE_REQUEST;
     break;
  }

  Irp->IoStatus.Status = ret;
  IoCompleteRequest(Irp,IO_NO_INCREMENT);
  return ret;
}

VOID DriverUnload(IN PDRIVER_OBJECT DriverObject)
{
  UNICODE_STRING win32DeviceName;

  RtlInitUnicodeString(&win32DeviceName,DOS_DEVICE_NAME);
  IoDeleteSymbolicLink(&win32DeviceName);

  IoDeleteDevice(DriverDeviceObject);
}

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,
                     IN PUNICODE_STRING RegistryPath)
{
  UNICODE_STRING ntDeviceName;
  UNICODE_STRING win32DeviceName;
  NTSTATUS status;

  RtlInitUnicodeString(&ntDeviceName,NT_DEVICE_NAME);

  if (!NT_SUCCESS(status = IoCreateDevice(DriverObject,0,&ntDeviceName,
                                          FILE_DEVICE_UNKNOWN,0,FALSE,
                                          &DriverDeviceObject)))
    return STATUS_NO_SUCH_DEVICE;

  DriverDeviceObject->Flags |= DO_BUFFERED_IO;
  RtlInitUnicodeString(&win32DeviceName,DOS_DEVICE_NAME);

  if (!NT_SUCCESS(status = IoCreateSymbolicLink(&win32DeviceName,
                                                &ntDeviceName)))
    return STATUS_NO_SUCH_DEVICE;

  DriverObject->MajorFunction[IRP_MJ_CREATE        ] = DriverIO;
  DriverObject->MajorFunction[IRP_MJ_CLOSE         ] = DriverIO;
  DriverObject->MajorFunction[IRP_MJ_READ          ] = DriverIO;
  DriverObject->MajorFunction[IRP_MJ_WRITE         ] = DriverIO;
  DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DriverIOControl;
  DriverObject->DriverUnload                         = DriverUnload;

  return STATUS_SUCCESS;
}
2005-2-14 15:41
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
38
最初由 采臣・宁 发布
我师傅曾对代码抽取变形有过教学,不过我不太明白寄生机,望名见义很难啊、


你怎么老是抬你师父,师父固然重要,但也仅仅起到抛砖引玉的作用。
2005-2-14 15:44
0
雪    币: 161
活跃值: (231)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
39
所以我是菜鸟而不是高手啊
2005-2-14 15:46
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
40
最初由 采臣・宁 发布
所以我是菜鸟而不是高手啊


我不是菜鸟,我只是菜鸡。
2005-2-14 15:48
0
雪    币: 161
活跃值: (231)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
41
上面的代码是处理文件对象来进行隐藏?
2005-2-14 15:50
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
42
最初由 采臣・宁 发布
上面的代码是处理文件对象来进行隐藏?


是的,这个要用了RING0技术。
2005-2-14 15:56
0
雪    币: 161
活跃值: (231)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
43
RING0技术就很高深吗?
2005-2-14 16:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
44
最初由 采臣・宁 发布
妈的,鸡蛋壳分析的不错。当真是CRACKER的前锋战士。 要说啥时可破解,待到春暖花开时!我对这种开发加密保护软件的厂商是最讨厌的了,好好的软件还要加一个保护,真他妈的不知所谓,更让人受不了的是居然还有人会买这种对软件质量没有一点提升的加密软件。考!


软件不加个密你这些烂人不是没事可干,弱智
2005-2-14 18:09
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
45
学习!!!
2005-2-15 12:51
0
雪    币: 161
活跃值: (231)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
46
最初由 goodgoodstudy 发布



软件不加个密你这些烂人不是没事可干,弱智


小样!悲哀,我真的为你感到悲哀。

看看你发的那些贴子,你除了会骂人你还会什么。看雪论坛不是你这种人可以忽悠的地方!
2005-2-15 12:57
0
雪    币: 110
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sjm
47
本人想脱掉英雄王作的壳然然做一个内挂,但一直没有成功。
对于其中的patch不是很了解,大家能否解释一下这几句话:
playar兄弟的MemoryManage插件哪里有?

///////////
3、Patch 处理:搞定输入表

现在我们要找2个地方
1、Patch代码存放地址  选择Patch代码存放的地址时候要小心,其他地方会引发异常。可以用playar兄弟的MemoryManage插件申请一段临时内存。一般在ShareDll.dll第2区段的末尾处可以存放临时数据。
2、跳转表存放地址   这里的地址要保证是不被占用的空白处,我选择放在00430660处。
2005-2-23 11:47
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
48
最初由 sjm 发布
本人想脱掉英雄王作的壳然然做一个内挂,但一直没有成功。
对于其中的patch不是很了解,大家能否解释一下这几句话:
playar兄弟的MemoryManage插件哪里有?

///////////
........


1。你的话顺序乱
2。不是一直在说比泰战士不是壳吗?
2005-2-23 12:12
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
49
fly的破解到底行不行啊?
难道比泰战士真的被破了?
2005-2-23 13:16
0
雪    币: 1919
活跃值: (901)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
50
支持
学习~~~~~~~
2005-2-23 15:59
0
游客
登录 | 注册 方可回帖
返回
//