PE_Kill

sefkrd

Свой в доску..
Ветеран
Сообщения
83
Реакции
128
написание серверов
Да, в этом он хорош..
Написал один сервер, для нескольких программ, только хэндлеры дописывай, да сертификаты в него, если проги по https ходят..
Хороший инструмент..
Как-то делал на нем генерилку ключа, для одной проги, для всех трех основных OS. Очень удобно..
И да, на роутере тоже крутится сервер, для JB.(mips32)
 

PE_Kill

Мудрец
Сообщения
178
Реакции
891
Доделываю реконструктор TLS в камазе. И просто куда не сунусь вижу ошибки в коде. Просто ничего не работает. Везде какое то говно. Вот пример добавления новой секции:
Код:
// Получаем последнюю секцию
iCurSec:=FImageNtHeader.FileHeader.NumberOfSections-1;
Inc(FImageNtHeader.FileHeader.NumberOfSections);

dwOffset:= FImageSectionHeader[iCurSec].RawOffset +FImageSectionHeader[iCurSec].RawSize;

if IsAlignedTo(dwOffset,MINIMUM_FILE_ALIGN)=false then
  // Что это 6лядь такое???
  iCurSec:=AlignTo(dwOffset,MINIMUM_FILE_ALIGN)
;
// Тут всё должно сломаться, мы же поломали индекс секции
FImageSectionHeader[iCurSec+1].RawOffset:=dwOffset;
Кому непонятно, должно быть так:
dwOffset:=AlignTo(dwOffset,MINIMUM_FILE_ALIGN)

Как? Как оно работало?? Это писал укуреный дол..еб! Ладно в одном месте, опечатка ага. Но такое просто везде, куда бы я не сунулся. Я уже не хочу ЭТО оживлять.
 
Последнее редактирование модератором:
  • Понравилось
Реакции: DX0

DX0

Новичок
Сообщения
366
Реакции
71
Доделываю реконструктор TLS в камазе. И просто куда не сунусь вижу ошибки в коде. Просто ничего не работает. Везде какое то говно. Вот пример добавления новой секции:
Код:
// Получаем последнюю секцию
iCurSec:=FImageNtHeader.FileHeader.NumberOfSections-1;
Inc(FImageNtHeader.FileHeader.NumberOfSections);

dwOffset:= FImageSectionHeader[iCurSec].RawOffset +FImageSectionHeader[iCurSec].RawSize;

if IsAlignedTo(dwOffset,MINIMUM_FILE_ALIGN)=false then
  // Что это 6лядь такое???
  iCurSec:=AlignTo(dwOffset,MINIMUM_FILE_ALIGN)
;
// Тут всё должно сломаться, мы же поломали индекс секции
FImageSectionHeader[iCurSec+1].RawOffset:=dwOffset;
Кому непонятно, должно быть так:
dwOffset:=AlignTo(dwOffset,MINIMUM_FILE_ALIGN)

Как? Как оно работало?? Это писал укуреный дол..еб! Ладно в одном месте, опечатка ага. Но такое просто везде, куда бы я не сунулся. Я уже не хочу ЭТО оживлять.
Я помню ты еще написал распаковщик для ASPack, причем специально для китайских крекеров :) Как, проект еще остался, или как? Если честно, то мне было бы интересно глянуть код распаковщика ASPack, все таки техника программирования у всех разная, только это хочу глянуть. А насчет алгоритма распаковки это я знаю.
 

PE_Kill

Мудрец
Сообщения
178
Реакции
891
Доделал TLS. Там ищется теперь оригинальная, и выдает список чего нашел и вероятность, что это оригинальная. Но на всякий сделал, чтобы можно было отказаться и создать TLS полностью новую. И вот же незадача. Если там есть StartAddressOfRawData / EndAddressOfRawData то они то заданы абсолютными адресами! А это значит что, если у нас релоцируемый образ, то еще и релоки на них применять надо! А релоки у меня в анпакере вообще не процессятся, аспр позволяет. А значит для создания TLS с нуля надо еще менеджер релоков делать, ибо если они уже есть, то надо в них добавить записи. Ну нет, это уже за гранью. Пойдет и так...
 

