Сейчас на форуме: Rio, johnniewalker, vsv1, Magister Yoda (+6 невидимых)

 eXeL@B —› Крэки, обсуждения —› Java -> Delphi
Посл.ответ Сообщение

Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 27 августа 2011 09:34 · Поправил: SaNX
· Личное сообщение · #1

Ковыряю одну прогу на андроиде, нашел процедуру проверки рег.ключа, но оно на жаве,а я в ней не шарю нифига
Кто может помочь в дельфи переделать?
Code:
  1.  String s = getDeviceID();
  2.  String s1 = sharedpreferences.getString("Registration key", "");
  3.  
  4. private boolean CheckRPN(String s, String s1)
  5.     {
  6.         if(s.length() > 1) goto _L2; else goto _L1
  7. _L1:
  8.         boolean flag = false;
  9. _L5:
  10.         return flag;
  11. _L2:
  12.         if(s1.length() == 5) goto _L4; else goto _L3
  13. _L3:
  14.         flag = false;
  15.           goto _L5
  16. _L4:
  17.         int i1;
  18.         if(s.length() > 10)
  19.         {
  20.             String s2 = String.valueOf(s.substring(0, 5));
  21.             StringBuilder stringbuilder = new StringBuilder(s2);
  22.             int i = s.length() - 5;
  23.             String s3 = s.substring(i);
  24.             s = stringbuilder.append(s3).toString();
  25.         }
  26.         int j = s.length() - 1;
  27.         int k = Math.min(9, j);
  28.         byte abyte0[] = s.getBytes();
  29.         int l = s.length() - 1;
  30.         byte byte0 = abyte0[l];
  31.         i1 = (65535 - k) * byte0 * k;
  32. _L10:
  33.         if(i1 > 65535) goto _L7; else goto _L6
  34. _L6:
  35.         Object aobj[];
  36.         aobj = new Object[1];
  37.         Integer integer = Integer.valueOf(i1);
  38.         aobj[0] = integer;
  39.         if(!String.format("%05d", aobj).equalsIgnoreCase(s1)) goto _L9; else goto _L8
  40. _L8:
  41.         flag = true;
  42.           goto _L5
  43. _L7:
  44.         int j1 = i1 / 0x10000;
  45.         int k1 = 0x10000 * j1;
  46.         i1 -= k1;
  47.           goto _L10
  48. _L9:
  49.         byte abyte1[];
  50.         int l1;
  51.         int i2;
  52.         i1 = 0;
  53.         abyte1 = s.getBytes();
  54.         l1 = 0;
  55.         i2 = 0;
  56. _L17:
  57.         int j2 = s.length();
  58.         if(i2 < j2) goto _L12; else goto _L11
  59. _L11:
  60.         if(i1 > 65535) goto _L14; else goto _L13
  61. _L13:
  62.         if(i1 < -65535) goto _L16; else goto _L15
  63. _L15:
  64.         if(i1 < 0)
  65.             i1 += 0x10000;
  66.         Object aobj1[] = new Object[1];
  67.         Integer integer1 = Integer.valueOf(i1);
  68.         aobj1[0] = integer1;
  69.         flag = String.format("%05d", aobj1).equalsIgnoreCase(s1);
  70.           goto _L5
  71. _L12:
  72.         int k2 = 0;
  73.         if(i2 == 0)
  74.             k2 = 1;
  75.         int l2 = k2 * 60 + i1;
  76.         int i3 = abyte1[i2] * 38;
  77.         i1 = l2 + i3;
  78.         l1++;
  79.         if(l1 >= 10)
  80.             l1 = 0;
  81.         i2++;
  82.           goto _L17
  83. _L14:
  84.         i1 %= 0x10000;
  85.           goto _L11
  86. _L16:
  87.         i1 %= 0x10000;
  88.           goto _L13
  89.         Exception exception;
  90.         exception;
  91.         flag = false;
  92.           goto _L5
  93.     }


-----
SaNX





Ранг: 196.6 (ветеран), 11thx
Активность: 0.070.01
Статус: Участник

Создано: 27 августа 2011 18:55
· Личное сообщение · #2

тут у тебя очень кривая декомпиляция. Какие инструменты использовал?
dex2jar - последняя версия?
если декомпилировал jd-gui - последней версией?
лучше бы выложил саму прогу, чем такой декомпиль



Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 27 августа 2011 19:15
· Личное сообщение · #3

