-
Автор темы
- #1
Всем привет, это тутор как написать свой обход.
Для начала,я расскажу вам основы.
Чтобы научиться писать обход,сначало нужно логнуть античит это есть тут "как логнуть античит".
После того,как вы приобрели этот туториал, получите логи по инструкции.
После того как вы получили,логи. Полетели,писать свой обход.
--------------------------------------------------------------------
Для начала,существуют два способа написать обход. Через "monoString" и через "void". Я бы советовал писать через "monoString", т.к код получается меньше.
Начнем с начала,нам нужно знать типы данных с++.
В обход нужно ретурнуть текст,поэтому тип данных - "string". В тип данных "string" входит "void" и "monoString", т.к "monoString" - монострока, а void — тип, спецификатор типа и ключевое слово в языках программирования С, C++, Java, C#, Objective-C, D, ActionScript и PHP. Среди современных языков программирования ключевое слово void впервые появилось в C++ для поддержки концепции обобщенных указателей.
--------------------------------------------------------------------
Теперь,пишем начало обхода. Я покажу как я пишу обходы.
Начало каждого хука:
monoString* (*old_safestring)(void* inst);
monoString* safestring(*void inst){
}
Далее,нам нужно писать внутренности обхода.
monoString* (*old_safestring)(void* inst);
monoString* safestring(*void inst){
std::string valtostd(old_safestring(inst)->toChars());
}
Теперь,когда мы пишем поиск чего-либо,нам нужно указать переменую valtostd.
Теперь пишем поиск.
monoString* (*old_safestring)(void* inst);
monoString* safestring(*void inst){
std::string valtostd(old_safestring(inst)->toChars());
if (contains(valtostd, "base.apk:") && contains(valtostd, "|main.")){
}
}
Так,вот я написал поиск base.apk и |main. , чтобы вернуть оригинальные кэши игры. Которые мы получили в логи, вот пример:
base.apk:495616b01919ae6fb793dbd30df08015:94530818|main.2010.com.axlebolt.standoff2.obb:933bf54569583031ecfe5ff367c76958:1401339473
Я написал в поиск - "base.apk" и "|main.", потому-что в начале нашех хэшей указаны эти названия.
Теперь мы пишем ретурн.
monoString* (*old_safestring)(void* inst);
monoString* safestring(*void inst){
std::string valtostd(old_safestring(inst)->toChars());
if (contains(valtostd, "base.apk:") && contains(valtostd, "|main.")){
return CreateMonoString("base.apk:495616b01919ae6fb793dbd30df08015:94530818|main.2010.com.axlebolt.standoff2.obb:933bf54569583031ecfe5ff367c76958:1401339473");
}
}
Все,готово. Мы ретурнули оригинальные кэши игры. Дальше нужно ретурнуть сигнатуру,сигнатура всегда одна и она не меняется. И мы тоже получаем ее в логах,вот она:
lcG7acvUIg0k4FQSQmAbyw1tN0o=
Пишем поиск сигнатуры и ретурнаем её.
monoString* (*old_safestring)(void* inst);
monoString* safestring(*void inst){
std::string valtostd(old_safestring(inst)->toChars());
if (contains(valtostd, "base.apk:") && contains(valtostd, "|main.")){
return CreateMonoString("base.apk:495616b01919ae6fb793dbd30df08015:94530818|main.2010.com.axlebolt.standoff2.obb:933bf54569583031ecfe5ff367c76958:1401339473");
} else if (contains(valtostd, "=") && contains(valtostd, "data")){
return CreateMonoString("lcG7acvUIg0k4FQSQmAbyw1tN0o=");
}
}
Готово,мы ретурнули сигнатуру. Теперь нужно ретурнуть проверку кэша,чтобы мы смогли в нашем апк заменить кэш без всяких проблем и играть с другим кэшем :3
monoString* (*old_safestring)(void* inst);
monoString* safestring(*void inst){
std::string valtostd(old_safestring(inst)->toChars());
if (contains(valtostd, "base.apk:") && contains(valtostd, "|main.")){
return CreateMonoString("base.apk:495616b01919ae6fb793dbd30df08015:94530818|main.2010.com.axlebolt.standoff2.obb:933bf54569583031ecfe5ff367c76958:1401339473");
} else if (contains(valtostd, "=") && contains(valtostd, "data")){
return CreateMonoString("lcG7acvUIg0k4FQSQmAbyw1tN0o=");
} else if (contains(valtostd, "base.apk") && contains(valtostd, "/data") && contains(valtostd, "|") && contains(valtostd, ".com.axlebolt.standoff2.obb:")){
return CreateMonoString("base.apk:495616b01919ae6fb793dbd30df08015:94530818");
}
}
А теперь объязательно нужно ретурнуть анти-бан девайс,чтобы бан по девайсу снимался автоматически.
monoString* (*old_safestring)(void* inst);
monoString* safestring(*void inst){
std::string valtostd(old_safestring(inst)->toChars());
if (contains(valtostd, "base.apk:") && contains(valtostd, "|main.")){
return CreateMonoString("base.apk:495616b01919ae6fb793dbd30df08015:94530818|main.2010.com.axlebolt.standoff2.obb:933bf54569583031ecfe5ff367c76958:1401339473");
} else if (contains(valtostd, "=") && contains(valtostd, "data")){
return CreateMonoString("lcG7acvUIg0k4FQSQmAbyw1tN0o=");
} else if (contains(valtostd, "base.apk") && contains(valtostd, "/data") && contains(valtostd, "|") && contains(valtostd, ".com.axlebolt.standoff2.obb:")){
return CreateMonoString("base.apk:495616b01919ae6fb793dbd30df08015:94530818");
} else if (contains(valtostd, "3") && contains(valtostd, "|") && contains(valtostd, " ") && contains(valtostd.length() == 16){
return CreateMonoString(gen_random(16).c_str());
}
}
Готово. Теперь нужно сделать так чтобы ваша либка не детектилась, но этому вы научитесь когда купите следущий урок!
А теперь,нужно закончить наш код обхода!
monoString* (*old_safestring)(void* inst);
monoString* safestring(*void inst){
std::string valtostd(old_safestring(inst)->toChars());
if (contains(valtostd, "base.apk:") && contains(valtostd, "|main.")){
return CreateMonoString("base.apk:495616b01919ae6fb793dbd30df08015:94530818|main.2010.com.axlebolt.standoff2.obb:933bf54569583031ecfe5ff367c76958:1401339473");
} else if (contains(valtostd, "=") && contains(valtostd, "data")){
return CreateMonoString("lcG7acvUIg0k4FQSQmAbyw1tN0o=");
} else if (contains(valtostd, "base.apk") && contains(valtostd, "/data") && contains(valtostd, "|") && contains(valtostd, ".com.axlebolt.standoff2.obb:")){
return CreateMonoString("base.apk:495616b01919ae6fb793dbd30df08015:94530818");
} else if (contains(valtostd, "3") && contains(valtostd, "|") && contains(valtostd, " ") && contains(valtostd.length() == 16){
return CreateMonoString(gen_random(16).c_str());
} else if (contains(valtostd, "/data/") && contains(valtostd, ".so") && contains(valtostd, "|")){
}
return old_safestring(inst);
}
}
--------------------------------------------------------------------
[туториал BY TW1X TEAM ( noad )]
Для начала,я расскажу вам основы.
Чтобы научиться писать обход,сначало нужно логнуть античит это есть тут "как логнуть античит".
После того,как вы приобрели этот туториал, получите логи по инструкции.
После того как вы получили,логи. Полетели,писать свой обход.
--------------------------------------------------------------------
Для начала,существуют два способа написать обход. Через "monoString" и через "void". Я бы советовал писать через "monoString", т.к код получается меньше.
Начнем с начала,нам нужно знать типы данных с++.
В обход нужно ретурнуть текст,поэтому тип данных - "string". В тип данных "string" входит "void" и "monoString", т.к "monoString" - монострока, а void — тип, спецификатор типа и ключевое слово в языках программирования С, C++, Java, C#, Objective-C, D, ActionScript и PHP. Среди современных языков программирования ключевое слово void впервые появилось в C++ для поддержки концепции обобщенных указателей.
--------------------------------------------------------------------
Теперь,пишем начало обхода. Я покажу как я пишу обходы.
Начало каждого хука:
monoString* (*old_safestring)(void* inst);
monoString* safestring(*void inst){
}
Далее,нам нужно писать внутренности обхода.
monoString* (*old_safestring)(void* inst);
monoString* safestring(*void inst){
std::string valtostd(old_safestring(inst)->toChars());
}
Теперь,когда мы пишем поиск чего-либо,нам нужно указать переменую valtostd.
Теперь пишем поиск.
monoString* (*old_safestring)(void* inst);
monoString* safestring(*void inst){
std::string valtostd(old_safestring(inst)->toChars());
if (contains(valtostd, "base.apk:") && contains(valtostd, "|main.")){
}
}
Так,вот я написал поиск base.apk и |main. , чтобы вернуть оригинальные кэши игры. Которые мы получили в логи, вот пример:
base.apk:495616b01919ae6fb793dbd30df08015:94530818|main.2010.com.axlebolt.standoff2.obb:933bf54569583031ecfe5ff367c76958:1401339473
Я написал в поиск - "base.apk" и "|main.", потому-что в начале нашех хэшей указаны эти названия.
Теперь мы пишем ретурн.
monoString* (*old_safestring)(void* inst);
monoString* safestring(*void inst){
std::string valtostd(old_safestring(inst)->toChars());
if (contains(valtostd, "base.apk:") && contains(valtostd, "|main.")){
return CreateMonoString("base.apk:495616b01919ae6fb793dbd30df08015:94530818|main.2010.com.axlebolt.standoff2.obb:933bf54569583031ecfe5ff367c76958:1401339473");
}
}
Все,готово. Мы ретурнули оригинальные кэши игры. Дальше нужно ретурнуть сигнатуру,сигнатура всегда одна и она не меняется. И мы тоже получаем ее в логах,вот она:
lcG7acvUIg0k4FQSQmAbyw1tN0o=
Пишем поиск сигнатуры и ретурнаем её.
monoString* (*old_safestring)(void* inst);
monoString* safestring(*void inst){
std::string valtostd(old_safestring(inst)->toChars());
if (contains(valtostd, "base.apk:") && contains(valtostd, "|main.")){
return CreateMonoString("base.apk:495616b01919ae6fb793dbd30df08015:94530818|main.2010.com.axlebolt.standoff2.obb:933bf54569583031ecfe5ff367c76958:1401339473");
} else if (contains(valtostd, "=") && contains(valtostd, "data")){
return CreateMonoString("lcG7acvUIg0k4FQSQmAbyw1tN0o=");
}
}
Готово,мы ретурнули сигнатуру. Теперь нужно ретурнуть проверку кэша,чтобы мы смогли в нашем апк заменить кэш без всяких проблем и играть с другим кэшем :3
monoString* (*old_safestring)(void* inst);
monoString* safestring(*void inst){
std::string valtostd(old_safestring(inst)->toChars());
if (contains(valtostd, "base.apk:") && contains(valtostd, "|main.")){
return CreateMonoString("base.apk:495616b01919ae6fb793dbd30df08015:94530818|main.2010.com.axlebolt.standoff2.obb:933bf54569583031ecfe5ff367c76958:1401339473");
} else if (contains(valtostd, "=") && contains(valtostd, "data")){
return CreateMonoString("lcG7acvUIg0k4FQSQmAbyw1tN0o=");
} else if (contains(valtostd, "base.apk") && contains(valtostd, "/data") && contains(valtostd, "|") && contains(valtostd, ".com.axlebolt.standoff2.obb:")){
return CreateMonoString("base.apk:495616b01919ae6fb793dbd30df08015:94530818");
}
}
А теперь объязательно нужно ретурнуть анти-бан девайс,чтобы бан по девайсу снимался автоматически.
monoString* (*old_safestring)(void* inst);
monoString* safestring(*void inst){
std::string valtostd(old_safestring(inst)->toChars());
if (contains(valtostd, "base.apk:") && contains(valtostd, "|main.")){
return CreateMonoString("base.apk:495616b01919ae6fb793dbd30df08015:94530818|main.2010.com.axlebolt.standoff2.obb:933bf54569583031ecfe5ff367c76958:1401339473");
} else if (contains(valtostd, "=") && contains(valtostd, "data")){
return CreateMonoString("lcG7acvUIg0k4FQSQmAbyw1tN0o=");
} else if (contains(valtostd, "base.apk") && contains(valtostd, "/data") && contains(valtostd, "|") && contains(valtostd, ".com.axlebolt.standoff2.obb:")){
return CreateMonoString("base.apk:495616b01919ae6fb793dbd30df08015:94530818");
} else if (contains(valtostd, "3") && contains(valtostd, "|") && contains(valtostd, " ") && contains(valtostd.length() == 16){
return CreateMonoString(gen_random(16).c_str());
}
}
Готово. Теперь нужно сделать так чтобы ваша либка не детектилась, но этому вы научитесь когда купите следущий урок!
А теперь,нужно закончить наш код обхода!
monoString* (*old_safestring)(void* inst);
monoString* safestring(*void inst){
std::string valtostd(old_safestring(inst)->toChars());
if (contains(valtostd, "base.apk:") && contains(valtostd, "|main.")){
return CreateMonoString("base.apk:495616b01919ae6fb793dbd30df08015:94530818|main.2010.com.axlebolt.standoff2.obb:933bf54569583031ecfe5ff367c76958:1401339473");
} else if (contains(valtostd, "=") && contains(valtostd, "data")){
return CreateMonoString("lcG7acvUIg0k4FQSQmAbyw1tN0o=");
} else if (contains(valtostd, "base.apk") && contains(valtostd, "/data") && contains(valtostd, "|") && contains(valtostd, ".com.axlebolt.standoff2.obb:")){
return CreateMonoString("base.apk:495616b01919ae6fb793dbd30df08015:94530818");
} else if (contains(valtostd, "3") && contains(valtostd, "|") && contains(valtostd, " ") && contains(valtostd.length() == 16){
return CreateMonoString(gen_random(16).c_str());
} else if (contains(valtostd, "/data/") && contains(valtostd, ".so") && contains(valtostd, "|")){
}
return old_safestring(inst);
}
}
--------------------------------------------------------------------
[туториал BY TW1X TEAM ( noad )]