PE_Kill

Мудрец
Сообщения
178
Реакции
891
Нашел сорсы анпакера ASPack, читаю ридми и офигиваю:
- v 0.88 -------------------------------------------------------
[!] Ребилдер ресурсов полностью исправлен, но стал жрать
больше памяти, хотя моих 128 хватает

128 мегов у меня было когда я его писал!

Собственно когда и для ASProtect писал было что то около того. Поэтому в камазе есть есть такой виджет:


Наверное он казался странным, но на моем компе он был жизненно необходим, чтобы понять хватит мне памяти для распаковки или нет. Когда нехватало, то закрывал всё кроме камаза.
 

DX0

Новичок
Сообщения
366
Реакции
71
Нашел сорсы анпакера ASPack, читаю ридми и офигиваю:
- v 0.88 -------------------------------------------------------
[!] Ребилдер ресурсов полностью исправлен, но стал жрать
больше памяти, хотя моих 128 хватает

128 мегов у меня было когда я его писал!

Собственно когда и для ASProtect писал было что то около того. Поэтому в камазе есть есть такой виджет:


Наверное он казался странным, но на моем компе он был жизненно необходим, чтобы понять хватит мне памяти для распаковки или нет. Когда нехватало, то закрывал всё кроме камаза.
Не помню как в Delphi, но когда мне размер выделяемой памяти и количество данных не известен, то я использую такую функцию как realloc для выделения динамической памяти, потом записываю в файл:
C:
unsigned int *memPtr = NULL;
unsigned int memSize;

while(1){
       memPtr = (unsigned int*)realloc(memPtr,  sizeof(int) * (memSize+1));
       if(memPtr != NULL){
             ...
            memSize++;
       }
}
Тобишь, я использую функцию realloc, выделяю N размер памяти под нейзвестное количество данных и записываю в память данные, тем самым выделяю и экономлю память. На самом деле вариантов много по экономии памяти, и это один из вариантов. Ну эта такая отсебятина от меня. Это понятно, что есть слабые ПК и каждый подтачивает под себя.
 
Последнее редактирование:

PE_Kill

Мудрец
Сообщения
178
Реакции
891
Такс, ну вроде пофиксил всё, что мог пофиксить в камазе. Даже в личку написали, про то, что файл не анпакается и там оказалась версия с поломанной TLS. Т.е. когда я ушел из реверса аспр просто TLS копировал. Потом значит у Delphi появился TlsCallback из за которого защищенные проги стали крашиться, и потом ASProtect стал пересобирать TLS с нуля.
И вот я вернулся и встретил проги, у которых TLS собран с нуля.
Анпакер я поправил, а в личку мне прислали именно файл, который защищен кривой версией протектора, где уже есть TlsCallbacks но ведут они в мусор. Тоже пофиксил. Полезный форум...

На выходных постараюсь вылить сорсы. А пока начал приручать единорога. Последнюю VM аспра, которую не победил я и внекрилов. Ну вернее конкретный билд мы декомпилили, а вот универсально сделать - фиг. Сейчас восстанавливаю исходный код x86 VM конкретно версии ASProtect 2.41 Build 02.62. Именно ее мы совместно когда то ковыряли с внекриловым, и на старом диске остались все наработки, база данных IDA с размеченными функциями. По итогу получится сорс примерно как этот https://exelab.one/forum/программирование/27172-6-19076

Я кстати с того сорса уже сделал декомпиль, по времени заняло час. Вот и после получения подобного сорса, планирую уже засесть за эвристический анализ, чтобы всё таки на автомате декомпилилось, а не под каждый билд писать заново.

