Mt2Hizmet 1
Mt2Hizmet
C 1
chengdu
xranzei 1
xranzei
zendor2 1
zendor2
Bvural41 1
Bvural41
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Almira2 1
Almira2
romegames 1
romegames
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

Altın Konu gül gibi exploit şeysi

  • Konuyu başlatan Konuyu başlatan cBaraN
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 59
  • Görüntüleme Görüntüleme 10K
5.00 yıldız(lar) 2 Değerlendirme Değerlendirenler

cBaraN

Level 4
TM Üye
Katılım
18 Kas 2013
Konular
26
Mesajlar
471
Online süresi
29d 10h
Reaksiyon Skoru
413
Altın Konu
1
TM Yaşı
12 Yıl 6 Ay 23 Gün
Başarım Puanı
139
MmoLira
1,329
DevLira
9
Ticaret - 0%
0   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

son günlerde serverlere girip item dupelayıp serveri crashleyen arkadaştan kurtulmanız için basit fix

isteyen kullansın istemeyende şu bu yazmasın dönemeyecem öptüm

[CODE lang="cpp" title="input_main.cpp arat"]int CInputMain::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
{
LPCHARACTER ch;

if (!(ch = d->GetCharacter()))
{
sys_err("no character on desc");
d->SetPhase(PHASE_CLOSE);
return (0);
}

int iExtraLen = 0;

if (test_server && bHeader != HEADER_CG_MOVE)
sys_log(0, "CInputMain::Analyze() ==> Header [%d] ", bHeader);[/CODE]

[CODE lang="cpp" title="altına ekle"]if (ch->GetDesc()->GetPhase() != PHASE_GAME && ch->GetDesc()->GetPhase() != PHASE_DEAD)
{
sys_err("no character in game");
sys_log(0, "no character in game %u %u %u", ch->GetPlayerID(), ch->GetDesc()->GetPhase(), bHeader);
d->SetPhase(PHASE_CLOSE);
return (0);
}[/CODE]

[CODE lang="cpp" title="desc.h ara"]bool IsPhase(int phase) const { return m_iPhase == phase ? true : false; }[/CODE]

[CODE lang="clike" title="altına ekle"]int GetPhase() const { return m_iPhase; }[/CODE]

Log ;
11.png



22.png


Bazı crash örnek;
C++:
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x0813869a in CItem::GetSize (this=0x4e0c7680) at item.h:46
46      item.h: No such file or directory.
[Current thread is 1 (LWP 101075)]
(gdb) backtrace
#0  0x0813869a in CItem::GetSize (this=0x4e0c7680) at item.h:46
#1  CInputMain::SafeboxCheckin (this=0x4e6a5d9c, ch=0x33418640,
    c_pData=0x4d431d40 "F\027\a\a") at input_main.cpp:2074
#2  0x0813eaf3 in CInputMain::Analyze (this=0x4e6a5d9c, d=0x4e6a5d00,
    bHeader=70 'F', c_pData=0x4d431d40 "F\027\a\a") at input_main.cpp:4013
#3  0x081288f5 in CInputProcessor::Process (iBytes=5,
    r_iBytesProceed=@0xffff9d38: 0, c_pvOrig=0x4d431d40, lpDesc=0x4e6a5d00,
    this=0x4e6a5d9c) at input.cpp:102
#4  CInputProcessor::Process (this=0x4e6a5d9c, lpDesc=0x4e6a5d00,
    c_pvOrig=0x4d431d40, iBytes=5, r_iBytesProceed=@0xffff9d38: 0)
    at input.cpp:62
#5  0x080fe52e in DESC::ProcessInput (this=0x4e6a5d00) at desc.cpp:313
#6  0x08219a65 in io_loop (fdw=0x2988f260) at main.cpp:1004
#7  0x08219cb1 in idle () at main.cpp:887
#8  idle () at main.cpp:856
#9  0x0806e1e5 in main (argc=<optimized out>, argv=<optimized out>)
    at main.cpp:533
(gdb) bt full
#0  0x0813869a in CItem::GetSize (this=0x4e0c7680) at item.h:46
No locals.
#1  CInputMain::SafeboxCheckin (this=0x4e6a5d9c, ch=0x33418640, c_pData=0x4d431d40 "F\027\a\a") at input_main.cpp:2074
        p = 0x4d431d40
        pkSafebox = 0x4d852d00
        pkItem = 0x4e0c7680
        szHint = "\360\000\000\000\320\341\377\377\b\340\377(\024\234\377\377\277\a\366(\314\342\377\377\000\234\377\377O\276\036\000\003\000\000\000\b\340\377(\240\363\214e\210\225\360\n&\362\320O\003\000\000\000\320\037\233\b\201h<\000 \234\377\377+\016{\aY;M(N\000\000\000\320\037\233\b\b\340\377(<\234\377\377\022\a\366(\001\000\000\000\224\063ka\206\235|\307}\252\a\225Y;M(x\234\377\377\000\000\000\000\b\340\377("
