记一次SMC自解密

题目来源

BUUCTF在线评测

1.拿到题目后发现这一行始终看不懂

 2.点进去看后发现根本不是一个函数

根据题目名称,查资料才得知这是一个SMC自修改,这些数字都是被加密后的,要想还原出这个函数,必须知道加密byte_403040的逻辑

3.打开sub_401042,查看逻辑

 得知是byte_403040的前38位与byte_403068的前四位依次异或,点进去能得到二者的数值,提取出来

4.打开ida脚本编辑,输入python自解密脚本:

import idc

def xor_setp1():
    addr = 0x00403040  # 这里填入要解密字节串的起始地址
    B = [0x11, 0x22, 0x33, 0x44]

    for i in range(38):  # 循环结束的条件为字节串的结束地址
        curr_byte = idc.get_wide_byte(addr + i)
        curr_byte ^= B[i & 3]
        idc.patch_byte(addr + i, curr_byte)  # 异或的数字根据情况修改

def main():
    xor_setp1()

main()

5.修改之后的byte_403040如下:

 6.在起始位置按住C再右键create function

7.还原得到原本的函数,非常简单,提取出403020,减去5再异或0x11

 8.代码编写

A = [0x7C, 0x82, 0x75, 0x7B,0x6F, 0x47, 0x61, 0x57,
     0x53, 0x25, 0x47, 0x53,0x25, 0x84, 0x6A, 0x27,
     0x68, 0x27, 0x67, 0x6A,0x7D, 0x84, 0x7B, 0x35,
     0x35, 0x48, 0x25, 0x7B,0x7E, 0x6A, 0x33, 0x71]
flag = ''
for i in range(len(A)):
    flag+=chr((A[i]-5)^0x11)

print(flag)

flag:flag{SMC_1S_1nt3r3sting!!R1ght?} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值