Сейчас на форуме: johnniewalker, NIKOLA (+7 невидимых)

 eXeL@B —› Крэки, обсуждения —› Ряд непоняток с прогой на VB .NET
Посл.ответ Сообщение

Ранг: 3.1 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 11 февраля 2017 14:06 · Поправил: yuryrce
· Личное сообщение · #1

Озвучивать название проги смысла не имеет. Закейгенено 7 из 8 продуктов автора. С последним возникли проблемы из-за незнания VB .NET. Ниже код, хлам вырезал.

Функция проверки валидности:
Code:
  1. Public Function method_93(ByVal string_27 As String) As Boolean
  2.     Dim voidPtr As Void* = DirectCast(stackalloc Byte[8], Void*)
  3.     Me.string_15 = ""
  4.     Class43.bool_0 = False
  5.     If (string_27 <> "") Then
  6.         Try 
  7.             Dim textArray1 As String()
  8.             DirectCast(voidPtr, Integer*) = Me.int_4
  9.             Me.int_5 = 0
  10.             Do While (Me.int_5 <= DirectCast(voidPtr, Integer*)) ;почему не просто <= Me.int_4 ?
  11.                 DirectCast((voidPtr + 4), Integer*) = Me.int_5 ;зачем присваивается и куда?
  12.                 Select Case DirectCast((voidPtr + 4), Integer*) ;что с чем сравнивается?
  13.                     Case 0
  14.                         Class43.string_3 = "Enterprise"
  15.                         Exit Select
  16.                     Case 1
  17.                         Class43.string_3 = "Professional"
  18.                         Exit Select
  19.                     Case 2
  20.                         Class43.string_3 = "Free"
  21.                         Exit Select
  22.                     Case Else
  23.                         Class43.string_3 = "Plus"
  24.                         Exit Select
  25.                 End Select
  26.                 Me.string_17 = Strings.Split(Me.method_60(Encoding.UTF8.GetBytes(string_27.Trim), Me.method_6(Encoding.UTF8.GetBytes((Class42.string_0 & Me.method_61(DateAndTime.Now) & Conversions.ToString(Me.int_5))))), gVariables1.string_6, -1, CompareMethod.Binary)
  27.                 If (((Me.string_17.Length >= 3) AndAlso (Me.string_17(0) = Class42.string_0)) AndAlso (Me.string_17(1) <> "")) Then
  28.                     goto Label_0135
  29.                 End If
  30.                 Me.int_5 += 1
  31.             Loop
  32.             goto Label_01C3
  33.         Catch exception1 As Exception
  34.         End Try
  35.     End If
  36.     Return Class43.bool_0
  37. End Function

method_6 -> Sha256
method_60 -> 3DES
Class42.string_0 -> константа
gVariables1.string_6 -> константа
method_61 -> Непонятные манипуляции с датой

Ключевой интерес:
Code:
  1. Class42.string_0 & Me.method_61(DateAndTime.Now) & Conversions.ToString(Me.int_5)


method_61:
Code:
  1. Private Function method_61(ByVal dateTime_1 As DateTime) As String
  2.     Return (Me.string_18 & Conversions.ToString(DateAndTime.Now.Subtract(dateTime_1).Seconds))
  3. End Function

Вопрос по куску этой функции:
Conversions.ToString(DateAndTime.Now.Subtract(dateTime_1).Seconds)
при dateTime_1 = DateAndTime.Now равен нулю, как показала компиляция.
Это какой-то трюк или там реально всегда будет 0?

Этот вопрос снят. Спасибо dosprog. Остальное в силе.

string_18:
Code:
  1. string_18 = Conversions.ToString(Strings.ChrW((&H9A4 + Me.int_3)))

int_3 -> 10
Как данный кусок записать в C#? '\u2478' ?

Остальное всё разобрано досканально. Тут вообще умом тронуться можно, если на VB не прогал...

По сути остался только тупой вопрос как записать на C#?
Strings.ChrW((&H9A4 + Me.int_3))



PS: если вопросы слишком тупые, то можно закрыть. Надеюсь, что кто-нибудь натолкнёт на мысль.

| Сообщение посчитали полезным: SDK

Ранг: 431.7 (мудрец), 389thx
Активность: 0.730.32
Статус: Участник

Создано: 11 февраля 2017 21:42 · Поправил: dosprog
· Личное сообщение · #2

yuryrce пишет:
Это какой-то трюк или там реально всегда будет 0?