#2  0x0813eaf3 in CInputMain::Analyze (this=0x4e6a5d9c, d=0x4e6a5d00, bHeader=70 'F', c_pData=0x4d431d40 "F\027\a\a") at input_main.cpp:4013
        ch = 0x33418640
        __FUNCTION__ = "Analyze"
        iExtraLen = 0
#3  0x081288f5 in CInputProcessor::Process (iBytes=5, r_iBytesProceed=@0xffff9d38: 0, c_pvOrig=0x4d431d40, lpDesc=0x4e6a5d00, this=0x4e6a5d9c) at input.cpp:102
        iExtraPacketSize = <optimized out>
        bHeader = 70 'F'
        c_pszName = 0x4a98cf1c "SafeboxCheckin"
        c_pData = 0x4d431d40 "F\027\a\a"
        bLastHeader = 0 '\000'
        iLastPacketLen = 0
        iPacketLen = 5
        c_pData = <optimized out>
        bLastHeader = <optimized out>
        iLastPacketLen = <optimized out>
        iPacketLen = <optimized out>
        __FUNCTION__ = "Process"
        bHeader = <optimized out>
        c_pszName = <optimized out>
        iExtraPacketSize = <optimized out>
#4  CInputProcessor::Process (this=0x4e6a5d9c, lpDesc=0x4e6a5d00, c_pvOrig=0x4d431d40, iBytes=5, r_iBytesProceed=@0xffff9d38: 0) at input.cpp:62
        c_pData = 0x4d431d40 "F\027\a\a"
        bLastHeader = 0 '\000'
        iLastPacketLen = 0
        iPacketLen = <optimized out>
        __FUNCTION__ = "Process"
        bHeader = <optimized out>
        c_pszName = <optimized out>
        iExtraPacketSize = <optimized out>
#5  0x080fe52e in DESC::ProcessInput (this=0x4e6a5d00) at desc.cpp:313
        iBytesProceed = 0
        bytes_read = 5
        __FUNCTION__ = "ProcessInput"
#6  0x08219a65 in io_loop (fdw=0x2988f260) at main.cpp:1004
        iRet = <optimized out>
        d = 0x4e6a5d00
        num_events = 118
        event_idx = 103
        __FUNCTION__ = "io_loop"
#7  0x08219cb1 in idle () at main.cpp:887
        now = {tv_sec = 1634415508, tv_usec = 541315}
        passed_pulses = <optimized out>
        t = 948579
        pta = {tv_sec = 1634415508, tv_usec = 23440}
        process_time_count = 13
        now = {tv_sec = <optimized out>, tv_usec = <optimized out>}
        passed_pulses = <optimized out>
        t = <optimized out>
#8  idle () at main.cpp:856
        now = {tv_sec = <optimized out>, tv_usec = <optimized out>}
        passed_pulses = <optimized out>
        t = <optimized out>
        pta = {tv_sec = 1634415508, tv_usec = 23440}
        process_time_count = 13
--Type <RET> for more, q to quit, c to continue without paging--Quit
 
Son düzenleme:

En Çok Reaksiyon Alan Mesajlar

Paylaşım için teşekkürler baya bir gecikti bunun farkedilmesi ama geç olsun güç olmasın. Geriden gelmek hiç gelmemekten iyidir.

