吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1307|回复: 0
收起左侧

[新手问题] 一段简单的代码逆向, 总是有1个字母解不出来。

[复制链接]
wgf4242 发表于 2020-5-15 13:01
本帖最后由 wgf4242 于 2020-5-15 13:03 编辑

原程序用angr直接解的。。逆向代码没写出来。

https://github.com/angr/angr-doc/raw/master/examples/ais3_crackme/ais3_crackme

扔IDA大概是这样

_BOOL8 __fastcall verify(__int64 a1)
{
  int i; // [rsp+14h] [rbp-4h]

  for ( i = 0; *(i + a1); ++i )
  {
    if ( encrypted[i] != (((*(i + a1) ^ i) << ((i ^ 9) & 3)) | ((*(i + a1) ^ i) >> (8 - ((i ^ 9) & 3)))) + 8 )
      return 0LL;
  }
  return i == 23;
}

encrypted 是  CA 70 93 C8 06 54 D2 D5 DA 6A D1 59 DE 45 F9 B5 A6 87 19 A5 56 6E 63 00

encrypted = bytearray.fromhex('CA7093C80654D2D5DA6AD159DE45F9B5A68719A5566E6300')
lst = []
for i in range(23):
    for x in range(0,300):
        n1 = (x ^ i) << ((i ^ 9) & 3)
        n2 = (x ^ i) >> (8 - ((i ^ 9) & 3))
        if ((n1 | n2) % 256) + 8  == encrypted[i]:
            lst.append(chr(x))
            break
        if x == 299:
            print('error', i, encrypted[i])

print(''.join(lst))
# 解出: ais3I_tak3_g00d_n0t3s}
# 应为: ais3{I_tak3_g00d_n0t3s}

16进制为6时解不出{字符,它在最后+8不会=6啊。

???


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

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-25 09:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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