[网鼎杯 2020 青龙组]jocker

SMC自修改 只是普通的patch会有些小问题 记录一下
首先IDA32打开 看到对encrypt做了SMC 找到.text段
image
F5反编译出错
image
编写idc patch
image
然后按C 按P
得到这两个从原来的程序还原的函数
image
image
还有一个finally
image
到这里虽说也能勉强结合汇编分析 但是还是很有难度(感觉缺失了一些语句)
另一种方法 ollydbg动调dump后再ida分析
ollydbg打开
在encrypt处下断点
image
然后f9运行 输入fakeflag:flag{fak3_alw35_sp_me!!}
进入encrypt
image
发现其实已经得到正确的汇编指令了
接下来dump保存
image
脱壳当前调试进程
再ida打开
image
虽说这里还是有个a2+8比较费解 但是可以猜到就是flag
这里相比于之前直接patch 它的赋值语句很清晰 所以对于前19个写一个xor就行了

unk_403040 = [0x0E,0x0D,0x9,0x6,0x13,0x5,0x58,0x56,0x3E,0x6,0x0c,0x3c,0x1F,0x57,0x14,0x6B,0x57,0x59,0x0d]
key = "hahahaha_do_you_find_me?"
for i in range(19):
    print(chr(unk_403040[i]^ord(key[i])),end='')

对于最后5个字符的加密
image
光看代码完全不知道它在干什么 但是我们可以猜是xor变换
然后又知道最后一个字符是'}' 就可以还原了

cipher = "%tp&:"
key = ord(':')^ord('}')
for i in cipher:
    print(chr(ord(i)^key),end='')

最后得到flagimage




2023年10月26日补记:
不修改sp指针 直接smcpatch后c,p
image
完美!!!

posted @ 2023-10-13 12:00  N0zoM1z0  阅读(21)  评论(0编辑  收藏  举报