Поэтому есть просьба. Покидайте фулл версии ASProtect если есть. Ну или демо, но не под StarForce (отличие, что под старфорс архив около 10mb весит, а до него были около 3mb). Или если есть доступ к фулл версии под старфорсом, то скинуть упакованый калькулятор.

@ARCHANGEL, @TryAga1n, @Error13Tracer
мне кажется у вас что то точно должно быть

Интересующая меня VM появилась на версиях 2.4+ SKE. А на 1x хз, наверное с 1.4+
 

Gideon Vi

я твой скрипт писал
Мудрец
Сообщения
233
Реакции
621

mak

Соломенные сандалии
Администратор
Сообщения
956
Реакции
1 028
Ещё пару версий
Для просмотра содержимого вам необходимо Войти в систему.
@PE_Kill, в DecomAs было ограничение на распаковку, если в защите выходило сообщение о вводе регистрационных данных, можно было найти вручную это место под отладчиком, во время распаковки сделать атач и исправить условный переход, после этого ввести любые данные и тогда распаковка заканчивалась успешно, можно ли это автоматизировать?
 

PE_Kill

Мудрец
Сообщения
178
Реакции
891
во время распаковки сделать атач и исправить условный переход, после этого ввести любые данные и тогда распаковка заканчивалась успешно, можно ли это автоматизировать?
Ну раз ты это руками мог сделать конечно это можно автоматизировать.
Вот эта опция была сделана для нечто подобного


Но ты говоришь про рег данные, от них обычно дешифруется код, поэтому я такое и не обходил. Плюс в большинстве случаев если нажать Отмена, то прога дальше распаковывалась. Если речь про это окно:


Но если в программе нет Demo Mode то да, она просто закроется. Если я всё верно описал, то посмотрю что можно сделать.

PS: Посмотрел сигнатуру, для удаления сообщений аспра. А она не находится, даже в версии 2.4
Возможно плохую сигнатуру сделал, или она для 1.x ветки. Или под VM ее убрали. В общем поковыряю.
 

mak

Соломенные сандалии
Администратор
Сообщения
956
Реакции
1 028
Но ты говоришь про рег данные, от них обычно дешифруется код, поэтому я такое и не обходил. Плюс в большинстве случаев если нажать Отмена, то прога дальше распаковывалась.
Да, отмену пробовал, она не срабатывала, цель уже не вспомню, давно было .. но отмена точно не работала ..

Но если в программе нет Demo Mode то да, она просто закроется.
Демки не было ..
 

PE_Kill

Мудрец
Сообщения
178
Реакции
891
В VM которую допинываю в ASProtect изначальный BYTE опкода делится на тетрады(нибблы) и делается подмена констант.
Условно если опкод был
nop 90h
То вместо хранения
[09, 00]

ASProtect хранит
[1D, 2C]

И вот собственно первую тетраду (1D -> 09) восстановить достаточно просто, а вторую я считал, что невозможно. И каждый сцуко опкод восстанавливал. И тут значит посмотрел записки Внекрылова, и наткнулся на свое же собственное сообщение:
https://exelab.one/forum/протекторы/20591-13-11596?p=207827#post207827

Блин я видимо тогда уже настолько упоролся этой VM (а я тогда уже 2 версии полностью восстановил и добавил в декомас плагинами), что просто не видел очевидного. Процитирую самого себя:

Разбираю опкоды 90h-9Fh. В аспровом case они проходят как индекс 1Dh,
Получается, что первая тетрада 9X -> 1D. Ок, это я тогда понимал. И вот же я пишу ниже:

А вот во втором case идет сопоставление индексов опкодам.
Команды
mov al, byte ptr [eax]
add al, byte ptr [esi+4h]
and eax, 0FFh
Расшифровывают индекс и пошло сравнение:
Индекс A8h - Опкод 98h (CWDE)
Индекс 1Dh - Опкод 99h (CDQ)

