小菜鸟一枚 发表于 2020-7-24 21:06

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

## 学破解第122天,《攻防世界crypto练习区flag\_in\_your_hand》学习
前言:
  从小学到大专(计算机网络技术专业),玩过去的,所以学习成绩惨不忍睹,什么证书也没考,直到找不到工作才后悔,不知道怎么办才好。

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

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

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

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

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

### 0x1下载文件
  1.发现是一个js文件和一个html文件

  2.用浏览器打开运行html文件,出现如下界面


  3.通过观察,我知道要输入flag ,点击按钮验证flag的正确性


### 0x2分析按钮事件
  1.看一下html文件的源码
```
        var ic = false;
        var fg = "";

        function getFlag() {
                var token = document.getElementById("secToken").value;
                ic = checkToken(token);
                fg = bm(token);
                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.很明显的看到了点击按钮触发getFlag函数,ic默认是false,调用checkToken(token)这个函数,那么说明checkToken函数就是关键点了。

  3.打开checkToken函数看看里面的内容,难道说flag就是FAKE-TOKEN,哈哈哈
```
function checkToken(s) {
    return s === "FAKE-TOKEN";
```

  4.然而输入之后还是提示错误,那就只剩fg = bm(token);这句代码有问题了

  5.那还用说,直接进去,搜索一下ic,说明ic肯定是在这面变成false的
```
function ck(s) {
    try {
      ic
    } catch (e) {
      return;
    }
    var a = ;
    if (s.length == a.length) {
      for (i = 0; i < s.length; i++) {
            if (a - s.charCodeAt(i) != 3)
                return ic = false;
      }
      return ic = true;
    }
    return ic = false;
}
```

&emsp;&emsp;6.直接点击左侧图标下断点吧,然后点击按钮,成功的断了下来,发现函数参数s就是我输入的变量,然后比较s和a的长度,接着用s的值减3和a的值相比较,如果都没问题,那么就返回true

&emsp;&emsp;7.把它的算法复制过来,变成c++代码跑一下,就能得到flag:security-xbu
```
int main()
{
        string s(13,NULL);

        int a = { 118, 104, 102, 120, 117, 108, 119, 124, 48, 123, 101, 120 };
       
        for (int j = 0; j < 12; j++)
        {
                s = a - 3;
        }

        cout << s << endl;

        system("pause");
        return 0;
}
```

&emsp;&emsp;8.输入之后成功得到RenIbyd8Fgg5hawvQm7TDQ,验证一下,成功通过,放张成功截图吧。


### 0x3总结
&emsp;&emsp;1.js中还有三个等于号,表示完全等于(数据类型也一样),不知道是不是这样理解。

&emsp;&emsp;2.感觉和OD分析程序很像,找到标志位改变的地方,然后下断点过去,看看输入是什么。

&emsp;&emsp;3.函数虽多,但只要没改变我们输入的s和标志ic就不用去管它。

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

dia1314 发表于 2020-7-24 22:04

你哪里找的视频学习资料,可以分享吗

pglcsu 发表于 2020-7-25 02:33

感谢大佬的分享呀,真的不容易,最近也是在自学py绿色那个计算机语言,小白一个开头挺难的,不过也继续加油

justforkc 发表于 2020-7-24 21:21

学习了,感谢楼主

心软是病呀 发表于 2020-7-24 21:24

谢谢楼主的教程

tiger2019 发表于 2020-7-24 21:25

表示敬意。你是未来的大佬。

allennt 发表于 2020-7-24 21:32

厉害了。。。。。

小黑黑a 发表于 2020-7-24 21:33

 1.js中还有三个等于号,表示完全等于(数据类型也一样),不知道是不是这样理解。

Silent丶Y 发表于 2020-7-24 21:47

谢谢分享

rwi2013 发表于 2020-7-24 21:55

学习了,谢谢楼主

我不玩游戏 发表于 2020-7-24 22:01

学习了,感谢分享
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: 学破解第122天,《攻防世界crypto练习区flag_in_your_hand》学习