吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5801|回复: 36
收起左侧

[CTF] 学破解第138天,《攻防世界crypto练习区flag\_in\_your\_hand1》学习

  [复制链接]
小菜鸟一枚 发表于 2021-8-11 23:11

学破解第138天,《攻防世界crypto练习区flag_in_your_hand1》学习

前言:
  从小学到大专(计算机网络技术专业),玩过去的,所以学习成绩惨不忍睹,什么证书也没考,直到找不到工作才后悔,不知道怎么办才好。

  2017年12月16日,通过19元注册码注册论坛账号,开始做伸手党,潜水一年多,上来就是找软件。(拿论坛高大上的软件出去装X)

  2018年8月10日,报名了华中科技大学网络教育本科(计算机科学与技术专业)2018级秋季。(开始提升学历)

  2019年6月17日,不愿再做小菜鸟一枚,开始零基础学习破解。(感谢小糊涂虫大哥在我刚开始学习脱壳时,录制视频解答我的问题)

  2020年7月7日,感谢H大对我的鼓励,拥有了第一篇获得优秀的文章。(接下来希望学习逆向,逆天改命)

  2021年8月11日,华科学位英语2次不过,仅取得了毕业证书,学业提升失败,开始琢磨考注册类和职称类证书,谋求涨薪

  坛友们,年轻就是资本,和我一起逆天改命吧,我的学习过程全部记录及学习资源:https://www.52pojie.cn/thread-1278021-1-1.html
立帖为证!--------记录学习的点点滴滴

0x1下载文件

  1.下载CM,是一个压缩包,解压后发现由1个html和1个js文件构成。

  2.浏览器中打开html文件,如下图所示:
https://z3.ax1x.com/2021/08/11/faOtit.png

  3.发现就是输入token,点击get flag按钮得到flag。

0x2跟踪分析

  1.既然是前端代码,我们就用记事本打开看看源码,找到get flag按钮触发的函数

<input type="button" value="Get flag!" onclick="getFlag()" />

找到getflag()函数

function getFlag() {
    var token = document.getElementById("secToken").value;
    ic = checkToken(token);
    fg = bm(token);
    showFlag()
}

前面两个我们先不管,看showFlag()函数

function showFlag() {
    var t = document.getElementById("flagTitle");
    var f = document.getElementById("flag");
    t.innerText = !!ic ? "You got the flag below!!" : "Wrong!";
    t.className = !!ic ? "rightflag" : "wrongflag";
    f.innerText = fg;
}

  2.百度一下!!啥意思,!!判断是否为空,后面?:和学C语言时的三目运算符一样,我们发现ic必须为true(非空),才能输出flag,接下来回到前面去找哪里决定了ic的值。

ic = checkToken(token);

去看看checkToken函数

function checkToken(s) {
    return s === "FAKE-TOKEN";
}

尝试输入FAKE-TOKEN,点击按钮,发现还是不对

  3.接下来怎么办呢?显然ic的值在调用showFlag函数之前肯定被设置为FALSE了,在js文件中搜索ic这个变量,找到赋值为FALSE的地方,类似OD中的关键跳。

function ck(s) {
    try {
        ic
    } catch (e) {
        return;
    }
    var a = [118, 104, 102, 120, 117, 108, 119, 124, 48,123,101,120];
    if (s.length == a.length) {
        for (i = 0; i < s.length; i++) {
            if (a[i] - s.charCodeAt(i) != 3)
                return ic = false;
        }
        return ic = true;
    }
    return ic = false;
}

而s就是我们输入的token,那么问题的关键就在于这个函数了。

  4.看不看得懂不要紧,以彼之矛攻彼之盾嘛,百度与charCodeAt相反的函数是fromCharCode,直接把它的代码改成:

    var a = [118, 104, 102, 120, 117, 108, 119, 124, 48,123,101,120];
    for (i = 0; i < a.length; i++) {
         var s = a[i] - 3;
         console.log(String.fromCharCode(s));
    }

复制粘贴丢进控制台执行一下,结果如图所示:
https://z3.ax1x.com/2021/08/11/fdpzg1.png

  5.得到token:security-xbu,输入token,得到flag。
https://z3.ax1x.com/2021/08/11/fd90VU.png

0x5总结

  1.以结果为导向,反向追踪,层层回溯,定位关键点
  2.遇到不认识的代码和函数,利用百度搜索,明白函数的作用和使用方法
  3.利用数学思维a - b = 3,可以等价转换成 b = a - 3

0x6参考资料

1.js中!和!!的区别及用法
2.JavaScript fromCharCode() 方法

  PS:善于总结,善于发现,找到分析问题的思路和解决问题的办法。虽然我现在还是零基础的小菜鸟一枚,也许学习逆向逆天改命我会失败,但也有着成功的可能,只要还有希望,就决不放弃!

免费评分

参与人数 23威望 +1 吾爱币 +35 热心值 +21 收起 理由
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
nnicetry + 1 + 1 我很赞同!
ddh0591189 + 1 我很赞同!
Stoneone + 1 我很赞同!
wyd66 + 1 + 1 天行健,君子自强不息!
b000d + 1 + 1 谢谢@Thanks!
zyq001 + 1 谢谢@Thanks!
xianyuamiao123 + 1 热心回复!
唯美孤独 + 1 + 1 每个努力的人 终究都会成功的!
cyw_ly + 1 + 1 我很赞同!
Tortrix + 1 我很赞同!
☆茗记★ + 1 + 1 谢谢@Thanks!
cs10e520 + 1 我很赞同!
唯爱丶雪 + 2 + 1 用心讨论,共获提升!
zenlsp + 1 用心讨论,共获提升!
艺举成名 + 1 + 1 用心讨论,共获提升!
娟然俊逸 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
woyucheng + 1 + 1 谢谢@Thanks!
sdaza + 1 热心回复!
lingyun011 + 1 用心讨论,共获提升!
andi526 + 1 我很赞同!
Sky℃ + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
夏寒 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

maoweikang 发表于 2021-8-12 09:49
论坛处处是高手,学习永远无止境!感谢分享过程。
RainGoal 发表于 2021-8-11 23:25
ww12 发表于 2021-8-11 23:31
Sky℃ 发表于 2021-8-12 00:00
像小菜同志学习,加油兄弟
蓝纹鲸 发表于 2021-8-12 00:26
可以呀.兄弟
nug 发表于 2021-8-12 00:26
楼主加油 厉害~
lmyx2008 发表于 2021-8-12 06:19
学无止境
SuperGround 发表于 2021-8-12 07:14
佩服楼主,考双手吃饭,打工不丢人
CCQc 发表于 2021-8-12 07:20
论坛处处是高手,学习永远无止境!感谢分享过程。
xqsquare 发表于 2021-8-12 07:51
加油,兄弟。只要肯下力气和功夫,一定能成功的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 02:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表