Bu videoda, örneğin C kütüphanesindeki string karşılaştırması gibi bir see fonksiyonunu kancalamaya
göz atacağız.
Bu da Java sitemizden erişim sağlayamadığımız anlamına geliyor.
Dolayısıyla, bu parametreleri veya bu dönüş değerini buradaki fonksiyona bağlayamayız.
Ve bu çok zor bir görev gibi görünüyor, ancak dürüst olmak gerekirse, bu işlevin bu kütüphanede nerede olduğunu
bulmak değil.
Tabii ki, bu çok kaba olacak ve bu nedenle bu videoyu iki bölüme ayırmak istiyorum.
İlk bölüm, yerel bir kütüphane olan tersine mühendislik hakkında olacak.
Bu biraz karmaşık olacak, bu yüzden kol montajı ile karşılaşacağız ama çok yüksek bir seviyede.
Bu yüzden geri kalan her şeyi atlayacağız ve sadece en önemli kısımlara, bu tür bir tersine mühendisliğe,
bunun tüm maliyetine odaklanacağız.
Yine de, size en azından bunu nasıl yapabileceğinize dair bir önizleme sunmak istiyorum, çünkü o zaman
ne aradığınızı bilirsiniz ve bu kodda kendi başınıza gezinebilirsiniz.
Yani, yüksek düzeyde, evet, elbette, arm assembly'yi sadece birkaç dakika içinde öğrenemeyiz, ancak
sanırım bu, kodu veya en azından kodun önemli bölümünü anlamanıza ve ayrıca gerçekten
zorluklarımızı veya görevlerimizi çözmek için aradığınız şeyin işlevini bulmanıza çok yardımcı olacaktır.
Tamam.
İkinci bölüm bu yay karşılaştırma işlevini bağlamakla ilgili olacak.
Ve bu çok eğlenceli olacak çünkü çok fazla yeni şey öğrenmek zorunda değiliz.
Bunların çoğu zaten biliniyor.
Yapmamız gereken tek şey onları bir araya getirmek.
Bu nedenle, kancalama ve doğum fonksiyonu hakkında bildiğimiz her şeyle bulmacamızı tamamlamamız gerekiyor.
Tamamdır.
Tamam.
Bu dersi bitirdikten sonra, son görevimizi yerine getireceğiz.
Ve bu gerçek bir dünya uygulaması ve gerçek bir dünya yakalama fiskesi olacak.
Ve eğer bunu çözebilirsek, son evcil hayvanımız olan kırmızı yatağı elde edeceğiz.
Ve bu son derece şaşırtıcı çünkü bu bölümde ne kadar çok şey öğrendiğimizi gösteriyor.
Ama şimdilik adım adım ilerleyelim.
Bu yüzden sizin için hazırladığım küçük bir meydan okuma ile başlıyoruz.
Bu, plain see işlevi içinde gerçekleştirilir ve kontrol edilir.
Bu, anlamamız ve bunun gerçekleştiğini tespit etmemiz gereken bir şeydir ve daha sonra C fonksiyonunun
parametrelerini ve ayrıca geri dönüş değerini gözlemleyebilmemiz için onu bağlayabileceğiz.
Bu nedenle, bununla başlayalım derim.
Ubuntu VM'ye geri dönelim ve bu uygulamaya bir göz atalım.
Hadi gidelim.
Tamam.
İşte Ubuntu VM'ye geri döndük ve şimdi sizin için hazırladığım bu küçük alıştırmaya bir göz atalım.
Bölümün ekinde, C func freedom adlı bu uygulamayı bulabilirsiniz ve bunu
yeni bir dizine, C Funk of freedom'a koyalım ve şimdi buna bir göz atalım.
Böylece akıllı telefon ekranımızı ve bunu alıyoruz ve şimdi bu dizinde yeni bir terminal açıyoruz ve bu
uygulamada ADB yüklemesini kullanıyoruz ve işte burada.
Burada çok iyi yerleştirilmiş harika görünümlü bir simgemiz var ve bu renkleri görebilirsiniz.
Bunlar artık bu kurs için imza niteliğindeki uygulamalar.
Bunu açalım ve vay canına, daha da şaşırtıcı, bu düzen ve tüm bunlar.
Evet, bu arka plan ve diğer tüm renkler, değil mi?
Kesinlikle.
Bu konuda kesinlikle haklısınız.
Tamam.
Ayrıca bu motive edici metni de aldık.
Bu uygulamayı bir deneyin ve bu kesinlikle yapmanız gereken bir şey.
Burada bayrağımız var.
Bakalım, bu uygulamanın işlevselliği nedir?
Eğer bir metin ekliyorsanız, görelim.
O zaman bayrağın yanlış olduğunu görebiliriz.
Yani test bizim bayrağımız değil gibi görünüyor.
Ve dürüst olmak gerekirse, bu uygulamanın tüm işlevselliği budur.
Orada fazla bir şey yok.
Bayrağımızın doğru olup olmadığını kontrol eden bir fonksiyonumuz var.
Bu nedenle, bu konuya bir göz atalım.
Jade Scooby ile tersine mühendislik yapalım ve içinde ne olduğuna bakalım.
Tamam.
Android manifesto örneğine giriyoruz ve burada sadece bir aktivitemiz olduğunu görüyoruz, ana aktivite,
izinler yok, orada süslü bir şey yok.
Bu yüzden buna çift tıklıyoruz.
Ve burada halka açık bir yerlimiz olduğunu görebiliyoruz.
Yani bu bizim yerel yöntemimiz.
Saklambaç.
Bu kütüphaneyi native lip olarak da yüklediğimizi görebiliriz.
Eğer slip dizinine bakarsanız, burada onları görebilirsiniz.
Bu 6432 x 86, yani 32 bit ve bu da x 86, yani 64 bit.
Tamam.
Bu, bu dizinlere sahip olarak, bu uygulamanın sanal makinemizde de çalıştığı anlamına gelir.
Burada dos bağımlılıklarımız var.
Yine de burada gerçek bir akıllı telefonda kullanmak istiyorum.
Yani bu benim için daha hızlı bir yol.
Ancak bunu sanal makinede de deneyebilirsiniz.
Kesinlikle işe yaramalı.
Pekala.
Şimdi, bir bakalım.
Bu yöntemi bulduk.
Saklambaç.
Burası aranıyor ve görebiliyoruz.
Tamam, bunda eklenen metin alanından alınan bir nesne var.
Bu da şuradaki.
Bunda.
Bu bizim düzenlediğimiz metin.
Dolayısıyla, buna koyduğumuz metin bu işleve iletilecektir.
Parametre olarak bir dize ve dönüş değeri olarak bir dize alıyoruz.
Ve şimdi bir şeyin farkına varmış olabiliriz.
Burada metin görünümünün geri dönüş değerine ayarlanacağını görebiliriz.
Ve eğer bir göz atacak olursak, geri dönüş değerinin artık yanlış olduğunu görürüz.
Yani bu geri dönüş değeridir ve bu da kontrolün kendisiyle ilgili hiçbir etkimiz olmadığı anlamına gelir.
Şunu sağ tarafa koyayım belki.
Şimdi grafik tableti çıkaralım ve bu konu hakkında konuşalım.
Tamam.
Bu parçaları bir araya getirelim.
Saklambaç adında bir fonksiyonumuz var.
Saklambaç.
Bunun parametre olarak bir yayı vardır.
Bu bir nesne.
Bu da dize olarak geri dönüyor ve yerel bir işlev oluyor.
Tamam.
Hadi bakalım.
Şunu bir çözelim.
Şuradaki.
Bu bizim parametremiz.
Bu, buradaki işleve sağlanan nesnedir.
İşlev, buradaki gibi bir dize olarak geri dönüyor.
İşte ip bu.
Ve dize burada görüntülenecektir.
Tamam.
Bu da kontrolle ilgili hiçbir etkimiz olmadığı anlamına gelir çünkü kontrol bu fonksiyonun kendi içinde
gerçekleştirilmektedir.
Şunu temizleyeyim.
Eğer buradaki işlev buysa.
O halde şimdi bakabileceğimiz şey şudur.
Elbette parametreyi bağlayabiliriz ve dönüş değerini buraya bağlayabiliriz.
Ancak bunların hiçbiri çekin kendisiyle ilgili değildir.
Kontrol bu fonksiyon içinde gerçekleştirilebilir.
Başka bir işlev içinde, örneğin, nesnemizi veya parametremizi alıp karşılaştıran bu dize karşılaştırma
işlevi.
Renklerim tükeniyor, bu yüzden bayrağımız olan bu değere karşı maviyi bir kez daha kontrol ediyorum.
Ve şimdi etkileyebileceğimiz tek şey bu.
Ancak bu aynı zamanda buraya basitçe yazabileceğimiz bir şeydir.
Ardından, bayrağın yanlış olup olmadığını veya bayrağın doğru olup olmadığını iddia eden bir geri dönüş
dizesi alırız.
Sizce yapmamız gereken, bu fonksiyonun nerede olduğunu ya da buradaki fonksiyonun ne olduğunu
bulmamız ve kancamızı buraya uygulamamız mı gerekiyor?
Bu yüzden buna bağlanmamız ve bu parametreleri ve ayrıca bunun geri dönüş değerini gözlemlememiz gerekir.
Ve bu elbette özgürlükle de yapabileceğimiz bir şeydir.
Eğer bu adrese sahipseniz, o zaman her şey kolay çünkü tamamen aynı yaklaşım.
Ama bu adresi buraya nasıl getireceğiz?
Bu nedenle biraz araştırma yapmamız gerekiyor çünkü buradaki işlevin ne olduğunu
bilmiyoruz.
Dize karşılaştırmasında olabilir, ancak farklı bir şey de olabilir.
Buradaki kütüphanenin ne olduğunu anlamak için bu yerel kütüphaneyi tersine mühendislikten geçirmemiz gerekiyor.
Ve eğer fark ederseniz, o zaman bunu bağlayabiliriz.
Tamam.
Yani, eğer kendinizi kandırmak isterseniz, yapabileceğiniz şey geri dönüş değerini
burada değiştirmektir.
Yani bayrak doğruysa bunu iddia edebilirsiniz.
Ancak burada ele almak istediğimiz yaklaşım bu değildir, çünkü çıktı içindeki dizgiyi değiştirmek
kontrolün kendisini değiştirmek değildir.
Şuradaki.
Böylece kendimizi aldatmış oluruz.
Ve aşağıdaki durumla karşı karşıya olduğumuzu varsayalım.
Bunu şurada varsayalım.
Bu, girdimizi alan ve bu girdiyi anahtar yerine karşılaştıran bazı kriptografik işlevlerdir.
Statik anahtarın ne olduğunu bulabilirsek, parolaya duyarlı bilgiler, erişim belirteçleri
ve bunun gibi şeyler içeren tüm bu yapılandırma dosyalarının şifresini çözebiliriz.
Eğer sadece şifre çözme işleminin başarılı olduğuna dair çıktıyı değiştiriyorsanız.
Şu anda hiçbir şey alamıyoruz ve bu nedenle yapmamız gerekenler şunlar.
Bu yerel kütüphane kütüphanesini, yerel çizgi kütüphanesini eski olarak almamız ve sökmemiz gerekiyor.
Daha sonra bu fonksiyonun nerede kullanıldığını, yerel fonksiyonumuzu ve bu kontrolün yapılıp
yapılmadığını belirlememiz gerekir.
Dürüst olmak gerekirse, bu birkaç yıl önce gerçekten zor bir görevdi, ancak 2009'a kadar bize çok yardımcı
olan harika bir araca sahibiz.
Ve bu harika alet, Chitra.
Chitra ayrıca ARM mimarisi de dahil olmak üzere birkaç farklı mimari için bir derleyiciye sahiptir,
bu da montaj koduna sahip olmanın yanı sıra bir tür C ++ kodu da elde ettiğimiz anlamına gelir.
OC Bu Java kodu gibi doğru değildir çünkü bu görevin gerçekleştirilmesi bile çok zordur.
Ancak çıktı, bunu ne kadar iyi okuyabildiğimiz ve biraz değiştirerek, evet, tersine mühendislik
yaklaşımımız için kesinlikle kullanabiliriz.
İşte bu ilk bölüm tersine mühendislik, bu kütüphane ve daha sonra ikinci bölümde kolayca bağlanabilecek
olan bu kontrol işlevselliğini tanımlamakla ilgilidir.
Pekala.
Tamam.
Bu nedenle başlayalım, Chitra'yı kurmaya başlayalım ve bunun nasıl yapıldığını anlayalım
ve gidelim.
Tamam.
Bu yüzden yapmamız gereken ilk şey, yerel kütüphaneyi bu uygulamadan çıkarmaktır.
Ama bu kesinlikle büyük bir mesele değil.
Basitçe bu APK'ya girebilir ve sağ tıklayarak buradan çıkarabiliriz.
Yani bu zip arşivinde ve bu içeriği oradan kolayca çıkarabiliriz ve bunu yapalım.
Şimdi burada bu var ama Libya'da da bu kütüphaneler var.
Pekala, assembler'a zaten aşina iseniz, o zaman gitmek için özgür bir seçeneğiniz var.
Şu anda sizin için en rahat mimari hangisi?
Burada 64 yaşındayız.
Şu anda benim için 32 x 86 ve ayrıca 64 bit sürümü.
Ben 32 bit sürümüne bağlı kalmayı seviyorum ve şu anda kendimi güvende hissettiğim mimari bu.
İşte buradaki, tamam, bu uygulamayı analiz etmek için öncelikle tercih ettiğimiz aracı ve benim tercih ettiğim
aracı almamız gerekiyor.
Ben Chitra.
Chitra inanılmaz bir şey ve evet, bu yüzden onu yükleyelim.
Dünyaca ünlü internet sitemize giriyoruz.
İşte resmi sayfamız ve chitra desh de bizim nokta kuruluşumuz.
Ve burada doğrudan GitHub'dan da indirebiliriz.
Yani buna tıklarsak, burada 1001 versiyonu var, buna tıklıyoruz ve şimdi indiriyoruz.
Tamam, indirme işlemi tamamlandı ve ayrıca indirilen dosyamızın burada tam olarak aynı olup olmadığını doğrulamak
için bu SHA 256'ya sahibiz ve bu nedenle bunu doğrulayalım.
Yani indirmelerde artık bir SHA 256 sağlıyoruz ya da bu zip arşivi üzerinden yeni bir tane oluşturuyoruz.
Biraz büyük olduğu için bu biraz zaman alabilir, ancak burada elimizdeki şeyin bu olduğunu
ve olması gerekenin bu olduğunu görebiliriz.
Bu maçta mükemmel.
Tamam.
Bu yüzden lütfen sadece buradaki resmi sayfadan sayfa grafiğini indirin.
Tamam, şimdi indirdik.
Not yok ve işte elimizde.
Buna çift tıklıyorum ve ardından çıkar seçeneğine basıyoruz ve bunu içine çıkarıyoruz.
Aletlerimizin içine.
İşte bu kadar.
Tamam.
Bu arada ben de biraz temizlik yapıyorum.
Tamam.
Yani çıkarma işlemi tamamlandı.
Dosyaları göster seçeneğine tıklıyoruz ve işte burada.
Bunun adını hemen Chitra olarak değiştiriyorum.
Ve bu da şuradaki.
Bu başlangıç senaryosu.
Bu yüzden buna hızlıca bir göz atabiliriz.
Ancak bu Shazam'ı doğrulayarak, burada istenen dosyanın bu olduğundan emin olabiliriz.
Yani, evet, bu sadece almamız gereken en büyük hile paketiyle eşleşiyor, buna bakın ve şu anda
benim için tavşan deliğinden aşağı inin.
Ben buna güveniyorum, ancak bu konuda kendi araştırmanızı yapmaktan çekinmeyin.
Tamamdır.
Yani, bir tane fazla, belki.
Bu konuyu bir kez daha ele alalım.
Chitra'yla başlayalım.
Yani basitçe komut dosyasını başlatıyoruz ve bu uygulama başlatıcıyı burada başlatacak.
Tamam.
İşte şimdi projeye genel bakış.
Ve şimdilik herhangi bir Chitra projemiz yok.
Bu yüzden yeni bir proje oluşturuyoruz.
Burada paylaşılmayan proje ve paylaşılan proje arasında bir seçeneğimiz var.
Bu da aynı dosya üzerinde çalışan birden fazla kişi içindir.
Burada durum böyle değil.
Yani şu anda bu proje üzerinde çalışan tek kişi biziz.
Bu yüzden non share'e tıklıyoruz ve burada proje adını tanımlamamız gerekiyor.
Bu Frida'nın z fonksiyonu.
Tamam.
Ve sonra sadece bitir'e tıklayabiliriz.
Ve şimdilik hepsi bu kadar.
İşte burada yeni projemizi oluşturduk.
Bu arada, Chitra şimdi bu harika hata ayıklama özelliğine sahip.
Bu yüzden bu uzun zamandır gerekliydi ve nihayet onuncu sürümde var.
Ancak hata ayıklamak istemiyoruz.
Bu uygulamayı parçalarına ayırmak istiyoruz.
İzleme deşifre işlemi için izleme budur.
Biz de bunu vurduk.
Ve sonra görelim.
Pekala, işte burada.
Belki de çoktan başlamışımdır.
Ya da bunun yerine daha önce şuradaki makinede denedi.
Normalde, kullanıcı sözleşmesi ve bunun gibi şeylerle ilgili bir açılır pencere olması gerekir.
Bu yüzden lütfen bunu dikkatlice okuyun.
Ve eğer bunları kabul ederseniz, o zaman basitçe sıfırlama düğmesine basabilirsiniz.
O zaman şimdi bir kez daha senkronize edilmelidir.
Yani bu artık kod tarayıcısı ve yapmamız gereken şey kütüphanemizi buna yüklememiz gerekiyor.
Benim durumumda, arm 32 bit sürümünü seçiyorum, bu yüzden dosyaya giriyorum ve sonra dosyayı buraya aktarıyorum
ve sonra EPS'ye giriyorum ve bunu ve kütüphaneyi kullanıp kullanamayacağıma bakıyorum.
Ve sonra burada tüm arm 32 bit sürümü olarak lib native dash lib var, içe aktarmak için dosya seç'e tıklıyorum ve burada
şimdi evet Chitra'nın pop-up'ını görebiliriz.
Ve böylece Chitra mimariyi çoktan tanımlamış oldu.
Bunun bir kol küçük Hint 32 bit B sekiz versiyonu olduğunu görebiliyoruz ve bu mükemmel bir şekilde uyuyor, bu yüzden bunu kullanabilir
veya varsayılan değeri burada tutabiliriz.
O zaman tek yapmamız gereken tıklamak.
Tamam.
Şimdi uygulama yükleniyor ve bu açılır pencere görünene kadar bazı hızlı kontroller yapılıyor.
Dudak doğal çizgi lipozomu analiz edilmemiştir.
Şimdi analiz etmek ister misiniz?
Ve bu kesinlikle sahip olmak istediğimiz bir şey.
Yoksa Chitra değil.
Evet, işlevlerle ilgili o güzel tabloları oluşturmuyor ve nokta değişken dizeleri ve bunun gibi şeyler
yapıyor.
Bu yüzden buradaki yerel kütüphaneyi kesinlikle analiz etmek istiyoruz.
Evet'e tıklıyorum.
Ve şimdi çok önemli bir haberimiz var.
Bunlar varsayılan değerlerdir.
Ve aşağıdaki diğer aracı eklemek istediğim tek şey, arm agresif talimat bulucuyu kullanmak
istiyorum çünkü ARM'nin iki modu var.
Bunlardan biri kol modu, diğeri ise başparmak modudur.
AR modu, güdük modunda her komutun dört bayt uzunluğunda olduğu anlamına gelir, her komut iki bayt uzunluğundadır.
Ve Frida, kod bölümünün bizim modumuz mu yoksa başparmak modu mu olduğunu tespit etmeye çalışan harika bir özelliğe sahip.
Diğer seçenek ise derleme parametresi kimliğidir ve bu, bu uygulamayı tersine mühendislik yapmamıza yardımcı
olur.
Parametre kimlikleri içinde bazı ek bilgiler elde ederiz.
Bu nedenle bunu da aktive ediyorum.
Tamam.
Ve evet, tüm varsayılan değerler artı derleyici parametre kimliği ve ayrıca agresif komut
bulucu.
Pekala.
Tamam.
Şimdi analiz et düğmesine tıklayabiliriz.
İşte bu ikili hakkında genel bir bakış elde ediyoruz.
Örneğin, isim kimlikleri, baytlar ve bunun gibi şeyler.
Bunu şu anda en altta görmezden gelebiliriz.
Tamam, ilerlemeyi görebiliyoruz ve ayrıca burada Chitra'nın bu uygulamayı tersine mühendisliğini izleyebiliyoruz.
Şimdi burada büyük bir bölümümüz var ve evet, şu anda o da tamamlandı.
Mükemmel.
Chitra şimdi buradaki yerel kütüphaneyi analiz etmeyi bitirdi.
Pekala, bu OC'nin etrafına hızlıca bir göz atalım, burada ortada kod listesi var
ve bu da montaj kodu.
Sol tarafta şu anda bizim için çok önemli olan sembol ağacımız var.
İthalatımız ve ihracatımız var.
Dolayısıyla, özgürlük de aralarında bir fark yaratıyor, bu da süper şaşırtıcı çünkü o zaman özgürlük
senaryomuzda hangi modülü kullanmamız gerektiğini kolayca görebiliyoruz.
Pekala, bunun yanı sıra şurada da bir fonksiyonumuz var ve bu biraz yinelenmiş olabilir çünkü bu fonksiyonlar
içe veya dışa aktarmalarda da listeleniyor, ancak bunları arama yapmak için kullanabiliriz.
Ve örneğin, buna geri dönersek hangi işlevi tanımlamak istediğimizi görelim.
Bakalım.
Ana faaliyet dahilinde.
Aradığımız işlev saklambaç.
Bakalım.
Bu klasöre giriyoruz ve saklambaç oynuyoruz.
Sonra gidiyoruz, işte elimizde.
Bu da bir dışa aktarma işlevidir.
Ve burada tüm fonksiyon ismine sahibiz.
Eğer buna tıklarsak, doğrudan yönlendiriliriz.
Bunu sökme görünümünde bu işlevin yanına koyalım.
İşte Chitra'nın harika yanı da bu.
Ayrıca sağ tarafta derlenmiş çıktıyı da alıyoruz.
Şimdi burada bu assembler genel bakışına ilişkin çıktıları derledik.
Eğer montaja gerçekten aşina değilseniz, sadece sağdakine bağlı kalabiliriz ve parametrelerimizi
zaten görebiliriz.
Örneğin, birinci parametre olan Chennai Çevresi.
O zaman bir tanımsızımız var.
Chitra, buradakinin bu nesne olduğunu ve izleme dizemize sahip olacağımızı ve bunun da bu işleve
aktarılan argümanımız olduğunu belirtiyor.
Yani X ticaretine geri dönersek, işte burada.
Bu bizim nesnemizdir çünkü bir zincirdeki ilk argüman i. e. işlevinde, bu ortam işaretçisidir.
İkincisi ise bu nesnedir.
Ve üçüncüsü, bu bizim parametremiz.
Bu durumda, dizemiz.
Buna geçiyoruz.
Pekala.
Tamam, bunu kapatalım.
Bunu biraz daha büyütelim.
Buna bakınca bir şeyin farkına vardım bile.
Şimdiye kadar bunu da görmüş olabilirsiniz.
Şuradaki.
Yani burada dize karşılaştırması yaptık.
Bunu biz hallederiz.
Buna birazdan göz atacağız.
Ancak buradaki, karşılaştırılan dize gibi görünüyor.
Bu bizim bayrağımız olabilir mi?
Demek istediğim, bu meydan okumanın oluşturulması sırasında niyet bu değildi.
Bu yüzden Chitra'nın bu uygulamayı derlemesi ve burada yalnızca bir kez kullanılan statik bir dize olmadığını
anlaması gerekiyor.
Bu nedenle, bu dizeyi basitçe bu dize karşılaştırma işlevine gerçekten derleyici çıktısı
ile kodluyoruz.
Dolayısıyla, bu zorluğu çözmek için amaçlanan yol bu değildir.
Ancak yine de, eğer bu işe yararsa, o zaman kolay bir yoldur.
Ve eğer böyle bir şey bulursanız, kolay yolu seçin.
Dolayısıyla bu konuda esnemeye ve konuyu olduğundan daha karmaşık hale getirmeye gerek yok.
Ve eğer bu gerçekten bayraksa bunu deneyelim.
O halde bir kez daha akıllı telefonumuzu çıkaralım.
Tamam.
Burada bayrağımız var.
Bakalım.
Bu arada klavyeyi de kullanabiliriz.
Çılgınca.
Frida Hooks.
Och.
Bir bakalım.
Ben de giriş yapıyorum.
Üç, iki, bir.
Tamam, güzel.
Bu gerçekten saptırma ve evet, daha önce de belirtildiği gibi, bu amaçlanan yol değil, ama kolay
bir yol.
Eğer böyle bir şey bulursanız, peşinden gidin.
Tamam, ama şimdi bunun o kadar kolay olmadığını varsayalım.
Yani buradaki, sabit kodlanmış bir dize olmayacak.
Belki de bu, buraya ulaşana kadar diğer birçok dizgiden bir araya getirilerek karmaşık hale getirilen bir
değişkendir.
Yani yapmak istediğimiz şey şu.
Belki de grafik tableti çıkaralım ve bunu burada tartışalım.
Pekala.
Bana bir saniye ver.
Tamam.
İşte grafik tablete geri döndük.
Ve bununla ilgili olarak, karşılaştırma fonksiyonumuzu ve buradaki dize karşılaştırmasını
zaten tanımlamıştık.
Şu anda fark ediyoruz çünkü buradaki açıkça bizim bayrağımız gibi görünüyor, oradaki bu parametre.
Bu, saklambaç yöntemi aracılığıyla bu işleve sağlanan parametremizin bu olabileceği anlamına
gelir.
Ve bu şu anda çözebileceğimiz bir şey.
Şurayı hızlıca temizleyelim.
Burada, PC çubuğuna sahip olun ve farenin orta düğmesini kullanırsak, buna tıklayın.
Bu değişkenin tüm bu oluşumlarını alıyoruz ve bu, bu satırda buraya atanıyor ve bu, I çevre
işlevini kullanıyor ve zincirliyor ve dize UTF karakterlerini alıyor ve buradaki parametre
şu anda fark ettiğimiz gibi bu, NDDC işlevleriyle ilgili çevre işaretçimiz ve buradaki,
bu işleve, bu saklambaç işlevine sağlanan parametremiz.
Bu bizim amacımız.
O zaman bunu yazalım.
Bu, bu bizim nesnemiz ve bu da burada kullanılıyor.
Ve bu da şuradaki.
Bu bizim çevre noktamız.
Ve bu da şuradaki.
Yani bunun parametresi bu nesnedir.
Tamam.
Bu da şu anlama geliyor: buradaki ARX sıfır ve bu da bizim x birimiz.
Şuradaki de ARX Aracı.
Java tarafındaki indicate işlevine geri dönerseniz, hide and seek'in yalnızca bir parametresi olduğunu
görebiliriz, bu da nesnemizin bu olduğu anlamına gelir, baltamız iki çünkü ortam işaretçisi ve
bu nesne burada listelenmiyor, ancak dizin tarafında varlar.
Tamam.
Çok güzel.
Burada kullanılmakta olan parametremizi zaten tanımlamıştık.
Artık buna bir isim de atayabiliriz.
Buna tıklarsak, L düğmesine basarız ve sonra bunu örneğin kullanıcı girdisi olarak yeniden adlandırabiliriz.
Tamam'a tıklarsak, tüm bu olaylar da değişir.
Şimdi burada kullanıcı girdimiz var ve bunu da yeniden adlandırabiliriz.
Bu bizim çevre işaretçimiz.
E ve işaretçi.
Güzelmiş.
Yani şimdi burada biraz daha fazla.
Okuması biraz daha kolay.
Bakalım.
Burada bir get string UTF karakterimiz var.
Şimdi bu fonksiyonun ne yaptığına bakabiliriz.
Ancak buradakinin sadece bir dizi olan char işaretçisini döndürdüğünü de varsayabiliriz.
Böylece dizeye geri dönüyoruz ve bu artık burada kullanılan veya başvurulan dizemiz.
Yani bu, bu seçim dizesindeki kullanıcı girdimizden buradaki yerel karakter noktasına bir tür
tipleme.
Bu da PC bir ve buradaki anlamına gelir, bu artık kullanıcı girdimizdir, bir kez daha, kullanıcı girdisi.
Tamam.
Ancak şimdi bunları çoğaltmamız gerekiyor çünkü zaten kullandık.
O zaman basitçe cha cha dizisini yapabiliriz.
Tamam.
Ve şimdi bunun üzerindeki orta düğmeye basıyoruz ve sonra bunun tüm bu oluşumlarına sahip oluyoruz.
Bu dize karşılaştırmasında kullanıldığını görebiliriz.
Şimdi bu fonksiyonda kullanıcı girdimizi buradaki ile karşılaştırıyoruz.
Bu da ilgilendiğimiz fonksiyonun şuradaki fonksiyon, yani dize karşılaştırma fonksiyonu olduğu anlamına gelir.
İlk parametre burada.
Bu kullanıcı girdimiz ve ikincisi ve bu da son olarak bayrağımız.
Bu fonksiyonu bağlarsanız, bu parametreleri de gözlemleyebiliriz.
Yani, kullanıcı girdimiz, bununla ilgili değil.
Ancak buradaki, bir dize karşılaştırma işlevi içinde kullanılan değerleri getirebilmemiz için
getirmesi çok güzel olurdu.
Ve eğer buradaki, bu, bunu tanımak o kadar kolay olmayacaksa, diyelim
ki buradaki de değişken ve şikayet ediliyor.
Üzgünüm, karmaşık bir şekilde oluşturuldu.
Yani bunun ne olduğunu bilmiyoruz.
Umurumuzda değil çünkü bu noktada düz metne ihtiyacımız var, bu zaten burada.
Tamam.
Diğerlerine gelince, bunu umursamıyoruz, dolayısıyla diğerlerini görmezden gelebiliriz.
Yani ilgilendiğimiz şey kullanıcı girdimizdir.
Kullanıcı girdimizin ne olduğunu tanımladığımız bu noktaya gelmemiz gerekiyor.
Yani bir indeks fonksiyonu ile ilgili olarak, bu gerçekten zor değil.
Her zaman bu güzel yapı ortam işaretçisini, bu nesneyi alırız.
Bu nesne ve daha sonra kullanıcı girdimiz ve daha sonra bu kullanıcı girdisini de takip edebiliriz.
Örneğin, burada kullanılacak ve bu yeni bir değişkene atanacak ve bu daha sonra burada
kullanılacak.
Tamamdır.
Şu anda Cheetah ile bir uygulamada tersine mühendislik yapmak için bilmemiz gereken tek şey bu.
Tamamdır.
Bunların hepsi birinci bölüm için.
Şu anda, yerel bir kütüphanede nasıl tersine mühendislik yapabileceğimizi gördük.
Yani bu artık C++ kodu ve o da kaynak kodunu yeniden oluşturmada harika bir iş çıkarıyordu.
Yani, Java'daki kadar güzel değil, ama kesinlikle yardımcı oluyor.
Burada da bazı yardımlar alıyoruz.
Zincir I çevre noktası kabul edilmiştir.
Bu değil ama şu anda bizim tarafımızdan değiştirilebilir.
Bunu gerçekten hızlıca yapalım.
Bu nesne.
Tamam.
Bu da kullanıcı girdimiz.
Ve sonra tek yapmamız gereken kullanıcı girdisini takip etmek.
O zaman buradaki yöntemin ne yaptığını belirlemeliyiz.
Ancak basitçe bir dizi döndürüyor, yani bu artık yeni dönüştürülmüş kullanıcı girdimiz ve bu da burada
kullanılıyor.
Kancalamak istediğimiz fonksiyon bu.
Pekala.
Tamam.
Bir sonraki videoda, bu fonksiyonu buraya nasıl bağlayacağımızı öğreneceğiz.
Birkaç olasılığımız var ve hepsini bir sonraki videoda tartışacağız. Bu konuyla veya Chitra
ile ilgili herhangi bir sorunuz varsa, bana mesaj yazmaktan çekinmeyin.
Aksi takdirde, bu yöntemi nihayet buraya bağladığımızda sizi bir sonraki videoda görmeyi dört gözle
bekliyorum.
Pekala.
Orada görüşürüz.