Вот от jd-gui
Code:
  1.  private boolean CheckRPN(String paramString1, String paramString2)
  2.   {
  3.     try
  4.     {
  5.       if (paramString1.length() <= 1);
  6.       for (bool = false; ; bool = false)
  7.       {
  8.         return bool;
  9.         if (paramString2.length() == 5)
  10.           break;
  11.       }
  12.       if (paramString1.length() > 10)
  13.       {
  14.         String str1 = String.valueOf(paramString1.substring(0, 5));
  15.         StringBuilder localStringBuilder = new StringBuilder(str1);
  16.         int i = paramString1.length() - 5;
  17.         String str2 = paramString1.substring(i);
  18.         paramString1 = str2;
  19.       }
  20.       int j = paramString1.length() - 1;
  21.       int k = Math.min(9, j);
  22.       byte[] arrayOfByte1 = paramString1.getBytes();
  23.       int m = paramString1.length() - 1;
  24.       int n = arrayOfByte1[m];
  25.       int i1 = (65535 - k) * n * k;
  26.       while (true)
  27.       {
  28.         if (i1 <= 65535)
  29.         {
  30.           Object[] arrayOfObject1 = new Object[1];
  31.           Integer localInteger1 = Integer.valueOf(i1);
  32.           arrayOfObject1[0] = localInteger1;
  33.           if (!String.format("%05d", arrayOfObject1).equalsIgnoreCase(paramString2))
  34.             break label208;
  35.           bool = true;
  36.           break;
  37.         }
  38.         int i2 = i1 / 65536;
  39.         int i3 = 65536 * i2;
  40.         i1 -= i3;
  41.       }
  42.       label208: i1 = 0;
  43.       byte[] arrayOfByte2 = paramString1.getBytes();
  44.       int i4 = 0;
  45.       int i5 = 0;
  46.       label223: int i6 = paramString1.length();
  47.       if (i5 >= i6)
  48.         label236: if (i1 > 65535)
  49.           break label363;
  50.       while (true)
  51.       {
  52.         if (i1 >= -65535)
  53.         {
  54.           if (i1 < 0)
  55.             i1 += 65536;
  56.           Object[] arrayOfObject2 = new Object[1];
  57.           Integer localInteger2 = Integer.valueOf(i1);
  58.           arrayOfObject2[0] = localInteger2;
  59.           bool = String.format("%05d", arrayOfObject2).equalsIgnoreCase(paramString2);
  60.           break;
  61.           int i7 = 0;
  62.           if (i5 == 0)
  63.             i7 = 1;
  64.           int i8 = i7 * 60 + i1;
  65.           int i9 = arrayOfByte2[i5] * 38;
  66.           i1 = i8 + i9;
  67.           i4 += 1;
  68.           if (i4 >= 10)
  69.             i4 = 0;
  70.           i5 += 1;
  71.           break label223;
  72.           label363: i1 %= 65536;
  73.           break label236;
  74.         }
  75.         i1 %= 65536;
  76.       }
  77.     }
  78.     catch (Exception localException)
  79.     {
  80.       while (true)
  81.         boolean bool = false;
  82.     }
  83.   }

cам класс в аттаче.

87c4_27.08.2011_EXELAB.rU.tgz - CameraView.class

-----
SaNX




Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 27 августа 2011 19:31
· Личное сообщение · #4

обязательно дельфи нужно? самое простое тут будет на C# перегнать



Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 27 августа 2011 19:35 · Поправил: SaNX
· Личное сообщение · #5

я в си плохо шарю
но, если не сложно, попробуй, может разберусь

-----
SaNX





Ранг: 196.6 (ветеран), 11thx
Активность: 0.070.01
Статус: Участник

Создано: 27 августа 2011 20:35
· Личное сообщение · #6

так, если возможно, дай еще реальный DeviceID устройства и серийник.
серийник не обязательно, его можно сгенерировать по функции, но тогда придется тебе проверять его правильность.



Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 27 августа 2011 21:08 · Поправил: Av0id
· Личное сообщение · #7

валидная пара
CheckRPN("bbbbbcccccd", "63536");
CheckRPN("avoiddabest", "63216");

