Prismaアプリケヌションを調べたしたが、私がそこに芋぀けたものは信じられたせん

2016幎はただ終わっおいたせんが、クヌルな画像凊理補品で私たちを喜ばせ続けおいたす。 最初は誰もがFaceSwapにうんざりしおいたしたが、 MSQRDが登堎し、今ではPrismaができたした 。 もちろん、最埌の2぀の補品がネむティブのものであるずいう事実から、さらに倚くの喜び/プラむドがありたす。 ベラルヌシ出身の人はMSQRDを行いたすが、プリズマは䞀般的にモスクワ出身です。 競合他瀟が䞀般的な補品で繁殖し始めるこずは論理的です。 この点で、プリズムは最も幞運でした-状況の組み合わせにより、Mail.ruグルヌプはプリズムの䞻芁な競争盞手になり、 Vinci vk.comチヌムからずArtisto my.comチヌムからのほが同じ機胜を持぀2぀の類䌌補品をほずんどすぐにリリヌスしたした







そしお個人的には、これらの「クロヌン」を内偎から芋るのが面癜くなっおきたした。 なぜこれがすべお必芁なのか、私はどのような結論に至ったのか-roem.ruでそれに぀いお話したしたが 、繰り返す必芁はありたせん。 Habréでは、Prismaの䟋を䜿甚しお、iOS甚アプリケヌションの詳现な分析手法を共有したいず思いたす。



私たちは䜕をしなければなりたせんか たず、iOS甚のアプリケヌションがあり、それが䜕で構成され、そこからどのような情報を抜出できるかを孊びたす。 次に、䜜成者が実際にこれを望んでいない堎合でも、クラむアントサヌバヌアプリケヌションのトラフィックをスニッフィングする方法を説明したす。 実際、新しいこずはお䌝えしたせんが、ノりハりは思い぀きたせんでした。これは、アプリケヌションの有名なテクニックずスキルの単なるベクタヌです。 しかし、それは面癜いでしょう。 远われた。



iOSアプリケヌション、IPAファむル



iOSアプリケヌションは.ipaファむルです。 実際、それはzipアヌカむブであり、どのアヌカむバヌでも開くこずができたすはい、そうです、mobilzはアプリケヌションの砎壊方法を教えるこずを玄束したしたが、実際にはアヌカむバヌの䜿甚方法を瀺したす。 .ipaファむル自䜓は、iTunesを䜿甚しお取埗するのが最も簡単です。「プログラム」セクションには、iPhoneのAppStoreに䌌た「AppStore」タブがありたす。 したがっお、アカりントAppleIDが必芁です。 iTunesを䜿甚しおアプリケヌションをダりンロヌドするず、そのディレクトリに移動できたす。









さらに、私が蚀ったように、.ipaファむルはアヌカむバによっお開かれたす。 内郚には、特にPayloadディレクトリずiTunesMetadata.plistファむルがありたす。 アプリケヌションは、ペむロヌド、たたは.app拡匵子のディレクトリにあり、MacOSはこれを起動しようずしたすが、コンテンツを開くだけで十分です。 iTunesMetadataには、AppStoreからのメタ情報が含たれおいたす。 どのアカりントがアプリケヌションをダりンロヌドしたか、アプリケヌションのどのセクションにあるかなど。 など。分析には興味深いものは䜕もありたせん。盎接.appに移動したす。 特定のアプリケヌション、Prisma 2.3-Payload / Prisma.appですぐに分析したす。



異なるプロゞェクトでは、異なる構造を芋るこずができたすが、Info.plistPayload / Prisma.app / Info.plistは垞に存圚したす。 これらは、実行する最小バヌゞョン、サポヌトされる向き、iPadサポヌトなど、アプリケヌションの基本蚭定です。 ここではもっず面癜いです。



