学破解第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;
}
```
  6.直接点击左侧图标下断点吧,然后点击按钮,成功的断了下来,发现函数参数s就是我输入的变量,然后比较s和a的长度,接着用s的值减3和a的值相比较,如果都没问题,那么就返回true
  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;
}
```
  8.输入之后成功得到RenIbyd8Fgg5hawvQm7TDQ,验证一下,成功通过,放张成功截图吧。
### 0x3总结
  1.js中还有三个等于号,表示完全等于(数据类型也一样),不知道是不是这样理解。
  2.感觉和OD分析程序很像,找到标志位改变的地方,然后下断点过去,看看输入是什么。
  3.函数虽多,但只要没改变我们输入的s和标志ic就不用去管它。
  **PS:善于总结,善于发现,找到分析问题的思路和解决问题的办法。虽然我现在还是零基础的小菜鸟一枚,也许学习逆向逆天改命我会失败,但也有着成功的可能,只要还有希望,就决不放弃!** 你哪里找的视频学习资料,可以分享吗 感谢大佬的分享呀,真的不容易,最近也是在自学py绿色那个计算机语言,小白一个开头挺难的,不过也继续加油 学习了,感谢楼主 谢谢楼主的教程 表示敬意。你是未来的大佬。 厉害了。。。。。
1.js中还有三个等于号,表示完全等于(数据类型也一样),不知道是不是这样理解。 谢谢分享 学习了,谢谢楼主 学习了,感谢分享