PCマイクロチャネルの逆解析のバイパスアクセスSQLiteのデータベースの暗号化

PCマイクロチャネルの逆解析のバイパスアクセスSQLiteのデータベースの暗号化


著者:zmrbak(趙清明教師)


はじめに:


マイクロ手紙は間違いないが、最も一般的なソフトウェアアプリケーションで、社会的な分野での優位性にはまだ振ることができるものではありません!それは大きなコーナーテンセントソフトウェア帝国を保持するが、テンセントは、まず中国のインターネットの巨大BATターに誇らしげに立って作るのに十分なだけではありません。微信は世界を変えて、テンセントは多くの良いプログラマの夢先となっています。ソフトウェアの周りに延びるマイクロチャネルは、テンセントはまた、無私、世界で約100優れたオープンソースプロジェクトのコードを貢献しました。


古来、巨人のいずれか1つが、巨人の前の世代の肩の上に立っていると、新しい巨大に成長します。そうBaiduの、そうアリ、テンセントも同様です。SQLiteのデータベース、あまりよく知られているが、オープンソースのデータベースで使用される以上1000000000000台のデバイスを持っている人々の生活のあらゆる側面を浸透させています。現在、以上の11億アクティブマイクロ信号、すべての時間と隠されたパワーの名前のSQLiteのデータベースで踊ります。


マイクロチャネルの巨大な成功のために、これモルモットクエストの多く取りつかれ技術になってきて。同様に、深いマイクロチャネル名声SQLiteデータベース内に埋め込まれ、これらの人々は、他の解剖学的対象となります。次に、当社のツールは準備ができている、私たちは秘密を詮索するために協力しましょう!


マイクロチャネル・データベース


それがインストールされているかどうかのマイクロチャネル動作は、平均的なユーザーが文字を認識していないとき、実際にマイクロ未知のSQLiteデータベースがあります。でも、インストールディレクトリマイクロ手紙の中で、あなたは、説明をSQLiteのデータベースの任意の説明を見つける、そして感謝しません(ライセンス契約のSQLiteを、SQLiteは販売製品に名前を許可していません)が、ユーザーのフォルダの下に(C:\ Users \ユーザーXXXXXX \ドキュメント\微信ファイル\ XXXX \メッセージ\)は、DBファイル拡張子の山を残します。慎重な探検家、任意の手がかりを残しマイクロ手紙のために、クエストは重要な手がかりになります。


DBファイルは、プロセスが暗号化されています。あなたが疑われる場合であっても、それは、SQLiteのデータベースファイルですが、任意のSQLiteマネージャーで開くことができません。マイクロ文字のパスワードを探しに行く、その後、一定の削減を解読するためのツールを使用するためにあなたを伝えるために多くのオンラインの記事がありますが。これらのツールは既に手遅れ、実際には、あなたが本当に成功した訪問、その後、パスワードを取得して、復号化を完了することができたとしても、半分ビートを奇妙な様々な問題を話すことはありません。もちろん、あなたがそれらのトッププログラマ、テンセントを信じるように持って、ソフトウェアの機能と性能の場合には、障害物のエンクワイヤラーのこれらの種類のために設定されることを保証します。少なくとも我々は、これらのDBファイルがしかの暗号化処理の後、実際にSQLiteデータベースであることを知っています。


スヌープSQLiteデータベース


SQLiteのデータベースは、誰もが自由に、そのソースコードを取得し、それを研究、分析し、もちろん、変更することができることを意味し、オープンソースソフトウェアです。あなたが公式のSQLiteへのあなたの「貢献」の内容を変更したい場合は、あなたが「著作権」を修正するこれらのコードを放棄宣言する必要がありますが、コードは基本TOTOをご提供していませんが、自分自身の公式SQLiteのことで標準オーバーライドA(オープンソースが、オープンはしません)。あなたがあなた自身の使用を変更したい場合はもちろん、それはあなたがそれを好きな、SQLiteの公式はあなたにお金を見つけることができませんでした。そうであっても、グラム---○ - ○ - G - L - eはまだ、もちろん国内のテンセントの、毎年巨額のスポンサーにアリをSQLiteのを与え、これらの巨人も寛大です。このソフトウェアは、ソースコードを含むすべてのは、自由でオープンを含め、彼らのサポートのために巨人が多いため、SQLiteのはあなたにお金を請求していない場合でも、それは生きているともあろう。ライセンスを購入する支払う必要がある場合は、それはバーを買うために$ 6,000費やすだろう、当局はお金が継続的な改善とSQLiteのサポートの資金を調達するために使用されると述べました。