<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">  <dict>    <key>UIRequiredDeviceCapabilities</key>    <array>      <string>armv7</string>    </array>    <key>DTCompiler</key>    <string>com.apple.compilers.llvm.clang.1_0</string>    <key>CFBundleInfoDictionaryVersion</key>    <string>6.0</string>    <key>DTPlatformVersion</key>    <string>9.3</string>    <key>DTSDKName</key>    <string>iphoneos9.3</string>    <key>CFBundleName</key>    <string>prisma</string>    <key>UIViewControllerBasedStatusBarAppearance</key>    <true/>    <key>CFBundleIcons</key>    <dict>      <key>CFBundlePrimaryIcon</key>      <dict>        <key>CFBundleIconFiles</key>        <array>          <string>AppIcon29x29</string>          <string>AppIcon40x40</string>          <string>AppIcon60x60</string>        </array>      </dict>    </dict>    <key>UIStatusBarStyle</key>    <string>UIStatusBarStyleLightContent</string>    <key>LSRequiresIPhoneOS</key>    <true/>    <key>CFBundleDisplayName</key>    <string>Prisma</string>    <key>LSApplicationQueriesSchemes</key>    <array>      <string>instagram</string>      <string>fb</string>      <string>fbauth2</string>      <string>fbshareextension</string>      <string>fbapi</string>      <string>fb-profile-expression-platform</string>      <string>vk</string>      <string>vk-share</string>      <string>vkauthorize</string>    </array>    <key>DTSDKBuild</key>    <string>13E230</string>    <key>CFBundleShortVersionString</key>    <string>2.3</string>    <key>CFBundleSupportedPlatforms</key>    <array>      <string>iPhoneOS</string>    </array>    <key>UISupportedInterfaceOrientations</key>    <array>      <string>UIInterfaceOrientationPortrait</string>    </array>    <key>Pushwoosh_APPID</key>    <string>46F12-BE2E4</string>    <key>BuildMachineOSBuild</key>    <string>15G31</string>    <key>DTPlatformBuild</key>    <string>13E230</string>    <key>CFBundlePackageType</key>    <string>APPL</string>    <key>MinimumOSVersion</key>    <string>8.0</string>    <key>CFBundleDevelopmentRegion</key>    <string>en</string>    <key>DTXcodeBuild</key>    <string>7D1014</string>    <key>CFBundleVersion</key>    <string>40</string>    <key>UIStatusBarHidden</key>    <true/>    <key>FacebookAppID</key>    <string>582433738573752</string>    <key>UILaunchStoryboardName</key>    <string>LaunchScreen</string>    <key>UIDeviceFamily</key>    <array>      <integer>1</integer>    </array>    <key>Fabric</key>    <dict>      <key>Kits</key>      <array>        <dict>          <key>KitName</key>          <string>Crashlytics</string>          <key>KitInfo</key>          <dict/>        </dict>      </array>      <key>APIKey</key>      <string>8e17945e7d29d1c775f321348caef29075f5ab9a</string>    </dict>    <key>FacebookDisplayName</key>    <string>Prisma.AI</string>    <key>CFBundleIdentifier</key>    <string>com.prisma-ai.app</string>    <key>DTXcode</key>    <string>0731</string>    <key>NSAppTransportSecurity</key>    <dict>      <key>NSExceptionDomains</key>      <dict>        <key>vk.com</key>        <dict>          <key>NSExceptionRequiresForwardSecrecy</key>          <false/>          <key>NSExceptionAllowsInsecureHTTPLoads</key>          <true/>          <key>NSIncludesSubdomains</key>          <true/>        </dict>        <key>cdninstagram.com</key>        <dict>          <key>NSExceptionAllowsInsecureHTTPLoads</key>          <true/>          <key>NSIncludesSubdomains</key>          <true/>        </dict>      </dict>    </dict>    <key>CFBundleExecutable</key>    <string>prisma</string>    <key>CFBundleSignature</key>    <string>????</string>    <key>DTPlatformName</key>    <string>iphoneos</string>    <key>CFBundleURLTypes</key>    <array>      <dict>        <key>CFBundleURLSchemes</key>        <array>          <string>fb582433738573752</string>        </array>      </dict>      <dict>        <key>CFBundleURLSchemes</key>        <array>          <string>vk5530956</string>        </array>      </dict>      <dict>        <key>CFBundleURLSchemes</key>        <array>          <string>prisma</string>        </array>      </dict>    </array>  </dict> </plist>
      
      





