IDF-CTF-어렵 지 않 은 js 암호 화 writeup

제목 링크:http://ctf.idf.cn/index.php?g=game&m=article&a=index&id=28지식 포인트:js 암호 화,js 코드 분석,md5 복호화,Unicode/Ascii 코드,정규 표현 식
바로 여기→http://ctf.idf.cn/game/web/28
사고방식:링크 를 누 르 면 창 이 팝 업 됩 니 다.flag 를 입력 하 라 고 요구 합 니 다.F12 를 누 르 면 창 이 암호 화 된 js 코드 로 이 루어 진 것 을 볼 수 있 습 니 다.이 js 코드 를 역장 도구 에 복사 하여 복호화 한 js 코드 를 얻 은 다음 에 그 중의 Unicode 코드 와 Ascii 코드 를 해당 하 는 문자 로 변환 합 니 다.결 과 는 다음 과 같 습 니 다.
<script type = "text/javascript" >
var a = prompt("    flag ,  !", "");
var b = "f3373e36c677750779f5d04ff7885b3e";
var c = /.+_.+_.+/gi;
var d = 0x0;
var e = a.substr(0x8, 0x5);
if ($.md5(e) == b.replace(/7/ig, ++d).replace(/8/ig, d * 0x2)) {
    var f = a.substr(0x0 / d, 0x7);
    if (f.substr(0x5, 0x2) == "js" && $.md5(f.substr(0x0 / d, d + 0x3)) == "d0154d5048b5a5eb10ef1646400719f1") {
        r = a.substr(0xd);
        if (r.charCodeAt(d) - 0x19 == r.charCodeAt(++d) - 0x19 && r.charCodeAt(--d) - 0x19 == r.charCodeAt(--d)) {
            var g = String.fromCharCode(0x4f);
            g = g.toLowerCase() + g.toLowerCase();
            if (r.substr((++d) * 0x3, 0x6) == g.concat("easy") && c.test(a)) {
                d = String(0x1) + String(a.length)
            }
        }
    }
};
if (a.substr(0x4, 0x1) != String.fromCharCode(d) || a.substr(0x4, 0x1) == "z") {
    alert(" ,    。。")
} else {
    alert("    !")
}
< /script>

코드 를 분석 한 결과 변수 a 가 우리 가 요구 하 는 flag 임 을 발견 했다.b.replace(/7/ig,+d).replace(/8/ig,d*0x2)를 거 친 후 변 수 는 b 가 f3313e36c 611150119 f5d04ff 1225 b3e 로 변 했 고 md5 를 통 해 복호화 한 후에 jiami 를 얻 었 습 니 다.이것 이 바로 변수 e 의 값 이 고 e=a.substr(0x8,0x5)입 니 다.이때 변수 d=0x 01,d0154d5048b5a5eb10ef 1646400719 f1 은 md5 복호화 를 통 해 wctf,즉 f.substr(0x0,0x4)='wctf',그리고 f.substr(0x5,0x2)=='js',그리고 f=a.substr(0x0,0x7)를 얻 을 수 있 습 니 다.이렇게 하면 변수 a 의 일부분 을 확정 할 수 있 습 니 다.이때 변수 d=0x1,계속 계산 하면 r=a.substr(13),r.charCodeAt(1)=r.charCodeAt(2),r.charCodeAt(1)-0x 19==r.charCodeAt(0)을 얻 을 수 있 고 세 위치의 대수 관 계 를 얻 을 수 있 습 니 다.이때 변수 d=0x0,g='oo',r.substr(3,6)='ooeasy',c.test(a)에서'진짜'로 flag 를 결합 하면 일반적으로'wctf{...}'의 형식 으로 변 수 를 초보 적 으로 추측 할 수 있 습 니 다 a='wctf{jsjiami_xxooeasy}’。d=123 을 계산 하고 마지막 if 문 구 를 검증 하면 정확 한 추측 을 할 수 있 으 며 조건 은'축하합니다'로 바 뀌 었 습 니 다.

좋은 웹페이지 즐겨찾기