XCTF Triangle writeup(js 代码逆向)

本文详细介绍了XCTF Triangle挑战的解决过程,通过逆向分析`test_pw`和`enc_pw`函数,揭示了加密密码的机制。首先,通过观察`get_pw()`得到固定返回值,然后使用JavaScript模拟`enc_pw()`函数构造`getARM1()`和`getARM2()`,并转换16进制数据为ARM指令。解密过程涉及到移位密码和凯撒密码的加密原理。最终,通过逆向函数找到正确的`userInput`,即解密后的字符串`MPmVH94PTH7hhafgYahYaVfKJNLRNQLZ`。
摘要由CSDN通过智能技术生成

主要参考链接:https://lim1ts.github.io/ctf/2017/10/19/hackluTriangles.html

其他参考链接:https://wu.rot26.team/CTF/Hacklu/2017/web/triangle/

https://www.vhn.vn/blog/index.php/2017/10/19/hack-lu-2017/

过程:test_pw(enc_pw(userInput), get_pw())

get_pw()返回值固定主要逆向test_pw( , )和enc_pw(userInput)得到正确的userinput  

      

 

输入框函数:

Secret.js

 

观察get_pw()函数发现返回固定值,控制台输出

"XYzaSAAX_PBssisodjsal_sSUVWZYYYb"

观察enc_pw()函数发现写入内存指令在于_[o2[a]],与用户输入无关,需要还原写入的内存指令,了解字符串处理过程以期逆向出正确输入的字符串

 

为了直接在控制台以16进制的形式输出写入内存的信息,模仿enc_pw()函数构造getARM1()函数、和将10进制转换为16进制的函数toHexString()

function getARM1(){

  var x = stoh(atob(getBase64Image("frei")));

  var output = new Array();

  for(var i = 0; i < o2.length ; i++){

    output[i] = x[o2[i]];

  }

  return output;

}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值