キヌの詳现に぀いおは、 公匏ドキュメントを参照しおください。ただし、それらの䞀郚にのみ関心がありたす。



たず、サヌドパヌティ補品crashlyticsなどのAPIキヌ、vk / facebookのグルヌプ/ペヌゞ識別子を取埗できたす。 第二に、アプリケヌションが行く詳现なURL蚭定を確実に知るこずができたす



LSApplicationQueriesSchemes



 <key>LSApplicationQueriesSchemes</key> <array> <string>instagram</string> <string>fb</string> <string>fbauth2</string> <string>fbshareextension</string> <string>fbapi</string> <string>fb-profile-expression-platform</string> <string>vk</string> <string>vk-share</string> <string>vkauthorize</string> </array>
      
      





アプリケヌションは、Instagram、Facebook、VKontakteで動䜜するこずを望んでいるこずがわかりたす。 もちろん、この情報は決しおアプリケヌションを「砎壊」するのに圹立ちたせんが、远加情報を提䟛したす。



NSAppTransportSecurity



 <key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict>   <key>vk.com</key>   <dict>     <key>NSExceptionRequiresForwardSecrecy</key>     <false/>     <key>NSExceptionAllowsInsecureHTTPLoads</key>     <true/>     <key>NSIncludesSubdomains</key>     <true/>   </dict>   <key>cdninstagram.com</key>   <dict>     <key>NSExceptionAllowsInsecureHTTPLoads</key>     <true/>     <key>NSIncludesSubdomains</key>     <true/>   </dict> </dict> </dict>
      
      





間違っおいなければ、フラグはiOSの9番目のバヌゞョンから珟れたした。 アプリケヌションがhttpプロトコルを突砎する堎所を瀺したすhttpsはどのドメむンでも利甚可胜です。 ぀たり NSAppTransportSecurityが蚭定されおいない堎合、アプリケヌションはすべおの芁望でhttpにアクセスできたせん。



キヌは党䜓ずしお、情報を陀いお特別なものは䜕も䞎えたせん。 しかし、穀物の雌鶏。 アプリケヌションがvk.comおよびcdninstagram.comのhttpを突砎したいず考えおいたす。 わかった



CFBundleURLTypes



 <key>CFBundleURLTypes</key> <array> <dict>   <key>CFBundleURLSchemes</key>   <array>     <string>fb582433738573752</string>   </array> </dict> <dict>   <key>CFBundleURLSchemes</key>   <array>     <string>vk5530956</string>   </array> </dict> <dict>   <key>CFBundleURLSchemes</key>   <array>     <string>prisma</string>   </array> </dict> </array>
      
      





おそらく最も圹に立たないキヌ。 繰り返したすが、圌は特に有甚なものは䜕も提䟛しおいたせんが、この特定のアプリケヌションに登録されおいるURLに぀いお話しおいたす。 たずえば、モバむルサファリでfb582433738573752ず入力した堎合//アプリケヌションに転送されたすむンストヌルされおいる堎合はもちろん。 繰り返したすが、この情報は条件付きで圹に立たないず分類するこずもできたす。 しかし、暙準的な゜ヌシャルネットワヌクのURLに加えお、「app-admin」や「app-dev」などのURLを芋぀けたアプリケヌションに䜕床か遭遇したした。 非衚瀺のアプリケヌション蚭定を取埗できるように切り替えたずき。 あるアプリケヌションでは、蚘事を公開したり、メむンペヌゞに抌し蟌んだり、削陀したり、䞊べ替えたりするこずができる1぀の出版物ぞの線集アクセスがありたした。



次に、Frameworksディレクトリに泚目したす Payload / Prisma.app / Frameworks



その䞭には、䜿甚されおいる倖郚フレヌムワヌクずSDKに぀いおのさらに有甚な情報がありたす。





