lis84
15.09.2009, 09:57
Здравствуйте.
Решил тут на днях тряхнуть стариной, и зарегать на себя небольшую программку.
http://botva.onlinebots.net/
Программка триальная, на 80 запусков, и раз в 2 часа завершает работу.
Метод защиты - серийный номер, который генерится по аппаратному номеру привязанному к машине.
Вобщем то ничего сложного. Покопавшись в отладчике убедил программу что введённая мной белиберда это и есть серийный номер :).
Но возникла вторая проблема. Теперь программа ломится на сайт разработчика http://botva.onlinebots.net/checkregistrationcode.php и скидывает ему через post 2 параметра, ключ и email (в программе который вводится)
Прошу помощи. Подскажите на какую api функцию повешать бряк, чтобы он сработал в момент передачи/получения ответа.
Нашёл в памяти адрес строки с адресом (извините за тафталогию), пробовал бряк на чтение с памяти, но он не срабатывает (впрочем он у меня почему то никогда не срабатывал)
Сама программа написанна на c#. Строки с адресом в экзешнике нет, скорее всего она как то кодирована. (чтобы тупо подменить адрес на свой).
В дисшарпе нашол интересную функцию
Скорее всего она и есть искомая весч, но ничего в ней не могу найти, за что зацепиться отладчиком.
Может кто нибудь подскажет как справляться с такими защитами?
private string Method2_5(bool p1, bool p2, bool p3)
{
string s2;
int i = 0;
string s1 = System.String.Empty;
try
{
System.Net.HttpWebRequest httpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.C reate(Root.Class8.Method8_1(847480816) + Field2_139 + Field2_140 + Root.Class8.Method8_1(847481588));
if (Field2_117)
{
if (Field2_116)
{
System.Net.ICredentials icredentials = new System.Net.NetworkCredential(Field2_250, Field2_249);
httpWebRequest.Proxy = new System.Net.WebProxy(Field2_248 + Root.Class8.Method8_1(847489944) + Field2_90.ToString(), true, null, icredentials);
}
else
{
httpWebRequest.Proxy = new System.Net.WebProxy(Field2_248, Field2_90);
}
}
else
{
httpWebRequest.Proxy = null;
}
httpWebRequest.Timeout = 30000;
httpWebRequest.ServicePoint.Expect100Continue = false;
httpWebRequest.AllowAutoRedirect = false;
httpWebRequest.Accept = Root.Class8.Method8_1(847480721);
httpWebRequest.Referer = Root.Class8.Method8_1(847480816) + Field2_139 + Field2_140 + Root.Class8.Method8_1(847481588);
httpWebRequest.Headers.Add(Root.Class8.Method8_1(8 47480667), Root.Class8.Method8_1(847480693));
httpWebRequest.Headers.Add(Root.Class8.Method8_1(8 47480599), Root.Class8.Method8_1(847480609));
httpWebRequest.Headers.Add(Root.Class8.Method8_1(8 47480637), Root.Class8.Method8_1(847480520));
httpWebRequest.Headers.Add(Root.Class8.Method8_1(8 47480561), Root.Class8.Method8_1(847480448));
httpWebRequest.UserAgent = Field2_251;
httpWebRequest.KeepAlive = true;
httpWebRequest.Headers.Add(Root.Class8.Method8_1(8 47480984), Field2_162);
System.Net.HttpWebResponse httpWebResponse = (System.Net.HttpWebResponse)httpWebRequest.GetResp onse();
System.IO.StreamReader streamReader = new System.IO.StreamReader(httpWebResponse.GetResponse Stream(), System.Text.Encoding.GetEncoding(1251));
s1 = streamReader.ReadToEnd();
httpWebResponse.Close();
}
catch (System.Exception e)
{
Root.Class2.Class16 class16 = new Root.Class2.Class16();
class16.Field16_1 = e;
class16.Field16_3 = this;
Field2_281 = System.Convert.ToInt32(Field2_53.Value * (1000M));
class16.Field16_2 = (double)Field2_281;
class16.Field16_2 /= 1000.0;
Invoke(new System.Windows.Forms.MethodInvoker(class16.Method1 6_1));
Invoke(new System.Windows.Forms.MethodInvoker(class16.Method1 6_2));
return Root.Class8.Method8_1(847489664);
}
if (s1.IndexOf(Root.Class8.Method8_1(847482847)) > 0)
{
if (p1)
{
Field2_190 = System.String.Empty;
while (s1[s1.IndexOf(Root.Class8.Method8_1(847482858)) + 16 + i] != 10)
{
Field2_190 = System.String.Concat(Field2_190, s1[s1.IndexOf(Root.Class8.Method8_1(847482858)) + 16 + i]);
i++;
}
Field2_190 = Field2_190.Replace(Root.Class8.Method8_1(847482755 ), System.String.Empty);
}
i = 0;
if (p3)
{
Field2_196 = System.String.Empty;
while (s1[s1.IndexOf(Root.Class8.Method8_1(847482763)) + 10 + i] != 32)
{
Field2_196 = System.String.Concat(Field2_196, s1[s1.IndexOf(Root.Class8.Method8_1(847482763)) + 10 + i]);
i++;
}
}
i = 0;
if (p2)
{
Field2_167 = System.String.Empty;
while (s1[s1.IndexOf(Root.Class8.Method8_1(847482784)) + 51 + i] != 60)
{
Field2_167 = System.String.Concat(Field2_167, s1[s1.IndexOf(Root.Class8.Method8_1(847482784)) + 51 + i]);
i++;
}
Field2_168 = System.String.Empty;
i = 0;
s1 = s1.Remove(0, s1.IndexOf(Root.Class8.Method8_1(847482784)) + 51 + i);
while (s1[s1.IndexOf(Root.Class8.Method8_1(847482784)) + 51 + i] != 60)
{
Field2_168 = System.String.Concat(Field2_168, s1[s1.IndexOf(Root.Class8.Method8_1(847482784)) + 51 + i]);
i++;
}
}
return Root.Class8.Method8_1(847481052);
}
return Root.Class8.Method8_1(847503990);
}
Решил тут на днях тряхнуть стариной, и зарегать на себя небольшую программку.
http://botva.onlinebots.net/
Программка триальная, на 80 запусков, и раз в 2 часа завершает работу.
Метод защиты - серийный номер, который генерится по аппаратному номеру привязанному к машине.
Вобщем то ничего сложного. Покопавшись в отладчике убедил программу что введённая мной белиберда это и есть серийный номер :).
Но возникла вторая проблема. Теперь программа ломится на сайт разработчика http://botva.onlinebots.net/checkregistrationcode.php и скидывает ему через post 2 параметра, ключ и email (в программе который вводится)
Прошу помощи. Подскажите на какую api функцию повешать бряк, чтобы он сработал в момент передачи/получения ответа.
Нашёл в памяти адрес строки с адресом (извините за тафталогию), пробовал бряк на чтение с памяти, но он не срабатывает (впрочем он у меня почему то никогда не срабатывал)
Сама программа написанна на c#. Строки с адресом в экзешнике нет, скорее всего она как то кодирована. (чтобы тупо подменить адрес на свой).
В дисшарпе нашол интересную функцию
Скорее всего она и есть искомая весч, но ничего в ней не могу найти, за что зацепиться отладчиком.
Может кто нибудь подскажет как справляться с такими защитами?
private string Method2_5(bool p1, bool p2, bool p3)
{
string s2;
int i = 0;
string s1 = System.String.Empty;
try
{
System.Net.HttpWebRequest httpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.C reate(Root.Class8.Method8_1(847480816) + Field2_139 + Field2_140 + Root.Class8.Method8_1(847481588));
if (Field2_117)
{
if (Field2_116)
{
System.Net.ICredentials icredentials = new System.Net.NetworkCredential(Field2_250, Field2_249);
httpWebRequest.Proxy = new System.Net.WebProxy(Field2_248 + Root.Class8.Method8_1(847489944) + Field2_90.ToString(), true, null, icredentials);
}
else
{
httpWebRequest.Proxy = new System.Net.WebProxy(Field2_248, Field2_90);
}
}
else
{
httpWebRequest.Proxy = null;
}
httpWebRequest.Timeout = 30000;
httpWebRequest.ServicePoint.Expect100Continue = false;
httpWebRequest.AllowAutoRedirect = false;
httpWebRequest.Accept = Root.Class8.Method8_1(847480721);
httpWebRequest.Referer = Root.Class8.Method8_1(847480816) + Field2_139 + Field2_140 + Root.Class8.Method8_1(847481588);
httpWebRequest.Headers.Add(Root.Class8.Method8_1(8 47480667), Root.Class8.Method8_1(847480693));
httpWebRequest.Headers.Add(Root.Class8.Method8_1(8 47480599), Root.Class8.Method8_1(847480609));
httpWebRequest.Headers.Add(Root.Class8.Method8_1(8 47480637), Root.Class8.Method8_1(847480520));
httpWebRequest.Headers.Add(Root.Class8.Method8_1(8 47480561), Root.Class8.Method8_1(847480448));
httpWebRequest.UserAgent = Field2_251;
httpWebRequest.KeepAlive = true;
httpWebRequest.Headers.Add(Root.Class8.Method8_1(8 47480984), Field2_162);
System.Net.HttpWebResponse httpWebResponse = (System.Net.HttpWebResponse)httpWebRequest.GetResp onse();
System.IO.StreamReader streamReader = new System.IO.StreamReader(httpWebResponse.GetResponse Stream(), System.Text.Encoding.GetEncoding(1251));
s1 = streamReader.ReadToEnd();
httpWebResponse.Close();
}
catch (System.Exception e)
{
Root.Class2.Class16 class16 = new Root.Class2.Class16();
class16.Field16_1 = e;
class16.Field16_3 = this;
Field2_281 = System.Convert.ToInt32(Field2_53.Value * (1000M));
class16.Field16_2 = (double)Field2_281;
class16.Field16_2 /= 1000.0;
Invoke(new System.Windows.Forms.MethodInvoker(class16.Method1 6_1));
Invoke(new System.Windows.Forms.MethodInvoker(class16.Method1 6_2));
return Root.Class8.Method8_1(847489664);
}
if (s1.IndexOf(Root.Class8.Method8_1(847482847)) > 0)
{
if (p1)
{
Field2_190 = System.String.Empty;
while (s1[s1.IndexOf(Root.Class8.Method8_1(847482858)) + 16 + i] != 10)
{
Field2_190 = System.String.Concat(Field2_190, s1[s1.IndexOf(Root.Class8.Method8_1(847482858)) + 16 + i]);
i++;
}
Field2_190 = Field2_190.Replace(Root.Class8.Method8_1(847482755 ), System.String.Empty);
}
i = 0;
if (p3)
{
Field2_196 = System.String.Empty;
while (s1[s1.IndexOf(Root.Class8.Method8_1(847482763)) + 10 + i] != 32)
{
Field2_196 = System.String.Concat(Field2_196, s1[s1.IndexOf(Root.Class8.Method8_1(847482763)) + 10 + i]);
i++;
}
}
i = 0;
if (p2)
{
Field2_167 = System.String.Empty;
while (s1[s1.IndexOf(Root.Class8.Method8_1(847482784)) + 51 + i] != 60)
{
Field2_167 = System.String.Concat(Field2_167, s1[s1.IndexOf(Root.Class8.Method8_1(847482784)) + 51 + i]);
i++;
}
Field2_168 = System.String.Empty;
i = 0;
s1 = s1.Remove(0, s1.IndexOf(Root.Class8.Method8_1(847482784)) + 51 + i);
while (s1[s1.IndexOf(Root.Class8.Method8_1(847482784)) + 51 + i] != 60)
{
Field2_168 = System.String.Concat(Field2_168, s1[s1.IndexOf(Root.Class8.Method8_1(847482784)) + 51 + i]);
i++;
}
}
return Root.Class8.Method8_1(847481052);
}
return Root.Class8.Method8_1(847503990);
}