크랙 대상: asp 트로이 목마의 암호화된 로그인 비밀번호를 크랙하고, asp 트로이 목마의 비밀번호를 크랙합니다. 트로이목마 버전에 대한 설명이 없어서 구체적인 트로이목마 이름을 알 수 없습니다.
크래킹 방법에는 두 가지가 있습니다. 암호문을 암호화된 비밀번호로 바꾸는 것과 암호문과 암호화 알고리즘을 사용하여 암호를 해독하는 것입니다. 전자는 실제로 전혀 균열이 아닙니다.
크래킹의 목적: 단지 재미를 위한 것입니다.
ASP 소스 코드를 얻을 수 없으면 비밀번호를 해독할 기회가 없습니다. 중국의 한 친구는 웹페이지에 접속했지만 홈페이지를 수정할 수 없었다고 말했습니다. 그는 그 페이지에 ASP 트로이목마가 있지만 비밀번호가 암호화되어 있다는 사실을 발견했습니다. 그러면 이 애니메이션이 있습니다. 좋아요, 말도 안되는 내용이 너무 많으니 준비하세요. 설명이 꽤 길어질 것입니다.
ASP Trojan 로그인 비밀번호 확인을 위한 키코드는 다음과 같습니다.
if Epass(trim(request.form("password")))="q_ux624q|p" 그러면
response.cookies("password")="8811748"
...
<%
선택 종료
함수 Epass(통과)
temppass=StrReverse(왼쪽(pass&"zxcvbnm,./",10))
Templen=len(패스)
mmpassword=""
j=1 ~ 10인 경우
mmpassword=mmpassword+chr(asc(mid(temppass,j,1))-templen+int(j*1.1))
다음
Epass=replace(mmpassword,"'","B")
함수 종료
%>
당연히 Epass 함수를 사용하여 입력된 비밀번호를 암호화한 후, 획득한 암호문을 원본 암호문과 비교합니다. 약간의 프로그래밍 기초, 특히 VB가 있다면 Epass의 암호화 알고리즘이 한눈에 명확해질 것입니다. 그렇지 않다면, 제 설명을 듣고 나면 곧 이해하실 것이라고 믿습니다. 함수에서 비밀번호를 보유하는 변수는 pass입니다. pass&"zxcvbnm,./" pass의 내용을 zxcvbnm,./로 연결하여 새 문자열을 얻습니다. left(pass&"zxcvbnm,./",10)은 처음 10자리를 사용합니다. StrReverse 함수는 결과 10자리 문자열의 순서를 반대로 바꿉니다. len(pass)는 비밀번호의 길이를 가져옵니다. 아래는 루프입니다. 획득한 문자열의 각 비트에 대한 Ascii 코드 - 비밀번호 길이 + 반올림(문자 위치 * 1.1)을 가져온 다음 획득한 값을 문자로 변환하고 다시 연결합니다. 마지막으로, 획득한 문자열의 ' 문자를 모두 B로 대체하여 암호문을 생성합니다. 우리가 암호화 알고리즘을 추출하고 원본 암호문을 우리 자신의 것으로 바꾸면 해당 비밀번호도 귀하의 비밀번호가 됩니다. 그러나 내가 말했듯이 이것은 실제로 균열이 아닙니다.
사랑을 입력하면 암호화 과정은 다음과 같습니다.
사랑
lovezxcvbnm,./ '연결
lovezxcvbn '톱 10을 차지하세요
nbvcxzevol '순서가 바뀌었습니다.
N
110(ascii)-4(숫자)+int(1(위치)*1.1)=107
107의 ASCII 코드는 k입니다. 최종 암호문은 다음과 같습니다.
k`ucy|hzts
암호문과 암호화 알고리즘을 통해 비밀번호를 추론할 수 있습니다. 알고리즘의 마지막 단계에서 시작하여 계속해서 작업해 보세요. 마지막 단계는 '를 모두 B로 바꾸는 것입니다. B를 다시 '로 바꿔야 합니까? 대답은 '아니오'입니다. 최종 암호문을 얻을 수 있는 한 비밀번호가 다를 수도 있습니다. B가 10개 있으면 원래 비밀번호의 수는 2의 10승입니다. 원래 비밀번호는 하나뿐이지만 1024개의 비밀번호는 모두 맞습니다. 완벽하게 해독하고 싶다면 모든 조합을 직접 작성해 볼 수 있습니다.
그러면 이 단계를 무시할 수 있습니다.
위의 알고리즘은 매우 명확합니다.
chr(asc(mid(temppass,j,1))-templen+int(j*1.1))
+와 -만 바꾸면 됩니다.
chr(asc(mid(temppass,j,1))+templen-int(j*1.1))
하지만 또 다른 문제가 있습니다. 다행히 비밀번호의 길이를 미리 알 수는 없습니다. 비밀번호가 1~10자리 사이로 너무 깁니다.
그런 다음 1부터 10까지의 루프를 사용하여 가능한 모든 비밀번호를 찾은 다음 StrReverse 함수를 사용하여 순서를 바꿀 수 있습니다.
그렇다면 최종적으로 어떤 비밀번호를 얻었는지 어떻게 알 수 있을까요? pass&"zxcvbnm,./"를 사용하여 비밀번호 끝에 zxvbnm,./의 첫 번째 숫자가 있는지 확인할 수 있습니다.
자, 이것이 진짜 비밀번호입니다. 그러면 비밀번호가 10자리이면 나중에 연결이 되지 않으므로 항상 정확합니다. 그러면 우리는 두 가지 답을 얻을 수 있습니다.
다음은 제가 작성한 복호화 함수입니다.
functionCcode(코드)
Templen1=1 ~ 10의 경우
mm코드=""
j=1 ~ 10인 경우
mmcode=mmcode+chr(asc(mid(code,j,1))+templen1-int(j*1.1))
다음
Ccode=strReverse(mmcode)
response.write "비밀번호"&templen1&":"&Ccode&"<br>"
mid(Ccode,templen1+1,10-templen1)=left("zxcvbnm,./",10-templen1) 및 Templen1<>10이면
결과=왼쪽(Ccode,templen1)
다음
response.write "마지막 비밀번호:"&결과
최종 기능이
준비되었습니다. 이렇게 짧은 시간 내에 알고리즘이 완전히 마스터되지 않을 수 있습니다. 그러면 압축된 패키지에 문서와 암호화 및 해독된 ASP 소스 코드를 첨부해 드리겠습니다. 주의 깊게 연구하십시오. 마찬가지로 비밀번호 10은 항상 정확합니다. 그런 다음 ASP에서 원본 암호문을 가져와서 결과가 어떤지 살펴보겠습니다. 좋습니다. 두 비밀번호를 모두 사용하여 로그인하실 수 있습니다. 테스트를 위해 IIS를 로컬로 가정했습니다. 웹 서버를 로컬로 설정할 수 없는 경우 저에게 연락하여 다른 언어로 작성할 수 있습니다.