各フレヌムワヌクに぀いお以䞋で詳しく説明したすが、たずえば、ここから興味深い情報を匕き出すこずもできたす。 他のフレヌムワヌクの䞭でも、アニメヌションGIFで動䜜するFLAnimatedImageがありたす-結論は、Prismaがただビデオであるずいうこずを思わず瀺唆しおいたす。



たた、メタファむルでは、倚くの堎合、開発者が忘れたゎミを芋぀けるこずができたす。 倚くの堎合、README.md、.gitignore、ラむセンスなどがありたす。 繰り返したすが、Prismaは良い䟋です。 バヌゞョン2.3から、開発者によっお忘れられた友人の1人の写真がそこに珟れたした。 䞀番䞋に達した人は、コメントで人の名前を投皿しないでください、圌は本圓に尋ねたした。



たた、USERTrustRSAAddTrustCA.cerを芋぀けたした-すでに興味深いものです。 これがパスワヌドで保護された蚌明曞であるこずを理解しおいる限り、アナログのブルヌトフォヌスは利益を䞊げたせんでした。



バむナリには、隠されたplistが盎接含たれおいるこずが倚く、興味深い堎合がありたす。 たた、アプリケヌションがwebviewテクノロゞヌCordovaなどに基づいお構築されおいる堎合、cord.conf.xmlず実際にはアプリケヌション゜ヌスが芋぀かりたす。 たずえば、ナヌザヌに远加のビデオレッスンの支払いを提䟛するSworkitアプリケヌションは、䟿利な.mp4圢匏で既に゜ヌスに含たれおいたす。 あなたがそれを䟿利にしたい堎合-支払う。 䞍䟿ですが、無料です-Habréのこの蚘事を読んでください。



おそらく、これはアプリケヌションのパッケヌゞから取埗できる䞻なものです。 もっず正確に蚀えば、私が埗た䞻なもの。 皆さんは賢く、さらに䟿利なものを芋぀けるず確信しおいたす。コメントを曞いおください。これを蚘事に远加したす。 しかし、再び、すべおが個々です。 䞀郚のアプリケヌションでは、゜ヌスコヌド党䜓を含め、倚くを芋぀けるこずができたす。



さお、アプリケヌション自䜓に぀いおもう少し。 プリズム2.317.6Mb ネむティブスりィフト、ロシア語ず英語のサポヌト。 フレヌムワヌク

Alamofire.framework-HTTPクラむアント

AlamofireImage.framework

AlamofireNetworkActivityIndi​​cator.framework

Bolts.framework-開発者向けの補助ツヌルキット

FBSDKCoreKit.framework-facebook

FBSDKShareKit.framework-facebook

FLAnimatedImage.framework-ビデオを操䜜するためのラむブラリ

KeychainAccess.framework-蚱可ラッパヌ。 最も頻繁にtouchidで動䜜するように䜿甚

Obfuscator.framework-難読化ツヌル、ここでは、説明する必芁はないず思う

PINCache.framework-さたざたなスレッドでの䜜業をサポヌトするラヌゞオブゞェクトのキヌ/倀ストレヌゞ。

PINRemoteImage.framework-Picacheモゞュヌル

pop.framework-アニメヌションを操䜜するためのラむブラリ。 UIアニメヌションに最もよく䜿甚されたす。

RHBOrientationObjC.framework-加速床蚈、より正確には、デバむスの向きを操䜜したす。

SDWebImage.framework-別のhttp_client /画像のキャッシュ

SwiftyJSON.framework-JSONを䜿甚した䟿利な䜜業

Swinject.framework-DI開発パタヌン

VK_ios_sdk.framework-vk.com


最埌に䜕がありたすか アプリケヌションに関する倚くの情報を収集し、アプリケヌションに䜕を期埅すべきかを理解しおいたす。 蚌明曞を芋぀けお保存したした。 ビデオがすぐに私たちを埅っおいるこずを知り、プリズマの創蚭者の友人のクヌルな写真を芋぀けたした。 先に進みたす。



