昨日、友人から送られてきたWeChatの公開プラットフォームのソースコードの asp.net 版を受け取りました。
今日は開いて中身を見てみたいと思います。まずはデータベースをSQL Server 2008に接続します。
次にプロジェクトを開き、crtl+F5を実行してウェブプロジェクトを実行します。以下の図に示されています:
そこですぐにデータベースの管理者テーブルdt_manager確認したところ、管理者アカウントは管理者アカウントでしたが、パスワードが何で暗号化されているのかは知りませんでした。私は初心者だったからです
1 1 1 管理者 77F992940A0EFD8025F5571B133BA6D5 28LH48 スーパー管理者13800138000 123@qq.com 0 2013-12-04 01:53:36.000 1000000 0 888 12 186 NULL 0 0
まずmd5のウェブサイトに入力して復号化します
Mu Youは見つけて、123456、admin、123、admin888などよく使われるパスワードをいくつか試しましたが、それでもログインできませんでした
残念ながら、ソースコード asp.net 確認してみると、以下のように暗号化されていることがわかりました:
- public Model.manager GetModel(string user_name, string password, bool is_encrypt)
- {
- //检查一下是否需要加密
- if (is_encrypt)
- {
- //先取得该用户的随机密钥
- string salt = dal.GetSalt(user_name);
- if (string.IsNullOrEmpty(salt))
- {
- return null;
- }
- //把明文进行加密重新赋值
- password = DESEncrypt.Encrypt(password, salt);
- }
- return dal.GetModel(user_name, password);
- }
コードをコピーします
一般的に、まずユーザーテーブルにユーザーのソルト値が存在すると判断され、もし存在する場合は、ユーザーが入力したパスワードとデータベースから得られたソルト値が使用されます
DESEncrypt暗号化されています。(私もよくわかりませんが)DESEncryptとは何ですか?次に、暗号化されたパスワードとユーザーをDALに入れます。 GetModeメソッド、
再度判断すると、メソッドにはselect文があり、コードは以下の通りです。
- /// <summary>
- /// 根据用户名密码返回一个实体
- /// </summary>
- public Model.manager GetModel(string user_name, string password)
- {
- StringBuilder strSql = new StringBuilder();
- strSql.Append("select id from " + databaseprefix + "manager");
- strSql.Append(" where user_name=@user_name and password=@password and is_lock=0");
- SqlParameter[] parameters = {
- new SqlParameter("@user_name", SqlDbType.NVarChar,100),
- new SqlParameter("@password", SqlDbType.NVarChar,100)};
- parameters[0].Value = user_name;
- parameters[1].Value = password;
- object obj = DbHelperSQL.GetSingle(strSql.ToString(), parameters);
- if (obj != null)
- {
- return GetModel(Convert.ToInt32(obj));
- }
- return null;
- }
コードをコピーします
このパスワードの復号方法がわからないので、データベースから暗号化されたパスワードを置き換えます! ガラガラ
C#はパスワードの場所にブレークポイントを設定します。以下の図に示されています:
暗号文がEB51565598856A17 123456、決定的にデータベースに行き、更新文に置き換えます
ログイン成功!
|