Или даже - для запуска этой функции нужен какой-нибудь компонент-ключ, который в поставке для юзеров просто не присутствует.Предположим, что функция сродни пасхальному яйцу - вызывается строго определённой комбинацией действий в окне "О программе" (али ещё где)?
djalex777 писал(а):VB всё таки намного упрощает (если не использовать обфускацию) реверс-инжиниринг, храня tlb и все методы и свойства классов, мало того сохраняя даже имена параметров.
void NcdCreateOp1SegRegDecoder(T_ROUTER_ENTRY *rPrimaryOrTertiaryRouter,
X86IKDTABLEENTRY &Instr)
{
T_ROUTER_ENTRY *SecondaryRouter;
T_ROUTER_ENTRY *Writer;
UCHAR ActiveOpcodeByte;
UCHAR *ByteFieldWriter;
ActiveOpcodeByte = (Instr.OpCodeSize == 1 ? X86_OPCODE_BFIRST(Instr.OpCode) :
X86_OPCODE_BSECOND(Instr.OpCode));
SecondaryRouter = NcdEnsureTransition5To3(rPrimaryOrTertiaryRouter, X86_HI_PENTA_PART(ActiveOpcodeByte));
Writer = DfaAddChildRouter(SecondaryRouter,
X86_LOW_OCTET_PART(ActiveOpcodeByte),
ROUTER(NcdInstructionWriters::Op1::PushPopSegWriter),
NULL);
NcdDecoderRtSetInstructionId(Writer, Instr.InternalCode);
NcdDecoderRtSetReturnToRoot(Writer);
ByteFieldWriter = (UCHAR*)(Writer->Router + Routers::NcdInstructionWriters::Op1::PushPopSegWriter::RegFieldOffset);
switch(Instr.OperandTypeMask[0])
{
case X86_ASM_OPERAND_TYPEMASK_REG_CS:
*ByteFieldWriter = X86_REG_CS;
break;
case X86_ASM_OPERAND_TYPEMASK_REG_FS:
*ByteFieldWriter = X86_REG_FS;
break;
case X86_ASM_OPERAND_TYPEMASK_REG_ES:
*ByteFieldWriter = X86_REG_ES;
break;
case X86_ASM_OPERAND_TYPEMASK_REG_GS:
*ByteFieldWriter = X86_REG_GS;
break;
case X86_ASM_OPERAND_TYPEMASK_REG_DS:
*ByteFieldWriter = X86_REG_DS;
break;
case X86_ASM_OPERAND_TYPEMASK_REG_SS:
*ByteFieldWriter = X86_REG_SS;
break;
}
}
Мало какой программист будет называть свои функции заведомо так, чтобы запутать взломщика...
Далее, VB-компилятор имеет свои реализации определенных языковых конструкций типа for и т.д., и ничего не мешает их с легкостью восстанавливать (что собственно тот же VBDecompiler и делает).
Кроме того, все работы со строками, массивами осуществляются посредством функций из MSVBVM60.dll и так же легко восстанавливаются.
Хакер писал(а):я считаю, что в неэлементарной программе знание имени метода, имён и типов всех его параметров играет ну совсем ничтожную роль.
Далее, твой пример на C++, что сравнивать с VB-кодом не много не правильно (даже в дизасме) (или я ошибаюсь?)
Ты пишешь, про Runtime, а вот скажи что такое VB без рантайма?
По-поводу того, смогу ли я сказать, что делает твоя функция - будь за моей спиной годы опыта в области дизасемблирования, исследования чужих программ, реверс-инжиниринга - будь уверен - я бы дал ответ на твой вопрос.
Согласен с первой половиной предложения ровно до слова "знание". По-поводу второй - в VB ты знаешь не просто имя метода, а все, подчеркиваю, все методы и свойства всех объектов в приложении.
А применительно к первой части твоего предложения, готов поспорить что твоя функция используется узконаправленно и помимо того в очень специфической области.
Вернуться в Программное обеспечение
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15