어제 친구가 보내준 위챗 공개 플랫폼 소스 코드 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을 알려주지 않음
먼저 md5 웹사이트에 넣어 복호화하세요
무 유가 찾았고, 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 된 후 단호하게 데이터베이스로 가서 업데이트 문으로 교체합니다
로그인 성공!
|