Похоже на детекчение пошаговой трассировки в отладчике.
При трассировке там будет не ноль.



| Сообщение посчитали полезным: yuryrce

Ранг: 3.1 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 12 февраля 2017 14:48
· Личное сообщение · #3

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

PS: C# это ещё чёрт бы с ним, он почти как Delphi, но VB вообще никогда не трогал руками...



Ранг: 34.1 (посетитель), 118thx
Активность: 0.040.01
Статус: Участник

Создано: 12 февраля 2017 19:32 · Поправил: nick8606
· Личное сообщение · #4

Microsoft.VisualBasic.Strings.ChrW((0x9A4 + this.int_3))

Ну вот так можно...

А вообще, что мешало в качестве языка декомптляции выбрать не VB, а C#?

| Сообщение посчитали полезным: yuryrce

Ранг: 3.1 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 12 февраля 2017 23:21 · Поправил: yuryrce
· Личное сообщение · #5

nick8606 пишет:
А вообще, что мешало в качестве языка декомптляции выбрать не VB, а C#?

Шарп и выбрал, но при компиляции не нашел как VB'шные функции приляпать. В шарп он эти строки не декомпилит. Приходится в исходнике править на аналог. Из-за незнания не допёр как эту строку в шарпе записать. VB'шный вариант сравнивал с шарповским, чтобы удостовериться, что один результат дают при компиляции.

PS: можно, конечно, весь кейген наваять на VB, что решит ряд проблем, НО! жуть как не хочется вникать в синтаксис VB. Я на нём даже HelloWorld написать не в состоянии




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 13 февраля 2017 04:53
· Личное сообщение · #6

yuryrce

> не поддаются мне, как человеку, никогда не программировавшему под .NET

Скорее всего дело не в том, кодил это или нет. Просто сам синтаксис и реализация мягко говоря убога, соответственно для понимания это тоже код не из простых.

Я вот например никак понять не могу что это такое:

Code:
  1. Dim voidPtr As Void* = DirectCast(stackalloc Byte[8], Void*)


Можно было бы подумать что это дефейн массива на стеке с его раширением(размер > 4k), но это не более чем догадка. Хз что это вообще такое.

Остальное тоже не понятно. Наверно нужно быть особо одарённым" что бы такой код генерить.

-----
vx


| Сообщение посчитали полезным: yuryrce

Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 13 февраля 2017 10:34
· Личное сообщение · #7

string_18 = Conversions.ToString(Strings.ChrW((&H9A4 + Me.int_3))) == string string_18 = (char(2468 +Me.int_3)).ToString();

| Сообщение посчитали полезным: yuryrce

Ранг: 3.1 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 13 февраля 2017 12:07 · Поправил: yuryrce
· Личное сообщение · #8

Medsft, не подскажешь понятным языком, что делает код? Пробовал компилить - свич не пашет.
Code:
  1. void* voidPtr = (void*) stackalloc byte[8];
  2. *((int*) voidPtr) = int_4;
  3. int_5 = 0;
  4. while (int_5 <= *(((int*) voidPtr)))
  5. {
  6.   *((int*) (voidPtr + 4)) = int_5;
  7.   switch (*(((int*) (voidPtr + 4))))
  8.   {
  9.     case 0:
  10.       string_3 = "X";
  11.       break;
  12.     case 1:
  13.       string_3 = "Y";
  14.       break;
  15.     case 2:
  16.       string_3 = "Z";
  17.       break;
  18.     default:
  19.       string_3 = "W";
  20.       break;
  21.   }
  22.   int_5++;
  23. }


UPD
Пояснили понятным языком:
int arr[2];
arr[0]=int_4;
int_5=0;
while(int5<=arr[0]){
arr[1] = int_5;
switch(arr[1])

Как предполагал, так и есть. Значит со мной ещё не всё потеряно

Добавлено спустя 58 минут
Всем откликнувшимся огромная благодарность. Успешно решено и закейгенено. Стоило приаттачиться к процессу dnSpy и нашелся косяк - без отладки не вычислить нужный символ. Верный кусок:
Code:
  1. private static string method_61()
  2. {
  3.   return "&#2509;" + Convert.ToString(DateTime.Now.Subtract(DateTime.Now).Seconds) + Convert.ToString(3);
  4. }

http://forum.ru-board.com/topic.cgi?forum=35&topic=51884#11

Прикрою за ненадобностью


 eXeL@B —› Крэки, обсуждения —› Ряд непоняток с прогой на VB .NET
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати