[网鼎杯 2020 青龙组]jocker
SMC自修改 只是普通的patch会有些小问题 记录一下
首先IDA32打开 看到对encrypt做了SMC 找到.text段
F5反编译出错
编写idc patch
然后按C 按P
得到这两个从原来的程序还原的函数
还有一个finally
到这里虽说也能勉强结合汇编分析 但是还是很有难度(感觉缺失了一些语句)
另一种方法 ollydbg动调dump后再ida分析
ollydbg打开
在encrypt处下断点
然后f9运行 输入fakeflag:flag{fak3_alw35_sp_me!!}
进入encrypt
发现其实已经得到正确的汇编指令了
接下来dump保存
脱壳当前调试进程
再ida打开
虽说这里还是有个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个字符的加密
光看代码完全不知道它在干什么 但是我们可以猜是xor变换
然后又知道最后一个字符是'}' 就可以还原了
cipher = "%tp&:"
key = ord(':')^ord('}')
for i in cipher:
print(chr(ord(i)^key),end='')
最后得到flag
2023年10月26日补记:
不修改sp指针 直接smcpatch后c,p
完美!!!