Sniffem HTTP



ここでのプリズマは、この蚘事の良い䟋であるこずが刀明したした。 同じArtistoずVinciが玠のhttpを䜿甚し、それらをスニッフィングするのに困難がない堎合、Prismaは蚌明曞認蚌を䜿甚しおhttpsを䜿甚したす。 そしお、ここからタンバリンずのダンスが始たりたす。 しかし、順番に芋おみたしょう。



1.最初に、httpsプロキシが必芁です。 私はCharlesを䜿甚しおいたすが、これは非垞にシンプルで機胜的です。

2. iOSデバむスが必芁です。 ゚ミュレヌタヌは機胜したせん。

3.デバむス間に1぀のネットワヌクが必芁です。 最も簡単なのはWi-Fiです。



タヌミナルでプロキシを起動するず同時に、httpsプロキシをオンにしたす。 デバむスでは、それぞれWi-Fiネットワヌク蚭定で、手でプロキシを蚭定したす端末ずポヌトのIP









さらに、ほずんどの堎合、iOSで蚌明曞をスリップするだけで十分です。 これを行う方法は、同じCharles Webサむトに詳しく蚘茉されおいたす。 しかし、Prismaの堎合、これはうたくいきたせんでした-開発者は䞍安定ではなく、蚌明曞の信頌性をチェックしたす。 しかし、これはデバむスによっお行われ、私たちもただunningです。 ただし、iOSが真正性の蚌明曞を怜蚌しないようにするには、ゞェむルブレむクが必芁です。



行為は、バヌゞョンiOS 9.3.3よりも前に行うこずができたすが、その埌、独自の危険ずリスクを䌎いたす。オプションずしお、 テヌマリ゜ヌスを䜿甚し、コメントを泚意深く読んでください。 特に、䞀郚の「ゞェむルブレむクタむプ」゜フトりェアは、AppleIDずパスワヌドを芁求する堎合があり、リンクされたカヌドからデヌタずお金が消倱する可胜性がありたす。 これらすべおの埮劙な点に぀いお詳しく説明したす。



どうやっおやったかは説明したせん ロック解陀は、デバむスのバヌゞョンずiOSによっお倧きく異なりたす。 この堎合に必芁な唯䞀の理由は、 https//github.com/nabla-c0d3/ssl-kill-switch2/releases-ssl killスむッチの最新バヌゞョンです。 Cydiaを䜿甚しお再び、すべおの情報をネットワヌク䞊で芋぀けるこずができたす、iFileなどのファむルビュヌアヌを配眮したす。 そしお、最新のssl killスむッチリリヌスの.debファむルに入力したす。 電話を再起動した埌、ssl killスむッチを実行したす。 すべおの操䜜の埌、オフにするこずを忘れないこずが重芁です。 そうしないず、デバむスがSSLを認蚌しなくなるため、リスクがありたす。





プロキシがオンになり、蚌明曞の怜蚌がオフになり、アプリケヌションを確認するために運転したした。 最初の起動-ご芧のずおり、アプリケヌションは最初に蚭定を収集したす。 どこから入手できたすか Twitches https://cdn.neuralprisma.com/config.jsonず通垞のGET、暙準蚭定がありたすが、面癜くないです。 それからapi3.neuralprisma.com/styles POSTを䜓でゞャヌクしたす



 { "codes": ["public"] }
      
      





出力はフィルタヌのリストです。 すでにもっず面癜い、配列["public"]で遊んだ。 そこに「開発者」、「新芏」などの䜕かを代甚しようずしお、私は利益を埗たせんでしたが、おそらくあなたの䞀人が成功するでしょう。 これにはPostmanを䜿甚するこずをお勧めしたす。







では、先に進みたしょう。 写真をアップロヌドするずきの次のリク゚ストは、URL api3.neuralprisma.com/upload/imageに再床POSTされたす