пардон, в СС запутался, а вот код на C#:
Code:
  1.         static int CheckRPN(String paramString1, String paramString2)
  2.         {
  3.             int retval;
  4.  
  5.             retval = 0;
  6.  
  7.             if (paramString1.Length <= 1)
  8.                 return retval;
  9.  
  10.             if (paramString2.Length != 5)
  11.                 return retval;
  12.  
  13.             if (paramString1.Length > 10)
  14.             {
  15.                 String str1 = paramString1.Substring(0, 5);
  16.                 StringBuilder localStringBuilder = new StringBuilder(str1);
  17.                 int i = paramString1.Length - 5;
  18.                 String str2 = paramString1.Substring(i);
  19.                 paramString1 = str2;
  20.             }
  21.  
  22.             int j = paramString1.Length - 1;
  23.             int k = Math.Min(9, j);
  24.             byte[] arrayOfByte1 = System.Text.Encoding.ASCII.GetBytes(paramString1);
  25.             int m = paramString1.Length - 1;
  26.             int n = arrayOfByte1[m];
  27.             int i1 = (65535 - k) * n * k;
  28.             while (true)
  29.             {
  30.                 if (i1 <= 65535)
  31.                 {
  32.                     if (String.Compare(String.Format("{0:d5}", i1), paramString2, true) == 0)
  33.                     {
  34.                         retval = 1;
  35.                         return retval;
  36.                     }
  37.                     break;
  38.                 }
  39.                 int i2 = i1 / 65536;
  40.                 int i3 = 65536 * i2;
  41.                 i1 -= i3;
  42.             }
  43.             i1 = 0;
  44.             byte[] arrayOfByte2 = System.Text.Encoding.ASCII.GetBytes(paramString1);
  45.             int i4 = 0;
  46.             int i5 = 0;
  47.             
  48.             while (true)
  49.             {
  50.                 int i6 = paramString1.Length;
  51.                 if (i6 > i5)
  52.                 {
  53.                     int i7 = 0;
  54.                     if (i5 == 0)
  55.                     i7 = 1;
  56.                     int i8 = i7 * 60 + i1;
  57.                     int i9 = arrayOfByte2[i5] * 38;
  58.                     i1 = i8 + i9;
  59.                     i4 += 1;
  60.                     if (i4 >= 10)
  61.                     i4 = 0;
  62.                     i5 += 1;
  63.                     continue;
  64.                 }
  65.  
  66.                 if(i1 > 65535)
  67.                 {
  68.                     i1 %= 65536;
  69.                 }
  70.                 else if(i1 < -65535)
  71.                 {
  72.                     i1 %= 65536;
  73.                 }
  74.                 else
  75.                 {
  76.                     if (i1 < 0)
  77.                         i1 += 65536;
  78.                     retval = String.Compare(String.Format("{0:d5}", i1), paramString2, true);
  79.                     return retval;
  80.                 }
  81.             }
  82.         }




Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 27 августа 2011 23:10 · Поправил: SaNX
· Личное сообщение · #8

[wl] пишет:
дай еще реальный DeviceID устройства и серийник.

серийника конечно же нет, а девайсид, насколько я понял из жабы - это просто имей тела.

Av0id
сенкс, тут вроде понятней. буду конвертить в дельфю

адд: нашел еще --> тут <-- конвертор жава - дельфи, буду пробовать

-----
SaNX





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 28 августа 2011 03:08
· Личное сообщение · #9

SaNX пишет:
нашел еще --> тут <-- конвертор жава - дельфи

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

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 28 августа 2011 11:44 · Поправил: SaNX
· Личное сообщение · #10

Av0id пишет:
а вот код на C#:

у тебя ошибка
после первого сравнения if (String.Compare(String.Format("{0:d5}", i1), paramString2, true) == 0)
должно уйти на
i1 = 0;
byte[] arrayOfByte2 = System.Text.Encoding.ASCII.GetBytes(paramString1);

а у тебя return.

Чото я вообще не догоняю. Как можно сравнивать одну и туже строку paramString2 с разными результатами, и при этом должны обе проверки быть валидными. Как так?

Isaev
ну если можешь, то сделай

-----
SaNX




Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 28 августа 2011 12:06 · Поправил: SaNX
· Личное сообщение · #11

[wl] пишет:
dex2jar - последняя версия?

скачал последнюю версию, декомпильнул и теперь jd-gui вообще не открывает - List indexs out of bounds
--> сюда <-- залил classes.dex

-----
SaNX




Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 28 августа 2011 14:00 · Поправил: Av0id
· Личное сообщение · #12

логическая ошибка, меняй
Code:
  1.                     if (String.Compare(String.Format("{0:d5}", i1), paramString2, true) == 0)
  2.                     {
  3.                         retval = 1;
  4.                         return retval;
  5.                     }
  6.                     break;

