Сейчас на форуме: tyns777 (+5 невидимых)

 eXeL@B —› Программирование —› Разбор простого алго (.NET)
Посл.ответ Сообщение


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

Создано: 17 апреля 2010 00:13 · Поправил: Isaev
· Личное сообщение · #1

Есть такой простенький код:
Code:
  1. public void checklicense()
  2. {
  3.     try
  4.     {
  5.         string licensecode = this.licensecode;
  6.         int[] numArray = new int[10];
  7.         if (licensecode.Length < 12)
  8.         {
  9.             this.demoversion = true;
  10.             this.licensecode = "";
  11.             MessageBox.Show("You have entered an incorrect license code. System is in Demo mode*.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
  12.         }
  13.         else
  14.         {
  15.             int num3;
  16.             int index = licensecode.IndexOf("-");
  17.             if (index > 1)
  18.             {
  19.                 licensecode = licensecode.Substring(0, index);
  20.                 string str2 = licensecode.Substring(index + 1).Trim();
  21.             }
  22.             int num4 = 0;
  23.             do
  24.             {
  25.                 numArray[num4] = Strings.Asc(licensecode.Substring(num4, 1)) - 0x41;
  26.                 num3 += numArray[num4] * 0x29;
  27.                 num4++;
  28.             }
  29.             while (num4 <= 7);
  30.             num3 -= numArray[3] * 3;
  31.             num3 = 0x5dc + num3;
  32.             if (licensecode.Substring(8, 4) != num3.ToString())
  33.             {
  34.                 this.demoversion = true;
  35.                 this.licensecode = "";
  36.                 MessageBox.Show("You have entered an incorrect license code. System is in Demo mode**.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
  37.             }
  38.             else
  39.             {
  40.                 long num5 = Conversions.ToLong(licensecode.Substring(15, 9));
  41.                 int num2 = (int) Math.Round((double) (Conversions.ToDouble(licensecode.Substring(12, 3)) - 100.0));
  42.                 if ((num5 % 0x1dL) != num2)
  43.                 {
  44.                     this.demoversion = true;
  45.                     this.licensecode = "";
  46.                     MessageBox.Show("You have entered an incorrect license code. System is in Demo mode***.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
  47.                 }
  48.                 else
  49.                 {
  50.                     this.demoversion = false;
  51.                 }
  52.             }
  53.         }
  54.     }
  55.     catch (Exception exception1)
  56.     {
  57.         ProjectData.SetProjectError(exception1);
  58.         Exception exception = exception1;
  59.         this.demoversion = true;
  60.         ProjectData.ClearProjectError();
  61.     }
  62. }

Делаю вслепую такой кейген
Code:
  1. Function GetCode(N:String):String;
  2. Var
  3.   S,D:String;
  4.   A,P:Integer;
  5. Begin
  6.   Result:='Error';
  7.   If Length(N)<>8 Then Exit;
  8.   P:=0;
  9.   For A:=1 To 8 Do
  10.     P:=P+(Ord(N[A])-65)*41;
  11.   P:=P-(Ord(N[4])-65)*3+1500;
  12.   S:=IntToStr(P);
  13.   If Length(S)<>4 Then Exit;
  14.   S:=N+S;
  15.   D:='000000000'; // Для простоты
  16.   P:=StrToInt(D) Mod 29+100;
  17.   N:=IntToStr(P);
  18.   If Length(N)<>3 Then Exit;
  19.   Result:=S+N+D+'-FULL'; // Тоже просто так
  20. End;

Т.е. GetCode('CRACKLAB')='CRACKLAB3257100000000000-FULL';
и вроде бы всё правильно (или я что-то накосячил) и вроде прога ключ глотает, но пишет в About trial
проверьте алго и(или) посоветуйте отладчик для .NET в котором можно цифры видеть которые она считает.
в DILE копался, но так ничего путного и не увидел в этом IL коде... Там вообще значение переменных увидеть где-то реально?

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 18 апреля 2010 08:40 · Поправил: ajax
· Личное сообщение · #2

Если уж пишешь ген на паскале, не проще ли в рефлекторе выбрать дельфи или хром?
И диле прекрасно все переменные показывает.

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 590.6 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 18 апреля 2010 10:29
· Личное сообщение · #3

А где код проверки на trial?

-----
старый пень




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

Создано: 18 апреля 2010 15:29
· Личное сообщение · #4

Для дебага .NET есть плагин для reflector http://deblector.codeplex.com/



Ранг: 284.8 (наставник), 6thx
Активность: 0.150
Статус: Участник

Создано: 19 апреля 2010 14:29
· Личное сообщение · #5

Isaev
Закатал твою функцию в студию 2005. и ввел твой серийник. падает тут:

int index = licensecode.IndexOf("-");

if (index > 1)
{
licensecode = licensecode.Substring(0, index);
string str2 = licensecode.Substring(index + 1).Trim();
}

т.к. получается что он находит '-' затем срезает все что идет дальше. получается CRACKLAB3257100000000000
а следующей строкой он пытается срезать ( FULL ), чего уже и так нет и вываливает исключение.
так что убери вообще этот дефис и оставь CRACKLAB3257100000000000 тогда все проходит. из этого кода вообще не ясно зачем это нужно.




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

Создано: 19 апреля 2010 21:55 · Поправил: Isaev
· Личное сообщение · #6

ajax пишет:
не проще ли в рефлекторе выбрать дельфи или хром?

не знал, что есть такая возможность

r_e пишет:
А где код проверки на trial?

Кроме того что привёл ничего не нашёл больше

SYNAPSiS пишет:
Для дебага .NET есть плагин для reflector

спасибо

RSI пишет:
так что убери вообще этот дефис и оставь CRACKLAB3257100000000000 тогда все проходит. из этого кода вообще не ясно зачем это нужно.

точно, так работает! Подловили меня Что-то я не доглядел, думал остальной код по else выполняется

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 19 апреля 2010 23:02
· Личное сообщение · #7

SYNAPSiS ты его сам юзал говорят он глючный. Есть и от МС дебагеры --> MDbg <-- и --> Cordbg<--



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

Создано: 20 апреля 2010 06:30
· Личное сообщение · #8

для дебага вполне хорошо юзается

www.smidgeonsoft.prohosting.com/pebrowse-pro-interactive-debugger.html


 eXeL@B —› Программирование —› Разбор простого алго (.NET)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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