bool CInputProcessor : Process(LPDESC lpDesc
içerisinden düzeltmek desc bağlantısının şu an ki phase durumunu analiz yapanın phase türüyle karşılaştırıp fixlemek daha doğru olur bu şekilde bu yarım bir engel ve paketlerin ekstra kontrol ve güvenliği amaçlı ekstra birşeyler yazılabilir daha güvenli olabilir.

typedef struct command_safebox_checkin
{
uint8_t bHeader;
uint8_t bSafePos;
TItemPos ItemPos;
} TPacketCGSafeboxCheckin;


char szHint[128];
snprintf(szHint, sizeof(szHint), "%s %u", pkItem->GetName(), pkItem->GetCount());
LogManager::instance().ItemLog(ch, pkItem, "SAFEBOX PUT", szHint);


böyle bir yerden bu coreyi nasıl yediğini çok merak ediyorum hala şaşıyorum leak dan dolayı core yemişsin gibi duruyor envanter slotundan yang olarak item bulunması aşırı anormal bir durum. bu durum %99.9 leakı işaret eder vnum stununundaki değerler de leak olduğunu doğrular nitelikte ama senin paylaştığın şey gerekli ama bu coreyle alakası yok bilgin olsun detaylı src ni incelemelisin bir yerde kaçak var gibi duruyor.

1. resimdeki işaretlediğin yerlerdeki ve onların altındaki toplam 3 satırın vnum değerleri aynı ama isimler farklı leak olduğunun bir başka göstergesi.

GDB Sonucu üzerine;

Kayda değer görmüyorum ama yinede söyleyeyim forumda gdb diye konu olmasa harbiden ne olduğunu bilmeyecekmişsin, kankam orada dikkat etmen gereken "header" ne geliyor bir bak daha sonra fonksiyonlara bir bak neyi put edebiliyorsun. 128 char vermiş sence orada bir artık veri mümkün mü?

Bunun dışında kişisel fikrim;

Madem hatayı biliyordun neden paylaşmadın? Kaç gündür açılan büyük serverlerin onca yatırılmış miktarı olmasına rağmen hepsi açılış gününde itemciden battı niye paylaşmadın? Belkide yapan sendin bilemiyorum yapan sen değilsen bile göz yumdun çünkü yükselmek için birisinin batmasına göz yummayı normal bir davranış olarak görüyorsunuz.

Bunu paylaşıp veya paylaşmamak normalde benim umurumda olur mu? Açtığım projeler ortada buradan kimseyede ihtiyacım yok, kimsenin onayınada ihtiyacım yok. Sözde siz topluluk için birşeyler yapmaya çalışıyor görünüp ama bildiğiniz kritik tüm hataları saklayıp "salyalarınızı akıta akıta" el altı birbirinize dağıtıyorsunuz, sonra gelip biri planlarınızın dışında hareket edip paylaşınca nasıl saldıracağınızı şaşırıyorsunuz.

Sürekli olarak insanların iyiliğini düşünüyormuşsunuz gibi sorsak bir kanadınız eksik melekten ama aslında "hiçlikten" öteye gitmiyorsunuz, sırf tanımıyorsunuz diye insanların yaptığı şeyleri linçlediğinizi görmüyor muyum?

Lütfen kullanıcaksanız kullanın (ki adım gibi eminim bilmem ne korkusundan kullanacaksın buna yemin bile edebilirim ama ispatlayamam xd). Kullanmayacaksanızda sorun değil ben bu çözümü buradaki insanlar için paylaştım.

Buradaki insanlar belki son parasıyla server açacak hani bir kazanç umudu sonuçta hepimiz bu işe girerken bir umutla bir kazanç umudu ile giriyoruz. Hepimizin hayatında kaygıları var, geçinmek zorundayız paylaşmamın tek amacı insanların tek umudunu elinden almaya yeltenen bir aptalın bunu yapmasını engellemek. Yoksa ben zaten kazanıyorum, zaten projelerim tutuyor "banane" diyip geçmek inan bana çok kolay benim için fakat vicdanım elvermedi.

Arkadaşlar cevap veremiyorum veya geç veriyorum kusura bakmayın çünkü malum işlerim var tanıyanlar bilecektir taşınma mevzum var. Hepinizi tek tek etiketlemeye gerek var mı bilmiyorum ama hepinize yorumlarınız için teşekkür ederim, seviyom böyle commentleri muck ❤️😍
kanka hiçbir zaman çalışma mantığına anlam veremiyorum ya :D @cBaraN
Hayır zaten vermişsinde bunu aratın diye millete :)
2 denetim için ekstra bir fonksiyon tanımına ne gerek vardı ki..

[CODE lang="cpp" title=".."] if (!ch->GetDesc()->IsPhase(PHASE_GAME) && !ch->GetDesc()->IsPhase(PHASE_DEAD)) {
d->SetPhase(PHASE_CLOSE);
return (0);
}[/CODE]
Dediğin yere şöyle yapsalar tamam işte :)
Teşekkürler.
 
son günlerde serverlere girip item dupelayıp serveri crashleyen arkadaştan kurtulmanız için basit fix

isteyen kullansın istemeyende şu bu yazmasın dönemeyecem öptüm

[CODE lang="cpp" title="input_main.cpp arat"]int CInputMain::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
{
LPCHARACTER ch;

if (!(ch = d->GetCharacter()))
{
sys_err("no character on desc");
d->SetPhase(PHASE_CLOSE);
return (0);
}

int iExtraLen = 0;

if (test_server && bHeader != HEADER_CG_MOVE)
sys_log(0, "CInputMain::Analyze() ==> Header [%d] ", bHeader);[/CODE]

[CODE lang="cpp" title="altına ekle"]if (ch->GetDesc()->GetPhase() != PHASE_GAME && ch->GetDesc()->GetPhase() != PHASE_DEAD)
{
sys_err("no character in game");
sys_log(0, "no character in game %u %u %u", ch->GetPlayerID(), ch->GetDesc()->GetPhase(), bHeader);
d->SetPhase(PHASE_CLOSE);
return (0);
}[/CODE]

[CODE lang="cpp" title="desc.h ara"]bool IsPhase(int phase) const { return m_iPhase == phase ? true : false; }[/CODE]

[CODE lang="clike" title="altına ekle"]int GetPhase() const { return m_iPhase; }[/CODE]

Log ;
Paylaşım için teşekkürler baya bir gecikti bunun farkedilmesi ama geç olsun güç olmasın. Geriden gelmek hiç gelmemekten iyidir.

bool CInputProcessor : Process(LPDESC lpDesc
içerisinden düzeltmek desc bağlantısının şu an ki phase durumunu analiz yapanın phase türüyle karşılaştırıp fixlemek daha doğru olur bu şekilde bu yarım bir engel ve paketlerin ekstra kontrol ve güvenliği amaçlı ekstra birşeyler yazılabilir daha güvenli olabilir.
 
Son düzenleme:
teşekkürler beybilito :D
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst