[MRCTF2020]Transform

附件

步骤:

  1. 例行检查,64位程序,无壳
  2. 64位ida载入,找到关键函数

    一开始让我们输入一个长度为33位的字符串,之后使用数组dword_40F040打乱了我们一开始输入的v6的值,打乱后的结果在与dword_40F040异或之后得到byte_40F0E0数组里的值
  3. 理清楚程序干了什么直接写逆向算法
    首先将dword_40F040和byte_40F0E0异或一下得到打乱后的输入的字符串
    之后将打乱的字符串还原回去即可得到输入的字符串
dword_40F040 = [0x9, 0x0A, 0x0F, 0x17, 0x7, 0x18, 0x0C, 0x6, 0x1, 0x10, 0x3, 0x11, 0x20, 0x1D, 0x0B, 0x1E, 0x1B, 0x16, 0x4, 0x0D, 0x13, 0x14, 0x15, 0x2, 0x19, 0x5, 0x1F, 0x8, 0x12, 0x1A, 0x1C, 0x0E, 0]
byte_40F0E0 = [0x67, 0x79, 0x7B, 0x7F, 0x75, 0x2B, 0x3C, 0x52, 0x53, 0x79, 0x57, 0x5E, 0x5D, 0x42, 0x7B, 0x2D, 0x2A, 0x66, 0x42, 0x7E, 0x4C, 0x57, 0x79, 0x41, 0x6B, 0x7E, 0x65, 0x3C, 0x5C, 0x45, 0x6F, 0x62, 0x4D] flag = [0]*33 for i in range(len(dword_40F040)):
byte_40F0E0[i] ^= dword_40F040[i] for i in range(len(dword_40F040)):
flag[dword_40F040[i]] = byte_40F0E0[i] print (''.join([chr(x) for x in flag]))

最新文章

  1. LDAP的Schema
  2. jsp js action之间的传值
  3. spring batch部分
  4. Zepto中文API
  5. Java实现23种设计模式
  6. I/O输出流基础之FileOutputStream
  7. vue router 修改title(IOS 下动态改变title失效)
  8. laravel C层接收数据的步骤
  9. HDU6124
  10. codeforces 873C - Strange Game On Matrix
  11. OCIEnvCreate 失败,返回代码为 -1,但错误消息文本不可用
  12. Linux之常用命令【service】
  13. 通过全备+relaylog同步恢复被drop的库或表
  14. oracle中in和exists的区别
  15. 十五、MVC的WEB框架(Structs2)
  16. Java中的StringTokenizer类的使用方法
  17. VirtualBox与Genymotion命令行启动
  18. [spring]<context:property-placeholder/>
  19. spring 的xml配置使用p标签简化
  20. Delphi XE10下用FireDAC与SQLite连接要注意的问题 转

热门文章

  1. C++getline()
  2. [bzoj2668]交换棋子
  3. [atACL001F]Center Rearranging
  4. 应用SpringAOP及Tlog工具完成日志链路追踪、收集、持久化
  5. springboot启动流程1
  6. 【2020五校联考NOIP #7】伟大的卫国战争
  7. [Ocean Modelling for Begineers] Ch3. Basics of Geophysical Fluid Dynamics
  8. 【GS文献】植物育种中基因组选择的方法、模型及展望
  9. GWAS在农业上应用
  10. mysql优化方法陈列