| Сейчас на форуме: ==DJ==[ZLO], Magister Yoda, Rio (+6 невидимых) | 
| eXeL@B —› Основной форум —› Распаковка French Layor 1.81 | 
| Посл.ответ | Сообщение | 
| 
 | 
Создано: 10 февраля 2005 23:53  · Личное сообщение · #1  | 
| 
 | 
Создано: 11 февраля 2005 00:18  · Личное сообщение · #2  | 
| 
 | 
Создано: 11 февраля 2005 00:28  · Личное сообщение · #3  | 
| 
 | 
Создано: 11 февраля 2005 00:29  · Личное сообщение · #4  | 
| 
 | 
Создано: 11 февраля 2005 00:39  · Личное сообщение · #5 Гы! Фтыкай! Остальные посты можно считать грязным плагиатом неа мой распаковщик =) 
  DupeFiles();
  Size = *(DWORD*)(&OEP[0x51]);
  Offs = *(DWORD*)(&OEP[0x37]);
  Offs = Offs ^ *(DWORD*)(&OEP[0x3F]);
  Offs = Offs ^ *(DWORD*)(&OEP[0x45]);
  CKey = (BYTE)OEP[0x4A];
  // seek to data
  Offs = Offs - PE->OptionalHeader.ImageBase;
  Offs = RVAToRawP(Offs);
  PackedSeek(Offs, SEEK_SET);
  UnpackedSeek(Offs);
  // decrypt
  while( Size != 0 )
  {
    Cnt = (WORD)MIN(Size, BUFF_SIZE);
    if ( Cnt != PackRead(Buff, Cnt) )
      return(ERR);
    for ( I = 0; I < Cnt; I++ )
      Buff[I] ^= CKey;
    if ( Cnt != UnpackWrite(Buff, Cnt) )
      return(DISK);
    Size -= Cnt;
  }
  // rebuild import table
  IDirOfs = PE->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].
    VirtualAddress = PE->OptionalHeader.AddressOfEntryPoint;
  ISize = sizeof(IMPORT_DIRECTORY_ENTRY);
  IRVA = PE->OptionalHeader.AddressOfEntryPoint + 0x27D;
  IRaw = RVAToRawP(IRVA);
  IDirOfs = RVAToRawP(IDirOfs);
  // read names offset and dll count
  PackSeek(IRaw, SEEK_SET);
  if ( 4 != PackRead((BYTE*)(&Offs), 4) )
    return(ERR);
  if ( 4 != PackRead((BYTE*)(&DCnt), 4) )
    return(ERR);
  // make names ptr
  NRVA =  (IRVA + Offs);
  NRaw =  (IRaw + Offs);
  IRaw += (2 * 4);
  IRVA += (2 * 4);
  // process modules
  while( DCnt-- )
  {
    ISize += sizeof(IMPORT_DIRECTORY_ENTRY);
    // read iat value & proc count
    PackSeek(NRaw, SEEK_SET);
    if ( 4 != PackRead((BYTE*)(&Offs), 4) )
      return(ERR);
    if ( 4 != PackRead((BYTE*)(&NCnt), 4) )
      return(ERR);
    NRaw += (2 * 4);
    NRVA += (2 * 4);
    // create directory
    memset(&IDir, 0, sizeof(IDir));
    IDir.AddressTableRVA = Offs;
    IDir.ForwardChain = 0xFFFFFFFFU;
    IDir.NameRVA = IRVA;
    UnpackSeek(IDirOfs);
    if ( sizeof(IDir) != UnpackWrite(&IDir, sizeof(IDir)) )
      return(ERR);
    IDirOfs += sizeof(IDir);
    // read dll name
    PackSeek(IRaw, SEEK_SET);
    Len = PackRead(Buff, 0x100);
    Buff[Len] = '\0';
    if ( 0 == (Len = strlen(Buff)) )
      return(ERR);
    IRVA += (Len + 1);
    IRaw += (Len + 1);
    // process procs
    Offs = RVAToRawP(Offs);
    while( NCnt-- )
    {
      PackSeek(NRaw, SEEK_SET);
      Len = PackRead(Buff, 0x100);
      Buff[Len] = '\0';
      if ( 0 == (Len = strlen(Page_C)) )
        return(ERR);
      // update iat
      UnpackSeek(Offs);
      DVal = (NRVA - 2);
      if ( 4 != UnpackWrite(&DVal, 4) )
        return(ERR);
      Offs += 4;
      NRVA += (Len + 1);
      NRaw += (Len + 1);
    }
    // write zero iat
    DVal = 0;
    if ( 4 != UnpackWrite(&DVal, 4) )
      return(ERR);
  }
  // write last zero entry
  memset(&IDir, 0, sizeof(IDir));
  UnpackSeek(IDirOfs);
  if ( sizeof(IDir) != UnpackWrite(&IDir, sizeof(IDir)) )
    return(ERR);
  // update header
  Offs = *(DWORD*)(&OEP[0x65]);
  Offs = Offs ^ *(DWORD*)(&OEP[0x70]);
  Offs = Offs - PE->OptionalHeader.ImageBase;
  PE->OptionalHeader.AddressOfEntryPoint = Offs;
  PE->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].Size = ISize;
  UnpackSeek(PEHeaderOffset);
  if ( PE_HEADER_SIZE != UnpackWrite(PE, PE_HEADER_SIZE) )
    return(ERR);
![]()  | 
| 
 | 
Создано: 11 февраля 2005 00:46  · Личное сообщение · #6  | 
| 
 | 
Создано: 11 февраля 2005 00:47  · Личное сообщение · #7 Ах ну да, традиционный аттач. И заметьте, никаких трейсеров, никаких дамперов, и никакого импрека. А отладчик я вообще забыл когда последний раз запускал, чего и всем желаю =)   136a_unpacked.rar
![]()  | 
| 
 | 
Создано: 11 февраля 2005 00:52  · Личное сообщение · #8  | 
| 
 | 
Создано: 11 февраля 2005 01:20  · Личное сообщение · #9  | 
| 
 | 
Создано: 11 февраля 2005 06:48  · Личное сообщение · #10  | 
| 
 | 
Создано: 12 февраля 2005 21:33  · Личное сообщение · #11  | 
| 
 | 
Создано: 12 февраля 2005 23:33  · Личное сообщение · #12  | 
| eXeL@B —› Основной форум —› Распаковка French Layor 1.81 | 



 





, потом допёрло: "Автор, пиши ещё".
 Для печати