Аааа, блин, вот же оно, всё перед глазами. Т.е. конкретно CDQ (99h) инструкция хранится как 2 тетрады:

[1D, 1D]
Т.е. и для первой и для второй тетрады константы замен одинаковые! А значит нужно было просто узнать константы для первой тетрады и применять их ко второй везде автоматом. Елки палки, я бы наверное уже тогда что то полуавтоматическое напилил. Как я блин этого не видел, ума не приложу. А внекрылов увидел кстати, это по запискам видно.
 

PE_Kill

Мудрец
Сообщения
178
Реакции
891
Когда восстановил сорсы одной ВМ так легко и просто восстанавливать созданную на ее основе вторую. Смотришь в исходники и видишь что в конкретном месте переделали, а что осталось как раньше. Как в техзадание прям.
Вот только почему то, когда все структуры размечены читать это становится прям ппц напряжно:


А еще уже сейчас вижу, как можно применить эксплойт, чтобы сдампить все ключи замен для тетрад. Пока не понимаешь как работает кажется что придется всё ядро ВМ дизассемблировать и проводить анализ. А поняв - видны уязвимости. Конкретно тут программеры решили оптимизировать код в одном месте и открыли просто дырищу для автоматизации декомпиляции.
Но это ладно, основная проблема - это структуры, про них еще надо будет хорошенько думать.
 

PE_Kill

Мудрец
Сообщения
178
Реакции
891
Забавно. Наткнулся на свою недописанную статью, как делать инлайн полиморфного кода через самоотладку (SEH + Hardware Breaks). Почитал и понял, почему я ее недописал. Там настолько всё непонятно, что даже выкладывать смысла нет. Начал припоминать как я ее пытался несколько раз переписывать. Даже блок схемы рисовал. Но понятнее она не стала. Поэтому так и осталась недописанная.

Может перепишу и выложу, вроде с годами опыт разжовывания информации заимел.
 

PE_Kill

Мудрец
Сообщения
178
Реакции
891
Ого, я смотрю ASProtect таки апнул немножечко свой эмулятор. Было:
Код:
case (OpCode and $F0) of
***
    $30: begin
      // 0x0F,0x3X
      if OpCode = $31 then
      begin
        // 0x0F,0x31: RDTSC
        MessageBoxA(0, 'RDTSC', '', MB_OK);
        VmContext.Regs[vrEdx] := Ticks.HighPart;
        VmContext.Regs[vrEax] := Ticks.LowPart;
      end;
    end;
Стало:
Код:
case (OpCode and $F0) of
***
    $30: begin
      // 0x0F,0x3X
      if OpCode = $31 then
      begin
        // 0x0F,0x31: RDTSC
        asm
          rdtsc
          mov Ticks.HighPart, edx
          mov Ticks.LowPart, eax
        end;
        VmContext.Regs[vrEdx] := Ticks.HighPart;
        VmContext.Regs[vrEax] := Ticks.LowPart;
      end;
    end;
Прогресс...
 

PE_Kill

Мудрец
Сообщения
178
Реакции
891
Кароч. Хотел я потыкать версию 2.58. Но ее китайчиги поломали просто ппц как. Зачем то сделали LPK.dll которая для поддержки текстов справа налево используется. Я такой херней не хочу заниматься. Заинжектил ее в процесс руками. Но один хер она не работала. Блин, ASProtect же Delphi прога, там в импорте торчит version.dll это микро DLL винды. Че бы не подменить то, нахрена этот гемор с LPK. Короч, думаю ладно, сам сделаю, только рипну алгос с LPK ихней. Открыл я ее а там жесть. В общем у меня ощущение, что школьник подсмотрел где то, что нужно сделать чтобы активировать софт. А вот как это сделать он не знал, накачал со всего интернета кодов и слепил это лишь бы заработало. В общем приуныл я и полез в архивы, читать логи ICQ...

Для просмотра содержимого вам необходимо Войти в систему.
 
Верх Низ