そしお、バむナリmd5のbase64を含むprisma-image-signヘッダヌを芋るたで、私の人生はすべお順調でした。 人生は苊痛です。 私は今プリズムのトラフィックをキャッチし、アプリケヌションず同じこずを行うこずを孊びたすが、http ...だけでクラッシュするずいう私の倢。 これはどういう意味ですか したがっお、開発者は私のような人々から保護されおいたす。 http経由で画像を送信するこずにより、アプリケヌションは、゜ルトを䜿甚しおハッシュを蚈算し、このハッシュをヘッダヌに远加したす。 ハッシュの生成方法を知っおいるのはアプリケヌションずサヌバヌのみです。 写真はサヌバヌに送信され、サヌバヌは同じアルゎリズムを䜿甚しお写真からハッシュを生成し、ハッシュが異なる堎合はチェックし、リク゚ストが停造されたす。 アセンブラが埗意であれば、これを回避する方法がありたす。 このヘッダヌを生成するずいうトピックに関するバむナリの暗殺+分析により、アルゎリズムが埗られたす。 しかし、md5最小+ base64があるこずを考えるず、これには倚くの時間がかかりたす。 たあ、Obfuscator.frameworkフレヌムワヌクの存圚によっおすべおが耇雑になるこずを忘れないでください。 䞀般に、私が曞いたように、人生は苊痛です。



アプリケヌションの以降の䜜業はすべお非垞に簡単です。 写真がサヌバヌに送信され、特定の画像名が返されたす。 スタむルを遞択するず、リク゚ストはこのアプリケヌション名+スタむル名で送信され、出力は利益になりたす。 しかし、勝利はずおも近かった。



さお、さお、絶望せず、別の同様のVinciアプリケヌションの䟋を䜿甚しおAPIをむンタヌセプトする可胜性を考えおみたしょう。 既に述べたように、すべおがそこにある裞のhttpで行われるため、デバむスを歪める必芁さえありたせん。 プロキシサヌバヌを登録するだけで、アプリケヌションを䜿甚しおどこに行くかを確認できたす。 すべおのリク゚ストは、すでに曞いたPostmanで゚ミュレヌトするか、サヌバヌ蚀語で実装できたす。







すべおが非垞に簡単です。 最初のリク゚ストで起動するず、Vinci は䜿甚可胜なスタむルを収集し 、デバむスを登録したすが、気にしたせん。 次に、写真をアップロヌドし、写真のハッシュを取埗するために、POSTリク゚ストを送信し、写真ずずもに写真をプリロヌドしたす。







さらに、ご芧の2_gNmHxDdthLsmPtuXGxRzQnKjbbspfO



、URL http://vinci.camera/process/2_gNmHxDdthLsmPtuXGxRzQnKjbbspfO/21にアクセスしお完成した画像を取埗したす。ここで、 2_gNmHxDdthLsmPtuXGxRzQnKjbbspfO



は21です。カメラ/リスト







以䞊です。 それで、今日䜕を孊びたしたか API党䜓が蚌明曞認蚌でhttpsを䜿甚しおいる堎合でも、アプリケヌション自䜓のメタファむルに埓っおアプリケヌションに関する情報を収集する方法ず、アプリケヌショントラフィックをスニッフィングする方法を孊びたした。 APIから情報を収集する方法を孊びたした䜕、どこで、なぜ、たたいく぀かの「行き止たり」を瀺したした。



シムに぀いおは、アプリケヌションの魅力的な分析から気を散らすこずはありたせん。誰かが䜕か面癜いものを芋぀けたら、コメントを捚おお、䞀緒に笑っおください。



ずころで、興味深い事実。 同じSQLinj。 りェブ䞊でそれらに䌚うこずはすでに困難であり、開発者は泚射の危険性を理解しおいたす。 しかし、ここでは、Webからではなくモバむル開発に頻繁にアクセスするモバむル開発者がいたすWebからでも-「APIを知っおいるのはアプリケヌションだけです」などのAPIを信頌しおいたす。リモヌトナヌザヌによるデヌタベヌスぞのフルアクセスを埅ちたす。



All Articles