それは、オープンソースのSQLiteデータベースですが、また、マイクロ文字のチームからの暗号化を要求し、それがマイクロチャネルと一緒に勉強しますので、よりエキサイティングです。マウントSQLiteの公式ホームページは、http://www.sqlite.org、あなたが何かをつかむためのSQLiteのさまざまなバージョンの誕生以来、いつでも研究の20年近くですることができます。サイトであり、様々な例であり、どのようにあなたが望むなら、あなたはそれは、このウェブサイトを通じて詳細と詳細な実装のすべての種類の終わりだということを理解することができますSQLiteデータベース、すべての種類の詳細な説明を使用する方法を教えます。ウェブサイトは、中国語版を提供していませんでしたが、しかし、ブラウザでの翻訳、言語の障壁ではない、それはあなたがかなり近い知らせることができます。


簡単な例のSQLite


あなたはSQLiteのデータベースを使用する方法がわからない場合は、TCLは、サイト上でC言語でサンプルコードとサンプルコードを提供します。さて、次のサンプルコードの抜粋C(ソースコードします。https://www.sqlite.com/quickstart.html)。


01の#include <stdio.hに>

02の#include <sqlite3.h>

03  

04静的int型のコールバック(void *型はNOTUSED、int型のargc、char型** argvの、文字** azColName){

05 INT I;

06(I = 0、I <ARGC; I ++){

07のprintf( "%S =%S \ n" は、azColName [i]は、ARGV [I]のargv [I]: "NULL")。

08}

09のprintf( "\ n");

10リターン0;

11}

12  

13 INTメイン(int型ARGC、チャー** ARGV){

14のsqlite3の*デシベル。

15のchar * zErrMsg = 0。

16 int型のrc。

17  

18(ARGC!= 3)であれば{

19関数fprintf(stderrに、 "使用法:%sのデータベースSQL文\ n" は、ARGV [0])。

20リターン(1)。

21}

22 RC = sqlite3_open(ARGV [1]、&DB)。

23(RC)であれば{

24関数fprintf(stderrに、 "を開けませんデータベース:%sの\ n" は、sqlite3_errmsg(デシベル));

25 sqlite3_close(DB)。

26リターン(1)。

27}

28 RC = sqlite3_exec(DB、ARGV [2]、コールバック、0、&zErrMsg)。

29(RC!= SQLITE_OK)の場合{

30関数fprintf(stderrに、 "SQLエラー:%S \ n" は、zErrMsg)。

31 sqlite3_free(zErrMsg)。

32}

33 sqlite3_close(DB)。

34リターン0。

35}


例は非常にシンプルで、非常に最適です。私たちの目的は、探求し、研究、私たちは必ずプログラム例の場合に利用できることを確認して、その後、流線に続けることですので。私たちはいくつかのコアを残し、多くのコードを削除しました:


01の#include <stdio.hに>

02の#include <sqlite3.h>

03  

04静的int型のコールバック(void *型はNOTUSED、int型のargc、char型** argvの、文字** azColName){

06(INTがI = 0、I <ARGC; I ++){

07のprintf( "%S =%S \ n" は、azColName [i]は、ARGV [I]のargv [I]: "NULL")。

08}

10リターン0;

11}

12  

13 INTメイン(int型ARGC、チャー** ARGV){

14のsqlite3の*デシベル。

22 sqlite3_open(ARGV [1]、&DB)。

28 sqlite3_exec(DB、ARGV [2]、コールバック、0、&zErrMsg)。

33 sqlite3_close(DB)。

34リターン0。

35}


メイン関数の先頭でスタートは、最初のデータベースへのハンドルとしてsqlite3のDBを定義し、実行は、その後、データベースを開くsqlite3_close近いデータベースをsqlite3_exec最終的な性能を実行するためにデータベースを照会sqlite3_openてみましょう。クエリの結果を処理するためのコールバック関数コールバックを使用して、sqlite3_exec実行中。これは完全なプロセスです。


データベースを開くSqlite3_open、相対的なパリティはシステムリソースを消費する多くの操作を実行するには、この操作を実行します。常にクエリデータベースへの操作時にソフトウェアは、データベースを変更する場合は、最良の方法は、閉店時間までは閉じないでください開き、ソフトウェアのデータベースをシャットダウンすることです。これは、データベースの応答速度を向上させることがあり、システムリソースを節約することができます。


暗号化されたアクセスのSQLiteデータベースをバイパス


データベースは、パスワード、または他のより強力な方法暗号化されたデータベースの使用を追加するかどうか、データベースが不正な操作を防止するためのものではありません。アプリケーションが閉じられるまでは、パフォーマンスベース、オープンなアプリケーションソフトウェアのSQLiteデータベースを考慮して、唯一の、唯一のデータベースを閉じます。だから、全体のアプリケーションソフトウェア実行されている間に、開かれたSQLiteデータベースたら、開いたままになります。つまり、上記の例デシベルでは、プログラムはsqlite3_close関数の前に呼び出されていない、クエリsqlite3_exec機能を受け入れる準備ができて、効果的でした。このクエリは、選択するために参照するが、すべての可能なSQL文を参照しません。我々は唯一の「非破壊」を議論するなど、変更(UPDATE)、削除(DELETE)、(INSERT)を増加させるなどの破壊的な操作を、議論し、「チェック」(SELECT)操作しないでください。


認証データベースを暗号化し、多くの場合だけでデータベースを開いたときにデータベースがオープンされると、操作の残りの部分は暗号化された検証ではないこと。データベースがオープンしているためので、私たちはあなたはsqlite3_exec関数に「違法」と呼ぶことができ、この値を取得DB、待っています、我々は、操作を実行するために期待しています。あなたがこれを行う場合は、関係なく、ソフトウェア設計者の設計のいずれかの暗号化は、役に立ちません。言い換えれば、我々は簡単に「アクセスのSQLiteデータベースにバイパス暗号化に。」を達成することができます


達成するために、「SQLiteデータベースにアクセスするための回避暗号化、」三つの問題を解決する必要性が続きます。

  • 特定の値を取得する方法オープンハンドルのデータベースDBのを持っていますか?

  • どこsqlite3_exec関数は違法で呼び出されることができますか?

  • 不法sqlite3_exec関数を呼び出す方法?


次に、私たちはこれらの三つの問題を解決するために回してみましょう。


データベースを開くためのハンドルを取得する方法?


あなたが前方思考からプログラミングを考えるなら、それは答えていないようです。パラメータデシベルであるsqlite3_open機能を呼び出すときしかし、逆の発想ならば、あなたは見つけるでしょう、それは実際には非常に簡単です、これのデシベル値は、我々はデータベースへのハンドルをオープンしようとしているということです。したがって、この問題はsqlite3_open関数と呼ばれるもので、に変身しました。だから、限り、我々は、呼び出し元の関数の後sqlite3_openとして、すぐデシベルの値を取得し、この問題が解決されます。


あなたはODまたはIDAを使用した場合、あなたが知っている、これらのソフトウェアは、プログラムが関数を呼ぶもので、あなたが分析に役立つことができ、すべての場所の呼び出しは、あなたがそれを分析することができます。一般的に簡単なデータだけTannangquwuへのアクセスとして、インラインフックを結合した場合。


私たちは、sqlite3_open関数を呼び出すときに、ファイルを開くためにバインドされていることを知っています。Windowsシステムでは、Windowsは、必然的にCreateFileW関数を呼び出しますが、この機能はOD、IDAや他の有害なツールで認識することができます。このように、道を押し下げることで、あなたはsqlite3_open機能を見つけるために、それに従うことができるようになります。ODの動的なデバッグ場合は、見つけることは非常に簡単sqlite3_openすること、また、この機能を見つけるコードセグメントと呼ばれることができ、また直接特定のメモリアドレスの値を観察することができます。そのため、DBの値は簡単にアクセスすることができます。あなたがいる限り、プログラムがsqlite3_open関数を呼び出して、インラインフックを記述する必要がある場合は、すぐにデシベルの値を取得することができます。


どこsqlite3_exec機能?


ソフトウェアで頻繁に実行するSQL文の一部が、パッケージング機能の数のsqlite3_exec機能、プログラマがより簡単なSQL文を実行することができます。そのため、アプリケーションソフトウェアsqlite3_exec関数呼び出しが多数存在します。これは、開始点であることを起こります。


実際には、DWORDで、2番目の引数は、SQL文で、データベース・ハンドルsqlite3_exec関数であるが実行される最初のパラメータには、アドレスが実際に文字列です。これらの文字列は、多くの場合、手動のプログラミング時間を書くプログラマ、およびソフトウェアに埋め込まれており、これらの文字列のODは、IDAおよびその他のソフトウェアを容易に識別することができます。したがって、find関数のエントリポイントになってきて。


たとえば、SQL文を見つけるために、ソフトウェアのように、あなたは、単にアプリケーションソフトウェアのどの特定のアドレスを決定するためにsqlite3_exec関数に移動することができます「SELECT * FROM」。


sqlite3_exec呼び出す方法


今、私たちはデータベースのデシベル値を処理するために持っているが、sqlite3_execとアドレスを発見したことを、我々はsqlite3_execこの関数を呼び出すために「違法」に来ることができます。まず、この機能に必要なパラメータで見てみましょう:


sqlite3_exec(DB、ARGV [2]、コールバック、0、&zErrMsg)。


2番目のパラメータは、SQL文のクエリです。私たちは、このような「sqlite_master SELECT * FROM」として、SQLに文字列を定義することができます。この文ので、データベース構造を照会するために使用されているので、任意のSQLiteデータベースに正常に実行することができます。もちろん、あなたもあなた自身の好みのSQL文のいずれかを書き込むことができます。情報を照会できるようになることを確実にするために、我々はこの文字列を使用します。


3番目のパラメータは公式SQLiteのコード例を参照して、コールバック関数です。


四番目のパラメータは、あなたが直接、0またはNULLを埋めることができ、コールバック関数のパラメータがない場合は、提供され、または必要性が提供されていません。


5番目のパラメータは、実行はされていない場合、あなたは0またはNULLで埋めることができ、エラーメッセージを返します。


私達はちょうどソフトウェアのみでsqlite3_execアドレスを見つけましたが、アドレスは関数ではありません、我々は直接文字sqlite3_execは、この関数を呼び出すことができません。しかし、我々はまた、「機能」ポインタモードで呼び出すことができ、組み込みC言語でコンパイルされ、この関数を呼び出すことができます。アセンブリ言語、非常に直感的ではない、と関数ポインタのため、使用することは、より良い方法です。


私たちは、SQLiteのsqlite3_exec関数からソースコードを見つけ、それをコピーし、その後、いくつかの変更を行います。最初の文字がSqlite3_exec、プラスのtypedefを大文字Sqlite3_exec、__ cdecl規約*、パラメータ、パラメータがDWORDを変更し、その後デシベル形状を削除します。


typedef int型(__ CDECL * Sqlite3_exec)(

  DWORD、/ *データベースにSQLの実行* /

  CONSTのchar *、/ * SQLを実行させます* /

  sqlite3_callback、/ *呼び出し、このコールバック・ルーチン* /

  無効*、/ * xCallback()の第一引数* /

  ここでのchar ** / *書き込みエラーメッセージ* /

);


sqlite3_execアドレスの場合:0x12345678の、そして私たちは定義して呼び出すことができます。


Sqlite3_ EXEC p_Sqlite3_ EXEC =(Sqlite3_ EXEC)0x12345678の。

p_Sqlite3_ EXEC(DB、ZSQL、コールバック、0、0);


営業成績の例


 4.png

1.png

2.png

3.png

 

 要約:


多くの人々はそれが密なアセンブリコードの質量、Cコードの文字列だけでなく、電子の奇妙なスタイル言語によって脅迫され、最初の接触を逆転します。私はよく「エンジニアにそれを逆転することは困難である?。」、尋ねています 私はまた、古典的な答えを引用:「世界で何が困難を持っていない、ほとんど誰、それは持ち運びが簡単Zheyiに難しいです;ない、それは持ち運びがほとんど簡単です!」


あなたは1つの答えを見たときに逆解析では、プレイ推測活動として、ゆっくりと本体だけの人々が彼らの興奮と楽しさを楽しむことができている時に出現しました。観客として、この楽しい体験を見逃すことはありません。あなたは、あなたと私たちを一人ではありません。一緒にこの楽しいクイズ活動をプレイし、私たちのQQ交換基456197310に参加。


ソースを共有

https://github.com/zmrbak/SQLiteReverse



QQ交換基:

456 197 310 グループチャットソフトウェアの逆解析[エントリ]を結合するためのリンクをクリックしてください


おすすめ

転載: blog.51cto.com/12888393/2463972