Сообщений: 3,354
Тем: 97
Зарегистрирован: Aug 2011
Репутация:
9,445
darkevil Написал:Глянул так на скорую руку, приложение вроде как написанное на C# (но не уверен) сделал текстовый дамп, ничего интересного пока не увидел.
Судя по всему приложение обфусцировано, чем не удалось выяснить мой peid молчит как партизан.
Добавлено через 28 минут
Держи, чистый бинарник даже запускается и работает, но лицуху и ограничения не снимал ибо изучать надо что да как работает.
Но структуру Net видно отлично, смотрел через ida, вероятно есть куда более удобные редакторы кода.
http://rghost.ru/45662196
Сам бинарник был обфусцирован видно стандартными средствами.
Добавлено через 33 минуты
Можно глянуть участок кода где написано:
[SRC="c++"]
loc_2DD34: // CODE XREF: fje+41F1j
brtrue.s loc_2DD51
ldstr "SellOrderInstaller"
ldstr "Trading of "
ldloc.s 0x1B
ldstr " disabled in trial mode. Code 2"
call string [mscorlib]System.String::Concat(string, string, string)
call void U0e.UHe::ee(string string_0, string string_1)
loc_2DD51: // CODE XREF: fje:loc_2DD34j
ldc.i4.s 0x10
ldstr "Trader Trial Limitation"
ldstr "Trial verion of the trader may be used to trade skillbooks only. Please purchase full version license to install sell order for: {0}"
ldc.i4.s 0x1E
[/SRC]
upd: хотя это вроде что-то другое, ну ощем плацдарм для тестов есть.
Спасибо покопаю сам попробую
Fater Написал:Во ева пилоты ))) радует За кого играете ?
Тема немного о другом, рядом есть темка о еве лучше туда.
Сообщений: 2,267
Тем: 6
Зарегистрирован: Aug 2009
Репутация:
8,698
xolseg Написал:Спасибо покопаю сам попробую
Тема немного о другом, рядом есть темка о еве лучше туда.
Еще в помощь!
Идем на сайт любимых реактивных мозгов, http://www.jetbrains.com/decompiler/download/index.html
Качаем dotPeek устанавливаем, загружаем в нее exe который я залил на RGhost и смотрим декомпил в Net, куда удобнее копаться в кишках.
На счет редактирования не подскажу, ибо не занимался никогда редактированием бинарников собранных на net, думаю есть софт типа dotPeek который может и открывать и собирать, но не уверен.
А дальше как грится бог в помощь, мб кто подсобит в ковырянии
Сообщений: 269
Тем: 20
Зарегистрирован: Jan 2010
Репутация:
221
Сообщений: 3,354
Тем: 97
Зарегистрирован: Aug 2011
Репутация:
9,445
Накопал, что активация идет через http://www.macrolab-online.com/ActivateService.asmx
Куда дальше копать понятия не имею, есть ли смысл подменить через Hosts ?? Но нужно поднимать тогда activateserivce
Сообщений: 2,267
Тем: 6
Зарегистрирован: Aug 2009
Репутация:
8,698
xolseg Написал:Накопал, что активация идет через http://www.macrolab-online.com/ActivateService.asmx
Куда дальше копать понятия не имею, есть ли смысл подменить через Hosts ?? Но нужно поднимать тогда activateserivce
Я думаю что лучше попробовать вырубить проверку лицензии чем пытаться сэмулировать сервис активации, тем более что там все равно нужно генерить лицензионный ключь который так же чем-то зашифрован каким-то криптом, хотя можно посмотреть загрузка лиц ключа и посмотреть какой метод крипта там юзается разобрать лиц ключь и глянуть из чего он состоит, если поймешь из чего то вероятно можно будет сэмулировать хост и завернуть его с помощью хостс или файрвола на свой.
Сообщений: 3,354
Тем: 97
Зарегистрирован: Aug 2011
Репутация:
9,445
05-05-2013, 06:52 AM
(Сообщение последний раз редактировалось: 05-05-2013, 07:07 AM xolseg.)
Что то у меня не очень получается. :-)
Здесь код
Код: internal class Cme
{
internal DateTime Be = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
internal bool bool_0;
internal int ce;
internal DateTime dateTime_0 = new DateTime(0x6a4, 1, 1);
internal string he = "";
internal int int_0 = 1;
internal DateTime Ne = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
internal ulong Oe;
private string Re = "";
internal int se;
internal int Xe;
internal ulong ge(string string_0)
{
return Convert.ToUInt64(string_0);
}
internal string Ge(byte[] byte_0, byte[] byte_1)
{
this.Re = "";
this.method_1(C9e.Cke.De);
this.xe(this.Xe);
this.method_1(C9e.Cke.me);
this.xe(this.se);
this.method_1(C9e.Cke.ee);
this.xe(this.int_0);
this.method_1(C9e.Cke.Ue);
this.xe(this.ce);
this.method_1(C9e.Cke.le);
this.xe(this.Oe);
this.method_1(C9e.Cke.ve);
this.xe(this.Be);
this.method_1(C9e.Cke.ie);
this.xe(this.Ne);
this.method_1(C9e.Cke.ue);
this.xe(this.dateTime_0);
this.method_1(C9e.Cke.fe);
this.xe(this.bool_0);
this.method_1(C9e.Cke.te);
this.xe(this.he);
byte[] bytes = Encoding.Unicode.GetBytes(this.Re);
ICryptoTransform transform = new RijndaelManaged { Mode = CipherMode.CBC }.CreateEncryptor(byte_0, byte_1);
MemoryStream stream = new MemoryStream();
CryptoStream stream2 = new CryptoStream(stream, transform, CryptoStreamMode.Write);
stream2.Write(bytes, 0, bytes.Length);
stream2.FlushFinalBlock();
byte[] inArray = stream.ToArray();
stream.Close();
stream2.Close();
this.Re = Convert.ToBase64String(inArray);
return this.Re;
}
internal DateTime Je(string string_0)
{
string str = string_0.Substring(0, 4);
string str2 = string_0.Substring(4, 2);
string str3 = string_0.Substring(6, 2);
return new DateTime(Convert.ToInt32(str), Convert.ToInt32(str2), Convert.ToInt32(str3));
}
internal bool ke(string string_0)
{
return (string_0 == "1");
}
internal bool method_0(string string_0, byte[] byte_0, byte[] byte_1)
{
bool flag;
byte[] buffer = Convert.FromBase64String(string_0);
ICryptoTransform transform = new RijndaelManaged { Mode = CipherMode.CBC }.CreateDecryptor(byte_0, byte_1);
MemoryStream stream = new MemoryStream();
CryptoStream stream2 = new CryptoStream(stream, transform, CryptoStreamMode.Write);
stream2.Write(buffer, 0, buffer.Length);
stream2.FlushFinalBlock();
byte[] bytes = stream.ToArray();
stream.Close();
stream2.Close();
string_0 = Encoding.Unicode.GetString(bytes, 0, bytes.Length);
try
{
string[] strArray = string_0.Split(new char[] { '|' });
for (int i = 0; i < (strArray.Length / 2); i++)
{
if (strArray[i * 2] == C9e.Cke.De)
{
this.Xe = this.Qe(strArray[(i * 2) + 1]);
}
else if (strArray[i * 2] == C9e.Cke.me)
{
this.se = this.Qe(strArray[(i * 2) + 1]);
}
else if (strArray[i * 2] == C9e.Cke.ee)
{
this.int_0 = this.Qe(strArray[(i * 2) + 1]);
}
else if (strArray[i * 2] == C9e.Cke.Ue)
{
this.ce = this.Qe(strArray[(i * 2) + 1]);
}
else if (strArray[i * 2] == C9e.Cke.le)
{
this.Oe = this.ge(strArray[(i * 2) + 1]);
}
else if (strArray[i * 2] == C9e.Cke.ve)
{
this.Be = this.Je(strArray[(i * 2) + 1]);
}
else if (strArray[i * 2] == C9e.Cke.ie)
{
this.Ne = this.Je(strArray[(i * 2) + 1]);
}
else if (strArray[i * 2] == C9e.Cke.ue)
{
this.dateTime_0 = this.Je(strArray[(i * 2) + 1]);
}
else if (strArray[i * 2] == C9e.Cke.fe)
{
this.bool_0 = this.ke(strArray[(i * 2) + 1]);
}
else if (strArray[i * 2] == C9e.Cke.te)
{
this.he = strArray[(i * 2) + 1];
}
}
return true;
}
catch
{
flag = false;
}
return flag;
}
internal void method_1(string string_0)
{
if (this.Re.Length > 0)
{
this.Re = this.Re + "|";
}
this.Re = this.Re + string_0;
}
internal int Qe(string string_0)
{
return Convert.ToInt32(string_0);
}
internal void xe(object object_0)
{
this.Re = this.Re + "|";
if (object_0 is int)
{
this.Re = this.Re + ((int) object_0).ToString();
}
else if (object_0 is DateTime)
{
DateTime time = (DateTime) object_0;
DateTime time2 = (DateTime) object_0;
DateTime time3 = (DateTime) object_0;
this.Re = this.Re + time.Year.ToString("D4") + time2.Month.ToString("D2") + time3.Day.ToString("D2");
}
else if (object_0 is ulong)
{
this.Re = this.Re + ((ulong) object_0).ToString();
}
else if (object_0 is string)
{
this.Re = this.Re + object_0.ToString();
}
else
{
if (!(object_0 is bool))
{
throw new Exception("Invalid Key Type");
}
if ((bool) object_0)
{
this.Re = this.Re + "1";
}
else
{
this.Re = this.Re + "0";
}
}
}
}
Это что выше я так понимаю создает время работы пробной лицензии, т.е. когда установили - когда закончится демка равная 30 дням или что то типа того... Или не туда копаю?
Вот с таймером который отвечает за 120 минут работы сложнее, не могу понять откуда и куда идут данные и найти само значение 120 минут. о_О
Т.е. там есть таймеры отвечающие за время нахождения на белте, время простоя и т.д., а время работы самой программы найти не могу или не так ищу О_о
Добавлено через 14 минут
Нашел ещё кусок, который относится именно к этим 2м часам работы бота.. а куда дальше прыгать хз. О_о
Код
Код: {
NFe.ZWe[NFe.Z7e].Client_clientLicensed = false;
if (!((!(((be) NFe.ZWe[NFe.Z7e].Client_Form).General_EvehWnd != IntPtr.Zero) || (((be) NFe.ZWe[NFe.Z7e].Client_Form).General_EVEProc == null)) || ((be) NFe.ZWe[NFe.Z7e].Client_Form).General_EVEProc.HasExited))
{
NFe.ZWe[NFe.Z7e].Client_Execute = false;
((be) NFe.ZWe[NFe.Z7e].Client_Form).General_CancelCurrentMethod = true;
Pe.NZe((be) NFe.ZWe[NFe.Z7e].Client_Form);
Thread.Sleep(0x3e8);
}
if (flag)
{
this.method_7("Result: client " + NFe.Z7e + " switched off as trial license is close to the end of the 2h trial period", 11);
}
goto Label_00FD;
}
Сообщений: 5,863
Тем: 105
Зарегистрирован: Sep 2010
Репутация:
13,014
http://www.insidepro.com/kk/140/140r.shtml
Мне кажется эта вещь поможет.
Kerberos используйте.
Сообщений: 3,354
Тем: 97
Зарегистрирован: Aug 2011
Репутация:
9,445
Копал копал и в итоге пока положил болт до лучших времен, что то не идет у меня...
Наверное нужно почитать литературу и написать свой hello world :-(
Сообщений: 2,267
Тем: 6
Зарегистрирован: Aug 2009
Репутация:
8,698
05-08-2013, 12:11 AM
(Сообщение последний раз редактировалось: 05-08-2013, 02:12 AM darkevil.)
xolseg советую вооружиться все же инструментом вроде ida и почитать хотя бы http://habrahabr.ru/post/154419/
Может помочь чтобы скажем менять условия, обходя те или иные проверки.
Хороший справочник, поможет частично разобраться.
http://www.ecma-international.org/public...MA-335.pdf
Краткий справочник по инструкциям.
http://en.csharp-online.net/CIL_Instruction_Set
Добавлено через 49 минут
[SRC="java"]
if (((UOe.we() - m7e.ee) > 0x694920L) && Cle.Ge().method_29())
{
NFe.ZWe[NFe.Z7e].Client_clientLicensed = false;
if (!((!(((be) NFe.ZWe[NFe.Z7e].Client_Form).General_EvehWnd != IntPtr.Zero) || (((be) NFe.ZWe[NFe.Z7e].Client_Form).General_EVEProc == null)) || ((be) NFe.ZWe[NFe.Z7e].Client_Form).General_EVEProc.HasExited))
{
NFe.ZWe[NFe.Z7e].Client_Execute = false;
((be) NFe.ZWe[NFe.Z7e].Client_Form).General_CancelCurrentMethod = true;
Pe.NZe((be) NFe.ZWe[NFe.Z7e].Client_Form);
Thread.Sleep(0x3e8);
}
[/SRC]
Вот тут к примеру триалка закрывается по истечению 115 минут. Обратить внимание на
[SRC="java"]((UOe.we() - m7e.ee) > 0x694920L)[/SRC]
Где 0x694920L = твоим ~ 2м часам. Теоретически можно изменить время скажем на 10 часов и более и триалка будет не 2а часа работать, а все 10 и т.п. Можно пойти глубже и найти где что еще при проверках дергается благо тут достаточно все понятно т.к. юзаются методы UOe.we(), m7e.ee - связанные скорее всего с таймерами можно попробовать и вовсе заморозить все. Так же Cle.Ge().method_29() ну и т.д. посидеть чутка проанализировать и думаю можно что-то придумать, инфы в целом по енету хватает.
Добавлено через 1 час 59 минут
xolseg ради интереса попробуй http://rghost.ru/45841253
Если проработает ~3 часа то думается мне можно и глубже копнуть
P.S. Будет просить апдейтнутся, отказывайся иначе бинарник перезапишет новым.
Сообщений: 3,354
Тем: 97
Зарегистрирован: Aug 2011
Репутация:
9,445
darkevil Написал:xolseg советую вооружиться все же инструментом вроде ida и почитать хотя бы http://habrahabr.ru/post/154419/
Может помочь чтобы скажем менять условия, обходя те или иные проверки.
Хороший справочник, поможет частично разобраться.
http://www.ecma-international.org/public...MA-335.pdf
Краткий справочник по инструкциям.
http://en.csharp-online.net/CIL_Instruction_Set
Добавлено через 49 минут
[SRC="java"]
if (((UOe.we() - m7e.ee) > 0x694920L) && Cle.Ge().method_29())
{
NFe.ZWe[NFe.Z7e].Client_clientLicensed = false;
if (!((!(((be) NFe.ZWe[NFe.Z7e].Client_Form).General_EvehWnd != IntPtr.Zero) || (((be) NFe.ZWe[NFe.Z7e].Client_Form).General_EVEProc == null)) || ((be) NFe.ZWe[NFe.Z7e].Client_Form).General_EVEProc.HasExited))
{
NFe.ZWe[NFe.Z7e].Client_Execute = false;
((be) NFe.ZWe[NFe.Z7e].Client_Form).General_CancelCurrentMethod = true;
Pe.NZe((be) NFe.ZWe[NFe.Z7e].Client_Form);
Thread.Sleep(0x3e8);
}
[/SRC]
Вот тут к примеру триалка закрывается по истечению 115 минут. Обратить внимание на
[SRC="java"]((UOe.we() - m7e.ee) > 0x694920L)[/SRC]
Где 0x694920L = твоим ~ 2м часам. Теоретически можно изменить время скажем на 10 часов и более и триалка будет не 2а часа работать, а все 10 и т.п. Можно пойти глубже и найти где что еще при проверках дергается благо тут достаточно все понятно т.к. юзаются методы UOe.we(), m7e.ee - связанные скорее всего с таймерами можно попробовать и вовсе заморозить все. Так же Cle.Ge().method_29() ну и т.д. посидеть чутка проанализировать и думаю можно что-то придумать, инфы в целом по енету хватает.
Добавлено через 1 час 59 минут
xolseg ради интереса попробуй http://rghost.ru/45841253
Если проработает ~3 часа то думается мне можно и глубже копнуть 
P.S. Будет просить апдейтнутся, отказывайся иначе бинарник перезапишет новым. Спасибо попробую, наверное, дело в том, что я просто не представляю что мне гуглить, что бы понять в какую сторону идти..
|