【Web】CrackMe 花费了我一下午
后天就开学了,想着再上上论坛,发现好久没写Crackme了,于是就有了这个作品。还是老样子,密码唯一,有很多提示(密码提示很多次了)。
没有Edge的用win10版本
两个一样的
以下来自通义千问
为了找到满足条件的输入值,我们需要逆向工程函数 `complexLogic` 的操作,并找到使得函数返回 `true` 的初始值 `t`。
我们首先回顾一下函数中的关键步骤:
1. 输入值 `t` 被转换成整数 `r`。
2. `e = ~r` (按位取反 `r`)。
3. `o = 31 * e` (将 `e` 乘以 31)。
4. `n = o - 2024` (从 `o` 中减去 2024)。
5. `W = n << 2` (将 `n` 左移 2 位)。
6. `d = W / 7` (将 `W` 除以 7)。
7. `a = d + 50` (向 `d` 加上 50)。
8. `u = Math.floor(13 * a)` (将 `a` 乘以 13 并向下取整)。
9. 如果 `u` 不等于 3312927722,则返回 `false`。
10. 循环计算 `r` 直到 `c` 达到 18。
11. `v = r`。
12. 如果 `v` 等于 314937684510,则返回 `true`。
现在,让我们从步骤 8 开始逆向操作,因为我们已经知道了 `u` 和 `v` 的目标值。
### 逆向步骤 8:
- `u = Math.floor(13 * a)`
- `a = (u / 13)`
- `d = a - 50`
- `W = 7 * d`
- `n = W >> 2` (右移 2 位,相当于除以 4)
- `o = n + 2024`
- `e = o / 31`
- `r = ~e`
### 逆向步骤 10:
- 我们需要找到一个 `r` 的值,使得经过循环之后 `v = r` 等于 314937684510。
我们首先计算 `u` 和 `v` 的逆向过程,然后再考虑循环的影响。
### 计算 `u` 的逆向过程:
- `u = 3312927722`
- `a = (u / 13) = 254840594`
- `d = a - 50 = 254840544`
- `W = 7 * d = 1783883808`
- `n = W >> 2 = 445970952`
- `o = n + 2024 = 446173404`
- `e = o / 31 = 14392690`
- `r = ~e = -14392691`
### 计算 `v` 的逆向过程:
- `v = 314937684510`
我们需要找到一个初始值 `r`,使得在执行循环后得到 `v`。
### 循环逆向:
- 循环中 `r` 的变化由以下公式给出:
- `r = (r + c) * (c % 2 === 0 ? 2 : 3)`
由于循环是从 `c = 8` 到 `c = 18`,我们可以尝试逆向执行这个循环来找出原始的 `r`。
让我们先尝试逆向执行循环,看看能否找到原始的 `r`。
### 逆向循环:
- 我们需要从 `v = 314937684510` 开始逆向。
- 从 `c = 18` 到 `c = 8`,对每个 `c` 执行逆向操作。
- 如果 `c` 是偶数,我们用 `r / 2 - c` 替代 `r`。
- 如果 `c` 是奇数,我们用 `Math.floor(r / 3) - c` 替代 `r`。
现在我们开始逆向循环。
### 逆向循环示例:
- `c = 18`: `r = Math.floor(v / 3) - 18`
- `c = 17`: `r = Math.floor(r / 3) - 17`
- `c = 16`: `r = r / 2 - 16`
- `c = 15`: `r = Math.floor(r / 3) - 15`
- `c = 14`: `r = r / 2 - 14`
- `c = 13`: `r = Math.floor(r / 3) - 13`
- `c = 12`: `r = r / 2 - 12`
- `c = 11`: `r = Math.floor(r / 3) - 11`
- `c = 10`: `r = r / 2 - 10`
- `c = 9`: `r = Math.floor(r / 3) - 9`
- `c = 8`: `r = r / 2 - 8`
现在我们将计算逆向循环的每一步。
```javascript
let v = 314937684510;
// 逆向循环
for (let c = 18; c >= 8; c--) {
if (c % 2 === 0) {
v = v / 2 - c;
} else {
v = Math.floor(v / 3) - c;
}
}
console.log(v);
```
让我们计算出这个逆向循环的结果。
以上来自通义千问
好像忘记处理其他情况了,没有输出验证成功的都算失败吧(
图中有提示
1、格式化js会陷入无限正则解析;
2、debugger可以通过修改if条件强制绕过(typeof _0x585341 === _0x208e4a(539, "*kVT")处);
3、complexLogic是扔到console一行一行反混淆的{:17_1089:};
耗时接近2.5小时。
我牛逼!楼主更牛逼! 还是可以c一下的哈哈, 好久没做题了, 没想到是个exe
Arcticlyc 发表于 2024-7-27 19:52
以下来自通义千问
为了找到满足条件的输入值,我们需要逆向工程函数 `complexLogic` 的操作,并找 ...
大佬好强,学到很多{:1_932:}
通义千问计算 u 的逆向过程那部分有点小错误,从n = W >> 2 = 445970952这一步往后按这样推的话最后是推不出r的,已知结果再从前往后推的话会发现1783883808这个数是由-627770872 << 2 得出来的 DRZH 发表于 2024-7-28 15:26
大佬好强,学到很多
通义千问计算 u 的逆向过程那部分有点小错误,从n = W >> 2 = 445970952这 ...
你才是大佬{:301_1003:}
页:
[1]