 Baiklah, terima kasih, semua, kerana menunggu kata-kata ini untuk memperkenalkan pembinaan network dan hari ini saya akan menunjukkan bagaimana anda boleh menulis sebenarnya dengan kota-kota periksa untuk melihat pembinaan network di IOS App jadi nama saya Kenneth Poon dan di sini ada informasi tentang diri saya ini adalah e-mail saya rasa bersyukur untuk menyebabkan saya pada pertanyaan tentang hal ini selepas hari ini disini adalah pagi Github jadi konten yang saya akan menunjukkan hari ini saya akan menyebabkan di Github atau ia sebenarnya sudah di Github ini adalah pembinaan medium saya jadi pada hari ini untuk datang, saya akan menyebabkan pembinaan medium tentang pembinaan ini dan di sini adalah profil LinkedIn saya jadi rasa bersyukur untuk menyebabkan dengan saya jadi beberapa anda telah beritahu saya sebelumnya walaupun saya lupa siapa anda jadi saya telah beri tiga pembinaan di pembinaan IOS yang pertama adalah pada Julai 2016 apabila saya memperkenalkan pembinaan IOS App dan diri pada November 2016 apabila saya memperkenalkan bagaimana untuk menggunakan pembinaan Dynamic Library dan bagaimana untuk menggunakan pembinaan ini untuk menyebabkan permainan yang baru keluar untuk Pokemongo dan kita juga akan menggunakan pembinaan ini nanti dalam pembinaan dan pada tahun 2018 ini saya memperkenalkan pembinaan Kucumbarish dan bagaimana untuk membawa BDD ke pembinaan Xcode jadi konten ini sebenarnya diperkenalkan pada pembinaan Facebook ini jadi ia telah diperkenalkan dalam pembinaan Facebook dua minggu lalu ialah Terence di sekitar sini okey bukan di sini okey jadi kawan kita sebenarnya tanya ianya masih mungkin untuk mengalami pembinaan KCTP berkomunikasi antara IOS App dan ada pembinaan pembinaan dengan pembinaan seperti Fiddler jadi biar saya tanya pembinaan sesiapa yang tahu apa-apa pembinaan untuk pembinaan apabila anda dapat menunggu pembinaan KCTP ada idea untuk menunggu? Charles Proxy Charles Proxy ah Charles Proxy apa-apa lagi? MITM Proxy ya MITM Proxy jadi ini sebenarnya memperkenalkan pembinaan dalam pembinaan seperti yang dikatakan oleh kawan kita di sini jadi hanya sederhana berkongsi sesuatu detail tentang pembinaan dalam pembinaan jadi pembinaan Proxy dibuat antara pembinaan dan pembinaan dan anda dapat menunggu pembinaan anda dapat menunggu pembinaan anda dengan pembinaan Proxy dengan memoporkan pembinaan Wi-Fi jadi pembinaan Proxy membuat pembinaan untuk gelangkan kawan HTTPS jadi untuk pembinaan di tengah pembinaan adalah untuk memastikan kawan pembinaan kawan dalam pembinaan global dan sehingga dan sehingga dihagikan pembinaan jadi apabila pembinaan berkomunikasi dengan pembinaan Proxy anda periksa kawan hey ia sekarang telah digunakan dan sehingga ia memempatkan Ketika orang-orang di tengah-tengah menerima pembentangan, proksi-server akan dapat melihat semua pembentangan yang dibuat dari pembentangan. Jadi, beberapa pembentangan yang dibuat adalah Burt Street, Wireshark, Fiddler dan MITM, dan Charles Proxy juga. Jadi, satu cara untuk membuat SSL Certificate Pening, untuk membuat pembentangan ini adalah untuk menggunakan SSL Certificate Pening, sehingga kita menambah pembentangan yang dipercayai ke aplikasi kita, dan kita hanya menambah pembentangan yang dipercayai untuk memastikan aplikasi hanya berkomunikasi dengan pembentangan yang dipercayai dengan pembentangan yang dipercayai. Jadi, saya akan menunjukkan kepada kamu sekitar 2-3 minit menunjukkan apa yang dipercayai dalam pembentangan. Okey, mari saya melihat pembentangan saya sekarang. Okey, bagus. Jadi, saya akan memulangkan pembentangan MITM dan kemudian saya akan membuat aplikasi saya. Jadi, saya tidak dapat membuat aplikasi di akhir. Okey, jadi saya akan pergi ke pembentangan wi-fi saya dan pergi ke bawah di bawah sehingga anda dapat melihat aplikasi Http. Saya akan membuat pembentangan manual dan aplikasi Mac saya akan membuat aplikasi yang dipercayai. Jadi, saya harus memasukkan pembentangan IP yang dipercayai. Okey. Jadi, pembentangan yang dipercayai adalah 8080. Okey, bagus. Jadi, sekarang, saya akan memulangkan pembentangan yang dipercayai dalam aplikasi saya. Jadi, banyak perkara yang berlaku sekarang. Jadi, saya akan memulangkan aplikasi Cnn. Sekarang anda dapat melihat di bawah. Anda dapat melihat semua pembentangan yang dipercayai dari aplikasi ke aplikasi yang dipercayai dengan aplikasi Mac saya. Dan anda dapat melihat semua pembentangan yang telah dipercayai. Jadi, anda dapat melihat perkara seperti... Mari kita melihat. Mari kita melihat ini di sini. Ia mengambil pembentangan url.mobile.un. Dan jika anda hanya memulangkan aplikasi, anda dapat melihat... Untuk beberapa pembentangan, anda dapat melihat pembentangan Json. Okey, yang ini. Control.coachava.com Jadi, apabila anda melihat ini, anda dapat melihat pembentangan Json yang telah dipercayai dari aplikasi. Jadi, ia sangat bagus. Jadi, saya akan kembali ke dalam pembentangan saya. Bagus. Jadi, sekarang, apabila kita memulangkan iOS aplikasi, kita tahu bahawa kita perlu membuat pembentangan url.mobile. Dan kemudian kita perlu membuat pembentangan url.mobile. Dan kemudian kita mengambil pembentangan... ke dalam pembentangan HACPTPF Secure Channel. Jadi, ini idea saya. Bagaimana mengambil pembentangan url... ke dalam pembentangan? Sejujurnya, kita dapat mengintersep pembentangan network sebelum mereka masuk pembentangan Secure Channel. Jadi, pembentangan ini mengandungkan pembentangan dynamic... yang akan dikodong dan membuat... dan kemudian kita akan memasukkan ke dalam pembentangan url. Jadi, apa yang kita akan memkodong? Jadi, pertama, mari kita memilih aplikasi url loading system... yang adalah protokol url. Dan itu adalah sistem loading url aplikasi. Jadi, basically, ada pelajaran protokol... untuk mengandungi kemahiran ul. Jadi, ini 5 protokol url yang telah dikodongkan dalam sistem. FTP, HDDP, HDDPs, file dan data. Jadi, untuk setiap protokol, kita perlu mencubanya dua perkara. Baguslah. Satu, sebuah metode yang dapat mencubanya... jika protokol mempunyai bagaimana untuk mengandungi pembentangan url. Pertiga, pembentangan itu adalah bagaimana untuk mempunyai url. Untuk menunjukkan contohnya, untuk FTP url protokol... ia mungkin mencubanya bahawa... jika pembentangan url mempunyai... fdp-slash-slash... itu adalah sesuatu yang saya tahu... saya tahu bagaimana untuk mengandungi pembentangan url. Dan pembentangan url... ia mungkin mengandungi pembentangan url pada port 21. Jadi, untuk kita... kita juga boleh mencubanya protokol url. Tapi kerana protokol url baru... tidak dalam sistem url. Sebenarnya, kita akan mencubanya protokol url baru. Kita perlu mencubanya ke sistem url. Kita juga boleh menggunakan protokol url custom... untuk mencubanya... dan mengenali dan mencubanya pembentangan url. Jadi, kita perlu mencubanya dua metode... supaya kita cuba mencubanya protokol url. Satu adalah metode static... atau fungsinya... yang mencubanya protokol url. Jadi, apabila kita mempunyai pembentangan url baru... kita perlu mencubanya dengan sistem url. Jadi, apabila pembentangan url datang... ia tahu bahawa... ada juga pembentangan url baru yang kita perlu... mencubanya. Kemudian, untuk pembentangan url... pembentangan url... itu adalah... pembentangan url yang dipanggil protokol url. Dan pembentangan url datang... adalah sebuah pembentangan url. Tetapi, ia mempunyai... pembentangan url protokol url. Jadi, di dalam perjalanan... bagaimana sistem berfungsi? Apabila... pembentangan url... kita melihat pembentangan url... ia akan dapatkan... pembentangan url... pembentangan url... dan pembentangan url... protokol url. Dan ini akan kita mencubanya... protokol url. Jadi sistem itu akan berkata... Hey, P1, anda tahu bagaimana untuk mengandalkan pembentangan url? Dan jika P1 mengatakan tidak... kemudian sistem akan sebenarnya... mengandalkan pembentangan url... dan terus sampai dia mencubanya... untuk memahami... memahami... memahami bagaimana untuk memahami pembentangan url. Jadi sekarang sistem berkata... Hey, P2, anda tahu bagaimana untuk mengandalkan pembentangan url? Dan P2 kata... Ya, saya tahu bagaimana untuk membuatnya. Jadi sekarang sistem akan membuat... pembentangan url dan menggunakan untuk mengandalkan pembentangan url. Jadi, jika anda memahami... pembentangan url di dalam kawasan itu... mengandalkan pembentangan url... kerana jika ada kawasan... untuk pembentangan url 2... memiliki pembentangan url yang sangat simil... yang boleh diperlukan dengan pembentangan url. Pertama-tama... pembentangan url... pembentangan url yang lebih awal... dalam kawasan itu akan mengambil keputusan. Okey. Jadi di sini adalah apa yang saya proposed. Okey. Mari... mari kita membuat projek Xcode baru... dengan pembentangan url dynamic... dan kemudian kita akan membuat pembentangan url url... dan di dalam kawasan kita akan mempunyai kode extra... untuk mempunyai pembentangan url url... dalam kawasan kawasan... supaya memlogiskan ke dalam pembentangan url. Dan sebab kita mempunyai kawasan baru... kita perlu menggantikan dengan sistem pembentangan url. Dan kita mahu... dan kita mahu selalu memastikan... bahawa pembentangan url... adalah pembentangan url pertama di dalam kawasan itu. Oleh itu, kita akan menggunakan cara untuk menggantikan teknik ini. Jadi nomor 5, apabila kita selesai dengan semua ini... kita akan membuat pembentangan url... dan kemudian kita boleh mudah memasukkan pembentangan url... ke dalam pembentangan url Xcode untuk menggunakan. Untuk pembentangan url IPA, pembentangan url... anda mungkin perlu memasukkan... anda perlu memasukkan dengan pembentangan url... saya mempunyai github-repo dengan skrips... untuk membantu anda dengan itu. Dan kemudian itu akan memasukkan pembentangan url... ke dalam mempunyai pembentangan url. Selepas itu, apabila anda selesai, anda boleh menggunakan pembentangan url... untuk memasukkan pembentangan url... ke dalam pembentangan url. Jadi sekarang, mari kita masuk ke dalam pembentangan url. Okey, jadi ini pembentangan url. Ini pembentangan url yang saya mempunyai di sini. Sangat mudah. Ada beberapa pembentangan url. Untuk memasukkan pembentangan url, saya akan memasukkan pembentangan url yang penting. Jadi, satu-satunya, saya mempunyai... ini pembentangan url yang baru... yang saya membuat. Dan di sini... ini pembentangan url yang saya perlu memasukkan. Sebenarnya, memasukkan sistem, hei, saya tahu bagaimana... memasukkan pembentangan url? Jadi... Jadi sekarang, saya hanya memasukkan untuk... HttP dan HttPS. Dan di sini, saya akan... hebat pembentangan url... di konsol. Sementara itu, saya akan menghubungkan... kelas syarikat saya. Tapi pada akhirnya, saya akan berkata, tidak, saya akan tanya pembentangan url... tapi saya akan menghubungkan, tidak. Dalam cara saya dapat memasukkan... pembentangan url... dan memasukkan... kelasan dan pembentangan url. Jadi, teruk kata kalau... Jika anda ingin menerima ini untuk benar-benar, anda boleh lakukannya. All you have to do is implement the start loading function. And implement how you want to send the data over the request over the network. So here you can just simply create NS URL connection. Then below you can simply just implement the connection delegate and the data delegate protocols. Cool. So and here I have a slack logger class. It's basically here's the slack optimization token, the channel ID. And what it does is actually it will create a new request that sends a string payload to a slack channel. Here is the API. And the string that I want to send over is actually I created a variable call, a ghetto variable call. What it does is it will just create the simple call command that you can paste it on your terminal to run. So call.dashX, HTTP method, and then I can print out. And I will also add in the HTTP header fields and the HTTP body. Okay. So let's test this out. So I clean. So now I'm going to build my framework in the iPhone simulator architecture. I'm going to copy it. So I copy this guy. And I go to my other project. So I delete. And we paste it back here. Okay. So now I'm going to run my app. So let me clear my slack channel. So I'm going to search for a country for the weather. So I type T. And then now the slack, what happens? The fable actually intercepts the request using the URL protocol and sends this payload over to slack channel 2, the slack API. So let's say par. So this paris. So I can even copy this call command and go on to my console over here. And there you go. I can actually see the Json response when I paste it into my terminal. So of course this is very trivial. So let's try something more challenging. So now I want to build my framework in the iPhone OS architecture. So I get the framework. And I go to this folder. This is actually a github. It's a github. It's a folder 3 that can help you guys patch IPA files. And I'll spend it later. I go over here. I delete the old one. The old framework. Sorry. It's over here. And then I'm going to patch the app called Tinder. I feel guys use Tinder before? Okay, cool. Okay, just to share. What this repository do is that it will go through this. It will pick up all the dynamic libraries in this folder and will add them into the IPA file which is the app on a device. So you'll be asking me, hey, how come there's so many other files that I need to insert? Because Tinder is primarily written in Objective-C. It doesn't have the Swiss libraries. So if you want to run Swiss codes onto your app, you need to add in the Swiss dynamic libraries into your app. So that's why I'm actually throwing all the libraries over here. So at the end, after successfully patching the IPA over here, here is the newly created IPA file. This one. So now I use CDN Impactor to sideload the IPA into my device. So I have to lock in with my Apple Developer Account. Okay, cool. So you'll be asking, what is CDN Impactor? So or what CDN Impactor does? It will help you have to key in your Apple Developer credentials and what it does, it will lock in to Apple for you and will download your developer provisioning profile and use that to sign your IPA file. Once your IPA file is signed, you can actually install right into your own phone. And the signing process takes quite a while because well, this app is actually 111 MB and we need to sign everything inside, including all the frameworks, resources and files. So this whole process takes about 1-2 minit and it's about done. Meanwhile, let me prepare the console. That's pretty. Okay, I'm going to do Tinder coming up and then I have my console on the phone and let's check everything else. Okay, I think that's about it. Okay, so now Tinder is ready. So I'm going to launch Tinder. So right now I can see all the requests coming up. Let's play with Tinder for a while, shall we? Okay, so I locked in with Facebook. I'm not very familiar with Tinder so you got to help me out. Okay, so share my location. I don't need to be notified. Oops, let's try again. Not now. Okay. Let's just play around. Okay, I cannot see your eyes so I'm still going to say no. I think that's okay. You wear a nice watch. You wear a nice earrings. Yes. Oh, I'm... Okay, sorry you're too old for me. And then we go on. So now we're actually getting a lot of requests. For now, I'll just stop there. Okay, so meanwhile what happens? MITM proxy if I filter by api.go.tinder I can see all the requests being intercepted by our MITM proxy. You can see the post request. You can see you can see this one. It's a JSON. Everything. What about our only request? We can see everything as well. We can even see let me see and start from the top. We can even see API send to Facebook as probably because Tinder uses the Facebook SDK. And let's see for anything interesting we can use. Okay, so so let's try this. This is the if you can read it. This is the authentication login for Facebook on the Tinder API. So let's copy the entire code command. Copy. I go to my console. I paste it. Okay, I can now get the OOF token for the API. Cool. So any other interesting things here? Well, I can see the API for like passing, passing a profile. I can see a profile for liking for liking a profile. So just try this again. Okay, I have some interesting JSON response but of course I do not know how to interpret. And I even have let me see something interesting here. Oh, what is this? There's an image. So I wonder what this is or who this is. Nope, this is me. This is probably one of the profiles which is coming up later. So feel free to actually use this framework to actually spy another for any apps. Okay. So that's the thing. So Kenneth, what about SSL pinning? So things like Charles Proxy, MITM Proxy, they have problems. It's a challenge to actually get around SSL pinning. So can you request? Can you framework handle that? Well, let's try. Let's try. Okay, so now I go and I've already patched one app. I've patched Twitter. So let's try because Twitter actually implemented SSL pinning for the APIs. So let's do sideloading again. So here's the thing. The app will actually do a simple check with the domain and get the certificate and check whether hey, is this certificate valid? Is this certificate valid? But before it does that, it goes through the system where the URL loading system ask, hey, do you know how to handle this request? So I'm using this strategy to actually ask the question to our URL protocol and get the whole URL request. But the system towards later on will actually reject sending the request. So that's why some of these proxy servers cannot intercept those, cannot see those request. So right now it takes some time. Okay, meanwhile, let me set up again. Let this one up. Here we have Twitter running up. Go to my console and clear. I'm all ready. So now I'm going to start and hit open Twitter. So when I open Twitter, ah, I start to see a lot of request over here. And you can see, hey, there's API call post request going to api.twitter.com and this is recorded by the framework. So let's look at MITM proxy. Apparently, I don't find any if I do a api.twitter. Yeah, MITM proxy cannot see those. So let me remove the filter. Because SSL our pinning is in effect, so the request didn't even enter the HTTPS channel. So let's let's go back to our app. Okay, let's try to, let me try to log in. Okay, so I'm going to type my username SSSSSSSSSS and my password is ptttttt and put out the console. So this is the last one. But that's going to highlight it. And now I'm going to send, I'm going to log in. Oops, sorry. Okay, we'll again over here. And now I'm going to log in. So the the app now gives me, hey, there's an authentication service ever. But you can see that API, the ORF token, API still being sent over. And in the MITM proxy, nothing's being captured. So, so okay. So let's right now let's try to turn off the proxy server. So let's go back to proxy settings. And I'm going to turn it off. Okay, let me restart Twitter. So now there's no need to look at MITM proxy. I just look over here. So the same thing. Now I can see the same request. I try to log in right now. My username is fsfs and password ppppp. And now I try to log in. Of course, my username and password don't match. But now I see now I start to see a new curve request. I go over to my Slack channel and I see it over here. I copy the curve request. Go back to my console, tab 4. And now paste it. Of course, the response is I cannot authenticate you. But this is one way if you really want to intercept htbs request is one way is to create a code and dump it straight into the IPFL. Now let me go back to my slides. So for references, here is the links to the github repo which is featured in this talk. There's the network interceptor repository. You can go in and have a look and play around. Also, you might even consider adding your own lobbyist. You want to send it to sentry or send it to I don't know somewhere. Some cloud logger and here is the and the second one is the dynamic library injection demo where you can actually patch IPFL and then later you need to install onto your phone. And here is the midian post which I wrote 2 years ago is the code injection technique. So you can refer this post. So that's the end. Any questions you want to ask? About it? No questions? Yes? So as a developer is there any way you can correct this? I put it to you in a different way. As long as you put your logic onto the phone there's a way to hack. So you must always apply security in both the client and server. In fact, when I was doing my research for this topic there's someone has actually already created a kill switch for SSL on the iPhone using some jailbreaking techniques. So of course this can only get you the request not being sent out of the server. Sorry. This is one way for you to actually inspect or HTTP request. But of course with code injection technique you are introducing something new into the ecosystem. It might cause you might cause the app to crash. So you got to be quite careful with it. And do note you can actually do all this onto a non jailbroken device. So feel free to go back and try. Any other questions? I have a question. How secure in your opinion are all those CDR tools? For example, you use CDR impaktor and you needed to type in your password to upster. Is the source code application available so we could see if they sent out your credentials anywhere else? I don't think so. So when you want to try all these things out it's not 100% safe. So if you actually grab your own the app that you install onto your phone and you try to patch it, it can't be done because there's the DRM digital rights management binary in your app that is part of the security feature security feature of Apple. So I've actually went online to find I can actually show you the website. Hello. So there are people who actually crack the app and upload them online. We can we can find what's in the et cetera all here. But then again these people might be malicious. They might have already injected things into the app for for people install them because you can actually install paid apps onto your phone by not paying it because you know some kids like to like to hack the apps but of course some malicious guy might actually add some codes to actually steal your credentials. So if you want to try this it's all at your own risk. Yeah. Everything's at your own risk. So is your phone jail blocker? No, it's not jail blocker. Ya. So firstly the IPA file needs to have the DRM removed. So the there's a complex technique to do that that requires a jail broken phone. But there are people in the community they jail break the apps and actually they upload it online for you to download. Ya. So once it's with the DRM removed you can re-sign it in your own developer profile and now you can install that into your own app. So if you sign in with your own developer profile then you can distribute it online to other people or you need to request that you pay for it. I have not tried that. Because if someone can pay despite you can distribute it. Theoretically true but I have not tried maybe I can give another talk on that. But I think that would be quite interesting. Ya. If no questions then I'll pass it back to Masih.