(57)【要約】  ソフトウェアアプリケーションの機能性を高めるために、付加的なソフトウェアコードを実行するため、コンパイルされたソフトウェアアプリケーションを修正するためのシステムおよび方法。システムおよび方法は、ソフトウェアアプリケーションバイナリ（６０１）、メタデータ（６０２）、および、修正オプション（６０３）を受信する工程、受信した構成要素を分析する工程、ソフトウェアアプリケーションバイナリを修正に基づいて分析する工程、および、修正されたソフトウェアアプリケーションバイナリ（６１０）を返す工程、を含む。【選択図】  図６
2018523218.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアを修正する方法であって、該方法は：
コンピューティングデバイスにおいて、
ａ．ソフトウェアアプリケーションバイナリを受信する工程と；
ｂ．バイナリ命令への修正が必要かどうか判断するために、ソフトウェアアプリケーションバイナリを分析する工程と；
ｃ．バイナリ命令への修正が必要な場合に、バイナリ命令を修正する工程と；
ｄ．ソフトウェアに新しいメタデータをインジェクトする工程と；
ｅ．修正されたソフトウェアアプリケーションバイナリをコンパイルする工程と；および、
ｆ．修正されたソフトウェアアプリケーションバイナリを返す工程と、を含むことを特徴とする、ソフトウェアを修正する方法。
【請求項２】
１つ以上の修正オプションを受信する工程をさらに含み、ソフトウェアアプリケーションバイナリを分析する工程は、１つ以上の修正オプションを分析する工程をさらに含み、バイナリ命令を修正する工程は、さらに１つ以上の修正オプションに基づく、ことを特徴とする、請求項１に記載のソフトウェアを修正する方法。
【請求項３】
アセンブリ命令への修正が必要かどうか判断するために、ソフトウェアアプリケーションバイナリおよび１つ以上の修正オプションを分析する工程をさらに含み、アセンブリ命令への修正が必要な場合、次に、バイナリ命令をアセンブリ命令へ逆アセンブルする工程、およびアセンブリ命令を修正する工程を含むことを特徴とする、請求項２に記載のソフトウェアを修正する方法。
【請求項４】
ソースコードへの修正が必要かどうか判断するために、ソフトウェアアプリケーションバイナリおよび１つ以上の修正オプションを分析する工程をさらに含み、ソースコードへの修正が必要な場合、次に、アセンブリ命令をソースコード命令へ逆コンパイルする工程、および、ソースコード命令を修正する工程を含むことを特徴とする、請求項３に記載のソフトウェアを修正する方法。
【請求項５】
ソフトウェアアプリケーションバイナリのメタデータを受信する工程をさらに含み、ソフトウェアアプリケーションバイナリを分析する工程は、メタデータを分析する工程をさらに含み、バイナリ命令を修正する工程はさらに、メタデータに基づく、ことを特徴とする、請求項４に記載のソフトウェアを修正する方法。
【請求項６】
ソフトウェアアプリケーションバイナリを返す前にデジタルキーを使用して、修正されるソフトウェアアプリケーションバイナリに署名する工程をさらに含む、ことを特徴とする、請求項５に記載のソフトウェアを修正する方法。
【請求項７】
ソフトウェアアプリケーションバイナリを受信する工程は、ユーザからアプリケーションバイナリを受信する工程、アプリケーションバイナリをアップロードする工程、またはアプリケーションバイナリをオンラインアプリケーションマーケットプレイスからダウンロードする工程、からなる群から選択されることを特徴とする、請求項６に記載のソフトウェアを修正する方法。
【請求項８】
ソフトウェアアプリケーションバイナリを返す工程は、ダウンロードのためにソフトウェアアプリケーションバイナリを提供する工程、デバッグおよびサービス改善のためにソフトウェアアプリケーションへのアクセスを提供する工程、および、アプリケーションバイナリをオンラインアプリケーションマーケットプレイスに公開する工程、からなる群から選択されることを特徴とする、請求項７に記載のソフトウェアを修正する方法。
【請求項９】
非一時的なコンピューター可読ストレージ媒体であって、その中に命令を格納し、命令がコンピューティングデバイスによって実行された時、コンピューティングデバイスに：
ａ．ソフトウェアアプリケーションバイナリを受信させ；
ｂ．バイナリ命令への修正が必要かどうか判断するために、ソフトウェアアプリケーションバイナリを分析させ；
ｃ．バイナリ命令への修正が必要な場合に、バイナリ命令を修正させ；
ｄ．ソフトウェアアプリケーションバイナリに新しいメタデータをインジェクトさせ；
ｅ．修正されたソフトウェアアプリケーションバイナリをコンパイルさせ；かつ、
ｆ．修正されたソフトウェアアプリケーションバイナリを返させる、ことを特徴とする、非一時的なコンピューター可読ストレージ媒体。
【請求項１０】
１つ以上の修正オプションを受信することをさらに含み、バイナリ命令への修正がさらに必要かどうか判断するためのソフトウェアアプリケーションバイナリの分析は、１つ以上の修正オプションの分析を含み、バイナリ命令の修正はさらに、１つ以上の修正に基づく、ことを特徴とする、請求項９に記載の非一時的なコンピューター可読ストレージ媒体。
【請求項１１】
アセンブリ命令への修正が必要かどうか判断するために、ソフトウェアアプリケーションバイナリおよび１つ以上の修正オプションを分析する命令をさらに含み、アセンブリ命令への修正が必要な場合、次に、アプリケーションバイナリ命令をアセンブリ命令へ逆アセンブルし、およびアセンブリ命令を修正することを特徴とする、請求項１０に記載の非一時的コンピューター可読ストレージ媒体。
【請求項１２】
ソースコードへの修正が必要かどうか判断するために、ソフトウェアアプリケーションバイナリおよび１つ以上の修正を分析する命令をさらに含み、ソースコードへの修正が必要な場合、次に、アセンブリ命令をソースコード命令へ逆コンパイルし、および、ソースコード命令を修正することを特徴とする、請求項１１に記載の非一時的コンピューター可読ストレージ媒体。
【請求項１３】
ソフトウェアアプリケーションバイナリのメタデータを受信する命令をさらに含み、ソフトウェアアプリケーションバイナリの分析は、メタデータの分析をさらに含むことを特徴とする、請求項１２に記載の非一時的コンピューター可読ストレージ媒体。
【請求項１４】
デジタルキーを使用して、修正されるソフトウェアアプリケーションバイナリに署名する命令をさらに含むことを特徴とする、請求項１３に記載の非一時的コンピューター可読ストレージ媒体。
【請求項１５】
ユーザインターフェースをさらに含み、ユーザインターフェースは、ユーザが１つ以上の修正オプションを選択するために、複数の修正オプションを提供することを特徴とする、請求項１４に記載の非一時的コンピューター可読ストレージ媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンパイルされたソフトウェア内の機械命令を修正するためのシステムおよび方法に関する。
【背景技術】
【０００２】
ウェブおよびモバイルのアプリケーション会社は、しばしばそれらの製品に機能性を追加するサードパーティサービスに依存する。これらのサードパーティサービスは、一般に、実行がソフトウェア開発者キット（ＳＤＫ）、アプリケーションプログラムインターフェイス（ＡＰＩ）、ソフトウェアライブラリまたは他のソフトウェアコードの形式で、ソフトウェアのコードの実行を必要とする。これらのサードパーティサービスがユーザのウェブまたはモバイルのアプリケーションの楽しみを劇的に増すことができ、かつ、それら（すなわち、広告収入、改善したユーザ機能性、増強されたカスタマーサポート）を実行する会社に対する重要な価値を生成することができる一方、サードパーティコードをインストールする負担はウェブおよびモバイルのアプリケーション会社自体に降りかかる。会社の社員（典型的には、会社内の開発者）が単一のサードパーティＳＤＫの手動の実装を正確に行うために、多数の時間または日数さえもかかる場合がある。会社内の開発者は、まず、無数の選択肢から（例えば多数の競合するモバイルの広告ネットワークから）自分が利用したい適切なサードパーティサービスを識別し、未知のサードパーティＳＤＫを使用するためのインストールガイドを提供する関連するサポートマニュアルを読み、次に、ウェブまたはモバイルのアプリケーションソースコードにＳＤＫを直接インストールしなければならない。このプロセスは管理上厄介で、インストールプロセスが正確に行われ、意図せずにウェブまたはモバイルのアプリケーションを害していないことを保証するために退屈な品質保証および試験の手順を必要とする。例えば、オンライン広告によって収入を生み出したいが、自分自身の広告ネットワークシステムを構築する資源または時間がないウェブまたはモバイルの会社が、そのウェブまたはモバイルのアプリにサードパーティ広告ネットワークＳＤＫをインストールしなければならないだろう。そのＳＤＫは、ウェブまたはモバイルのアプリケーション中に広告を出し、会社に広告収入を供給するだろう。
【０００３】
サードパーティサービスプロバイダは規則的にそれらのＳＤＫを更新する。会社がサードパーティサービスの最新の特徴および機能性を利用したければ、会社はそのウェブまたはモバイルのアプリケーションへとアップグレードされたＳＤＫを実行しなければならない。これは単純かつ迅速なプロセスではない。ウェブまたはモバイルのアプリケーションは、熟練した開発者によって作業されなければならず、潜在的にビジネスオペレーションを混乱させる。古いＳＤＫは取り除かれなければならず、かつ、アップグレードされたＳＤＫは、要求されたスキルおよび経験を持った誰かによってインストールされ、テストされねばならない。多数のサードパーティＳＤＫを有する成功した会社は、このプロセスを管理するのに、社内の開発者のチームをフルタイムで雇用しなければならないことがある。この理由から、多くのウェブおよびモバイルのアプリケーション開発者が、そうでなければ望ましいサードパーティのサービスを使用することをただ避ける。最良のサードパーティサービスを識別し、様々な初めてのＳＤＫインストールを管理し、ＳＤＫアップデートが利用可能な時に追跡し、かつ、次に、困難なインストールおよびテストのプロセスを再度行うことの負担は、小企業にとっては圧倒的なものになる可能性がある。実際、新規ＳＤＫおよびアップデートされたＳＤＫの氾濫を管理するために新しい言葉が作られた。すなわち、「ＳＤＫ疲労」。
【０００４】
特に開発者のニーズに適するものを選ぶ前に、開発者が評価しなければならないであろう多くのサードパーティサービスを考慮する場合、サードパーティシステムの実行に関連したコストは開発者にとって極端に高くなる可能性がある。例えば、開発者は、カジュアルゲームまたはソーシャルネットワーキングアプリケーションなどの開発者の特定のアプリケーションのために最も良く機能するものを見つける前に、１ダースのサードパーティ広告ネットワークをテストする必要とすることがある。ＳＤＫ実行および進行中の管理プロセスは、非常に時間がかかり、かつ、多くのウェブおよびモバイルのアプリケーション会社にとって非常に難しいため、これらの価値のあるサードパーティサービスの使用がただ制限されてしまうだけとなる。この結果は、これらの会社が、顧客に提示しえたであろう貴重な増分収益機会、および、革新的な新しいサービスを失うということである。
【０００５】
したがって、コンパイルされたソフトウェアアプリケーションを採用し、開発者が自分のＷｅｂまたはモバイルのアプリケーションに最も適した最良のサードパーティサービスを評価する必要なく修正し、かつ、自分のウェブまたはモバイルのアプリケーションのソースコードへとサードパーティソフトウェアコード（ＳＤＫ、ＡＰＩ）を手動で挿入する負担なく上記を行う方法の必要性がある。同様に、開発者が、各サービスのＳＤＫを手動で実装することに通常伴う課題および業務の中断なしに、労せずして、潜在的に価値のある多数のサードパーティサービスをテストすることができ、公告、分析、ユーザ調査、クラッシュ報告、開発者ツール、ライブラリ、アプリレーティングプロンプト、革新的販促オファー、アプリ内購入、などの領域における自社の製品およびサービスの機能性を高めるために、無数のサードパーティサービスを迅速に評価し実装でき、かつ、顧客のデバイス上でハードウェアが適切に使用できるようにアプリケーションを修正する方法の必要性がある。さらに、ウェブまたはモバイルのアプリケーションに以前インストールされたＳＤＫによって行なわれた既存の機能が、新しい目的またはより適した目的へ再び向けられるようにできる方法の必要性がある。さらに、ｉＯＳ、アンドロイド、ＨＴＭＬ５、ＣおよびＣ＋およびフラッシュなどの様々なフォーマット、オペレーティングシステム、プログラミング言語でのこれらの修正を行なうことができる方法の必要性がある。
【発明の概要】
【０００６】
本発明は、ソフトウェアアプリケーションの機能性を高める追加のソフトウェアコードを実行するためにコンパイルされたソフトウェアアプリケーションを修正するためのシステムおよび方法に関する。このシステムと方法は、ソフトウェアアプリケーションバイナリおよび修正オプションを受信する工程、ソフトウェアアプリケーションバイナリを修正オプションに基づいて修正する工程、ソフトウェアアプリケーションバイナリをコンパイルする工程、および、使用可能なフォーマットにおいて修正したソフトウェアアプリケーションバイナリを返す工程、を含む。
【０００７】
本発明の目的は、機械命令の修正がバイナリレベル、アセンブリレベルおよび／またはソースコードレベルで必要かを判断するために、かつ、修正プロセスを効率化するために必要なレベルで修正を自動的に行なうために、ソフトウェアアプリケーションバイナリ、修正オプション、およびメタデータを分析することである。
【図面の簡単な説明】
【０００８】
【図１】図１は、本開示の実施形態に係るウェブサービスおよび修正サービスを含むソフトウェア修正システムのコールフロー図（ｃａｌｌ  ｄｉａｇｒａｍ）である。
【図２】図２は、ソフトウェア修正システムの実施形態によって修正される前にコンピューティングデバイス上で作動するソフトウェアアプリケーションを示す。
【図３】図３は、ソフトウェア修正システムの実施形態によって修正された後にコンピューティングデバイス上で作動するソフトウェアアプリケーションを示す。
【図４】図４は、本開示の実施形態に係るウェブサービスのコンピュータ実行例を示す。
【図５】図５は、本開示の実施形態に係るウェブサービス上で提供される修正オプションのコンピュータ実行例を示す。
【図６】図６は、本開示の実施形態に係るソフトウェア修正サービスプロセスの典型的なフローチャートを示す。
【図７】図７は、本開示の実施形態に係るソフトウェア修正システムプロセスの典型的なフローチャートを示す。
【図８】図８は、本開示の実施形態に係るソフトウェア修正システムプロセスの典型的なフローチャートを示す。
【図９】図９は、本開示の実施形態に係るソフトウェア修正システムプロセスの典型的なフローチャートを示す。
【図１０】図１０は、特定の実施形態における本開示の様々な態様を実行するために使用されてもよいコンピュータのハイレベルダイアグラムを示す。
【発明を実施するための形態】
【０００９】
添付された図面と合わせて下に開示される詳細な説明は、本発明の現在の好ましい実施形態の説明として意図されるものであり、本発明を構成または利用してもよいただ一つの形式を表わすことは意図されていない。この説明は、例証される実施形態と合わせて発明の構築および操作のための機能および工程の順序を開示する。しかし、本発明の精神および範囲内に包含されることを意図した異なる実施形態によって、同じまたは同等の機能および順序が達成され得ることが理解されるべきである。
【００１０】
第１、第２などの用語は、様々な要素を記載するために本明細書で使用されてもよいが、これらの要素はこれらの用語によって制限されるべきでない、ということが理解されるだろう。これらの用語は、１つの要素と別の要素を区別するために使用されるにすぎない。例えば、本発明の範囲から逸脱せずに、第１のジェスチャーを第２のジェスチャーと名付けてもよく、同様に、第２のジェスチャーを第１のジェスチャーと名付けてもよい。
【００１１】
本明細書で本発明の説明において使用される用語は、特別の実施形態だけを記載することを目的としており、本発明を制限することを意図していない。本発明の明細書および付属の請求項において使用されるように、単数形「１つ（ａ）」、「１つ（ａｎ）」、および「その（ｔｈｅ）」は、文脈上明らかに他の意味を示すものでない限り、同様に複数形を含むことを意図している。本明細書で使用される用語「および／または」は、関連する列挙された項目の１つ以上の任意かつ全ての可能な組み合わせを参照し、包含することも理解されるだろう。用語「含む（ｃｏｍｐｒｉｓｅｓ）」および／または「含むこと（ｃｏｍｐｒｉｓｉｎｇ）」は、本明細書中で使用される時、述べられている特徴、整数、工程、動作、要素、および／または、構成要素、の存在を明記するが、しかし１つまたは複数の他の特徴、整数、工程、動作、要素、構成要素、および／またはそれらの群の存在または追加を排除するものではないことが、さらに理解されるだろう。
【００１２】
用語「ソフトウェアアプリケーションバイナリ」は、バイナリフォーマット中のコンピュータアプリケーションを意味する。ソフトウェアアプリケーションバイナリは適切なプログラムを使用して、読まれてもよく、または、アセットを明らかにするために抽出されてもよい。ソフトウェアアプリケーションバイナリ、ソフトウェアアプリケーション、コンパイルされたソフトウェアアプリケーションおよびコンピュータアプリケーションはほとんど同じ意味で使用されてもよいことを理解されたい。
【００１３】
コンパイルされたソフトウェア内の機械命令を修正するための方法およびシステムは、所望の修正オプションを備えたコンピュータアプリケーションを受信し、コンピュータアプリケーションを修正するレベルを決定するためにコンピュータアプリケーションを分析し、決定されたレベルでコンピュータアプリケーションを修正し、かつ、修正されたコンピュータアプリケーションを返すためのソフトウェアモジュールを含む。この方法は、直接ソースコード内に修正を埋め込むプログラマに対立するものとして、必要に応じてアセンブリコードやソースコード中で修正を、バイナリレベルで開始し、修正を行うだけで、修正プロセスを効率化する。
【００１４】
図は、コンパイルされたソフトウェア内の機械命令を修正するための方法およびシステムの実施形態を描写する。描写された実施形態が、本発明の様々な機能について説明するために、ウェブサービス（１００）および修正サービス（１０１）を含んでいる一方、単一のコンピューティングデバイス、または、公衆および／または私設ネットワーク上の複数のコンピューティングデバイスなどの、任意の数の構成において、本発明が実行されてもよいことを理解されたい。例示的な実施形態では、ウェブサービス（１００）などのユーザインターフェースは、ソフトウェアアプリケーションバイナリ（１０２）を収集し格納すること、修正およびメタデータに関係する情報などのリクエスト情報（１０３）を収集し格納すること、修正されたアプリケーションおよびメタデータ（１０７）を格納すること、および、ユーザ（１０８）へ修正されたアプリケーションを返すことに使用される。修正サービス（１０１）はアプリケーションを修正し、これは、ソフトウェアアプリケーション（１０４）を分析し、ソフトウェアアプリケーション（１０５）上で修正を行い、アプリケーション（１０６）にサインし／終了させることを含む。
【００１５】
いくつかの実施形態では、ウェブサービス（１００）などのユーザインターフェースは、クライアントのシステムとの相互作用のためのゲートウェイとして機能する公的にアクセス可能な１つ以上のウェブサーバ上に格納されてもよい。公的にアクセス可能な１つ以上のウェブサーバは、仮想コンピューティングおよび／またはストレージリソースを含んでもよく、かつ、多数のサービスを提供することができる。例えば、１つ以上のサーバーは、ユーザがコンピュータアプリケーションを修正するシステムを登録する／アクセスするためのセキュリティ機能性を提供することができる。いくつかの実施形態では、ユーザはまた、システムにコンピュータアプリケーションを提出するため、または、システムがコンピュータアプリケーションにアクセスし、および／またはコンピュータアプリケーションを置き換えるためにＧｏｏｇｌｅ（登録商標）ＳｔｏｒｅまたはＡｐｐｌｅ（登録商標）ＡｐｐＳｔｏｒｅなどのマーケットプレイスへアクセスするため、追加のセキュリティ証明書を提出することを要求される場合がある。１つ以上のサーバーはまた、ネットワーク接続を介したスマートフォン、タブレット、ラップトップまたはデスクトップなどの、クライアントコンピュータ上のウェブブラウザおよび／またはアプリケーションへ、ユーザインターフェースおよび／または拡張子を供給することができる。
【００１６】
工程（１０２）に示されるように、ウェブサービスは、ソフトウェアアプリケーションをシステムに提出するようユーザに促してもよい。ウェブサービス（１００）を使用するユーザは、１つ以上の方法でコンピュータアプリケーションを収集し格納するよう、ウェブサービスに指示することができる。いくつかの実施形態では、ウェブサービス（１００）は、ユーザがウェブサービス（１００）にソフトウェアアプリケーションバイナリをアップロードしてもよい、ユーザインターフェースを提供する。ソフトウェアアプリケーションバイナリは既にアプリストア、マーケットプレイスまたは他の場所へアップロードされるいくつかの実施形態では、ユーザは、ウェブサービスがソフトウェアアプリケーションにアクセスしダウンロードしてもよい場所に、ウェブサービス（１００）を供給してもよい。いくつかの実施形態では、ウェブサービスは、ウェブサービスがソフトウェアアプリケーションマーケットプレイスにアクセスできるようにするセキュリティ証明書を提供することをユーザに要求する。
【００１７】
工程（１０３）では、ウェブサービス（１００）はまた、ユーザからリクエスト情報を収集し格納する。いくつかの実施形態では、ウェブサービス（１００）は、どのタイプの修正およびどのタイプの情報を、ユーザがウェブサービス（１００）に供給するかを決定するためにユーザが選ぶオプションを提供する。例えば、リクエスト情報は、ユーザがサービスに要求している修正、アプリケーションについて記載するメタデータ、および、アプリケーションサイン情報、の詳細を含んでもよい。
【００１８】
メタデータは、アプリケーションの操作プラットフォームおよびコード構造を供給することなどにより、修正サービス（１０１）がどの修正をするかを決定するのを支援するのに役に立つことができる。また、メタデータは、アプリケーションのバージョン番号またはカテゴリーを供給することなどにより、構成または他の使用のためのコンパイルされたアプリケーションへと含められるように使用されてもよい。いくつかの実施形態では、メタデータは必要ではなく、収集されない。例えば、いくつかの実施形態では、システムはユーザのかわりに修正を自動的に選択し、したがって、メタデータは関連していないかまたは必要ではなく、収集されない。いくつかの実施形態では、メタデータはユーザによって提供されてもよく、または自動的にソフトウェアアプリケーションから抽出されてもよい。メタデータには、限定されないが、バイナリのターゲットオペレーティングプラットフォーム、アプリケーションのタイトル、バージョン番号、バージョンコード、視覚的なアイコン、識別文字列（例えばパッケージ名、バンドルＩＤなど）、オリエンテーション設定、コンピュータデバイス互換性、電流コード構造、既存のコードクラスのリスト、コード構造、方法、文字列、定数、インポートまたはアプリケーション内で使用される他の構築物、アプリケーションのカテゴリー、アプリケーションのサブカテゴリー、ジャンル、コンテンツ（成熟度）レーティング、アプリケーションの説明、アプリケーションに関連した説明タグ、アプリケーション識別子、ＳＤＫ、ＡＰＩまたはライブラリーメタデータセッティング、アイコン、バイナリアセット、画像、テキストのアセット、ＸＭＬ、および他のそのような情報が含まれている可能性がある。さらに、アプリケーション内の機械命令を修正する方法を規定する情報は、限定されないが、特定のＳＤＫ、ライブラリ、コード断片、テキストまたはＡＰＩを、包含し、相互作用し、除去し、無効化し、または、修正するかどうかに関わりなく、含んでいてもよい。
【００１９】
いくつかの実施形態では、ウェブサービス（１００）はさらに、アプリケーションがどのようにデジタル署名されるべきかを規定する情報を受け入れる。ソフトウェアアプリケーションにデジタル署名を追加する機能は、ユーザが他のサービスやシステムが機能するために必要となる場合があるアプリケーションの所有権を証明するのに役立つ。デジタル署名を可能にする実施形態では、ユーザは、その後、一旦修正がなされたらアプリケーションに署名するために使用することができる、署名する「キー」または「証明書」をアップロードしてもよい。いくつかの実施形態では、ウェブサービス（１００）は、署名のためにユーザが以前に用いたキーまたは証明書を選択できるようにする。いくつかの実施形態では、ウェブサービス（１００）は、ユーザが、特にデバッグのために予め生成された証明書の使用を選択できるようにする。いくつかの実施形態では、ウェブサービス（１００）は署名されないアプリケーションを提供する。いくつかの実施形態では、ウェブサービス（１００）は、ユーザがそれらのアプリケーションに署名するための新しい証明書またはキーを生成できるようにすることができる。その後、新しいキーはユーザに関連し、後で使用するために安全なストレージメカニズム内に置かれる。
【００２０】
一旦ウェブサービス（１００）がソフトウェアアプリケーションバイナリおよび任意の関連情報を収集すれば、ウェブサービス（１００）は、ソフトウェアアプリケーションバイナリを修正するために、ソフトウェアアプリケーションバイナリおよび任意の関連情報を修正サービス（１０１）に転送してもよい。いくつかの実施形態では、修正サービス（１０１）は、ウェブサービス（１００）と通信する、１つ以上の個人のコンピューティングシステム上に格納される。多くの個人のコンピュータシステムの配列（ａｒｒａｙ）上に修正サービス（１０１）を格納させることで、パブリックシステムに内在するセキュリティリスクにさらされることから、ソフトウェアアプリケーションと修正ツールを保護する追加のセキュリティレイヤを提供することができる。いくつかの実施形態では、ウェブサービス（１００）および修正サービス（１０１）が単一のサーバー上にあってもよい。
【００２１】
工程（１０４）では、修正サービス（１０１）は、要求された修正をする方法を決定するためにアプリケーションを分析する。広告サービス、レーティングサービスおよび分析サービスなどの様々なタイプの修正は、バイナリレベル、アセンブリレベルまたはソースコードレベルなどの様々なコーディングレベルでソフトウェアアプリケーションバイナリの修正を必要とすることがある。例えば、ユーザが、ソフトウェアアプリケーションが最初にオンになるたびにポップアップとして広告サービスの追加を要求すると、広告サービスは、バイナリコードをアセンブリコードへと逆アセンブルすること、またはアセンブリコードをソースコードへと逆コンパイルすることを必要とすることなく、バイナリレベルで実行されてもよい。しかしながら、ユーザが広告サービスおよび分析サービスの両方を要求する場合、修正サービス（１０１）がバイナリレベル、アセンブリレベルおよびソースコードレベルなどの多数のレベルでソースコードを修正するように要求されてもよい。修正サービス（１０１）は、修正がソフトウェアアプリケーションバイナリの各レベルのそれぞれをどのように修正するかを決定する。
【００２２】
次に、工程（１０５）では、修正サービス（１０１）は修正をソフトウェアアプリケーション上で行う。この工程の間、修正プロセスに関連する情報はソフトウェアアプリケーションから抽出される。この抽出過程は、限定されないが、圧縮バイナリーファイルの抽出、コンパイルされたバイナリーコード（バイトコード、機械語）の他のフォーマットへの逆アセンブル、アセンブリコードのソースコードへの逆コンパイル、および、バイナリアセットの他のフォーマットへのデコードまたは変換を含んでもよい。コードがその様々なフォーマットである間、修正が機械命令のためになされる。ここで、命令は、バイナリコード、バイトコード、または逆アセンブルされたコード、またはアセンブリコード、および未コンパイル／逆コンパイルされたコードまたはソースコードを指す場合がある。命令の修正は様々な方法で達成されうるが、これには、命令の修正、補足の命令の追加、既存の命令の削除、および、メタデータ、アセット（画像を含む）およびバイナリーファイルの修正、包含、または削除、が含まれる。
【００２３】
工程（１０６）で、修正されたアプリケーションは完成され、例えば、ビルドされ、コンパイルされ、圧縮され、整列され、アセンブルされ、または使用可能なアプリケーションが作成されるその他の方法などが行われる。適用可能な場合、修正されるアプリケーションはまた、ユーザによるアプリケーションの所有権を確認するために利用可能な信任状／証明書を使用して署名される。工程（１０７）では、その後、修正されたアプリケーションおよびメタデータが返され、ウェブサービス（１００）で格納される。
【００２４】
工程（１０８）で、アプリケーションはユーザに返される。いくつかの実施形態では、修正されたアプリケーションはユーザがダウンロードするために利用可能になる。いくつかの実施形態では、修正されたアプリケーションを利用可能にする方法は、限定されないが、ダウンロードのためのソフトウェアの提示、ソフトウェアのサービス上への保存、デバッグやサービス改善のための内部アクセスの許可、または、ソフトウェアの第三者または内部公開サービスへの送信、が含まれうる。
【００２５】
図２は、修正がなされる前の例示的ソフトウェアアプリケーション（２０３）を示す。描写されるように、ソフトウェアアプリケーション（２０３）はコンピューティングデバイス（２０１）のディスプレイ（２０２）上に表示される。示されるように、ソフトウェアアプリケーション（２０３）には視覚的要素および非視覚的要素などのコンテンツ（２０４）がある。ほんの一例として、これらは画像、テキスト、マップ、ゲームコンテンツ、および他のマルチメディアまたはユーザインターフェース要素を含んでもよい。
【００２６】
図３は、修正がなされた後の修正された例示的ソフトウェアアプリケーション（３０１）を示す。示されるように、修正されるソフトウェアアプリケーション（３０１）には、依然として、そのオリジナルコンテンツ（２０４）があってもよい。それはまた、視覚的なコンテンツおよび非視覚的なコンテンツを含む可能性のある、修正されたコンテンツを有する。この例では、新しいサービス（３０３）および広告（３０４）は修正されるソフトウェアアプリケーション（３０１）に追加された。既存のアプリになされた修正は、これらの追加の特徴をサポートする。
【００２７】
図４は、コンピュータアプリケーションおよび他の関連データを収集し格納するためにユーザと接続するためのウェブブラウザ（４００）から見ることができる例示的ウェブサイト（４０１）を提供する。この例示的ウェブサイト（４０１）は、ブラウザのユーザがソフトウェアアプリケーションをアップロードするために、アップロードモジュール（４０２）を提供する。ウェブサイト（４０１）は、プログレスバー（４０３）を使用して、アップロードの進行を示すことができる。ウェブサイトはさらに、ユーザが追加情報を提供することができる追加のフィールド（４０４）を提供することができる。例示的ウェブサイト（４０１）では、ユーザは、カテゴリー、ジャンル、および、アプリケーションのスクリーンオリエンテーションなどの他の情報に関係する情報を提供することができる。
【００２８】
図５は、ウェブブラウザ（５００）からアクセス可能な修正オプションを選択するための例示的ウェブサイト（５０１）を提供する。修正オプションメニュー（５０２）は、修正されるソフトウェアアプリケーションにどのタイプのサービスを含めるかをユーザが選択することを可能にする。この例では、ユーザは、サービスをオンまたはオフにするためにトグルボックス（５０３）を選択してもよく、選択された修正に構成メタデータを供給するために入力ボックス（５０４）に追加情報を入力してもよい。
【００２９】
図６は、本開示の実施形態に係るソフトウェア修正フローチャートを描写する。示されるように、コンピューティングデバイス（６００）上のユーザは、ソフトウェアアプリケーションバイナリ（６０１（ａ））を、ウェブサイト（６０５（ａ））などのソフトウェア修正サービスに供給する。ユーザはまた、メタデータ（６０２）および修正選択肢（６０３）をウェブサイトに提供してもよく、および／または、ソフトウェア修正サービスは、ソフトウェアアプリケーションバイナリ（６０１（ａ））上でさらなるメタデータ抽出（６０４）を行なってもよい。ソフトウェアアプリケーションバイナリ（６０１（ｂ））および修正選択肢メタデータ（６０６）を含む、すべての関連データが収集されると、アプリケーションを修正するために必要な工程を決定するためにソフトウェアアナライザ（６０７）に提供される。その後、修正が工程（６０８）で行なわれ、次に、工程（６０９）で、修正されるアプリケーションバイナリ（６１０（ａ））として使用可能なフォーマットへとコンパイルされる。その後、ウェブサイトは、修正されるアプリケーションへのアクセスを可能にし、これは、工程（６１０（ｂ））でユーザコンピューティングデバイスに提供されることができ、または、デバッグおよびサービス改善のための内部アクセスを可能にすること、またはサードパーティまたは内部公開サービスへソフトウェアを送信することなどの他の方法でユーザに提供することができる。
【００３０】
図７−９は、ソフトウェアアプリケーションを修正するために必要だとソフトウェアアナライザ（６０７）が判断したものに基づいて変化する修正システム（６０８）の様々なフローチャートを描写する。図７は、バイナリ命令への修正、アセンブリ命令への修正およびソースコードへの修正が必要であると判断したソフトウェア修正システム（７００）を描写する。示されるように、ソフトウェアアプリケーションバイナリ（７０１）および任意の修正選択肢およびメタデータ（７０２）は、ソフトウェア修正システム（７００）に供給される。適用可能な場合、エクストラクタ（ｅｘｔｒａｃｔｏｒ）（７０３）は、アセットを明らかにするためにアプリケーションバイナリを抽出し、次に、バイナリパッチャー（ｂｉｎａｒｙ  ｐａｔｃｈｅｒ）（７０４）は、修正選択肢およびメタデータ（７０２）に基づいてバイナリ命令を修正する。次に、逆アセンブラ（７０５）はアプリケーションバイナリファイルをアセンブリ命令へ逆アセンブルし、アセンブリインジェクタ（ａｓｓｅｍｂｌｙ  ｉｎｊｅｃｔｏｒ）（７０６）は、修正選択肢およびメタデータ（７０２）に基づいてアセンブリ命令を修正する。次に、逆コンパイラ（７０７）はアセンブリ命令をソースコードへ逆コンパイルし、ソース修飾子（ｓｏｕｒｃｅ  ｍｏｄｉｆｉｅｒ）（７０８）は、修正選択肢およびメタデータ（７０２）に基づいてソースコードを修正する。次に、ファイルインジェクタ（ｆｉｌｅ  ｉｎｊｅｃｔｏｒ）（７０９）は、ファイルまたはメタデータを分解されたアプリケーションにインジェクトするかまたはパッチを適用する。コンパイラ（７１０）は、様々なラウンドのアプリケーションを使用可能なフォーマットへコンパイルする。次に、適用可能な場合、サイナー（７１１）は、ユーザへのアプリケーションの所有権を確認するために修正されたアプリケーションに署名する。そして、修正されたアプリケーションバイナリ（７１２）はユーザが利用できるようになる。
【００３１】
いくつかの実施形態では、特定のタイプの修正が必要でない場合、それらは飛ばされる。図８は、ソースコードへの修正が必要でないソフトウェア修正システムを描写する。代わりに、その修正はバイナリレベル（エクストラクタ（７０３）およびバイナリパッチャー（７０４））およびアセンブリレベル（逆アセンブラ（７０５）およびアセンブリインジェクタ（７０６））で行なわれる。図９は、ソースコードまたはアセンブリコードの修正が必要でないソフトウェア修正システムの実施形態を描写する。代わりに、修正はすべてバイナリレベル（エクストラクタ（７０３）およびバイナリパッチャー（７０４））でなされる。
【００３２】
様々な実施形態では、本明細書に記載された方法の工程は、図１および図６−９に記載される方法の工程を含め、記載された、または図示された特定の順序と異なる順序で行なわれてもよい。他の実施形態では、他の工程が、記載された方法から提供されてもよく、または、そこから取り除かれてもよい。
【００３３】
本明細書に記載されたシステム、装置、および方法は、デジタル回路を用いて、または、公知のコンピュータプロセッサと、メモリユニットと、ストレージデバイスと、コンピュータソフトウェアとおよび他の構成要素とを使用する１つ以上のコンピュータを用いて、実施されてもよい。典型的には、コンピュータは、命令を実行するためのプロセッサと、および、命令とデータとを格納するための１つ以上のメモリと、を含む。コンピュータはさらに、１枚以上の磁気ディスク、内部ハードディスクおよびリムーバブルディスク、光ディスクなどの１つ以上のストレージデバイスを含んでもよく、または、それに連結していてもよい。  
【００３４】
本明細書に記載されたシステム、装置、および方法は、ネットワークベースのクラウドコンピューティングシステム内で使用されてもよい。そのようなネットワークベースのクラウドコンピューティングシステムでは、ネットワークに接続されるサーバーまたは別のプロセッサは、ネットワークを経由して１台以上のクライアントコンピュータと通信する。例えば、クライアントコンピュータは、クライアントコンピュータ上に存在し作動するネットワークブラウザアプリケーションを介してサーバーと通信してもよい。クライアントコンピュータはサーバー上にデータを格納し、ネットワークを介してデータにアクセスしてもよい。クライアントコンピュータは、ネットワークを介してサーバーに、データのリクエスト、またはオンラインサービスのリクエストを送信してもよい。図１および図６−９の工程の１つ以上を含む、本明細書中に記載される方法のある特定の工程は、ネットワークベースのクラウドコンピューティングシステム中のサーバー、または別のプロセッサによって実行されてもよい。図１および図６−９の工程の１つ以上を含む、本明細書中に記載される方法のある特定の工程は、ネットワークベースのクラウドコンピューティングシステム中のクライアントコンピュータによって実行されてもよい。図１および図６−９の工程の１つ以上を含む、本明細書中に記載される方法の特定の工程は、任意の組み合わせで、ネットワークベースのクラウドコンピューティングシステム中のサーバーおよび／またはクライアントコンピュータによって、実行されてもよい。
【００３５】
本明細書に記載される、システム、装置、および方法を実施するために使用されてもよい、典型的なコンピュータ（１０００）のハイレベルブロック図は、図１０に例証される。コンピュータ（１０００）は、データストレージデバイスとメモリに動作可能につながれたプロセッサ（１０１０）を含む。プロセッサ（１０１０）は、コンピュータ（１０００）の全体的な動作を定義するコンピュータプログラム命令を実行することよりそのような動作を制御する。コンピュータプログラム命令は、データストレージデバイス（１０２０）、または他の非一時的なコンピュータ可読媒体に格納されてもよく、かつ、コンピュータプログラム命令の実行が望まれる時、メモリ（１０３０）へとロードされてもよい。したがって、図１および図６−９の方法の工程は、メモリ（１０３０）および／またはデータストレージデバイス（１０２０）に格納され、かつ、コンピュータプログラム命令を実行するプロセッサ（１０１０）によって制御される、コンピュータプログラム命令によって定義することができる。
【００３６】
例えば、コンピュータプログラム命令は、図１および図６−９の方法の工程によって定義されるアルゴリズムを行うように当業者によりプログラムされたコンピュータ実行可能なコードとして、実施することができる。コンピュータ（１０００）はさらに、ネットワークを介して他のデバイスと通信するための１つ以上のネットワークインターフェイス（１０４０）を含む。コンピュータ（１０００）はさらに、コンピュータ（１０００）とユーザの相互作用を可能にする１つ以上の入出力デバイス（１０５０）（例えばディスプレイ、キーボード、タッチパッド、マウス、スピーカー、ボタンなど）を含んでもよい。
【００３７】
プロセッサ（１０１０）は、とりわけ、プロセッサ設計に組み込まれたソフトウェア命令を有する専用プロセッサと、ストレージデバイス（１０２０）またはメモリ（１０３０）内の命令を有する汎用プロセッサとを、プロセッサ（１０１０）を制御するために含むことができ、かつ、コンピュータ（１０００）の単一プロセッサまたは複数プロセッサのうちの１つであってもよい。プロセッサ（１０１０）は、複数のコアまたはプロセッサ、バス、メモリコントローラ、キャッシュなどを含む自己完結型のコンピューティングシステムであってもよい。マルチコアプロセッサは対称であってもよく、または非対称であってもよい。プロセッサ（１０１０）、データストレージデバイス（１０２０）、および／またはメモリ（１０３０）は、１つ以上の特定用途向け集積回路（ＡＳＩＣ）および／または１つ以上のフィールドプログラマブルゲートアレイ（ＦＰＧＡ）を含み、これらによって補完され、または、これらに組み込まれてもよい。本開示は、より大きい処理能力を提供するために、１つ以上のプロセッサ（１０１０）を備えるコンピュータ（１０００）、または、一緒にネットワーク接続されたコンピュータの一群または集団で動作してもよいことが認識されうる。
【００３８】
データストレージデバイス（１０２０）およびメモリ（１０３０）はそれぞれ、明確な非一時的なコンピュータ可読ストレージ媒体を含む。一例として、限定しないが、そのような非一時的なコンピュータ可読ストレージ媒体には、ランダムアクセスメモリ（ＲＡＭ）、高速ランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ダブルデータレートシンクロナスダイナミックランダムアクセスメモリ（ＤＤＲＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、消去可能プログラマブルリードオンリーメモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブルリードオンリーメモリ（ＥＥＰＲＯＭ）、フラッシュメモリ、コンパクトディスクリードオンリーメモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスクリードオンリーメモリ（ＤＶＤ−ＲＯＭ）ディスク、または他の光学ディスクストレージ、磁気ディスクストレージまたは他の磁気ストレージデバイス、または、コンピュータ実行可能命令、データ構造あるいはプロセッサチップ設計の形式で所望のプログラムコード手段を実行または格納するために使用することができる他の任意の媒体、が含まれる。情報が、ネットワークまたは他の通信接続（有線、無線、またはそれらの組み合わせのいずれか）上でコンピュータに転送または提供されるとき、コンピュータは、適切に、その接続をコンピュータ可読媒体とみなす。したがって、そのような任意の接続は、コンピュータ可読媒体と適切に名付けられる。上記の組み合わせも、コンピュータ可読媒体の範囲内に含まれるべきである。
【００３９】
ネットワーク／通信インターフェース（１０４０）により、コンピュータ（１０００）は、インターネットなどのネットワークと通信することができ、このインターネットはまた、ワールドワイドウェブ（ＷＷＷ）、携帯電話ネットワークなどのイントラネットおよび／または無線ネットワーク、無線ローカルエリアネットワーク（ＬＡＮ）および／またはメトロポリタンエリアネットワーク（ＭＡＮ）、および任意の適切な通信規格、プロトコル、および技術を使用する他のデバイスと称される。一例として、限定されないが、そのような適切な通信規格、プロトコルおよび技術には、イーサネット（登録商標）、Ｗｉ−Ｆｉ（例えばＩＥＥＥ  ８０２．１１）、Ｗｉ−ＭＡＸ（登録商標）（例えば８０２．１６）、Ｂｌｕｅｔｏｏｔｈ（登録商標）、近距離無線通信（ＮＦＣ）、無線周波数システム、赤外線、ＧＳＭ、ＥＤＧＥ、ＨＳ−ＤＰＡ、ＣＤＭＡ、ＴＤＭＡ、クワッドバンド、ＶｏＩＰ、ＩＭＡＰ、ＰＯＰ、ＸＭＰＰ、ＳＩＭＰＬＥ、ＩＭＰＳ、ＳＭＳまたは他の任意の適切な通信プロトコルが含まれうる。一例として、限定されないが、ネットワークインタフェース（１０４０）により、コンピュータ（１０００）は、データを転送し、情報を同期させ、ソフトウェアを更新し、または他の適切な操作をすることが可能になる。
【００４０】
入出力デバイス（１０５０）は周辺機器を含んでもよい。入出力デバイス（１０５０）はまた、タッチスクリーン、スピーカーおよびボタンを有するスマートフォンなどのコンピューティングデバイスの一部を含んでもよい。例えば、入出力デバイス（１０５０）には、ユーザへ情報を表示するための液晶ディスプレイ（ＬＣＤ）モニター、ユーザがコンピュータ（１０００）に入力することができるキーボードおよびマウス、または、入出力両用のタッチスクリーンなどのディスプレイデバイスが含まれてもよい。
【００４１】
本明細書中で議論されたシステムおよび装置のうちのいずれかまたはその全てには、パーソナルコンピュータ、タブレットコンピュータ、携帯端末、携帯電話、サーバー、データベース、クラウドコンピューティング環境およびその構成要素が含まれるが、これはコンピュータ（１０００）などのコンピュータを使用して実行されてもよい。
【００４２】
実際のコンピュータまたはコンピュータシステムの実施が、他の構造を有することがあり、同様に他の構成要素を含んでもよく、そして図１０が、そのようなコンピュータのいくつかの構成要素の、例証を目的とするハイレベルな表現であることを、当業者は認識するだろう。
【００４３】
本発明の好ましい実施形態の前述の説明は、例示および説明のために提示されたものである。包括的であること、または、開示された正確な形態に本発明を限定することを意図するものではない。上記教示に照らして、多くの修正および変形が可能である。本発明の範囲は、この詳細な説明に限定されるものではなく、添付の特許請求の範囲および添付の特許請求の範囲の均等物によって限定されることが意図される。
【図１】
2018523218.tif 000003
【図２】
2018523218.tif 000004
【図３】
2018523218.tif 000005
【図４】
2018523218.tif 000006
【図５】
2018523218.tif 000007
【図６】
2018523218.tif 000008
【図７】
2018523218.tif 000009
【図８】
2018523218.tif 000010
【図９】
2018523218.tif 000011
【図１０】
2018523218.tif 000012
【手続補正書】
【提出日】平成29年1月27日(2017.1.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ソフトウェアを修正する方法であって、該方法は：
コンピューティングデバイスにおいて、
ａ．バイナリ命令、１つ以上のユーザの修正選択肢、および、１つ以上の修正選択肢に関連するバイナリコードを含む、ソフトウェアアプリケーションバイナリを受信する工程と；
ｂ．前記バイナリ命令への１つ以上の修正が必要かどうか判断するために、ソフトウェアアプリケーションバイナリを分析する工程と；
ｃ．バイナリ命令への修正が必要な場合に、１つ以上の修正選択肢に従って自動的にバイナリ命令を修正する工程であって、バイナリ命令を修正する工程は、１つ以上の修正選択肢に関連するバイナリコードをソフトウェアアプリケーションバイナリに挿入する工程、１つ以上のバイナリ命令をソフトウェアアプリケーションバイナリから消去する工程、または、ソフトウェアアプリケーションバイナリの中の１つ以上のバイナリ命令を無効にする工程を含む工程と；
ｄ．既存のメタデータを消去し、かつソフトウェアアプリケーションバイナリに新しいメタデータをインジェクトする工程であって、それにより修正されるソフトウェアアプリケーションバイナリを生成する、工程と；
ｅ．修正されたソフトウェアアプリケーションバイナリをコンパイルする工程と；および、
ｆ．修正されたソフトウェアアプリケーションバイナリを返す工程と、を含むことを特徴とする、ソフトウェアを修正する方法。
【請求項２】
１つ以上の修正選択肢は、ソフトウェア開発キット、ライブラリ、コード断片、テキスト、およびインターフェースをプログラミングするアプリケーションからなる群から選択される、１つ以上の命令タイプの追加、消去、無効化、および、修正を含むことを特徴とする、請求項１に記載のソフトウェアを修正する方法。
【請求項３】
アセンブリ命令への修正が必要かどうか判断するために、ソフトウェアアプリケーションバイナリおよび１つ以上の修正選択肢を分析する工程をさらに含み、アセンブリ命令への修正が必要な場合、次に、ユーザの１つ以上の修正選択肢に従って、バイナリ命令をアセンブリ命令へ逆アセンブルする工程、およびアセンブリ命令を修正する工程を含むことを特徴とする、請求項２に記載のソフトウェアを修正する方法。
【請求項４】
ソースコードへの修正が必要かどうか判断するために、ソフトウェアアプリケーションバイナリおよび１つ以上の修正オプションを分析する工程をさらに含み、ソースコードへの修正が必要な場合、次に、ユーザの１つ以上の修正選択肢に従って、アセンブリ命令をソースコード命令へ逆コンパイルする工程、および、ソースコード命令を修正する工程を含むことを特徴とする、請求項３に記載のソフトウェアを修正する方法。
【請求項５】
ソフトウェアアプリケーションバイナリのメタデータを受信する工程をさらに含み、ソフトウェアアプリケーションバイナリを分析する工程は、メタデータを分析する工程をさらに含み、バイナリ命令を修正する工程はさらに、メタデータに基づく、ことを特徴とする、請求項４に記載のソフトウェアを修正する方法。
【請求項６】
修正されたソフトウェアアプリケーションバイナリを返す前にデジタルキーを使用して、修正されるソフトウェアアプリケーションバイナリに署名する工程をさらに含む、ことを特徴とする、請求項５に記載のソフトウェアを修正する方法。
【請求項７】
ソフトウェアアプリケーションバイナリを受信する工程は、ユーザからアプリケーションバイナリを受信する工程、アプリケーションバイナリをアップロードする工程、またはアプリケーションバイナリをオンラインアプリケーションマーケットプレイスからダウンロードする工程、からなる群から選択されることを特徴とする、請求項６に記載のソフトウェアを修正する方法。
【請求項８】
ソフトウェアアプリケーションバイナリを返す工程は、ダウンロードのためにソフトウェアアプリケーションバイナリを提供する工程、デバッグおよびサービス改善のためにソフトウェアアプリケーションへのアクセスを提供する工程、および、アプリケーションバイナリをオンラインアプリケーションマーケットプレイスに公開する工程、からなる群から選択されることを特徴とする、請求項７に記載のソフトウェアを修正する方法。
【請求項９】
非一時的なコンピューター可読ストレージ媒体であって、その中に命令を格納し、命令がコンピューティングデバイスによって実行された時、コンピューティングデバイスに：
ａ．バイナリ命令、１つ以上の修正選択肢、および、１つ以上の修正選択肢に関連するバイナリコードを含む、ソフトウェアアプリケーションバイナリを受信させ；
ｂ．前記バイナリ命令への修正が必要かどうか判断するために、ソフトウェアアプリケーションバイナリを分析させ；
ｃ．バイナリ命令への修正が必要な場合に、１つ以上の修正選択肢に従って自動的にバイナリ命令を修正させ、バイナリ命令の修正は、１つ以上の修正選択肢に関連するバイナリコードをバイナリ命令に挿入すること、１つ以上のバイナリ命令をソフトウェアアプリケーションバイナリから消去すること、または、ソフトウェアアプリケーションバイナリの中の１つ以上のバイナリ命令を無効にすることを含み；さらに前記コンピューティングデバイスに、
ｄ．既存のメタデータを消去し、かつソフトウェアアプリケーションバイナリに新しいメタデータをインジェクトし、それにより修正されるソフトウェアアプリケーションバイナリを生成させ；
ｅ．修正されたソフトウェアアプリケーションバイナリをコンパイルさせ；かつ、
ｆ．修正されたソフトウェアアプリケーションバイナリを返させる、
ことを特徴とする、非一時的なコンピューター可読ストレージ媒体。
【請求項１０】
１つ以上の修正オプションは、ソフトウェア開発キット、ライブラリ、コード断片、テキスト、およびインターフェースをプログラミングするアプリケーションからなる群から選択される、１つ以上の命令タイプの追加、消去、無効化、または、修正を含むことを特徴とする、請求項９に記載の非一時的なコンピューター可読ストレージ媒体。
【請求項１１】
アセンブリ命令への修正が必要かどうか判断するために、ソフトウェアアプリケーションバイナリおよび１つ以上の修正選択肢を分析する命令をさらに含み、アセンブリ命令への修正が必要な場合、次に、アプリケーションバイナリ命令をアセンブリ命令へ逆アセンブルし、およびアセンブリ命令を修正することを特徴とする、請求項１０に記載の非一時的コンピューター可読ストレージ媒体。
【請求項１２】
ソースコードへの修正が必要かどうか判断するために、ソフトウェアアプリケーションバイナリおよび１つ以上の修正選択肢を分析する命令をさらに含み、ソースコードへの修正が必要な場合、次に、アセンブリ命令をソースコード命令へ逆コンパイルし、および、ソースコード命令を修正することを特徴とする、請求項１１に記載の非一時的コンピューター可読ストレージ媒体。
【請求項１３】
ソフトウェアアプリケーションバイナリのメタデータを受信する命令をさらに含み、ソフトウェアアプリケーションバイナリの分析は、メタデータの分析をさらに含むことを特徴とする、請求項１２に記載の非一時的コンピューター可読ストレージ媒体。
【請求項１４】
デジタルキーを使用して、修正されるソフトウェアアプリケーションバイナリに署名する命令をさらに含むことを特徴とする、請求項１３に記載の非一時的コンピューター可読ストレージ媒体。
【請求項１５】
ユーザインターフェースをさらに含み、ユーザインターフェースは、ユーザが１つ以上の修正選択肢を選択するために、複数の修正オプションを提供することを特徴とする、請求項１４に記載の非一時的コンピューター可読ストレージ媒体。
【国際調査報告】
2018523218.tif 000013