на
Code:
  1.                     if (String.Compare(String.Format("{0:d5}", i1), paramString2, true) != 0)
  2.                     {
  3.                         break;
  4.                     }
  5.                     retval = 1;
  6.                     return retval;


и

Code:
  1.                     retval = String.Compare(String.Format("{0:d5}", i1), paramString2, true);
  2.                     return retval;


на

Code:
  1.                     return (String.Compare(String.Format("{0:d5}", i1), paramString2, true) == 0 ? 1 : 0);




Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 28 августа 2011 14:05 · Поправил: SaNX
· Личное сообщение · #13

А второй вопрос? Строка paramString2 не меняется в функции и сравнивается с двумя разными результатами. Как это вообще возможно?

Можешь скомпиленный вариант выложить с двумя эдитами, в один ввод paramString1, в другой вывод paramString2 ?

-----
SaNX




Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 28 августа 2011 14:27
· Личное сообщение · #14

вот, .net framework 2 нужен для запуска

2ef8_28.08.2011_EXELAB.rU.tgz - ebola.exe



Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 28 августа 2011 14:30
· Личное сообщение · #15

и проект

3593_28.08.2011_EXELAB.rU.tgz - ebola_sln.rar



Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 28 августа 2011 14:43 · Поправил: SaNX
· Личное сообщение · #16

Сенкс, но где-то косяк. Неверный ключ
Code:
  1.       String str1 = this.m_editTextIMEI.getText().toString();
  2.         String str2 = this.m_editTextKey.getText().toString();
  3.         boolean bool1 = CameraView.this.CheckRPN(str1, str2);
  4.         Context localContext = getContext();
  5.         AlertDialog.Builder localBuilder1 = new AlertDialog.Builder(localContext);
  6.         AlertDialog.Builder localBuilder2 = localBuilder1.setTitle(2131099706);
  7.         SharedPreferences.Editor localEditor1 = CameraView.this.m_cApp.getSharedPreferences("Registration", 0).edit();
  8.         SharedPreferences.Editor localEditor2 = localEditor1.putString("Registration info", str1);
  9.         SharedPreferences.Editor localEditor3 = localEditor1.putString("Registration key", str2);
  10.         boolean bool2 = localEditor1.commit();
  11.         if (bool1)
  12.         {
  13.           AlertDialog.Builder localBuilder3 = localBuilder1.setMessage(2131099713);
  14.           CameraView.this.StopDemoTimer();
  15.         }
  16.         while (true)
  17.         {
  18.           CameraView.RegistrationDialog.1 local1 = new CameraView.RegistrationDialog.1(this);
  19.           AlertDialog.Builder localBuilder4 = localBuilder1.setPositiveButton("OK", local1);
  20.           CameraView.RegistrationDialog.2 local2 = new CameraView.RegistrationDialog.2(this);
  21.           AlertDialog.Builder localBuilder5 = localBuilder1.setOnCancelListener(local2);
  22.           localBuilder1.create().show();
  23.           return;
  24.           AlertDialog.Builder localBuilder6 = localBuilder1.setMessage(2131099714);

setMessage(2131099714) - неверный ключ
setMessage(2131099713) - верный ключ

из текста видим, что строка 1 - это имей. но где-то в твоей проге косяк, т.к. проверка не проходит

-----
SaNX




Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 28 августа 2011 14:59
· Личное сообщение · #17

А если на самой жабе написать брутфорс, 5циферок сбрутить много времени не потребуется. Примеры в гугле вроде встречаются. Так хоть будут известны валидные пары,чтоб C# было на чем тестировать.



Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 28 августа 2011 15:17
· Личное сообщение · #18

оно еще на маркет видимо лезет проверять лицензию



Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 28 августа 2011 15:21 · Поправил: SaNX
· Личное сообщение · #19

Да, там два варианта активации - либо через маркет, либо вручную.

Vovan666 пишет:
А если на самой жабе написать брутфорс,

декомпилированный код не компилится обратно, а я не настолько шарю в жабе, чтоб это исправить.

-----
SaNX




Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 28 августа 2011 15:51
· Личное сообщение · #20

внутри еще есть интересная функция generaterpn



Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 28 августа 2011 17:15
· Личное сообщение · #21

Внатуре это же оно надо просто конвертнуть...

-----
SaNX



 eXeL@B —› Крэки, обсуждения —› Java -> Delphi
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати